zshrc: no longer explicitly set SHELL
[grml-etc-core.git] / doc / grmlzshrc.t2t
index c87b863..975cc17 100644 (file)
@@ -1,6 +1,6 @@
 GRMLZSHRC
 
-July, 2011
+September, 2014
 
 %!target: man
 %!postproc(man): "^(\.TH.*) 1 "  "\1 5 "
@@ -44,20 +44,21 @@ zshenv file.
 Some of the behaviour of //grmlzshrc// can be altered by setting certain shell
 variables. These may be set temporarily when starting zsh like this:
 \
-``` % BATTERY=1 zsh
+``` % GRML_DISPLAY_BATTERY=1 zsh
 
 Or by setting them permanently in **zshrc.pre** (See AUXILIARY FILES below).
 
 : **BATTERY**
-If set to a value greater than zero and //acpi// installed, //grmlzshrc// will
-put the battery status into the right hand side interactive prompt.
+Deprecated. Use **GRML_DISPLAY_BATTERY** instead.
 
 : **COMMAND_NOT_FOUND**
 A non zero value activates a handler, which is called when a command can not
 be found. The handler is defined by GRML_ZSH_CNF_HANDLER (see below).
 
-: **GRML_ALWAYS_LOAD_ALL**
-Enables the whole Grml setup for root, if set to a non zero value.
+: **GRML_DISPLAY_BATTERY**
+If set to a value greater than zero, //grmlzshrc// will put the battery status
+into the right hand side interactive prompt. Supported OSes are //GNU/Linux//,
+//FreeBSD//, //OpenBSD// and //Darwin//.
 
 : **GRML_ZSH_CNF_HANDLER**
 This variable contains the handler to be used by COMMAND_NOT_FOUND (see above)
@@ -108,6 +109,9 @@ Import "/etc/default/locale", if set to zero (default).
 A non zero value causes shell functions to be profiled. The results can be
 obtained with the zprof builtin command (see zshmodules(1) for details).
 
+: **COMPDUMPFILE**
+Specifies the location of the completion dump file. Default: $HOME/.zcompdump.
+
 
 = FEATURE DESCRIPTION =
 This is an in depth description of non-standard features implemented by
@@ -124,83 +128,117 @@ zshs inherit the dirstack of the zsh that most recently updated
 **DIRSTACKFILE**.
 
 == DIRECTORY BASED PROFILES ==
