Shell Tips: Difference between revisions

From miki
Jump to navigation Jump to search
(→‎Color in Shell: colored manpages)
(Move to Linux tips)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
#REDIRECT[[Linux Tips]]
== Color in Shell ==
Some tips to provide a more colorful shell experience.

* '''cat''' with color syntax highlighting
* Colored diff '''colordiff'''
* Color with '''git'''
* Preserve color with '''less'''
* Colors in '''man''' pages (using either ''less'' or ''most'' as pager)
* Vim-based color viewer '''view'''

=== <tt>cat</tt> ===

The example below creates a script '''ccat''', similar to ''cat'' but with syntax highlighting (using ''source-highlight'', ref [http://superuser.com/questions/84426/is-there-any-option-let-cat-command-output-with-color]):
* Define a script '''<tt>ccat</tt>''':
<source lang="bash">
#!/bin/bash
src-hilite-lesspipe.sh $1
</source>
* The included ''less'' script is also nice. Add to your <tt>.bashrc</tt>:
<source lang="bash">
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=FRX # At least R!
</source>

Some examples
<source lang="bash">
ccat file.c
ccat file.c | less -FRX
</source>


There are some alternatives to ''source-highlight''. For instance on Ubuntu:
* <tt>python-pygments</tt>
* <tt>[http://www.palfrader.org/code2html/ code2html]</tt>
* <tt>highlight</tt>
* <tt>[http://www.gnu.org/software/src-highlite/ source-highlight]</tt> (a dependency of ''qgit'')

=== <tt>colordiff</tt> ===
'''colordiff''' is a Perl wrapper around ''diff'' to show diff outputs in color:
<source lang="bash">
colordiff file1 file2 # Diff in colors
alias diff="colordiff -W ${COLUMNS:-130}" # Handy alias that also adds auto-width
</source>

Note that ''colordiff'' output can be piped through ''less'', or ''colordiff'' can also take a diff as standard input:
<source lang="bash">
colordiff file1 file2 | less -FSRX # Page output
<patchfile colordiff # Colorize stdin
</source>

=== <tt>git</tt> ===
See [[Git#Configuration|Git (configuration section)]].

=== <tt>less</tt> ===
Use option '''-R''' to preserve ANSI color escape sequence in input:
<source lang="bash">
colordiff file1 file2 | less -R # As command-line option
export LESS=R # Better use env. var $LESS
colordiff file1 file2 | less # ... no need to give -R anymore
export LESS=FRX # Even better
colordiff file1 file2 | less # ... quit asap if less than 1-page
</source>

In ''git'', ''less'' is called with the following option:
<source lang="bash">
export lESS=FSRX # Default git options
# ... F - quit if less than 1-page
# ... S - truncate long lines
# ... R - preserve color
# ... X - don't initialize term (no clear)
</source>

=== <tt>man</tt> ===


To have colors in ''manpages'', the simplest is to install the package ''most'':
<source lang="bash">
sudo apt-get install most
</source>
And then tell how you want to use it:
<source lang="bash">
# SYSTEM-WIDE
sudo update-alternatives --config pager # To select 'most' as default pager system-wide
# per USER - in ~/.bashrc
export PAGER=most # To select 'most' as default pager for that user
alias man="PAGER=most man" # To select 'most' only for manpages
</source>

However we can get the same effect with ''less'' thanks to some bash script-fu magic (see [http://nion.modprobe.de/blog/archives/569-colored-manpages.html])
<source lang="bash">
mkdir ~/.terminfo/
cd ~/.terminfo
wget http://nion.modprobe.de/mostlike.txt # Get the new terminfo description
tic mostlike.txt # Compile it using terminfo entry-description compiler
</source>
Now just define the following alias in <tt>~/.bashrc</tt>:
<source lang="bash">
alias man="TERMINFO=~/.terminfo TERM=mostlike PAGER=LESS LESS=C man" # LESS=C can be skipped or adapted
</source>

=== <tt>view</tt> ===
''view'' is ''vim'' front-end document reader. ''view'' can highlight syntax of files based on their filename, but also based on their content (unlike ''source-highlight''). Use <code>view -</code> to view standard input:
<source lang="bash">
view file.c # Detect .c format from filename
git diff HEAD^ | view - # Git - Will detect diff format from content
svn diff | view - # Svn - idem
</source>

== Pager ==

;Manpages
* By default uses <tt>pager -s</tt>
** <tt>/usr/bin/pager</tt> is a symlink to <tt>/etc/alternatives/pager</tt>.
* Overridden by env var '''$PAGER'''.
* Overridden by env var '''$MANPAGER'''.
* Overridden by cli option '''-P pager'''.

Latest revision as of 11:45, 21 May 2019

Redirect to: