X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=doc%2Fgrmlzshrc.t2t;h=cc7aa658111b9497d7fa289635795021b2cc09e8;hb=deeb32aa922bbc8147950eded42e436e5e8c8439;hp=3aae18f12ea5fa0e9cc4bf9408c5a78e2571a6fc;hpb=a3d8018d5f6547c85a366db053d2ef22ac40e433;p=grml-etc-core.git diff --git a/doc/grmlzshrc.t2t b/doc/grmlzshrc.t2t index 3aae18f..cc7aa65 100644 --- a/doc/grmlzshrc.t2t +++ b/doc/grmlzshrc.t2t @@ -105,6 +105,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 @@ -121,83 +124,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. + + +=== Controlling Profile Execution === -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: +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_()" before calling the +profile-function for the new profile. + === Version requirement === This feature requires zsh //4.3.3// or newer. @@ -276,6 +313,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 @@ -379,6 +463,11 @@ A wildcard character never matches a leading '.'. : **nohup** Do not send the hangup signal (HUP:1) to running jobs when the shell exits. +: **nonomatch** +If a pattern for filename generation has no matches, do not print an error +and leave it unchanged in the argument list. This also applies to file +expansion of an initial `~' or `='. + : **notify** Report the status of background jobs immediately, rather than waiting until just before printing a prompt. @@ -425,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. @@ -485,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. @@ -506,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. @@ -745,9 +863,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. @@ -795,11 +910,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 -CF --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. @@ -819,9 +933,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. @@ -1069,7 +1189,7 @@ Beckert . = COPYRIGHT = -Copyright (c) 2009-2011 Grml project +Copyright (c) 2009-2013 Grml project This manpage is distributed under the terms of the GPL version 2.