-If you want certain settings to be active in certain directories (and
-automatically switch back and forth between them), this is what you want.
+
+If you need to perform certain actions each time you enter certain
+directory-trees, this is the feature you are looking for.
+
+
+=== Initialisation ===
+To initialise the system, you need to call the function `chpwd_profiles' at
+some point in your `zshrc.local'; preferably **after** you configured the
+system. The configuration of the system is described further below.
+
+If you need to do initialisations the first time `chpwd_profiles' is called
+(which should be in your configuration file), you can do that in a function
+called "chpwd_profiles_init". That function needs to be defined **before**
+`chpwd_profiles' is called for this to work.
+
+During the **first** call of `chpwd_profiles' (and therefore all its profile
+functions) the parameter `$CHPWD_PROFILES_INIT' exists and is set to `1'. In
+all other cases, the parameter does not exist at all.
+
+
+=== Styles and Profile-names ===
+To store its configuration, the system uses **functions** and **styles**
+(zsh's context sensitive configuration system), such as this:
+
 \
 ```
 zstyle ':chpwd:profiles:/usr/src/grml(|/|/*)'   profile grml
 zstyle ':chpwd:profiles:/usr/src/debian(|/|/*)' profile debian
 ```
 
-When that's done and you enter a directory that matches the pattern
-in the third part of the context, a function called chpwd_profile_grml,
-for example, is called (if it exists).
+When that's done and you enter a directory that matches the pattern in the
+third part of the context, a function called chpwd_profile_grml, for example,
+is called (if it exists).
 
-If no pattern matches (read: no profile is detected) the profile is
-set to 'default', which means chpwd_profile_default is attempted to
-be called.
+If no pattern matches (read: no profile is detected) the profile is set to
+'default', which means chpwd_profile_default is attempted to be called.
 
-A word about the context (the ':chpwd:profiles:*' stuff in the zstyle
-command) which is used: The third part in the context is matched against
-**$PWD**. That's why using a pattern such as /foo/bar(|/|/*) makes sense.
-Because that way the profile is detected for all these values of **$PWD**:
+A word about the context (the ':chpwd:profiles:*' stuff in the zstyle command)
+which is used: The third part in the context is matched against ${PWD}. That's
+why using a pattern such as /foo/bar(|/|/*) makes sense. Because that way the
+profile is detected for all these values of ${PWD}:
 \
 ```
-/foo/bar
-/foo/bar/
-/foo/bar/baz
+  /foo/bar
+  /foo/bar/
+  /foo/bar/baz
 ```
-
-So, if you want to make double damn sure a profile works in /foo/bar
-and everywhere deeper in that tree, just use (|/|/*) and be happy.
+So, if you want to make double damn sure a profile works in /foo/bar and
+everywhere deeper in that tree, just use (|/|/*) and be happy.
 
 The name of the detected profile will be available in a variable called
-'profile' in your functions. You don't need to do anything, it'll just
-be there.
+'profile' in your functions. You don't need to do anything, it'll just be
+there.
+
 
-Then there is the parameter **$CHPWD_PROFILE** which is set to the profile,
-that was active up to now. That way you can avoid running code for a
-profile that is already active, by running code such as the following
-at the start of your function:
+=== Controlling Profile Execution ===
+
+During its initialisation run, the system creates a parameter $CHPWD_PROFILE,
+which is set to the profile that was is currently active (the default value is
+"default"). That way you can avoid running code for a profile that is already
+active, by running code such as the following at the start of your function:
 \
 ```
 function chpwd_profile_grml() {
     [[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
-    ...
+  ...
 }
 ```
 
-The initial value for **$CHPWD_PROFILE** is 'default'.
+If you know you are going to do that all the time for each and every
+directory-profile function you are ever going to write, you may also set the
+`re-execute' style to `false' (which only defaults to `true' for backwards
+compatibility), like this:
+\
+```
+  zstyle ':chpwd:profiles:*' re-execute false
+```
+
 
 === Signaling availabily/profile changes ===
 
-If you use this feature and need to know whether it is active in your
-current shell, there are several ways to do that. Here are two simple
-ways:
+If you use this feature and need to know whether it is active in your current
+shell, there are several ways to do that. Here are two simple ways:
 
-a) If knowing if the profiles feature is active when zsh starts is
-   good enough for you, you can put the following snippet into your
-   //.zshrc.local//:
-\
-```
-(( ${+functions[chpwd_profiles]} )) &&
-    print "directory profiles active"
-```
+a) If knowing if the profiles feature is active when zsh starts is good
+enough for you, you can use the following snippet:
+
+(( ${+functions[chpwd_profiles]} )) && print "directory profiles active"
+
+b) If that is not good enough, and you would prefer to be notified whenever a
+profile changes, you can solve that by making sure you start **every**
+profile function you create like this:
 
-b) If that is not good enough, and you would prefer to be notified
-   whenever a profile changes, you can solve that by making sure you
-   start **every** profile function you create like this:
-\
-```
 function chpwd_profile_myprofilename() {
     [[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
     print "chpwd(): Switching to profile: $profile"
   ...
 }
-```
 
-That makes sure you only get notified if a profile is **changed**,
-not everytime you change directory.
+That makes sure you only get notified if a profile is **changed**, not
+everytime you change directory. (To avoid this, you may also set the newer
+`re-execute' style like described further above instead of the test on top of
+the function.
+
+
+=== Leaving Profiles ===
+
+When the system switches from one profile to another, it executes a function
+named "chpwd_leave_profile_<PREVIOUS-PROFILE-NAME>()" before calling the
+profile-function for the new profile.
+
 
 === Version requirement ===
 This feature requires zsh //4.3.3// or newer.
@@ -279,6 +317,53 @@ style. (The default is **true** in all contexts.)
 
 == PROMPT ==
 
+The //grmlzshrc// now supplies three prompt themes compatible with zsh's
+**promptinit** system. The three themes are called **grml**, **grml-large** and
+**grml-chroot**.
+
+By default, **grml** is used, unless //$GRMLPROMPT// is set to a value larger
+than zero, in which case **grml-large** is used. Lastly, if //$GRML_CHROOT// is
+non-empty, **grml-chroot** is used.
+
+As usual, with promtinit themes, the user may switch to a different theme using
+the //prompt// utility:
+\
+```
+    prompt grml-large
+```
+
+That will use the **grml-large** prompt theme.
+
+The themes are highly customisable. The main source of documentation about
+customisation is the main **grml** theme's doc-string, that is available via
+the following command:
+\
+```
+    prompt -h grml
+```
+
+The other themes also come with doc-strings, but the main theme's is the
+canonical reference about all of them.
+
+This feature requires version //4.3.7// of the shell. Older versions will use
+the classic grml prompt as a fallback.
+
+A note to people who like customisation: If you are **not** using a prompt
+theme for your customisation, but you're either statically setting $PS1 (or
+$PROMPT) or you're constructing one of those variables in zsh's \`precmd()'
+function, make sure you are turning the zsh's prompt theme system **off**
+before doing so. A correct example customisation could look like this:
+\
+```
+    # Turn the prompt system off:
+    prompt off
+    # Customise the prompt yourself:
+    PS1='%~ %# '
+```
+
+You also add your own tokens by using the \`grml_theme_add_token()' function.
+Call the function without arguments for detailed documentation about that
+procedure.
 
 == GNU/SCREEN STATUS SETTING ==
 //grmlzshrc// sets screen's hardstatus lines to the currently running command
@@ -317,14 +402,6 @@ already set otherwise.
 : **PAGER**
 Set less(1) as default pager, if not already set to something different.
 
-: **QTDIR**
-Holds the path to shared files for the C++ application framework QT
-(version 3 or 4).
-
-: **SHELL**
-Set explicitly to /bin/zsh, to prevent certain terminal emulators to
-default to /bin/sh or /bin/bash.
-
 
 == OPTIONS ==
 Apart from zsh's default options, //grmlzshrc// sets some options
@@ -437,6 +514,23 @@ Display help on keybindings and zsh line editor. Press consecutively to page thr
 Brings a job, which got suspended with CTRL-z back to foreground.
 
 
+=== Customisation ===
+
+To customise keybindings, you can just use zsh's bindkey utility. However, if
+you plan to to use the `//zle-line-init//' or `//zle-line-finish//' hooks
+yourself, make sure you call the following functions in the respective hook:
+
+- **zle-line-init**: //zle-smkx//
+- **zle-line-finish**: //zle-rmkx//
+
+
+This is **required** so the keybindings set up by //grmlzshrc// work. The
+reason for this is to turn the terminal into the right mode while zsh's line
+editor (zle) is running. This enables us to query //terminfo// about escape
+sequences for special keys and thus simplify and generalise our keybinding
+section.
+
+
 == SHELL FUNCTIONS ==
 //grmlzshrc// comes with a wide array of defined shell functions to ease the
 user's life.
@@ -463,9 +557,9 @@ else start a new screen.  This is especially useful for roadwarriors using GNU
 screen and ssh.
 
 : **bk()**
-Simple backup of a file or directory using cp(1). The target file name is the
-original name plus a time stamp attached. Symlinks and file attributes like mode,
-ownership and timestamps are preserved.
+Simple backup management of a file or directory using standard unix programs.
+The target file name is the original name plus a time stamp attached. Symlinks
+and file attributes like mode, ownership and timestamps are preserved.
 
 : **cdrecord()**
 If the original cdrecord is not installed, issues a warning to the user to
@@ -487,8 +581,8 @@ builtin or reserved word. If the option -c is given, only returns true,
 if command is a program.
 
 : **checkhome()**
-Changes directory to $HOME on first invocation of zsh. This is neccessary on
-grml systems with autologin.
+Changes directory to $HOME on first invocation of zsh. This is necessary on
+Grml systems with autologin.
 
 : **cl()**
 Changes current directory to the one supplied by argument and lists the files
@@ -497,6 +591,9 @@ in it, including file names starting with ".".
 : **dchange()**
 Shows the changelog of given package in $PAGER.
 
+: **dcopyright()**
+Shows the copyright of given package in $PAGER.
+
 : **debian2hd()**
 Tells the user to use grml-debootstrap, if she wants to install debian to
 harddisk.
@@ -518,6 +615,15 @@ Edit given shell function.
 : **freload()**
 Reloads an autoloadable shell function (See autoload in zshbuiltins(1)).
 
+: **grml_vcs_info_toggle_colour()**
+Toggles between coloured and uncoloured formats in vcs_info configuration.
+This is useful with prompts that break if colour codes are in vcs_info
+format expansions (like the `clint' prompt and every other prompt that
+uses %v to expand the contents of `$vcs_into_msg_0_'). If you are using
+customised vcs_info formats, you shouldn't be using this function, since
+it will set all formats to grml's default values (either coloured or plain)
+again.
+
 : **hgdi()**
 Use GNU diff with options -ubwd for mercurial.
 
@@ -549,6 +655,9 @@ Returns true, if zsh version is equal or greater than 4.3.3, else false.
 : **isdarwin()**
 Returns true, if running on darwin, else false.
 
+: **isfreebsd()**
+Returns true, if running on FreeBSD, else false.
+
 : **isgrml()**
 Returns true, if running on a grml system, else false.
 
@@ -558,10 +667,16 @@ Returns true, if running on a grml system from a live cd, else false.
 : **isgrmlsmall()**
 Returns true, if run on grml-small, else false.
 
+: **islinux()**
+Returns true, if running on Linux, else false.
+
 : **iso2utf()**
 Changes every occurrence of the string iso885915 or ISO885915 in
 environment variables to UTF-8.
 
+: **isopenbsd()**
+Returns true, if running on OpenBSD, else false.
+
 : **isutfenv()**
 Returns true, if run within an utf environment, else false.
 
@@ -590,17 +705,10 @@ Example usages:
 Runs a command in $SHELL with profiling enabled (See startup variable
 ZSH_PROFILE_RC above).
 
-: **refunc()**
-Reloads functions given as parameters.
-
 : **salias()**
 Creates an alias whith sudo prepended, if $EUID is not zero. Run "salias -h"
 for details. See also xunfunction() below.
 
-: **show-archive()**
-Lists the contents of a (compressed) archive with the appropriate programs.
-The choice is made along the filename extension.
-
 : **simple-extract()**
 Tries to uncompress/unpack given files with the appropriate programs. If an URI
 starting with https, http or ftp is provided simple-extract tries to download
@@ -611,11 +719,6 @@ ending. simple-extract will not delete the original archive (even on .gz,.bz2 or
 : **sll()**
 Prints details of symlinks given as arguments.
 
-: **smartcompress()**
-Compresses/archives the file given as first parameter. Takes an optional
-second argument, which denotes the compression/archive type as typical
-filename extension; defaults to "tar.gz".
-
 : **ssl-cert-fingerprints**
 Prints the SHA512, SHA256, SHA1 and MD5 digest of a x509 certificate.
 First and only parameter must be a file containing a certificate. Use
@@ -769,9 +872,6 @@ grep-excuses(1)).
 : **grep** (//grep --color=auto//)
 Shows grep output in nice colors, if available.
 
-: **grml-rebuildfstab** (//rebuildfstab -v -r -config//)
-Scans for new devices and updates /etc/fstab according to the findings.
-
 : **grml-version** (//cat /etc/grml_version//)
 Prints version of running grml.
 
@@ -797,7 +897,7 @@ Runs the function H-Glob() to expand or explain wildcards.
 : **j** (//jobs -l//)
 Prints status of jobs in the current shell session in long format.
 
-: **l** (//ls -lF --color=auto//)
+: **l** (//ls -l --color=auto//)
 Lists files in long output format with indicator for filetype appended
 to filename. If the terminal supports it, with colored output.
 
@@ -819,11 +919,10 @@ Lists files in long colored output format.
 : **llog** (//$PAGER /var/log/syslog//)
 Opens syslog in pager.
 
-: **ls** (//ls -b -CF --color=auto//)
-Lists directory printing octal escapes for nongraphic characters.
-Entries are listed by columns and an indicator for file type is appended
-to each file name. Additionally the output is colored, if the terminal
-supports it.
+: **ls** (//ls -C --color=auto//)
+Lists directory, entries are listed by columns and an indicator for
+file type is appended to each file name. Additionally the output is
+colored, if the terminal supports it.
 
 : **lsa** (//ls -a .*(.)//)
 Lists dot files in current working directory.
@@ -843,9 +942,15 @@ Lists symbolic links in current directory.
 : **lsnew** (//ls -rl *(D.om[1,10])//)
 Displays the ten newest files (long output format).
 
+: **lsnewdir** (//ls -rthdl *(/om[1,10]) .*(D/om[1,10])//)
+Displays the ten newest directories and ten newest .directories.
+
 : **lsold** (//ls -rtlh *(D.om[1,10])//)
 Displays the ten oldest files (long output format).
 
+: **lsolddir** (//ls -rthdl *(/Om[1,10]) .*(D/Om[1,10])//)
+Displays the ten oldest directories and ten oldest .directories.
+
 : **lss** (//ls -l *(s,S,t)//)
 Lists files in current directory that have the setuid, setgid or sticky bit
 set.
@@ -867,9 +972,6 @@ about them.
 : **mq** (//hg -R $(readlink -f $(hg root)/.hg/patches)//)
 Executes the commands on the versioned patch queue from current repository.
 
-: **rd** (//rmdir//)
-Short rmdir(1) (remove directory).
-
 : **rmcdir** (//'cd ..; rmdir $OLDPWD || cd $OLDPWD//)
 rmdir current working directory
 
@@ -880,7 +982,7 @@ with users .screenrc config if it exists, else use /etc/grml/screenrc_grml
 as configuration.
 
 : **su** (//sudo su//)
-If user is running a grml live-CD, dont ask for any password, if she
+If user is running a Grml live system, don't ask for any password, if she
 wants a root shell.
 
 : **term2iso** (//echo 'Setting terminal to iso mode' ; print -n '\e%@'//)
@@ -919,7 +1021,7 @@ be used to permantenly change //grmlzshrc//'s STARTUP VARIABLES (see above):
 \
 ```
 # show battery status in RPROMPT
-BATTERY=1
+GRML_DISPLAY_BATTERY=1
 # always load the complete setup, even for root
 GRML_ALWAYS_LOAD_ALL=1
 ```
@@ -947,7 +1049,7 @@ On non-debian systems, that is not an option, but all is not lost:
 % wget -O .zshrc http://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
 ```
 
-If you would also like to get seperate function files (which you can put into
+If you would also like to get separate function files (which you can put into
 your **$fpath**), you can browse and download them at:
 
 http://git.grml.org/?p=grml-etc-core.git;a=tree;f=usr_share_grml/zsh;hb=HEAD
@@ -1096,7 +1198,7 @@ Beckert <abe@deuxchevaux.org>.
 
 
 = COPYRIGHT =
-Copyright (c) 2009-2011 Grml project <http://grml.org>
+Copyright (c) 2009-2013 Grml project <http://grml.org>
 
 This manpage is distributed under the terms of the GPL version 2.