zshrc: Remove the root/non-root split
[grml-etc-core.git] / doc / grmlzshrc.t2t
1 GRMLZSHRC
2
3 July, 2011
4
5 %!target: man
6 %!postproc(man): "^(\.TH.*) 1 "  "\1 5 "
7
8
9 = NAME =
10 grmlzshrc - Grml's zsh setup
11
12
13 = SYNOPSIS =
14 //zsh// [**options**]...
15
16
17 = DESCRIPTION =
18 The Grml project provides a fairly exhaustive interactive setup (referred to
19 as //grmlzshrc// throughout this document) for the amazing unix shell zsh
20 (http://zsh.sourceforge.net). This is the reference manual for that
21 setup.
22
23 To use //grmlzshrc//, you need at least version 3.1.7 of zsh (although not all
24 features are enabled in every version).
25
26 //grmlzshrc// behaves differently depending on which user loads it. For the
27 root user (**EUID** == 0) only a subset of features is loaded by default. This
28 behaviour can be altered by setting the **GRML_ALWAYS_LOAD_ALL** STARTUP
29 VARIABLE (see below).
30
31 Users may want to keep an up-to-date version of the setup (possibly from the
32 git-sources) in //~/.zshrc//. If that happens on a system where the global
33 zshrc is also a //grmlzshrc// (but possibly an older one), you can inhibit
34 loading the global version by doing:
35 \
36 ```
37 echo setopt no_global_rcs >> ~/.zshenv
38 ```
39
40 Note, that this will disable //ANY// global files, except for the global
41 zshenv file.
42
43 = STARTUP VARIABLES =
44 Some of the behaviour of //grmlzshrc// can be altered by setting certain shell
45 variables. These may be set temporarily when starting zsh like this:
46 \
47 ``` % BATTERY=1 zsh
48
49 Or by setting them permanently in **zshrc.pre** (See AUXILIARY FILES below).
50
51 : **BATTERY**
52 If set to a value greater than zero and //acpi// installed, //grmlzshrc// will
53 put the battery status into the right hand side interactive prompt.
54
55 : **COMMAND_NOT_FOUND**
56 A non zero value activates a handler, which is called when a command can not
57 be found. The handler is defined by GRML_ZSH_CNF_HANDLER (see below).
58
59 : **GRML_ZSH_CNF_HANDLER**
60 This variable contains the handler to be used by COMMAND_NOT_FOUND (see above)
61 and defaults to "/usr/share/command-not-found/command-not-found".
62
63 : **GRMLSMALL_SPECIFIC**
64 Set this to zero to remove items in zsh config, which do not work in
65 grml-small.
66
67 : **HISTFILE**
68 Where zsh saves the history. Default: ${HOME}/.zsh_history.
69
70 : **HISTSIZE**
71 Number of commands to be kept in the history. On a Grml-CD this defaults to
72 500, on a hard disk installation to 5000.
73
74 : **MAILCHECK**
75 Sets the frequency in seconds for zsh to check for new mail. Defaults to 30.
76 A value of zero turns off checking.
77
78 : **NOCOR**
79 Non zero values deactivate automatic correction of commands.
80
81 : **NOMENU**
82 If set to zero (default), allows selection from a menu, if there are at least
83 five possible options of completion.
84
85 : **NOPRECMD**
86 A non zero value disables precmd and preexec commands. These are functions
87 that are run before every command (setting xterm/screen titles etc.).
88
89 : **REPORTTIME**
90 Show time (user, system and cpu) used by external commands, if they run longer
91 than the defined number of seconds (default: 5).
92
93 : **SAVEHIST**
94 Number of commands to be stored in ${HISTFILE}. Defaults to 1000 on a Grml-CD
95 and to 10000 on an installation on hard disk.
96
97 : **watch**
98 As in tcsh(1) an array of login/logout events to be reported by the shell
99 builtin "log". For details see zshparam(1). Defaults to (notme root).
100
101 : **ZSH_NO_DEFAULT_LOCALE**
102 Import "/etc/default/locale", if set to zero (default).
103
104 : **ZSH_PROFILE_RC**
105 A non zero value causes shell functions to be profiled. The results can be
106 obtained with the zprof builtin command (see zshmodules(1) for details).
107
108
109 = FEATURE DESCRIPTION =
110 This is an in depth description of non-standard features implemented by
111 //grmlzshrc//.
112
113 == DIRSTACK HANDLING ==
114 The dirstack in //grmlzshrc// has a persistent nature. It is stored into a
115 file each time zsh's working directory is changed. That file can be configured
116 via the **DIRSTACKFILE** variable and it defaults to **~/.zdirs**. The
117 **DIRSTACKSIZE** variable defaults to **20** in this setup.
118
119 The **DIRSTACKFILE** is loaded each time zsh starts, therefore freshly started
120 zshs inherit the dirstack of the zsh that most recently updated
121 **DIRSTACKFILE**.
122
123 == DIRECTORY BASED PROFILES ==
124 If you want certain settings to be active in certain directories (and
125 automatically switch back and forth between them), this is what you want.
126 \
127 ```
128 zstyle ':chpwd:profiles:/usr/src/grml(|/|/*)'   profile grml
129 zstyle ':chpwd:profiles:/usr/src/debian(|/|/*)' profile debian
130 ```
131
132 When that's done and you enter a directory that matches the pattern
133 in the third part of the context, a function called chpwd_profile_grml,
134 for example, is called (if it exists).
135
136 If no pattern matches (read: no profile is detected) the profile is
137 set to 'default', which means chpwd_profile_default is attempted to
138 be called.
139
140 A word about the context (the ':chpwd:profiles:*' stuff in the zstyle
141 command) which is used: The third part in the context is matched against
142 **$PWD**. That's why using a pattern such as /foo/bar(|/|/*) makes sense.
143 Because that way the profile is detected for all these values of **$PWD**:
144 \
145 ```
146 /foo/bar
147 /foo/bar/
148 /foo/bar/baz
149 ```
150
151 So, if you want to make double damn sure a profile works in /foo/bar
152 and everywhere deeper in that tree, just use (|/|/*) and be happy.
153
154 The name of the detected profile will be available in a variable called
155 'profile' in your functions. You don't need to do anything, it'll just
156 be there.
157
158 Then there is the parameter **$CHPWD_PROFILE** which is set to the profile,
159 that was active up to now. That way you can avoid running code for a
160 profile that is already active, by running code such as the following
161 at the start of your function:
162 \
163 ```
164 function chpwd_profile_grml() {
165     [[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
166     ...
167 }
168 ```
169
170 The initial value for **$CHPWD_PROFILE** is 'default'.
171
172 === Signaling availabily/profile changes ===
173
174 If you use this feature and need to know whether it is active in your
175 current shell, there are several ways to do that. Here are two simple
176 ways:
177
178 a) If knowing if the profiles feature is active when zsh starts is
179    good enough for you, you can put the following snippet into your
180    //.zshrc.local//:
181 \
182 ```
183 (( ${+functions[chpwd_profiles]} )) &&
184     print "directory profiles active"
185 ```
186
187 b) If that is not good enough, and you would prefer to be notified
188    whenever a profile changes, you can solve that by making sure you
189    start **every** profile function you create like this:
190 \
191 ```
192 function chpwd_profile_myprofilename() {
193     [[ ${profile} == ${CHPWD_PROFILE} ]] && return 1
194     print "chpwd(): Switching to profile: $profile"
195   ...
196 }
197 ```
198
199 That makes sure you only get notified if a profile is **changed**,
200 not everytime you change directory.
201
202 === Version requirement ===
203 This feature requires zsh //4.3.3// or newer.
204
205
206 == ACCEPTLINE WRAPPER ==
207 The //accept-line// wiget is the one that is taking action when the **return**
208 key is hit. //grmlzshrc// uses a wrapper around that widget, which adds new
209 functionality.
210
211 This wrapper is configured via styles. That means, you issue commands, that look
212 like:
213 \
214 ```
215 zstyle 'context' style value
216 ```
217
218 The context namespace, that we are using is 'acceptline'. That means, the actual
219 context for your commands look like: **':acceptline:<subcontext>'**.
220
221 Where **<subcontext>** is one of: **default**, **normal**, **force**, **misc**
222 or **empty**.
223
224
225 === Recognized Contexts ===
226 : **default**
227 This is the value, the context is initialized with.
228 The //compwarnfmt and //rehash// styles are looked up in this context.
229
230 : **normal**
231 If the first word in the command line is either a command, alias, function,
232 builtin or reserved word, you are in this context.
233
234 : **force**
235 This is the context, that is used if you hit enter again, after being warned
236 about the existence of a _completion for the non-existing command you
237 entered.
238
239 : **empty**
240 This is the context, you are in if the command line is empty or only
241 consists of whitespace.
242
243 : **misc**
244 This context is in effect, if you entered something that does not match any
245 of the above. (e.g.: variable assignments).
246
247
248 === Available Styles ===
249 : **nocompwarn**
250 If you set this style to true, the warning about non existent commands,
251 for which completions exist will not be issued. (Default: **false**)
252
253 : **compwarnfmt**
254 The message, that is displayed to warn about the _completion issue.
255 (default: **'%c will not execute and completion %f exists.'**)
256 '%c' is replaced by the command name, '%f' by the completion's name.
257
258 : **rehash**
259 If this is set, we'll force rehashing, if appropriate. (Defaults to
260 **true** in //grmlzshrc//).
261
262 : **actions**
263 This can be a list of wigdets to call in a given context. If you need a
264 specific order for these to be called, name them accordingly. The default value
265 is an **empty list**.
266
267 : **default_action**
268 The name of a widget, that is called after the widgets from 'actions'.
269 By default, this will be '.accept-line' (which is the built-in accept-line
270 widget).
271
272 : **call_default**
273 If true in the current context, call the widget in the 'default_action'
274 style. (The default is **true** in all contexts.)
275
276
277 == PROMPT ==
278
279
280 == GNU/SCREEN STATUS SETTING ==
281 //grmlzshrc// sets screen's hardstatus lines to the currently running command
282 or **'zsh'** if the shell is idling at its prompt. If the current working
283 directory is inside a repository unter version control, screen status is set
284 to: **'zsh: <repository name>'** via zsh's vcs_info.
285
286
287 == PERSISTENT HISTORY ==
288 If you got commands you consider important enough to be included in every
289 shell's history, you can put them into ~/.important_commands and they will be
290 available via the usual history lookup widgets.
291
292
293 = REFERENCE =
294 == ENVIRONMENT VARIABLES ==
295 //grmlzshrc// sets some environment variables, which influence the
296 behaviour of applications.
297
298 : **COLORTERM**
299 Set to "yes". Some applications read this to learn about properties
300 of the terminal they are running in.
301
302 : **EDITOR**
303 If not already set, sets the default editor. Falls back to vi(1),
304 if vim(1) is not available.
305
306 : **LESS_TERMCAP_***
307 Some environment variables that add colour support to less(1) for viewing
308 man pages. See termcap(5) for details.
309
310 : **MAIL**
311 The mailbox file for the current user is set to /var/mail/$USER, if not
312 already set otherwise.
313
314 : **PAGER**
315 Set less(1) as default pager, if not already set to something different.
316
317 : **SHELL**
318 Set explicitly to /bin/zsh, to prevent certain terminal emulators to
319 default to /bin/sh or /bin/bash.
320
321
322 == OPTIONS ==
323 Apart from zsh's default options, //grmlzshrc// sets some options
324 that change the behaviour of zsh. Options that change Z-shell's default
325 settings are marked by <grml>. But note, that zsh's defaults vary depending
326 on its emulation mode (csh, ksh, sh, or zsh). For details, see zshoptions(1).
327
328 : **append_history**
329 Zsh sessions, that use //grmlzshrc//, will append their history list to the
330 history file, rather than replace it. Thus, multiple parallel zsh sessions
331 will all have the new entries from their history lists added to the history
332 file, in the order that they exit. The file will still be periodically
333 re-written to trim it when the number of lines grows 20% beyond the value
334 specified by $SAVEHIST.
335
336 : **auto_cd** <grml>
337 If a command is issued that can't be executed as a normal command, and the
338 command is the name of a directory, perform the cd command to that directory.
339
340 : **auto_pushd** <grml>
341 Make cd push the old directory onto the directory stack.
342
343 : **completeinword** <grml>
344 If the cursor is inside a word, completion is done from both ends;
345 instead of moving the cursor to the end of the word first and starting
346 from there.
347
348 : **extended_glob** <grml>
349 Treat the '#', '~' and '^' characters as active globbing pattern characters.
350
351 : **extended_history** <grml>
352 Save each command's beginning timestamp (in seconds since the epoch) and the
353 duration (in seconds) to the history file.
354
355 : **hash_list_all**
356 Whenever a command completion is attempted, make sure the entire command
357 path is hashed first. This makes the first completion slower.
358
359 : **histignorealldups** <grml>
360 If a new command line being added to the history list duplicates an
361 older one, the older command is removed from the list, even if it is
362 not the previous event.
363
364 : **histignorespace** <grml>
365 Remove command lines from the history list when the first character on
366 the line is a space, or when one of the expanded aliases contains a
367 leading space. Note that the command lingers in the internal history
368 until the next command is entered before it vanishes.
369
370 : **longlistjobs** <grml>
371 List jobs in long format by default.
372
373 : **nobeep** <grml>
374 Avoid to beep on errors in zsh command line editing (zle).
375
376 : **noglobdots**
377 A wildcard character never matches a leading '.'.
378
379 : **nohup** <grml>
380 Do not send the hangup signal (HUP:1) to running jobs when the shell exits.
381
382 : **notify**
383 Report the status of background jobs immediately, rather than waiting until
384 just before printing a prompt.
385
386 : **pushd_ignore_dups** <grml>
387 Don't push multiple copies of the same directory onto the directory stack.
388
389 : **share_history** <grml>
390 As each line is added to the history file, it is checked to see if anything
391 else was written out by another shell, and if so it is included in the
392 history of the current shell too. Using !-style history, the commands from
393 the other sessions will not appear in the history list unless you explicitly
394 type the "history" command. This option is activated for zsh versions >= 4,
395 only.
396
397
398 == KEYBINDINGS ==
399 Apart from zsh's default key bindings, //grmlzshrc// comes with its own set of
400 key bindings. Note that bindings like **ESC-e** can also be typed as **ALT-e**
401 on PC keyboards.
402
403 : **ESC-e**
404 Edit the current command buffer in your favourite editor.
405
406 : **ESC-v**
407 Deletes a word left of the cursor; seeing '/' as additional word separator.
408
409 : **CTRL-x-1**
410 Jump right after the first word.
411
412 : **CTRL-x-M()**
413 Create directory under cursor or the selected area.
414 To select an area press ctrl-@ and use the cursor.
415 Use case: you type "mv abc ~/testa/testb/testc/" and remember that the
416 directory does not exist yet -> press **CTRL-xM** and problem solved.
417
418 : **CTRL-x-p**
419 Searches the last occurence of string before the cursor in the command history.
420
421 : **CTRL-x-z**
422 Display help on keybindings and zsh line editor. Press consecutively to page through content.
423
424 : **CTRL-z**
425 Brings a job, which got suspended with CTRL-z back to foreground.
426
427
428 == SHELL FUNCTIONS ==
429 //grmlzshrc// comes with a wide array of defined shell functions to ease the
430 user's life.
431
432 : **855resolution()**
433 If 915resolution is available, issues a warning to the user to run it instead
434 to modify the resolution on intel graphics chipsets.
435
436 : **accessed()**
437 Lists files in current directory, which have been accessed within the
438 last N days. N is an integer to be passed as first and only argument.
439 If no argument is specified N is set to 1.
440
441 : **allulimit()**
442 Sets all ulimit values to "unlimited".
443
444 : **any()**
445 Lists processes matching given pattern.
446
447 : **asc()**
448 Login on the host provided as argument using autossh. Then reattach a GNU screen
449 session if a detached session is around or detach a currently attached screen or
450 else start a new screen.  This is especially useful for roadwarriors using GNU
451 screen and ssh.
452
453 : **bk()**
454 Simple backup of a file or directory using cp(1). The target file name is the
455 original name plus a time stamp attached. Symlinks and file attributes like mode,
456 ownership and timestamps are preserved.
457
458 : **cdrecord()**
459 If the original cdrecord is not installed, issues a warning to the user to
460 use the wodim binary instead. Wodim is the debian fork of Joerg Schillings
461 cdrecord.
462
463 : **cdt()**
464 Creates a temporary directory using mktemp. Then changes current
465 working directory to it.
466
467 : **changed()**
468 Lists files in current directory, which have been changed within the
469 last N days. N is an integer to be passed as first and only argument.
470 If no argument is specified N is set to 1.
471
472 : **check_com()**
473 Returns true if given command exists either as program, function, alias,
474 builtin or reserved word. If the option -c is given, only returns true,
475 if command is a program.
476
477 : **checkhome()**
478 Changes directory to $HOME on first invocation of zsh. This is neccessary on
479 grml systems with autologin.
480
481 : **cl()**
482 Changes current directory to the one supplied by argument and lists the files
483 in it, including file names starting with ".".
484
485 : **dchange()**
486 Shows the changelog of given package in $PAGER.
487
488 : **debian2hd()**
489 Tells the user to use grml-debootstrap, if she wants to install debian to
490 harddisk.
491
492 : **deswap()**
493 A trick from $LINUX-KERNELSOURCE/Documentation/power/swsusp.txt. It brings
494 back interactive responsiveness after suspend, when the system is swapping
495 heavily.
496
497 : **dnews()**
498 Shows the NEWS file for the given package in $PAGER.
499
500 : **edalias()**
501 Edit given alias.
502
503 : **edfunc()**
504 Edit given shell function.
505
506 : **freload()**
507 Reloads an autoloadable shell function (See autoload in zshbuiltins(1)).
508
509 : **hgdi()**
510 Use GNU diff with options -ubwd for mercurial.
511
512 : **hgstat()**
513 Displays diffstat between the revision given as argument and tip (no
514 argument means last revision).
515
516 : **hidiff()**
517 Outputs highlighted diff; needs highstring(1).
518
519 : **is4()**
520 Returns true, if zsh version is equal or greater than 4, else false.
521
522 : **is41()**
523 Returns true, if zsh version is equal or greater than 4.1, else false.
524
525 : **is42()**
526 Returns true, if zsh version is equal or greater than 4.2, else false.
527
528 : **is425()**
529 Returns true, if zsh version is equal or greater than 4.2.5, else false.
530
531 : **is43()**
532 Returns true, if zsh version is equal or greater than 4.3, else false.
533
534 : **is433()**
535 Returns true, if zsh version is equal or greater than 4.3.3, else false.
536
537 : **isdarwin()**
538 Returns true, if running on darwin, else false.
539
540 : **isgrml()**
541 Returns true, if running on a grml system, else false.
542
543 : **isgrmlcd()**
544 Returns true, if running on a grml system from a live cd, else false.
545
546 : **isgrmlsmall()**
547 Returns true, if run on grml-small, else false.
548
549 : **iso2utf()**
550 Changes every occurrence of the string iso885915 or ISO885915 in
551 environment variables to UTF-8.
552
553 : **isutfenv()**
554 Returns true, if run within an utf environment, else false.
555
556 : **mkcd()**
557 Creates directory including parent directories, if necessary. Then changes
558 current working directory to it.
559
560 : **modified()**
561 Lists files in current directory, which have been modified within the
562 last N days. N is an integer to be passed as first and only argument.
563 If no argument is specified N is set to 1.
564
565 : **nt()**
566 A helper function for the "e" glob qualifier to list all files newer
567 than a reference file.
568 \
569 Example usages:
570 ```
571 % NTREF=/reference/file
572 % ls -l *(e:nt:)
573 % # Inline:
574 % ls -l *(e:'nt /reference/file':)
575 ```
576
577 : **profile()**
578 Runs a command in $SHELL with profiling enabled (See startup variable
579 ZSH_PROFILE_RC above).
580
581 : **salias()**
582 Creates an alias whith sudo prepended, if $EUID is not zero. Run "salias -h"
583 for details. See also xunfunction() below.
584
585 : **simple-extract()**
586 Tries to uncompress/unpack given files with the appropriate programs. If an URI
587 starting with https, http or ftp is provided simple-extract tries to download
588 and then uncompress/unpack the file. The choice is made along the filename
589 ending. simple-extract will not delete the original archive (even on .gz,.bz2 or
590 .xz) unless you use the '-d' option.
591
592 : **sll()**
593 Prints details of symlinks given as arguments.
594
595 : **ssl-cert-fingerprints**
596 Prints the SHA512, SHA256, SHA1 and MD5 digest of a x509 certificate.
597 First and only parameter must be a file containing a certificate. Use
598 /dev/stdin as file if you want to pipe a certificate to these
599 functions.
600
601 : **ssl-cert-info**
602 Prints all information of a x509 certificate including the SHA512,
603 SHA256, SHA1 and MD5 digests. First and only parameter must be a file
604 containing a certificate. Use /dev/stdin as file if you want to pipe a
605 certificate to this function.
606
607 : **ssl-cert-sha512(), ssl-cert-sha256(), ssl-cert-sha1(), ssl-cert-md5()**
608 Prints the SHA512, SHA256, SHA1 respective MD5 digest of a x509
609 certificate. First and only parameter must be a file containing a
610 certificate. Use /dev/stdin as file if you want to pipe a certificate
611 to this function.
612
613 : **Start(), Restart(), Stop(), Force-Reload(), Reload()**
614 Functions for controlling daemons.
615 ```
616 Example usage:
617 % Restart ssh
618 ```
619
620 : **trans()**
621 Translates a word from german to english (-D) or vice versa (-E).
622
623 : **uchange()**
624 Shows upstreams changelog of a given package in $PAGER.
625
626 : **uprint()**
627 Works around the "print -l ${(u)foo}"-limitation on zsh older than 4.2.
628
629 : **utf2iso()**
630 Changes every occurrence of the string UTF-8 or utf-8 in environment
631 variables to iso885915.
632
633 : **vim()**
634 Wrapper for vim(1). It tries to set the title and hands vim the environment
635 variable VIM_OPTIONS on the command line. So the user may define command
636 line options, she always wants, in her .zshrc.local.
637
638 : **whatwhen()**
639 Searches the history for a given pattern and lists the results by date.
640 The first argument is the search pattern. The second and third ones are
641 optional and denote a search range (default: -100).
642
643 : **xcat()**
644 Tries to cat(1) file(s) given as parameter(s). Always returns true.
645 See also xunfunction() below.
646
647 : **xsource()**
648 Tries to source the file(s) given as parameter(s). Always returns true.
649 See zshbuiltins(1) for a detailed description of the source command.
650 See also xunfunction() below.
651
652 : **xtrename()**
653 Changes the title of xterm window from within screen(1). Run without
654 arguments for details.
655
656 : **xunfunction()**
657 Removes the functions salias, xcat, xsource, xunfunction and zrcautoload.
658
659 : **zrcautoload()**
660 Wrapper around the autoload builtin. Loads the definitions of functions
661 from the file given as argument. Searches $fpath for the file. See also
662 xunfunction() above.
663
664 : **zrclocal()**
665 Sources /etc/zsh/zshrc.local and ${HOME}/.zshrc.local. These are the files
666 where own modifications should go. See also zshbuiltins(1) for a description
667 of the source command.
668
669
670 == ALIASES ==
671 //grmlzshrc// comes with a wide array of predefined aliases to ease the user's
672 life. A few aliases (like those involving //grep// or //ls//) use the option
673 //--color=auto// for colourizing output. That option is part of **GNU**
674 implementations of these tools, and will only be used if such an implementation
675 is detected.
676
677 : **acp** (//apt-cache policy//)
678 With no arguments prints out the priorities of each source. If a package name
679 is given, it displays detailed information about the priority selection of the
680 package.
681
682 : **acs** (//apt-cache search//)
683 Searches debian package lists for the regular expression provided as argument.
684 The search includes package names and descriptions. Prints out name and short
685 description of matching packages.
686
687 : **acsh** (//apt-cache show//)
688 Shows the package records for the packages provided as arguments.
689
690 : **adg** (//apt-get dist-upgrade//)
691 Performs an upgrade of all installed packages. Also tries to automatically
692 handle changing dependencies with new versions of packages. As this may change
693 the install status of (or even remove) installed packages, it is potentially
694 dangerous to use dist-upgrade; invoked by sudo, if necessary.
695
696 : **ag** (//apt-get upgrade//)
697 Downloads and installs the newest versions of all packages currently installed
698 on the system. Under no circumstances are currently installed packages removed,
699 or packages not already installed retrieved and installed. New versions of
700 currently installed packages that cannot be upgraded without changing the install
701 status of another package will be left at their current version. An update must
702 be performed first (see au below); run by sudo, if necessary.
703
704 : **agi** (//apt-get install//)
705 Downloads and installs or upgrades the packages given on the command line.
706 If a hyphen is appended to the package name, the identified package will be
707 removed if it is installed. Similarly a plus sign can be used to designate a
708 package to install. This may be useful to override decisions made by apt-get's
709 conflict resolution system.
710 A specific version of a package can be selected for installation by following
711 the package name with an equals and the version of the package to select. This
712 will cause that version to be located and selected for install. Alternatively a
713 specific distribution can be selected by following the package name with a slash
714 and the version of the distribution or the Archive name (stable, testing, unstable).
715 Gets invoked by sudo, if user id is not 0.
716
717 : **ati** (//aptitude install//)
718 Aptitude is a terminal-based package manager with a command line mode similar to
719 apt-get (see agi above); invoked by sudo, if necessary.
720
721 : **au** (//apt-get update//)
722 Resynchronizes the package index files from their sources. The indexes of
723 available packages are fetched from the location(s) specified in
724 /etc/apt/sources.list. An update should always be performed before an
725 upgrade or dist-upgrade; run by sudo, if necessary.
726
727 : **da** (//du -sch//)
728 Prints the summarized disk usage of the arguments as well as a grand total
729 in human readable format.
730
731 : **dbp** (//dpkg-buildpackage//)
732 Builds binary or source packages from sources (See: dpkg-buildpackage(1)).
733
734 : **debs-by-size** (//grep-status -FStatus -sInstalled-Size,Package -n "install ok installed" | paste -sd "  \n" | sort -rn//)
735 Prints installed Packages sorted by size (descending).
736
737 : **dir** (//ls -lSrah//)
738 Lists files (including dot files) sorted by size (biggest last) in long and
739 human readable output format.
740
741 : **ge** (//grep-excuses//)
742 Searches the testing excuses files for a specific maintainer (See:
743 grep-excuses(1)).
744
745 : **grep** (//grep --color=auto//)
746 Shows grep output in nice colors, if available.
747
748 : **grml-rebuildfstab** (//rebuildfstab -v -r -config//)
749 Scans for new devices and updates /etc/fstab according to the findings.
750
751 : **grml-version** (//cat /etc/grml_version//)
752 Prints version of running grml.
753
754 : **hbp** (//hg-buildpackage//)
755 Helper program to maintain Debian packages with mercurial.
756
757 : **http** (//python -m SimpleHTTPServer//)
758 Basic HTTP server implemented in python. Listens on port 8000/tcp and
759 serves current directory. Implements GET and HEAD methods.
760
761 : **insecscp** (//scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"//)
762 scp with possible man-in-the-middle attack enabled. This is convenient, if the targets
763 host key changes frequently, for example on virtualized test- or development-systems.
764 To be used only inside trusted networks, of course.
765
766 : **insecssh** (//ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"//)
767 ssh with possible man-in-the-middle attack enabled
768 (for an explanation see insecscp above).
769
770 : **help-zshglob** (//H-Glob()//)
771 Runs the function H-Glob() to expand or explain wildcards.
772
773 : **j** (//jobs -l//)
774 Prints status of jobs in the current shell session in long format.
775
776 : **l** (//ls -lF --color=auto//)
777 Lists files in long output format with indicator for filetype appended
778 to filename. If the terminal supports it, with colored output.
779
780 : **la** (//ls -la --color=auto//)
781 Lists files in long colored output format. Including file names
782 starting with ".".
783
784 : **lad** (//ls -d .*(/)//)
785 Lists the dot directories (not their contents) in current directory.
786
787 : **lh** (//ls -hAl --color=auto//)
788 Lists files in long and human readable output format in nice colors,
789 if available. Includes file names starting with "." except "." and
790 "..".
791
792 : **ll** (//ls -l --color=auto//)
793 Lists files in long colored output format.
794
795 : **llog** (//$PAGER /var/log/syslog//)
796 Opens syslog in pager.
797
798 : **ls** (//ls -b -CF --color=auto//)
799 Lists directory printing octal escapes for nongraphic characters.
800 Entries are listed by columns and an indicator for file type is appended
801 to each file name. Additionally the output is colored, if the terminal
802 supports it.
803
804 : **lsa** (//ls -a .*(.)//)
805 Lists dot files in current working directory.
806
807 : **lsbig** (//ls -flh *(.OL[1,10])//)
808 Displays the ten biggest files (long and human readable output format).
809
810 : **lsd** (//ls -d *(/)//)
811 Shows directories.
812
813 : **lse** (//ls -d *(/^F)//)
814 Shows empty directories.
815
816 : **lsl** (//ls -l *(@)//)
817 Lists symbolic links in current directory.
818
819 : **lsnew** (//ls -rl *(D.om[1,10])//)
820 Displays the ten newest files (long output format).
821
822 : **lsold** (//ls -rtlh *(D.om[1,10])//)
823 Displays the ten oldest files (long output format).
824
825 : **lss** (//ls -l *(s,S,t)//)
826 Lists files in current directory that have the setuid, setgid or sticky bit
827 set.
828
829 : **lssmall** (//ls -Srl *(.oL[1,10])//)
830 Displays the ten smallest files (long output format).
831
832 : **lsw** (//ls -ld *(R,W,X.^ND/)//)
833 Displays all files which are world readable and/or world writable and/or
834 world executable (long output format).
835
836 : **lsx** (//ls -l *(*)//)
837 Lists only executable files.
838
839 : **mdstat** (//cat /proc/mdstat//)
840 Lists all active md (i.e. linux software raid) devices with some information
841 about them.
842
843 : **mq** (//hg -R $(readlink -f $(hg root)/.hg/patches)//)
844 Executes the commands on the versioned patch queue from current repository.
845
846 : **rmcdir** (//'cd ..; rmdir $OLDPWD || cd $OLDPWD//)
847 rmdir current working directory
848
849 : **screen** (///usr/bin/screen -c ${HOME}/.screenrc//)
850 If invoking user is root, starts screen session with /etc/grml/screenrc
851 as config file. If invoked by a regular user, start a screen session
852 with users .screenrc config if it exists, else use /etc/grml/screenrc_grml
853 as configuration.
854
855 : **su** (//sudo su//)
856 If user is running a grml live-CD, dont ask for any password, if she
857 wants a root shell.
858
859 : **term2iso** (//echo 'Setting terminal to iso mode' ; print -n '\e%@'//)
860 Sets mode from UTF-8 to ISO 2022 (See:
861 http://www.cl.cam.ac.uk/~mgk25/unicode.html#term).
862
863 : **term2utf** (//echo 'Setting terminal to utf-8 mode'; print -n '\e%G'//)
864 Sets mode from ISO 2022 to UTF-8 (See:
865 http://www.cl.cam.ac.uk/~mgk25/unicode.html#term).
866
867 : **tlog** (//tail -f /var/log/syslog//)
868 Prints syslog continuously (See tail(1)).
869
870 : **up** (//aptitude update ; aptitude safe-upgrade//)
871 Performs a system update followed by a system upgrade using aptitude; run
872 by sudo, if necessary. See au and ag above.
873
874 : **url-quote** (//autoload -U url-quote-magic ; zle -N self-insert url-quote-magic//)
875 After calling, characters of URLs as typed get automatically escaped, if necessary, to
876 protect them from the shell.
877
878 : **$(uname -r)-reboot** (//kexec -l --initrd=/boot/initrd.img-"$(uname -r)" --command-line=\"$(cat /proc/cmdline)\" /boot/vmlinuz-"$(uname -r)"//)
879 Reboots using kexec(8) and thus reduces boot time by skipping hardware initialization of BIOS/firmware.
880
881 : **...** (//cd ../..///)
882 Changes current directory two levels higher.
883
884
885 = AUXILIARY FILES =
886 This is a set of files, that - if they exist - can be used to customize the
887 behaviour of //grmlzshrc//.
888
889 : **.zshrc.pre**
890 Sourced at the very beginning of //grmlzshrc//. Among other things, it can
891 be used to permantenly change //grmlzshrc//'s STARTUP VARIABLES (see above):
892 \
893 ```
894 # show battery status in RPROMPT
895 BATTERY=1
896 # always load the complete setup, even for root
897 GRML_ALWAYS_LOAD_ALL=1
898 ```
899
900 : **.zshrc.local**
901 Sourced right before loading //grmlzshrc// is finished. There is a global
902 version of this file (/etc/zsh/zshrc.local) which is sourced before the
903 user-specific one.
904
905 : **.zdirs**
906 Directory listing for persistent dirstack (see above).
907
908 : **.important_commands**
909 List of commands, used by persistent history (see above).
910
911
912 = INSTALLATION ON NON-DEBIAN SYSTEMS =
913 On Debian systems (http://www.debian.org) - and possibly Ubuntu
914 (http://www.ubuntu.com) and similar systems - it is very easy to get
915 //grmlzshrc// via grml's .deb repositories.
916
917 On non-debian systems, that is not an option, but all is not lost:
918 \
919 ```
920 % wget -O .zshrc http://git.grml.org/f/grml-etc-core/etc/zsh/zshrc
921 ```
922
923 If you would also like to get seperate function files (which you can put into
924 your **$fpath**), you can browse and download them at:
925
926 http://git.grml.org/?p=grml-etc-core.git;a=tree;f=usr_share_grml/zsh;hb=HEAD
927
928 = ZSH REFCARD TAGS =
929 If you read //grmlzshrc//'s code you may notice strange looking comments in
930 it. These are there for a purpose. grml's zsh-refcard is automatically
931 generated from the contents of the actual configuration file. However, we need
932 a little extra information on which comments and what lines of code to take
933 into account (and for what purpose).
934
935 Here is what they mean:
936
937 List of tags (comment types) used:
938 : **#a#**
939 Next line contains an important alias, that should be included in the
940 grml-zsh-refcard. (placement tag: @@INSERT-aliases@@)
941
942 : **#f#**
943 Next line contains the beginning of an important function. (placement
944 tag: @@INSERT-functions@@)
945
946 : **#v#**
947 Next line contains an important variable. (placement tag:
948 @@INSERT-variables@@)
949
950 : **#k#**
951 Next line contains an important keybinding. (placement tag:
952 @@INSERT-keybindings@@)
953
954 : **#d#**
955 Hashed directories list generation: //start//: denotes the start of a list of
956 'hash -d' definitions. //end//: denotes its end. (placement tag:
957 @@INSERT-hasheddirs@@)
958
959 : **#A#**
960 Abbreviation expansion list generation: //start//: denotes the beginning of
961 abbreviations. //end//: denotes their end.
962 \
963 Lines within this section that end in '#d .*' provide extra documentation to
964 be included in the refcard. (placement tag: @@INSERT-abbrev@@)
965
966 : **#m#**
967 This tag allows you to manually generate refcard entries for code lines that
968 are hard/impossible to parse.
969 Example:
970 \
971 ```
972 #m# k ESC-h Call the run-help function
973 ```
974 \
975 That would add a refcard entry in the keybindings table for 'ESC-h' with the
976 given comment.
977 \
978 So the syntax is: #m# <section> <argument> <comment>
979
980 : **#o#**
981 This tag lets you insert entries to the 'other' hash. Generally, this should
982 not be used. It is there for things that cannot be done easily in another way.
983 (placement tag: @@INSERT-other-foobar@@)
984
985
986 All of these tags (except for m and o) take two arguments, the first
987 within the tag, the other after the tag:
988
989 #<tag><section># <comment>
990
991 Where <section> is really just a number, which are defined by the @secmap
992 array on top of 'genrefcard.pl'. The reason for numbers instead of names is,
993 that for the reader, the tag should not differ much from a regular comment.
994 For zsh, it is a regular comment indeed. The numbers have got the following
995 meanings:
996
997 : **0**
998 //default//
999
1000 : **1**
1001 //system//
1002
1003 : **2**
1004 //user//
1005
1006 : **3**
1007 //debian//
1008
1009 : **4**
1010 //search//
1011
1012 : **5**
1013 //shortcuts//
1014
1015 : **6**
1016 //services//
1017
1018
1019 So, the following will add an entry to the 'functions' table in the 'system'
1020 section, with a (hopefully) descriptive comment:
1021 \
1022 ```
1023 #f1# Edit an alias via zle
1024 edalias() {
1025 ```
1026 \
1027 It will then show up in the @@INSERT-aliases-system@@ replacement tag that can
1028 be found in 'grml-zsh-refcard.tex.in'. If the section number is omitted, the
1029 'default' section is assumed. Furthermore, in 'grml-zsh-refcard.tex.in'
1030 @@INSERT-aliases@@ is exactly the same as @@INSERT-aliases-default@@. If you
1031 want a list of **all** aliases, for example, use @@INSERT-aliases-all@@.
1032
1033
1034 = CONTRIBUTING =
1035 If you want to help to improve grml's zsh setup, clone the grml-etc-core
1036 repository from git.grml.org:
1037 \
1038 ``` % git clone git://git.grml.org/grml-etc-core.git
1039
1040 Make your changes, commit them; use '**git format-patch**' to create a series
1041 of patches and send those to the following address via '**git send-email**':
1042 \
1043 ``` grml-etc-core@grml.org
1044
1045 Doing so makes sure the right people get your patches for review and
1046 possibly inclusion.
1047
1048
1049 = STATUS =
1050 This manual page is the **reference** manual for //grmlzshrc//.
1051
1052 That means that in contrast to the existing refcard it should document **every**
1053 aspect of the setup.
1054
1055 This manual is currently not complete. If you want to help improving it, visit
1056 the following pages:
1057
1058 http://wiki.grml.org/doku.php?id=zshrcmanual
1059
1060 http://lists.mur.at/pipermail/grml/2009-August/004609.html
1061
1062 Contributions are highly welcome.
1063
1064
1065 = AUTHORS =
1066 This manpage was written by Frank Terbeck <ft@grml.org>, Joerg Woelke
1067 <joewoe@fsmail.de>, Maurice McCarthy <manselton@googlemail.com> and Axel
1068 Beckert <abe@deuxchevaux.org>.
1069
1070
1071 = COPYRIGHT =
1072 Copyright (c) 2009-2011 Grml project <http://grml.org>
1073
1074 This manpage is distributed under the terms of the GPL version 2.
1075
1076 Most parts of grml's zshrc are distributed under the terms of GPL v2, too,
1077 except for **accept-line()** which are distributed under the same conditions
1078 as zsh itself (which is BSD-like).