From: Frank Terbeck Date: Tue, 6 Dec 2011 15:53:35 +0000 (+0100) Subject: Merge remote-tracking branch 'origin/xro/lsnewolddir' X-Git-Tag: v0.5.0~1 X-Git-Url: http://git.grml.org/?a=commitdiff_plain;h=dffa45464d731201c72023092498d532d1799920;hp=bff1927e3bdfffe98e75afe2db34b5c7e2e4edf3;p=grml-etc-core.git Merge remote-tracking branch 'origin/xro/lsnewolddir' --- diff --git a/debian/changelog b/debian/changelog index 6862010..a3d1634 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,50 @@ +grml-etc-core (0.4.03) unstable; urgency=low + + * [43b9baa] lsb-functions: fix logic of RC_NOCOLOR check for + RC_ENDCOL + + -- Michael Prokop Sun, 27 Nov 2011 23:16:16 +0100 + +grml-etc-core (0.4.02) unstable; urgency=low + + [ Frank Terbeck ] + * [43090cf] zshrc: Make cd() behave with more than one argument + * [fb6dc41] zshrc: Do not use bogus array index `0' in dirstack code + [Closes: issue1055] + * [2130d67] Fix spelling in debian/control + * [219a342] gitignore: zsh byte-compiled files (*.zwc) + * [7b4ae7e] zshrc: Stop setting $BROWSER + + [ micah anderson ] + * [b7cea1c] zshrc: hl() parameter fix + + [ Christian Hofstaedtler ] + * [8b7ef31] Remove unmaintained accessibility support + * [093bbd1] Cleanup indenting in preinst, postrm + + [ Sebastian Boehm ] + * [11ce070] Add tmux.conf + + [ Michael Prokop ] + * [f5f88df] zshrc: use dpkg-query instead of grep-status for debs-by- + size alias. Thanks to Thorsten Glaser + * [91e6659] zshrc: drop 2mp3_192 function + * [527ab11] lsb-functions: if we do not use colors then assume terminal + can not handle endcols + * [2eb78fd] zshrc: check for empty DONTSETRPROMPT and NOTITLE + + [ Bernhard Tittelbach ] + * [7ee39bb] zshrc: purge old zsh compile-files, echo newline + * [87a8f70] zshrc: lsdisk mount and blocksize info + * [fd1f19f] zshrc: fix readme, add liesmich, improve globbing + * [e325343] zshrc: help-zle caching + * [eb2c0c6] zshrc: readme(): remove superfluous line + * [a443ac2] zshrc: inplaceMkDirs(): handle espaces and quotes better + * [5173aea] zshrc: alias remove current working diretory + * [a7cf6e3] zshrc: simple-extract: make curl follow redirects + + -- Michael Prokop Sat, 26 Nov 2011 19:10:44 +0100 + grml-etc-core (0.4.01) unstable; urgency=low [ Frank Terbeck ] diff --git a/doc/grmlzshrc.t2t b/doc/grmlzshrc.t2t index f900a43..d39ad1c 100644 --- a/doc/grmlzshrc.t2t +++ b/doc/grmlzshrc.t2t @@ -56,9 +56,6 @@ put the battery status into the right hand side interactive prompt. 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_ZSH_CNF_HANDLER** This variable contains the handler to be used by COMMAND_NOT_FOUND (see above) and defaults to "/usr/share/command-not-found/command-not-found". @@ -298,9 +295,6 @@ available via the usual history lookup widgets. //grmlzshrc// sets some environment variables, which influence the behaviour of applications. -: **BROWSER** -If X is running this is set to "firefox", otherwise to "w3m". - : **COLORTERM** Set to "yes". Some applications read this to learn about properties of the terminal they are running in. @@ -320,10 +314,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. @@ -444,10 +434,6 @@ Brings a job, which got suspended with CTRL-z back to foreground. //grmlzshrc// comes with a wide array of defined shell functions to ease the user's life. -: **2html()** -Converts plaintext files to HTML using vim. The output is written to -.html. - : **855resolution()** If 915resolution is available, issues a warning to the user to run it instead to modify the resolution on intel graphics chipsets. @@ -457,54 +443,23 @@ Lists files in current directory, which have been accessed within the last N days. N is an integer to be passed as first and only argument. If no argument is specified N is set to 1. -: **agoogle()** -Searches for USENET postings from authors using google groups. - : **allulimit()** Sets all ulimit values to "unlimited". -: **ansi-colors()** -Prints a colored table of available ansi color codes (to be used in escape -sequences) and the colors they represent. - : **any()** Lists processes matching given pattern. -: **aoeu(), asdf(), uiae()** -Pressing the 'asdf' keys toggles between dvorak or neon and us keyboard -layout. - -: **apache2-ssl-certificate()** -Advices the user how to create self signed certificates. - : **asc()** Login on the host provided as argument using autossh. Then reattach a GNU screen session if a detached session is around or detach a currently attached screen or else start a new screen. This is especially useful for roadwarriors using GNU screen and ssh. -: **audioburn()** -Burns the files in ~/ripps (see audiorip() below) to an audio CD. -Then prompts the user if she wants to remove that directory. You might need -to tell audioburn which cdrom device to use like: -"DEVICE=/dev/cdrom audioburn" - -: **audiorip()** -Creates directory ~/ripps, if it does not exist. Then rips audio CD into -it. Then prompts the user if she wants to burn a audio CD with audioburn() -(see above). You might need to tell audiorip which cdrom device to use like: -"DEVICE=/dev/cdrom audioburn" - : **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. -: **cdiff()** -Runs a recursive diff(1) over two given directories trying to find the -smallest set of changes. Three lines of context will be printed and binary -files filtered out. - : **cdrecord()** If the original cdrecord is not installed, issues a warning to the user to use the wodim binary instead. Wodim is the debian fork of Joerg Schillings @@ -532,35 +487,9 @@ grml systems with autologin. Changes current directory to the one supplied by argument and lists the files in it, including file names starting with ".". -: **cvsa()** -Adds and commits the given files using cvs(1). The commit message will be -'initial checkin'. - -: **cvsd()** -Shows a cvs diff of the arguments in $PAGER. - -: **cvsl()** -Shows the cvs log in $PAGER. - -: **cvsq()** -Runs a cvs update. - -: **cvsr()** -Generates a changelog using rcs2log and shows it in $PAGER. - -: **cvss()** -Shows cvs status of given files. - : **dchange()** Shows the changelog of given package in $PAGER. -: **debbug()** -Searches the Debian bug tracking system (bugs.debian.org) for Bug numbers, -email addresses of submitters or any string given on the command line. - -: **debbugm()** -Shows bug report for debian given by number in mailbox format. - : **debian2hd()** Tells the user to use grml-debootstrap, if she wants to install debian to harddisk. @@ -570,81 +499,18 @@ A trick from $LINUX-KERNELSOURCE/Documentation/power/swsusp.txt. It brings back interactive responsiveness after suspend, when the system is swapping heavily. -: **dirspace()** -Shows the disk usage of the directories given in human readable format; -defaults to $path. - -: **disassemble()** -Translates C source code to assembly and ouputs both. - -: **dmoz()** -Searches for the first argument (optional) in the Open Directory Project -(See http://www.dmoz.org/docs/en/about.html). - : **dnews()** Shows the NEWS file for the given package in $PAGER. -: **doc()** -Takes packagename as argument. Sets current working directory to -/usr/share/doc/ and prints out a directory listing. - -: **dwicti()** -Looks up the first argument (optional) in the german Wiktionary -which is an online dictionary (See: http://de.wiktionary.org/). - : **edalias()** Edit given alias. : **edfunc()** Edit given shell function. -: **ewicti()** -Looks up the first argument (optional in the english Wiktionary -which is an online dictionary (See: http://en.wiktionary.org/). - -: **exirename()** -Renames image files based on date/time informations in their exif headers. - -: **fir()** -Opens given URL with Firefox (Iceweasel on Debian). If there is already an -instance of firefox running, attaches to the first window found and opens the -URL in a new tab (this even works across an ssh session). - -: **fluxkey-change()** -Switches the key combinations for changing current workspace under fluxbox(1) -from Alt-[0-9] to Alt-F[0-9] and vice versa by rewriting $HOME/.fluxbox/keys. -Requires the window manager to reread configuration to take effect. - : **freload()** Reloads an autoloadable shell function (See autoload in zshbuiltins(1)). -: **genthumbs()** -A simple thumbnails generator. Resizes images (i. e. files that end in ".jpg", -".jpeg", ".gif" or ".png") to 100x200. Output files are named "thumb-". Creates an index.html with title "Images" showing the -thumbnails as clickable links to the respective original file. -//Warning:// On start genthumbs() silently removes a possibly existing "index.html" -and all files and/or directories beginning with "thumb-" in current directory! - -: **get_tw_cli()** -Fetches 3ware RAID controller software using get_3ware(1). - -: **gex()** -Performs an exact (i. e. quoted) web search using Google. - -: **ggogle()** -Searches the arguments on Google Groups, a web to USENET gateway. - -: **google()** -Searches the search engine Google using arguments as search string. - -: **greph()** -Searches the zsh command history for a regular expression. - -: **hex()** -Prints the hexadecimal representation of the number supplied as argument -(base ten only). - : **hgdi()** Use GNU diff with options -ubwd for mercurial. @@ -655,18 +521,6 @@ argument means last revision). : **hidiff()** Outputs highlighted diff; needs highstring(1). -: **hl()** -Shows source files in less(1) with syntax highlighting. Run "hl -h" -for detailed usage information. - -: **ic_get()** -Queries IMAP server (first parameter) for its capabilities. Takes -port number as optional second argument. - -: **ipv6-tunnel()** -Sets up an IPv6 tunnel on interface sit1. Needs one argument - -either "start", "stop" or "status". - : **is4()** Returns true, if zsh version is equal or greater than 4, else false. @@ -704,79 +558,15 @@ environment variables to UTF-8. : **isutfenv()** Returns true, if run within an utf environment, else false. -: **iwclient()** -Searches a wireless interface and runs dhclient(8) on it. - -: **lcheck()** -Lists libraries that define the symbol containing the string given as -parameter. - -: **limg()** -Lists images (i. e. files ending with ".jpg", ".gif" or ".png") in current -directory. - -: **linenr()** -Prints specified range of (numbered) lines of a file. -Usage: linenr [,] - -: **lsdisk()** -Uses udev's /dev/disk to list block devices with their LABEL, UUID and IDs. - -: **makereadable()** -Creates a PostScript and a PDF file (basename as first argument) from -source code files. - -: **man2()** -Displays manpage in a streched style. - -: **manzsh()** -Shows the zshall manpage and jumps to the first match of the regular -expression optionally given as argument (Needs qma(1)). - -: **mcd()** +: **mkcd()** Creates directory including parent directories, if necessary. Then changes current working directory to it. -: **mdiff()** -Diffs the two arguments recursively and writes the -output (unified format) to a timestamped file. - -: **memusage()** -Prints the summarized memory usage in bytes. - -: **mggogle()** -Searches Google Groups for a USENET message-ID. - -: **minimal-shell()** -Spawns a minimally set up MirBSD Korn shell. It references no files in /usr, -so that file system can be unmounted. - -: **mkaudiocd()** -Renames all mp3 files in ~/ripps (see audiorip above) to lowercase and -replaces spaces in file names with underscores. Then mkaudiocd() -normalizes the files and recodes them to WAV. - -: **mkiso()** -Creates an iso9660 filesystem image with Rockridge and Joliet extensions -enabled using mkisofs(8). Prompts the user for volume name, filename and -target directory. - -: **mkmaildir()** -Creates a directory with first parameter as name inside $MAILDIR_ROOT -(defaults to $HOME/Mail) and subdirectories cur, new and tmp. - -: **mmake()** -Runs "make install" and logs the output under ~/.errorlogs/; useful for -a clean deinstall later. - : **modified()** Lists files in current directory, which have been modified within the last N days. N is an integer to be passed as first and only argument. If no argument is specified N is set to 1. -: **netcraft()** -Asks netcraft.com for informations about the site given as argument. - : **nt()** A helper function for the "e" glob qualifier to list all files newer than a reference file. @@ -789,72 +579,14 @@ Example usages: % ls -l *(e:'nt /reference/file':) ``` -: **oleo()** -Translates the given word using the english - german online -dictionary dict.leo.org. - -: **peval()** -Evaluates a perl expression; useful as command line -calculator, therefore also available as "calc". - -: **plap()** -Lists all occurrences of the string given as argument in current $PATH. - : **profile()** Runs a command in $SHELL with profiling enabled (See startup variable ZSH_PROFILE_RC above). -: **purge()** -Removes temporary files from current directory. Asks for confirmation. Uses sudo if necessary. -In detail it purges - - common temp files like "*~", ".*~", "#*#", "*.o", "a.out", "*.orig", "*.rej", "*.cmo", "*.cmi" and ".*.swp" - - core dumps - - debconf backup files: "*.dpkg-old", "*.dkpg-new", "*.dpkg-dist" - - gentoo dispatch-conf backups: ".cfg0000_*", ".mrg0000_*" - - precompiled python code ("*.pyc", "*.pyo") as long as matching "*.py" source is also present - - LaTeX temp files i.e. "*.(log|toc|aux|nav|snm|out|tex.backup|bbl|blg|bib.backup|vrb|lof|lot|hd|idx)" for any present "*.tex" - - ghc temp files, as long as matching "*.hs" or "*.lhs" is also present - - "*.mood(D)" Files which are missing their corresponding audio file - -: **readme()** -Opens all README-like files in current working directory with the program -defined in the $PAGER environment variable. - -: **refunc()** -Reloads functions given as parameters. - -: **regcheck()** -Checks whether a regular expression (first parameter) matches a string -(second parameter) using perl. - -: **rundirs()** -Takes as first parameter a quoted string containing an exectuable command or function with arguments. -Following that it takes a bunch of directories, which will then be traversed, executing the -first argument in each one. E.g.: rundirs purge . **/*(/-/) - : **salias()** Creates an alias whith sudo prepended, if $EUID is not zero. Run "salias -h" for details. See also xunfunction() below. -: **selhist()** -Greps the history for the string provided as parameter and shows the numbered -findings in default pager. On exit of the pager the user is prompted for a -number. The shells readline buffer is then filled with the corresponding -command line. - -: **setenv()** -Reimplementation of the csh(1) builtin setenv. - -: **show-archive()** -Lists the contents of a (compressed) archive with the appropriate programs. -The choice is made along the filename extension. - -: **shtar()** -Lists the content of a gzipped tar archive in default pager. - -: **shzip()** -Shows the content of a zip archive in default pager. - : **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 @@ -865,24 +597,6 @@ ending. simple-extract will not delete the original archive (even on .gz,.bz2 or : **sll()** Prints details of symlinks given as arguments. -: **slow_print()** -Prints the arguments slowly by sleeping 0.08 seconds between each character. - -: **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". - -: **smart-indent()** -Indents C source code files given; uses Kernighan & Ritchie style. - -: **sshot()** -Creates directory named shots in user's home directory, if it does not yet -exist and changes current working directory to it. Then sleeps 5 seconds, -so you have plenty of time to switch desktops/windows. Then makes a screenshot -of the current desktop. The result is stored in ~/shots to a timestamped -jpg file. - : **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 @@ -908,71 +622,29 @@ Example usage: % Restart ssh ``` -: **status()** -Shows some information about current system status. - -: **swiki()** -Searches articles in the german Wikipedia for the term given as argument. - : **trans()** Translates a word from german to english (-D) or vice versa (-E). : **uchange()** Shows upstreams changelog of a given package in $PAGER. -: **udiff()** -Makes a unified diff of the command line arguments trying hard to find a -smaller set of changes. Descends recursively into subdirectories. Ignores -hows some information about current status. - -: **uopen()** -Downloads and displays a file using a suitable program for its -Content-Type. - : **uprint()** Works around the "print -l ${(u)foo}"-limitation on zsh older than 4.2. -: **urlencode()** -Takes a string as its first argument and prints it RFC 2396 URL encoded to -standard out. - : **utf2iso()** Changes every occurrence of the string UTF-8 or utf-8 in environment variables to iso885915. -: **viless()** -Vim as pager. - : **vim()** Wrapper for vim(1). It tries to set the title and hands vim the environment variable VIM_OPTIONS on the command line. So the user may define command line options, she always wants, in her .zshrc.local. -: **vman()** -Use vim(1) as manpage reader. - : **whatwhen()** Searches the history for a given pattern and lists the results by date. The first argument is the search pattern. The second and third ones are optional and denote a search range (default: -100). -: **weather()** -Retrieves and prints weather information from "http://weather.noaa.gov". -The first and only argument is the ICAO code for the desired station. -For a list of ICAO codes see -"http://en.wikipedia.org/wiki/List_of_airports_by_ICAO_code". - -: **wikide()** -Looks up the argument on Wikipedia (german). - -: **wikien()** -Looks up the argument on Wikipedia (english). - -: **wodeb()** -Searches the list of official debian packages for the term given as -first argument. The optional second argument denotes the distribution -(stable, testing or unstable) and defaults to unstable. - : **xcat()** Tries to cat(1) file(s) given as parameter(s). Always returns true. See also xunfunction() below. @@ -989,12 +661,6 @@ arguments for details. : **xunfunction()** Removes the functions salias, xcat, xsource, xunfunction and zrcautoload. -: **zg()** -Search for patterns in grml's zshrc using perl. zg takes no or exactly one -option plus a non empty pattern. Run zg without any arguments for a listing -of available command line switches. For a zshrc not in /etc/zsh, set the -GRML_ZSHRC environment variable. - : **zrcautoload()** Wrapper around the autoload builtin. Loads the definitions of functions from the file given as argument. Searches $fpath for the file. See also @@ -1063,24 +729,6 @@ available packages are fetched from the location(s) specified in /etc/apt/sources.list. An update should always be performed before an upgrade or dist-upgrade; run by sudo, if necessary. -: **calc** (//peval//) -Evaluates a perl expression (see peval() above); useful as a command line -calculator. - -: **CH** (//./configure --help//) -Lists available compilation options for building program from source. - -: **cmplayer** (//mplayer -vo fbdev//) -Video player with framebuffer as video output device, so you can watch -videos on a virtual tty. Hint: Using fbdev2 allows you to use the shell -while watching a movie. - -: **CO** (//./configure//) -Prepares compilation for building program from source. - -: **cp** (//nocorrect cp//) -cp(1) without spelling correction. - : **da** (//du -sch//) Prints the summarized disk usage of the arguments as well as a grand total in human readable format. @@ -1091,25 +739,10 @@ Builds binary or source packages from sources (See: dpkg-buildpackage(1)). : **debs-by-size** (//grep-status -FStatus -sInstalled-Size,Package -n "install ok installed" | paste -sd " \n" | sort -rn//) Prints installed Packages sorted by size (descending). -: **default** (//echo -en [ escape sequence ]//) -Sets font of xterm to "-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-15" -using escape sequence. - : **dir** (//ls -lSrah//) Lists files (including dot files) sorted by size (biggest last) in long and human readable output format. -: **fblinks** (//links2 -driver fb//) -A Web browser on the framebuffer device. So you can browse images and click -links on the virtual tty. - -: **fbmplayer** (//mplayer -vo fbdev -fs -zoom//) -Fullscreen Video player with the framebuffer as video output device. So you -can watch videos on a virtual tty. - -: **g** (//git//) -Revision control system by Linus Torvalds. - : **ge** (//grep-excuses//) Searches the testing excuses files for a specific maintainer (See: grep-excuses(1)). @@ -1117,9 +750,6 @@ grep-excuses(1)). : **grep** (//grep --color=auto//) Shows grep output in nice colors, if available. -: **GREP** (//grep -i --color=auto//) -Case insensitive grep with colored output. - : **grml-rebuildfstab** (//rebuildfstab -v -r -config//) Scans for new devices and updates /etc/fstab according to the findings. @@ -1145,16 +775,6 @@ ssh with possible man-in-the-middle attack enabled : **help-zshglob** (//H-Glob()//) Runs the function H-Glob() to expand or explain wildcards. -: **hide** (//echo -en [ escape sequence ]//) -Tries to hide xterm window using escape sequence. - -: **hidiff** (//histring -fE '^Comparing files .*|^diff .*' | histring -c yellow -fE '^\-.*' | histring -c green -fE '^\+.*'//) -If histring(1) is installed, highlight important stuff in diff(1) output. - -: **huge** (//echo -en [ escape sequence ]//) -Sets huge font in xterm ("-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15") -using escape sequence. - : **j** (//jobs -l//) Prints status of jobs in the current shell session in long format. @@ -1169,10 +789,6 @@ starting with ".". : **lad** (//ls -d .*(/)//) Lists the dot directories (not their contents) in current directory. -: **large** (//echo -en [ escape sequence ]//) -Sets large font in xterm ("-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso8859-15") -using escape sequence. - : **lh** (//ls -hAl --color=auto//) Lists files in long and human readable output format in nice colors, if available. Includes file names starting with "." except "." and @@ -1231,32 +847,15 @@ world executable (long output format). : **lsx** (//ls -l *(*)//) Lists only executable files. -: **md** (//mkdir -p//) -Creates directory including parent directories, if necessary - : **mdstat** (//cat /proc/mdstat//) Lists all active md (i.e. linux software raid) devices with some information about them. -: **medium** (//echo -en [ escape sequence ]//) -Sets medium sized font -("-misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-15") in xterm -using escape sequence. - -: **mkdir** (//nocorrect mkdir//) -mkdir(1) without spelling correction. - : **mq** (//hg -R $(readlink -f $(hg root)/.hg/patches)//) Executes the commands on the versioned patch queue from current repository. -: **mv** (//nocorrect mv//) -mv(1) without spelling correction. - -: **rd** (//rmdir//) -Short rmdir(1) (remove directory). - -: **rm** (//nocorrect rm//) -rm(1) without spelling correction. +: **rmcdir** (//'cd ..; rmdir $OLDPWD || cd $OLDPWD//) +rmdir current working directory : **screen** (///usr/bin/screen -c ${HOME}/.screenrc//) If invoking user is root, starts screen session with /etc/grml/screenrc @@ -1264,39 +863,6 @@ as config file. If invoked by a regular user, start a screen session with users .screenrc config if it exists, else use /etc/grml/screenrc_grml as configuration. -: **rw-** (//chmod 600//) -Grants read and write permission of a file to the owner and nobody else. - -: **rwx** (//chmod 700//) -Grants read, write and execute permission of a file to the owner and nobody -else. - -: **r--** (//chmod 644//) -Grants read and write permission of a file to the owner and read-only to -anybody else. - -: **r-x** (//chmod 755//) -Grants read, write and execute permission of a file to the owner and -read-only plus execute permission to anybody else. - -: **S** (//screen//) -Short for screen(1). - -: **s** (//ssh//) -Short for ssh(1). - -: **semifont** (//echo -en [ escape sequence ]//) -Sets font of xterm to -"-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15" using -escape sequence. - -: **small** (//echo -en [ escape sequence ]//) -Sets small xterm font ("6x10") using escape sequence. - -: **smartfont** (//echo -en [ escape sequence ]//) -Sets font of xterm to "-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*" using -escape sequence. - : **su** (//sudo su//) If user is running a grml live-CD, dont ask for any password, if she wants a root shell. @@ -1309,22 +875,9 @@ http://www.cl.cam.ac.uk/~mgk25/unicode.html#term). Sets mode from ISO 2022 to UTF-8 (See: http://www.cl.cam.ac.uk/~mgk25/unicode.html#term). -: **tiny** (//echo -en [ escape sequence ]//) -Sets tiny xterm font -("-misc-fixed-medium-r-normal-*-*-80-*-*-c-*-iso8859-15") using escape -sequence. - : **tlog** (//tail -f /var/log/syslog//) Prints syslog continuously (See tail(1)). -: **top10** (//print -l ? ${(o)history%% *} | uniq -c | sort -nr | head -n 10//) -Prints the ten most used shell commands. - -: **truec** (//truecrypt [ mount options ]//) -Mount a truecrypt volume with some reasonable mount options -("rw,sync,dirsync,users,uid=1000,gid=users,umask=077" and "utf8", if -available). - : **up** (//aptitude update ; aptitude safe-upgrade//) Performs a system update followed by a system upgrade using aptitude; run by sudo, if necessary. See au and ag above. @@ -1333,21 +886,12 @@ by sudo, if necessary. See au and ag above. After calling, characters of URLs as typed get automatically escaped, if necessary, to protect them from the shell. -: **0** (//return 0//) -Gives a clean prompt (i.e. without $?). - : **$(uname -r)-reboot** (//kexec -l --initrd=/boot/initrd.img-"$(uname -r)" --command-line=\"$(cat /proc/cmdline)\" /boot/vmlinuz-"$(uname -r)"//) Reboots using kexec(8) and thus reduces boot time by skipping hardware initialization of BIOS/firmware. : **...** (//cd ../..///) Changes current directory two levels higher. -: **?** (//qma zshall//) -Runs the grml script qma (quick manual access) to build the collected man -pages for the z-shell. This compressed file is kept at -~/man/zshall.txt.lzo Once it is built, the second use of the alias '?' is -fast. See "man qma" for further information. - = AUXILIARY FILES = This is a set of files, that - if they exist - can be used to customize the diff --git a/etc/grml/lsb-functions b/etc/grml/lsb-functions index d55d776..d95be1d 100644 --- a/etc/grml/lsb-functions +++ b/etc/grml/lsb-functions @@ -176,7 +176,11 @@ fi RC_NOCOLOR="${RC_NOCOLOR:-no}" # Can the terminal handle endcols? -RC_ENDCOL="yes" +if [ "${RC_NOCOLOR}" = "yes" ]; then + RC_ENDCOL="no" +else + RC_ENDCOL="yes" +fi # Setup COLS and ENDCOL so eend can line up the [ ok ] # width of [ ok ] == 7 diff --git a/etc/skel/.zshrc b/etc/skel/.zshrc index 9837a97..e9a6983 100644 --- a/etc/skel/.zshrc +++ b/etc/skel/.zshrc @@ -175,6 +175,15 @@ fi #alias -g T='|tail' #alias -g V='| vim -' +## get top 10 shell commands: +#alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10' + +## Execute \kbd{./configure} +#alias CO="./configure" + +## Execute \kbd{./configure --help} +#alias CH="./configure --help" + ## miscellaneous code ## ## Use a default width of 80 for manpages for more convenient reading @@ -194,6 +203,75 @@ fi # exec $SHELL $SHELL_ARGS "$@" #} +## get_ic() - queries imap servers for capabilities; real simple. no imaps +#ic_get() { +# emulate -L zsh +# local port +# if [[ ! -z $1 ]] ; then +# port=${2:-143} +# print "querying imap server on $1:${port}...\n"; +# print "a1 capability\na2 logout\n" | nc $1 ${port} +# else +# print "usage:\n $0 [port]" +# fi +#} + +## List all occurrences of programm in current PATH +#plap() { +# emulate -L zsh +# if [[ $# = 0 ]] ; then +# echo "Usage: $0 program" +# echo "Example: $0 zsh" +# echo "Lists all occurrences of program in the current PATH." +# else +# ls -l ${^path}/*$1*(*N) +# fi +#} + +## Find out which libs define a symbol +#lcheck() { +# if [[ -n "$1" ]] ; then +# nm -go /usr/lib/lib*.a 2>/dev/null | grep ":[[:xdigit:]]\{8\} . .*$1" +# else +# echo "Usage: lcheck " >&2 +# fi +#} + +## Download a file and display it locally +#uopen() { +# emulate -L zsh +# if ! [[ -n "$1" ]] ; then +# print "Usage: uopen \$URL/\$file">&2 +# return 1 +# else +# FILE=$1 +# MIME=$(curl --head $FILE | \ +# grep Content-Type | \ +# cut -d ' ' -f 2 | \ +# cut -d\; -f 1) +# MIME=${MIME%$'\r'} +# curl $FILE | see ${MIME}:- +# fi +#} + +## Memory overview +#memusage() { +# ps aux | awk '{if (NR > 1) print $5; +# if (NR > 2) print "+"} +# END { print "p" }' | dc +#} + +## print hex value of a number +#hex() { +# emulate -L zsh +# if [[ -n "$1" ]]; then +# printf "%x\n" $1 +# else +# print 'Usage: hex ' +# return 1 +# fi +#} + ## log out? set timeout in seconds... ## ...and do not log out in some specific terminals: #if [[ "${TERM}" == ([Exa]term*|rxvt|dtterm|screen*) ]] ; then diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 79dbc84..3fa6c5b 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -30,7 +30,7 @@ # Doing so makes sure the right people get your patches for review and # possibly inclusion. -# zsh-refcard-tag documentation: {{{ +# zsh-refcard-tag documentation: # You may notice strange looking comments in this file. # These are there for a purpose. grml's zsh-refcard can now be # automatically generated from the contents of the actual configuration @@ -101,19 +101,17 @@ # Furthermore, in 'grml-zsh-refcard.tex.in' @@INSERT-aliases@@ is # exactly the same as @@INSERT-aliases-default@@. If you want a list of # *all* aliases, for example, use @@INSERT-aliases-all@@. -#}}} -# zsh profiling {{{ +# zsh profiling # just execute 'ZSH_PROFILE_RC=1 zsh' and run 'zprof' to get the details if [[ $ZSH_PROFILE_RC -gt 0 ]] ; then zmodload zsh/zprof fi -# }}} # load .zshrc.pre to give the user the chance to overwrite the defaults [[ -r ${HOME}/.zshrc.pre ]] && source ${HOME}/.zshrc.pre -# {{{ check for version/system +# check for version/system # check for versions (compatibility reasons) is4(){ [[ $ZSH_VERSION == <4->* ]] && return 0 @@ -141,12 +139,14 @@ is43(){ } is433(){ - [[ $ZSH_VERSION == 4.3.<3->* || $ZSH_VERSION == 4.<4->* || $ZSH_VERSION == <5->* ]] && return 0 + [[ $ZSH_VERSION == 4.3.<3->* || $ZSH_VERSION == 4.<4->* \ + || $ZSH_VERSION == <5->* ]] && return 0 return 1 } is439(){ - [[ $ZSH_VERSION == 4.3.<9->* || $ZSH_VERSION == 4.<4->* || $ZSH_VERSION == <5->* ]] && return 0 + [[ $ZSH_VERSION == 4.3.<9->* || $ZSH_VERSION == 4.<4->* \ + || $ZSH_VERSION == <5->* ]] && return 0 return 1 } @@ -165,7 +165,10 @@ isgrmlcd(){ if isgrml ; then #f1# Checks whether or not you're running grml-small isgrmlsmall() { - [[ ${${${(f)"$( - # -> searches for word not in compressed files - # don't forget to quote '^', '~' and '#'! -setopt longlistjobs # display PID when suspending processes as well -setopt notify # report the status of backgrounds jobs immediately -setopt hash_list_all # Whenever a command completion is attempted, make sure \ - # the entire command path is hashed first. -setopt completeinword # not just at the end -setopt nohup # and don't kill them, either -setopt auto_pushd # make cd push the old directory onto the directory stack. -setopt nonomatch # try to avoid the 'zsh: no matches found...' -setopt nobeep # avoid "beep"ing -setopt pushd_ignore_dups # don't push the same dir twice. -setopt noglobdots # * shouldn't match dotfiles. ever. -setopt noshwordsplit # use zsh style word splitting -setopt unset # don't error out when unset parameters are used - -# }}} - -# setting some default values {{{ +# set some important options (as early as possible) + +# append history list to the history file; this is the default but we make sure +# because it's required for share_history. +setopt append_history + +# import new commands from the history file also in other zsh-session +is4 && setopt share_history + +# save each command's beginning timestamp and the duration to the history file +setopt extended_history + +# If a new command line being added to the history list duplicates an older +# one, the older command is removed from the list +is4 && setopt histignorealldups + +# remove command lines from the history list when the first character on the +# line is a space +setopt histignorespace + +# if a command is issued that can't be executed as a normal command, and the +# command is the name of a directory, perform the cd command to that directory. +setopt auto_cd + +# in order to use #, ~ and ^ for filename generation grep word +# *~(*.gz|*.bz|*.bz2|*.zip|*.Z) -> searches for word not in compressed files +# don't forget to quote '^', '~' and '#'! +setopt extended_glob + +# display PID when suspending processes as well +setopt longlistjobs + +# try to avoid the 'zsh: no matches found...' +setopt nonomatch + +# report the status of backgrounds jobs immediately +setopt notify +# whenever a command completion is attempted, make sure the entire command path +# is hashed first. +setopt hash_list_all + +# not just at the end +setopt completeinword + +# Don't send SIGHUP to background processes when the shell exits. +setopt nohup + +# make cd push the old directory onto the directory stack. +setopt auto_pushd + +# avoid "beep"ing +setopt nobeep + +# don't push the same dir twice. +setopt pushd_ignore_dups + +# * shouldn't match dotfiles. ever. +setopt noglobdots + +# use zsh style word splitting +setopt noshwordsplit + +# don't error out when unset parameters are used +setopt unset + +# setting some default values NOCOR=${NOCOR:-0} NOMENU=${NOMENU:-0} NOPRECMD=${NOPRECMD:-0} @@ -294,12 +330,9 @@ COMMAND_NOT_FOUND=${COMMAND_NOT_FOUND:-0} GRML_ZSH_CNF_HANDLER=${GRML_ZSH_CNF_HANDLER:-/usr/share/command-not-found/command-not-found} BATTERY=${BATTERY:-0} GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1} -GRML_ALWAYS_LOAD_ALL=${GRML_ALWAYS_LOAD_ALL:-0} ZSH_NO_DEFAULT_LOCALE=${ZSH_NO_DEFAULT_LOCALE:-0} -# }}} - -# utility functions {{{ +# utility functions # this function checks if a command exists and returns either true # or false. This avoids using 'which' and 'whence', which will # avoid problems with aliases for which on certain weird systems. :-) @@ -456,9 +489,7 @@ zrclocal() { return 0 } -#}}} - -# locale setup {{{ +# locale setup if (( ZSH_NO_DEFAULT_LOCALE == 0 )); then xsource "/etc/default/locale" fi @@ -470,9 +501,8 @@ done xsource "/etc/sysconfig/keyboard" TZ=$(xcat /etc/timezone) -# }}} -# {{{ set some variables +# set some variables if check_com -c vim ; then #v# export EDITOR=${EDITOR:-vim} @@ -524,15 +554,20 @@ export LESS_TERMCAP_so=$'\E[01;44;33m' export LESS_TERMCAP_ue=$'\E[0m' export LESS_TERMCAP_us=$'\E[01;32m' -MAILCHECK=30 # mailchecks -REPORTTIME=5 # report about cpu-/system-/user-time of command if running longer than 5 seconds -watch=(notme root) # watch for everyone but me and root +# mailchecks +MAILCHECK=30 + +# report about cpu-/system-/user-time of command if running longer than +# 5 seconds +REPORTTIME=5 + +# watch for everyone but me and root +watch=(notme root) # automatically remove duplicates from these arrays typeset -U path cdpath fpath manpath -# }}} -# {{{ keybindings +# keybindings if [[ "$TERM" != emacs ]] ; then [[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char [[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line @@ -606,7 +641,8 @@ bindkey '\e[B' down-line-or-search # - ## alt-backspace is already the default for backwards-delete-word ## let's also set alt-delete for deleting current word (right of cursor) #k# Kill right-side word -bindkey "3~" delete-word +bindkey '^[[3~' delete-word # Modeswitch +bindkey '^[[3;3~' delete-word # Alt_L ## use Ctrl-left-arrow and Ctrl-right-arrow for jumping to word-beginnings on the CL bindkey "\e[5C" forward-word @@ -693,9 +729,8 @@ if is439 ; then bindkey '^r' history-incremental-pattern-search-backward bindkey '^s' history-incremental-pattern-search-forward fi -# }}} -# a generic accept-line wrapper {{{ +# a generic accept-line wrapper # This widget can prevent unwanted autocorrections from command-name # to _command-name, rehash automatically on enter and call any number @@ -841,9 +876,7 @@ zle -N accept-line zle -N Accept-Line zle -N Accept-Line-HandleContext -# }}} - -# power completion - abbreviation expansion {{{ +# power completion - abbreviation expansion # power completion / abbreviation expansion / buffer expansion # see http://zshwiki.org/home/examples/zleiab for details # less risky than the global aliases but powerful as well @@ -874,7 +907,7 @@ abk=( 'co' './configure && make && sudo make install' ) -globalias() { +zleiab() { emulate -L zsh setopt extendedglob local MATCH @@ -889,11 +922,10 @@ globalias() { LBUFFER+=${abk[$MATCH]:-$MATCH} } -zle -N globalias -bindkey ",." globalias -# }}} +zle -N zleiab +bindkey ",." zleiab -# {{{ autoloading +# autoloading zrcautoload zmv # who needs mmv or rename? zrcautoload history-search-end @@ -1043,7 +1075,8 @@ if check_com -c screen || check_com -c tmux; then tmux -q capture-pane \; save-buffer -b 0 $TMPFILE \; delete-buffer -b 0 else screen -X hardcopy $TMPFILE - #screen sucks, it dumps in latin1, apparently always. so recode it to system charset + # screen sucks, it dumps in latin1, apparently always. so recode it + # to system charset check_com recode && recode latin1 $TMPFILE fi _screen_display_wordlist=( ${(QQ)$(<$TMPFILE)} ) @@ -1056,9 +1089,7 @@ if check_com -c screen || check_com -c tmux; then compdef -k _complete_screen_display complete-word '^XS' fi -# }}} - -# {{{ history +# history ZSHDIR=$HOME/.zsh @@ -1067,9 +1098,7 @@ HISTFILE=$HOME/.zsh_history isgrmlcd && HISTSIZE=500 || HISTSIZE=5000 isgrmlcd && SAVEHIST=1000 || SAVEHIST=10000 # useful for setopt append_history -# }}} - -# dirstack handling {{{ +# dirstack handling DIRSTACKSIZE=${DIRSTACKSIZE:-20} DIRSTACKFILE=${DIRSTACKFILE:-${HOME}/.zdirs} @@ -1090,9 +1119,7 @@ chpwd() { fi } -# }}} - -# directory based profiles {{{ +# directory based profiles if is433 ; then @@ -1179,9 +1206,7 @@ chpwd_functions=( ${chpwd_functions} chpwd_profiles ) fi # is433 -# }}} - -# {{{ display battery status on right side of prompt via running 'BATTERY=1 zsh' +# display battery status on right side of prompt via running 'BATTERY=1 zsh' if [[ $BATTERY -gt 0 ]] ; then if ! check_com -c acpi ; then BATTERY=0 @@ -1202,9 +1227,7 @@ if [[ $BATTERY -gt 0 ]] ; then fi fi } -# }}} - -# set colors for use in prompts {{{ +# set colors for use in prompts if zrcautoload colors && colors 2>/dev/null ; then BLUE="%{${fg[blue]}%}" RED="%{${fg_bold[red]}%}" @@ -1225,9 +1248,7 @@ else NO_COLOUR=$'%{\e[0m%}' fi -# }}} - -# gather version control information for inclusion in a prompt {{{ +# gather version control information for inclusion in a prompt if zrcautoload vcs_info; then # `vcs_info' in zsh versions 4.3.10 and below have a broken `_realpath' @@ -1264,10 +1285,7 @@ else zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat "%b${RED}:${YELLOW}%r" fi - -# }}} - -# command not found handling {{{ +# command not found handling (( ${COMMAND_NOT_FOUND} == 1 )) && function command_not_found_handler() { @@ -1278,9 +1296,7 @@ function command_not_found_handler() { return 1 } -# }}} - -# {{{ set prompt +# set prompt if zrcautoload promptinit && promptinit 2>/dev/null ; then promptinit # people should be able to use their favourite prompt else @@ -1325,7 +1341,7 @@ is4 && [[ $NOPRECMD -eq 0 ]] && precmd () { fi fi # just use DONTSETRPROMPT=1 to be able to overwrite RPROMPT - if [[ $DONTSETRPROMPT -eq 0 ]] ; then + if [[ ${DONTSETRPROMPT:-} -eq 0 ]] ; then if [[ $BATTERY -gt 0 ]] ; then # update battery (dropped into $PERCENT) information battery @@ -1336,7 +1352,7 @@ is4 && [[ $NOPRECMD -eq 0 ]] && precmd () { fi # adjust title of xterm # see http://www.faqs.org/docs/Linux-mini/Xterm-Title.html - [[ ${NOTITLE} -gt 0 ]] && return 0 + [[ ${NOTITLE:-} -gt 0 ]] && return 0 case $TERM in (xterm*|rxvt*) set_title ${(%):-"%n@%m: %~"} @@ -1369,9 +1385,13 @@ preexec () { } EXITCODE="%(?..%?%1v )" -PS2='\`%_> ' # secondary prompt, printed when the shell needs more information to complete a command. -PS3='?# ' # selection prompt used within a select loop. -PS4='+%N:%i:%_> ' # the execution trace prompt (setopt xtrace). default: '+%N:%i>' +# secondary prompt, printed when the shell needs more information to complete a +# command. +PS2='\`%_> ' +# selection prompt used within a select loop. +PS3='?# ' +# the execution trace prompt (setopt xtrace). default: '+%N:%i>' +PS4='+%N:%i:%_> ' # set variable debian_chroot if running in a chroot with /etc/debian_chroot if [[ -z "$debian_chroot" ]] && [[ -r /etc/debian_chroot ]] ; then @@ -1382,8 +1402,9 @@ fi if [[ "$TERM" == dumb ]] ; then PROMPT="${EXITCODE}${debian_chroot:+($debian_chroot)}%n@%m %40<...<%B%~%b%<< " else - # only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended prompt - # set variable identifying the chroot you work in (used in the prompt below) + # only if $GRMLPROMPT is set (e.g. via 'GRMLPROMPT=1 zsh') use the extended + # prompt set variable identifying the chroot you work in (used in the + # prompt below) if [[ $GRMLPROMPT -gt 0 ]] ; then PROMPT="${RED}${EXITCODE}${CYAN}[%j running job(s)] ${GREEN}{history#%!} ${RED}%(3L.+.) ${BLUE}%* %D ${BLUE}%n${NO_COLOUR}@%m %40<...<%B%~%b%<< " @@ -1403,9 +1424,8 @@ PROMPT="${PROMPT}"'${vcs_info_msg_0_}'"%# " if [[ -n "$GRML_CHROOT" ]] ; then PROMPT="%{$fg[red]%}(CHROOT) %{$fg_bold[red]%}%n%{$fg_no_bold[white]%}@%m %40<...<%B%~%b%<< %\# " fi -# }}} -# {{{ 'hash' some often used directories +# 'hash' some often used directories #d# start hash -d deb=/var/cache/apt/archives hash -d doc=/usr/share/doc @@ -1417,25 +1437,30 @@ hash -d templ=/usr/share/doc/grml-templates hash -d tt=/usr/share/doc/texttools-doc hash -d www=/var/www #d# end -# }}} -# {{{ some aliases +# some aliases if check_com -c screen ; then if [[ $UID -eq 0 ]] ; then - [[ -r /etc/grml/screenrc ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc" + if [[ -r /etc/grml/screenrc ]]; then + alias screen="${commands[screen]} -c /etc/grml/screenrc" + fi elif [[ -r $HOME/.screenrc ]] ; then alias screen="${commands[screen]} -c $HOME/.screenrc" else if [[ -r /etc/grml/screenrc_grml ]]; then alias screen="${commands[screen]} -c /etc/grml/screenrc_grml" else - [[ -r /etc/grml/screenrc ]] && alias screen="${commands[screen]} -c /etc/grml/screenrc" + if [[ -r /etc/grml/screenrc ]]; then + alias screen="${commands[screen]} -c /etc/grml/screenrc" + fi fi fi fi # do we have GNU ls with color-support? -if ls --help 2>/dev/null | grep -- --color= >/dev/null && [[ "$TERM" != dumb ]] ; then +if ls --help 2>/dev/null | grep -- --color= >/dev/null \ + && [[ "$TERM" != dumb ]] +then #a1# execute \kbd{@a@}:\quad ls with colors alias ls='ls -b -CF --color=auto' #a1# execute \kbd{@a@}:\quad list all files, with colors @@ -1462,16 +1487,6 @@ if [[ -x /sbin/kexec ]] && [[ -r /proc/cmdline ]] ; then alias "$(uname -r)-reboot"="kexec -l --initrd=/boot/initrd.img-"$(uname -r)" --command-line=\"$(cat /proc/cmdline)\" /boot/vmlinuz-"$(uname -r)"" fi -alias cp='nocorrect cp' # no spelling correction on cp -alias mkdir='nocorrect mkdir' # no spelling correction on mkdir -alias mv='nocorrect mv' # no spelling correction on mv -alias rm='nocorrect rm' # no spelling correction on rm - -#a1# Execute \kbd{rmdir} -alias rd='rmdir' -#a1# Execute \kbd{mkdir} -alias md='mkdir' - # see http://www.cl.cam.ac.uk/~mgk25/unicode.html#term for details alias term2iso="echo 'Setting terminal to iso mode' ; print -n '\e%@'" alias term2utf="echo 'Setting terminal to utf-8 mode'; print -n '\e%G'" @@ -1496,31 +1511,12 @@ iso2utf() { fi } -# I like clean prompt, so provide simple way to get that -check_com 0 || alias 0='return 0' - -# for really lazy people like mika: -check_com S &>/dev/null || alias S='screen' -check_com s &>/dev/null || alias s='ssh' - # especially for roadwarriors using GNU screen and ssh: if ! check_com asc &>/dev/null ; then asc() { autossh -t "$@" 'screen -RdU' } compdef asc=ssh fi -# get top 10 shell commands: -alias top10='print -l ${(o)history%% *} | uniq -c | sort -nr | head -n 10' - -# truecrypt; use e.g. via 'truec /dev/ice /mnt/ice' or 'truec -i' -if check_com -c truecrypt ; then - if isutfenv ; then - alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077,utf8" ' - else - alias truec='truecrypt --mount-options "rw,sync,dirsync,users,uid=1000,gid=users,umask=077" ' - fi -fi - #f1# Hints for the use of zsh on grml zsh-help() { print "$bg[white]$fg[black] @@ -1548,10 +1544,6 @@ very lately. System wide configuration without touching configuration files of grml can take place in /etc/zsh/zshrc.local. -Normally, the root user (EUID == 0) does not get the whole grml setup. -If you want to force the whole setup for that user, too, set -GRML_ALWAYS_LOAD_ALL=1 in .zshrc.pre in root'\''s home directory. - For information regarding zsh start at http://grml.org/zsh/ Take a look at grml'\''s zsh refcard: @@ -1569,7 +1561,8 @@ Basically meant for bash users who are not used to the power of the zsh yet. :) "NOCOR=1 zsh" => deactivate automatic correction - "NOMENU=1 zsh" => do not use auto menu completion (note: use ctrl-d for completion instead!) + "NOMENU=1 zsh" => do not use auto menu completion + (note: use ctrl-d for completion instead!) "NOPRECMD=1 zsh" => disable the precmd + preexec commands (set GNU screen title) "NOTITLE=1 zsh" => disable setting the title of xterms without disabling preexec() and precmd() completely @@ -1616,26 +1609,6 @@ if [[ -r /etc/debian_version ]] ; then #a3# Execute \kbd{grep-excuses} alias ge='grep-excuses' - # debian upgrade - #f3# Execute \kbd{apt-get update \&\& }\\&\quad \kbd{apt-get dist-upgrade} - upgrade() { - emulate -L zsh - if [[ -z $1 ]] ; then - $SUDO apt-get update - $SUDO apt-get -u upgrade - else - ssh $1 $SUDO apt-get update - # ask before the upgrade - local dummy - ssh $1 $SUDO apt-get --no-act upgrade - echo -n 'Process the upgrade?' - read -q dummy - if [[ $dummy == "y" ]] ; then - ssh $1 $SUDO apt-get -u upgrade --yes - fi - fi - } - # get a root shell as normal user in live-cd mode: if isgrmlcd && [[ $UID -ne 0 ]] ; then alias su="sudo su" @@ -1668,44 +1641,13 @@ EOMESS fi fi -# get_tw_cli has been renamed into get_3ware -if check_com -c get_3ware ; then - get_tw_cli() { - echo 'Warning: get_tw_cli has been renamed into get_3ware. Invoking get_3ware for you.'>&2 - get_3ware - } -fi - -# I hate lacking backward compatibility, so provide an alternative therefore -if ! check_com -c apache2-ssl-certificate ; then - - apache2-ssl-certificate() { - - print 'Debian does not ship apache2-ssl-certificate anymore (see #398520). :(' - print 'You might want to take a look at Debian the package ssl-cert as well.' - print 'To generate a certificate for use with apache2 follow the instructions:' - - echo ' - -export RANDFILE=/dev/random -mkdir /etc/apache2/ssl/ -openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem -chmod 600 /etc/apache2/ssl/apache.pem - -Run "grml-tips ssl-certificate" if you need further instructions. -' - } -fi -# }}} - -# {{{ Use hard limits, except for a smaller stack and no core dumps +# Use hard limits, except for a smaller stack and no core dumps unlimit is425 && limit stack 8192 isgrmlcd && limit core 0 # important for a live-cd-system limit -s -# }}} -# {{{ completion system +# completion system # called later (via is4 && grmlcomp) # note: use 'zstyle' for getting current settings @@ -1834,7 +1776,7 @@ grmlcomp() { [[ -d $ZSHDIR/cache ]] && zstyle ':completion:*' use-cache yes && \ zstyle ':completion::complete:*' cache-path $ZSHDIR/cache/ - # host completion /* add brackets as vim can't parse zsh's complex cmdlines 8-) {{{ */ + # host completion if is42 ; then [[ -r ~/.ssh/known_hosts ]] && _ssh_hosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[\|]*}%%\ *}%%,*}) || _ssh_hosts=() [[ -r /etc/hosts ]] && : ${(A)_etc_hosts:=${(s: :)${(ps:\t:)${${(f)~~"$(' ; return 1 } -} - -# calculate (or eval at all ;-)) with perl => p[erl-]eval -# hint: also take a look at zcalc -> 'autoload zcalc' -> 'man zshmodules | less -p MATHFUNC' -peval() { - [[ -n "$1" ]] && CALC="$*" || print "Usage: calc [expression]" - perl -e "print eval($CALC),\"\n\";" -} -functions peval &>/dev/null && alias calc=peval - -# just press 'asdf' keys to toggle between dvorak and us keyboard layout -aoeu() { - echo -n 'Switching to us keyboard layout: ' - [[ -z "$DISPLAY" ]] && $SUDO loadkeys us &>/dev/null || setxkbmap us &>/dev/null - echo 'Done' -} -asdf() { - echo -n 'Switching to dvorak keyboard layout: ' - [[ -z "$DISPLAY" ]] && $SUDO loadkeys dvorak &>/dev/null || setxkbmap dvorak &>/dev/null - echo 'Done' -} -# just press 'asdf' key to toggle from neon layout to us keyboard layout -uiae() { - echo -n 'Switching to us keyboard layout: ' - setxkbmap us && echo 'Done' || echo 'Failed' -} - -# set up an ipv6 tunnel -ipv6-tunnel() { - emulate -L zsh - case $1 in - start) - if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then - print 'ipv6 tunnel already set up, nothing to be done.' - print 'execute: "ifconfig sit1 down ; ifconfig sit0 down" to remove ipv6-tunnel.' ; return 1 - else - [[ -n "$PUBLIC_IP" ]] || \ - local PUBLIC_IP=$(ifconfig $(route -n | awk '/^0\.0\.0\.0/{print $8; exit}') | \ - awk '/inet addr:/ {print $2}' | tr -d 'addr:') - - [[ -n "$PUBLIC_IP" ]] || { print 'No $PUBLIC_IP set and could not determine default one.' ; return 1 } - local IPV6ADDR=$(printf "2002:%02x%02x:%02x%02x:1::1" $(print ${PUBLIC_IP//./ })) - print -n "Setting up ipv6 tunnel $IPV6ADDR via ${PUBLIC_IP}: " - ifconfig sit0 tunnel ::192.88.99.1 up - ifconfig sit1 add "$IPV6ADDR" && print done || print failed - fi - ;; - status) - if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then - print 'ipv6 tunnel available' ; return 0 - else - print 'ipv6 tunnel not available' ; return 1 - fi - ;; - stop) - if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then - print -n 'Stopping ipv6 tunnel (sit0 + sit1): ' - ifconfig sit1 down ; ifconfig sit0 down && print done || print failed - else - print 'No ipv6 tunnel found, nothing to be done.' ; return 1 - fi - ;; - *) - print "Usage: ipv6-tunnel [start|stop|status]">&2 ; return 1 - ;; - esac -} - -# run dhclient for wireless device -iwclient() { - sudo dhclient "$(wavemon -d | awk '/device/{print $3}')" -} - -# spawn a minimally set up mksh - useful if you want to umount /usr/. -minimal-shell() { - emulate -L zsh - local shell="/bin/mksh" - - if [[ ! -x ${shell} ]]; then - printf '`%s'\'' not available, giving up.\n' ${shell} >&2 - return 1 - fi - - exec env -i ENV="/etc/minimal-shellrc" HOME="$HOME" TERM="$TERM" ${shell} -} - # a wrapper for vim, that deals with title setting # VIM_OPTIONS # set this array to a set of options to vim you always want @@ -2359,63 +2192,6 @@ bk() { cp -a "$1" "${1}_$(date --iso-8601=seconds)" } -#f1# grep for patterns in grml's zsh setup -zg() { -#{{{ - LANG=C perl -e ' - -sub usage { - print "usage: zg -[anr] \n"; - print " Search for patterns in grml'\''s zshrc.\n"; - print " zg takes no or exactly one option plus a non empty pattern.\n\n"; - print " options:\n"; - print " -- no options (use if your pattern starts in with a dash.\n"; - print " -a search for the pattern in all code regions\n"; - print " -n search for the pattern in non-root code only\n"; - print " -r search in code for everyone (also root) only\n\n"; - print " The default is -a for non-root users and -r for root.\n\n"; - print " If you installed the zshrc to a non-default locations (ie *NOT*\n"; - print " in /etc/zsh/zshrc) do: export GRML_ZSHRC=\$HOME/.zshrc\n"; - print " ...in case you copied the file to that location.\n\n"; - exit 1; -} - -if ($ENV{GRML_ZSHRC} ne "") { - $RC = $ENV{GRML_ZSHRC}; -} else { - $RC = "/etc/zsh/zshrc"; -} - -usage if ($#ARGV < 0 || $#ARGV > 1); -if ($> == 0) { $mode = "allonly"; } -else { $mode = "all"; } - -$opt = $ARGV[0]; -if ($opt eq "--") { shift; } -elsif ($opt eq "-a") { $mode = "all"; shift; } -elsif ($opt eq "-n") { $mode = "nonroot"; shift; } -elsif ($opt eq "-r" ) { $mode = "allonly"; shift; } -elsif ($opt =~ m/^-/ || $#ARGV > 0) { usage(); } - -$pattern = $ARGV[0]; -usage() if ($pattern eq ""); - -open FH, "<$RC" or die "zg: Could not open $RC: $!\n"; -while ($line = ) { - chomp $line; - if ($line =~ m/^#:grep:marker:for:mika:/) { $markerfound = 1; next; } - next if ($mode eq "nonroot" && markerfound == 0); - break if ($mode eq "allonly" && markerfound == 1); - print $line, "\n" if ($line =~ /$pattern/); -} -close FH; -exit 0; - - ' -- "$@" -#}}} - return $? -} - ssl_hashes=( sha512 sha256 sha1 md5 ) for sh in ${ssl_hashes}; do @@ -2451,69 +2227,24 @@ ssl-cert-info() { ssl-cert-fingerprints $1 } -# }}} - -# {{{ make sure our environment is clean regarding colors +# make sure our environment is clean regarding colors for color in BLUE RED GREEN CYAN YELLOW MAGENTA WHITE ; unset $color -# }}} -# "persistent history" {{{ +# "persistent history" # just write important commands you always need to ~/.important_commands if [[ -r ~/.important_commands ]] ; then fc -R ~/.important_commands fi -# }}} # load the lookup subsystem if it's available on the system zrcautoload lookupinit && lookupinit -#:grep:marker:for:mika: :-) -### non-root (EUID != 0) code below -### - -if (( GRML_ALWAYS_LOAD_ALL == 0 )) && (( $EUID == 0 )) ; then - zrclocal - return 0 -fi - -# variables {{{ +# variables # set terminal property (used e.g. by msgid-chooser) export COLORTERM="yes" -# set default browser -if [[ -z "$BROWSER" ]] ; then - if [[ -n "$DISPLAY" ]] ; then - #v# If X11 is running - check_com -c firefox && export BROWSER=firefox - else - #v# If no X11 is running - check_com -c w3m && export BROWSER=w3m - fi -fi - -#m# v QTDIR \kbd{/usr/share/qt[34]}\quad [for non-root only] -[[ -d /usr/share/qt3 ]] && export QTDIR=/usr/share/qt3 -[[ -d /usr/share/qt4 ]] && export QTDIR=/usr/share/qt4 - -# support running 'jikes *.java && jamvm HelloWorld' OOTB: -#v# [for non-root only] -[[ -f /usr/share/classpath/glibj.zip ]] && export JIKESPATH=/usr/share/classpath/glibj.zip -# }}} - -# aliases {{{ - -# Xterm resizing-fu. -# Based on http://svn.kitenet.net/trunk/home-full/.zshrc?rev=11710&view=log (by Joey Hess) -alias hide='echo -en "\033]50;nil2\007"' -alias tiny='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-80-*-*-c-*-iso8859-15\007"' -alias small='echo -en "\033]50;6x10\007"' -alias medium='echo -en "\033]50;-misc-fixed-medium-r-normal--13-120-75-75-c-80-iso8859-15\007"' -alias default='echo -e "\033]50;-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-15\007"' -alias large='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-150-*-*-c-*-iso8859-15\007"' -alias huge='echo -en "\033]50;-misc-fixed-medium-r-normal-*-*-210-*-*-c-*-iso8859-15\007"' -alias smartfont='echo -en "\033]50;-artwiz-smoothansi-*-*-*-*-*-*-*-*-*-*-*-*\007"' -alias semifont='echo -en "\033]50;-misc-fixed-medium-r-semicondensed-*-*-120-*-*-*-*-iso8859-15\007"' +# aliases # general #a2# Execute \kbd{du -sch} @@ -2521,12 +2252,6 @@ alias da='du -sch' #a2# Execute \kbd{jobs -l} alias j='jobs -l' -# compile stuff -#a2# Execute \kbd{./configure} -alias CO="./configure" -#a2# Execute \kbd{./configure --help} -alias CH="./configure --help" - # listing stuff #a2# Execute \kbd{ls -lSrah} alias dir="ls -lSrah" @@ -2559,27 +2284,9 @@ alias lsnewdir="ls -rthdl *(/om[1,10]) .*(D/om[1,10])" #a2# Display the ten oldest directories and ten oldest .directories alias lsolddir="ls -rthdl *(/Om[1,10]) .*(D/Om[1,10])" -# chmod -#a2# Execute \kbd{chmod 600} -alias rw-='chmod 600' -#a2# Execute \kbd{chmod 700} -alias rwx='chmod 700' -#m# a2 r-{}- Execute \kbd{chmod 644} -alias r--='chmod 644' -#a2# Execute \kbd{chmod 755} -alias r-x='chmod 755' - # some useful aliases -#a2# Execute \kbd{mkdir -o} -alias md='mkdir -p' - -# console stuff -#a2# Execute \kbd{mplayer -vo fbdev} -alias cmplayer='mplayer -vo fbdev' -#a2# Execute \kbd{mplayer -vo fbdev -fs -zoom} -alias fbmplayer='mplayer -vo fbdev -fs -zoom' -#a2# Execute \kbd{links2 -driver fb} -alias fblinks='links2 -driver fb' +#a2# Remove current empty directory. Execute \kbd{cd ..; rmdir $OLDCWD} +alias rmcdir='cd ..; rmdir $OLDPWD || cd $OLDPWD' #a2# ssh with StrictHostKeyChecking=no \\&\quad and UserKnownHostsFile unset alias insecssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"' @@ -2588,9 +2295,6 @@ alias insecscp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/nu # simple webserver check_com -c python && alias http="python -m SimpleHTTPServer" -# Use 'g' instead of 'git': -check_com g || alias g='git' - # work around non utf8 capable software in utf environment via $LANG and luit if check_com isutfenv && check_com luit ; then if check_com -c mrxvt ; then @@ -2608,164 +2312,21 @@ if check_com isutfenv && check_com luit ; then alias centericq="LANG=${LANG/(#b)(*)[.@]*/$match[1].iso885915} luit centericq" fi fi -# }}} - -# useful functions {{{ - -# searching -#f4# Search for newspostings from authors -agoogle() { ${=BROWSER} "http://groups.google.com/groups?as_uauthors=$*" ; } -#f4# Search Debian Bug Tracking System -debbug() { - emulate -L zsh - setopt extendedglob - if [[ $# -eq 1 ]]; then - case "$1" in - ([0-9]##) - ${=BROWSER} "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=$1" - ;; - (*@*) - ${=BROWSER} "http://bugs.debian.org/cgi-bin/pkgreport.cgi?submitter=$1" - ;; - (*) - ${=BROWSER} "http://bugs.debian.org/$*" - ;; - esac - else - print "$0 needs one argument" - return 1 - fi -} -#f4# Search Debian Bug Tracking System in mbox format -debbugm() { - emulate -L zsh - bts show --mbox $1 -} -#f4# Search DMOZ -dmoz() { - emulate -L zsh - ${=BROWSER} http://search.dmoz.org/cgi-bin/search\?search=${1// /_} -} -#f4# Search German Wiktionary -dwicti() { - emulate -L zsh - ${=BROWSER} http://de.wiktionary.org/wiki/${(C)1// /_} -} -#f4# Search English Wiktionary -ewicti() { - emulate -L zsh - ${=BROWSER} http://en.wiktionary.org/wiki/${(C)1// /_} -} -#f4# Search Google Groups -ggogle() { - emulate -L zsh - ${=BROWSER} "http://groups.google.com/groups?q=$*" -} -#f4# Search Google -google() { - emulate -L zsh - ${=BROWSER} "http://www.google.com/search?&num=100&q=$*" -} -#f4# Search Google Groups for MsgID -mggogle() { - emulate -L zsh - ${=BROWSER} "http://groups.google.com/groups?selm=$*" -} -#f4# Search Netcraft -netcraft(){ - emulate -L zsh - ${=BROWSER} "http://toolbar.netcraft.com/site_report?url=$1" -} -#f4# Use German Wikipedia's full text search -swiki() { - emulate -L zsh - ${=BROWSER} http://de.wikipedia.org/wiki/Spezial:Search/${(C)1} -} -#f4# search \kbd{dict.leo.org} -oleo() { - emulate -L zsh - ${=BROWSER} "http://dict.leo.org/?search=$*" -} -#f4# Search German Wikipedia -wikide() { - emulate -L zsh - ${=BROWSER} http://de.wikipedia.org/wiki/"${(C)*}" -} -#f4# Search English Wikipedia -wikien() { - emulate -L zsh - ${=BROWSER} http://en.wikipedia.org/wiki/"${(C)*}" -} -#f4# Search official debs -wodeb() { - emulate -L zsh - ${=BROWSER} "http://packages.debian.org/search?keywords=$1&searchon=contents&suite=${2:=unstable}§ion=all" -} -#m# f4 gex() Exact search via Google -check_com google && gex () { - google "\"[ $1]\" $*" -} +# useful functions -# misc #f5# Backup \kbd{file {\rm to} file\_timestamp} bk() { emulate -L zsh cp -b $1 $1_`date --iso-8601=m` } -#f5# Copied diff -cdiff() { - emulate -L zsh - diff -crd "$@" | egrep -v "^Only in |^Binary files " -} + #f5# cd to directoy and list files cl() { emulate -L zsh cd $1 && ls -a } -#f5# Cvs add -cvsa() { - emulate -L zsh - cvs add $* && cvs com -m 'initial checkin' $* -} -#f5# Cvs diff -cvsd() { - emulate -L zsh - cvs diff -N $* |& $PAGER -} -#f5# Cvs log -cvsl() { - emulate -L zsh - cvs log $* |& $PAGER -} -#f5# Cvs update -cvsq() { - emulate -L zsh - cvs -nq update -} -#f5# Rcs2log -cvsr() { - emulate -L zsh - rcs2log $* | $PAGER -} -#f5# Cvs status -cvss() { - emulate -L zsh - cvs status -v $* -} -#f5# Disassemble source files using gcc and as -disassemble(){ - emulate -L zsh - gcc -pipe -S -o - -O -g $* | as -aldh -o /dev/null -} -#f5# Firefox remote control - open given URL -fir() { - if [ -e /etc/debian_version ]; then - firefox -a iceweasel -remote "openURL($1)" || firefox ${1}& - else - firefox -a firefox -remote "openURL($1)" || firefox ${1}& - fi -} + # smart cd function, allows switching to /etc when running 'cd /etc/fstab' cd() { if (( ${#argv} == 1 )) && [[ -f ${1} ]]; then @@ -2778,9 +2339,10 @@ cd() { } #f5# Create Directoy and \kbd{cd} to it -mcd() { +mkcd() { mkdir -p "$@" && cd "$@" } + #f5# Create temporary directory and \kbd{cd} to it cdt() { local t @@ -2788,10 +2350,6 @@ cdt() { echo "$t" builtin cd "$t" } -#f5# Unified diff to timestamped outputfile -mdiff() { - diff -udrP "$1" "$2" > diff.`date "+%Y-%m-%d"`."$1" -} #f5# Create directory under cursor or the selected area # Press ctrl-xM to create the directory under the cursor or the selected area. @@ -2827,93 +2385,6 @@ inplaceMkDirs() { #k# mkdir -p from string under cursor or marked area zle -N inplaceMkDirs && bindkey '^XM' inplaceMkDirs -#f5# Memory overview -memusage() { - ps aux | awk '{if (NR > 1) print $5; if (NR > 2) print "+"} END { print "p" }' | dc -} -#f5# Show contents of gzipped tar file -shtar() { - emulate -L zsh - gunzip -c $1 | tar -tf - -- | $PAGER -} -#f5# Show contents of zip file -shzip() { - emulate -L zsh - unzip -l $1 | $PAGER -} -#f5# Unified diff -udiff() { - emulate -L zsh - diff -urd $* | egrep -v "^Only in |^Binary files " -} -#f5# (Mis)use \kbd{vim} as \kbd{less} -viless() { - emulate -L zsh - vim --cmd 'let no_plugin_maps = 1' -c "so \$VIMRUNTIME/macros/less.vim" "${@:--}" -} - -# Function Usage: uopen $URL/$file -#f5# Download a file and display it locally -uopen() { - emulate -L zsh - if ! [[ -n "$1" ]] ; then - print "Usage: uopen \$URL/\$file">&2 - return 1 - else - FILE=$1 - MIME=$(curl --head $FILE | grep Content-Type | cut -d ' ' -f 2 | cut -d\; -f 1) - MIME=${MIME%$'\r'} - curl $FILE | see ${MIME}:- - fi -} - -# Function Usage: doc packagename -#f5# \kbd{cd} to /usr/share/doc/\textit{package} -doc() { - emulate -L zsh - cd /usr/share/doc/$1 && ls -} -_doc() { _files -W /usr/share/doc -/ } -check_com compdef && compdef _doc doc - -#f5# Make screenshot -sshot() { - [[ ! -d ~/shots ]] && mkdir ~/shots - #cd ~/shots ; sleep 5 ; import -window root -depth 8 -quality 80 `date "+%Y-%m-%d--%H:%M:%S"`.png - cd ~/shots ; sleep 5; import -window root shot_`date --iso-8601=m`.jpg -} - -# list images only -limg() { - local -a images - images=( *.{jpg,gif,png}(.N) ) - - if [[ $#images -eq 0 ]] ; then - print "No image files found" - else - ls "$images[@]" - fi -} - -#f5# Create PDF file from source code -makereadable() { - emulate -L zsh - output=$1 - shift - a2ps --medium A4dj -E -o $output $* - ps2pdf $output -} - -# zsh with perl-regex - use it e.g. via: -# regcheck '\s\d\.\d{3}\.\d{3} Euro' ' 1.000.000 Euro' -#f5# Checks whether a regex matches or not.\\&\quad Example: \kbd{regcheck '.\{3\} EUR' '500 EUR'} -regcheck() { - emulate -L zsh - zmodload -i zsh/pcre - pcre_compile $1 && \ - pcre_match $2 && echo "regex matches" || echo "regex does not match" -} - #f5# List files which have been accessed within the last {\it n} days, {\it n} defaults to 1 accessed() { emulate -L zsh @@ -2934,84 +2405,9 @@ modified() { # modified() was named new() in earlier versions, add an alias for backwards compatibility check_com new || alias new=modified -#f5# Grep in history -greph() { - emulate -L zsh - history 0 | grep $1 -} # use colors when GNU grep with color-support #a2# Execute \kbd{grep -{}-color=auto} (grep --help 2>/dev/null |grep -- --color) >/dev/null && alias grep='grep --color=auto' -#a2# Execute \kbd{grep -i -{}-color=auto} -alias GREP='grep -i --color=auto' - -#f5# Watch manpages in a stretched style -man2() { PAGER='dash -c "sed G | /usr/bin/less"' command man "$@" ; } - -# usage example: 'lcheck strcpy' -#f5# Find out which libs define a symbol -lcheck() { - if [[ -n "$1" ]] ; then - nm -go /usr/lib/lib*.a 2>/dev/null | grep ":[[:xdigit:]]\{8\} . .*$1" - else - echo "Usage: lcheck " >&2 - fi -} - -#f5# Clean up directory - remove well known tempfiles -purge() { - emulate -L zsh - setopt HIST_SUBST_PATTERN - local -a TEXTEMPFILES GHCTEMPFILES PYTEMPFILES FILES - TEXTEMPFILES=(*.tex(N:s/%tex/'(log|toc|aux|nav|snm|out|tex.backup|bbl|blg|bib.backup|vrb|lof|lot|hd|idx)(N)'/)) - GHCTEMPFILES=(*.(hs|lhs)(N:r:s/%/'.(hi|hc|(p|u|s)_(o|hi))(N)'/)) - PYTEMPFILES=(*.py(N:s/%py/'(pyc|pyo)(N)'/)) - LONELY_MOOD_FILES=((*.mood)(.NDe:'local -a AF;AF=( ${${REPLY#.}%mood}(mp3|flac|ogg|asf|wmv|aac)(N) ); [[ -z "$AF" ]]':)) - ZSH_COMPILED=(*.zwc(.NDe:'[[ -f ${REPLY%.zwc} && ${REPLY%.zwc} -nt ${REPLY} ]]':)) - FILES=(*~(.N) \#*\#(.N) *.o(.N) a.out(.N) (*.|)core(.N) *.cmo(.N) *.cmi(.N) .*.swp(.N) *.(orig|rej)(.DN) *.dpkg-(old|dist|new)(DN) ._(cfg|mrg)[0-9][0-9][0-9][0-9]_*(N) ${~TEXTEMPFILES} ${~GHCTEMPFILES} ${~PYTEMPFILES} ${LONELY_MOOD_FILES} ${ZSH_COMPILED} ) - local NBFILES=${#FILES} - local CURDIRSUDO="" - [[ ! -w ./ ]] && CURDIRSUDO=$SUDO - if [[ $NBFILES > 0 ]] ; then - print -l $FILES - local ans - echo -n "Remove these files? [y/n] " - read -q ans; echo - if [[ $ans == "y" ]] ; then - $CURDIRSUDO rm ${FILES} - echo ">> $PWD purged, $NBFILES files removed" - else - echo "Ok. .. then not.." - fi - fi -} - -#f5# show labels and uuids of disk devices -if is439 && [[ -d /dev/disk/by-id/ ]]; then - lsdisk() { - emulate -L zsh - setopt extendedglob - local -a -U disks - local -A mountinfo - disks=( /dev/disk/by-id/*(@:A) ) - [[ -r /proc/mounts ]] && for cline ( "${(f)$(}/${dev:t}/size(N) ) \ - print -f " Size: %.3f GiB (%d Byte)\n" $(($(<$sysdevsize)/(2.0*1024.0*1024.0))) $(($(<$sysdevsize)*512)) - - print -f " Id: %s\n" /dev/disk/by-id/*(@e/'[[ ${REPLY:A} == $dev ]]'/N:t) - done - } -fi - -#f5# run command or function in a list of directories -rundirs() { - local d CMD STARTDIR=$PWD - CMD=$1; shift - ( for d ($@) {cd -q $d && { print cd $d; ${(z)CMD} ; cd -q $STARTDIR }} ) -} # Translate DE<=>EN # 'translate' looks up fot a word in a file with language-to-language @@ -3039,42 +2435,6 @@ trans() { esac } -#f5# List all occurrences of programm in current PATH -plap() { - emulate -L zsh - if [[ $# = 0 ]] ; then - echo "Usage: $0 program" - echo "Example: $0 zsh" - echo "Lists all occurrences of program in the current PATH." - else - ls -l ${^path}/*$1*(*N) - fi -} - -# Found in the mailinglistarchive from Zsh (IIRC ~1996) -#f5# Select items for specific command(s) from history -selhist() { - emulate -L zsh - local TAB=$'\t'; - (( $# < 1 )) && { - echo "Usage: $0 command" - return 1 - }; - cmd=(${(f)"$(grep -w $1 $HISTFILE | sort | uniq | pr -tn)"}) - print -l $cmd | less -F - echo -n "enter number of desired command [1 - $(( ${#cmd[@]} - 1 ))]: " - local answer - read answer - print -z "${cmd[$answer]#*$TAB}" -} - -# Use vim to convert plaintext to HTML -#f5# Transform files to html with highlighting -2html() { - emulate -L zsh - vim -u NONE -n -c ':syntax on' -c ':so $VIMRUNTIME/syntax/2html.vim' -c ':wqa' $1 &>/dev/null -} - # Usage: simple-extract # Using option -d deletes the original archive file. #f5# Smart archive extractor @@ -3180,7 +2540,7 @@ simple-extract() { elif [[ "$ARCHIVE" == (#s)(https|http|ftp)://* ]] ; then if check_com curl; then - WGET_CMD="curl -k -s -o -" + WGET_CMD="curl -L -k -s -o -" elif check_com wget; then WGET_CMD="wget -q -O - --no-check-certificate" else @@ -3229,226 +2589,6 @@ _simple_extract() compdef _simple_extract simple-extract alias se=simple-extract -# Usage: smartcompress () -#f5# Smart archive creator -smartcompress() { - emulate -L zsh - if [[ -n $2 ]] ; then - case $2 in - tgz | tar.gz) tar -zcvf$1.$2 $1 ;; - tbz2 | tar.bz2) tar -jcvf$1.$2 $1 ;; - tar.Z) tar -Zcvf$1.$2 $1 ;; - tar) tar -cvf$1.$2 $1 ;; - gz | gzip) gzip $1 ;; - bz2 | bzip2) bzip2 $1 ;; - *) - echo "Error: $2 is not a valid compression type" - ;; - esac - else - smartcompress $1 tar.gz - fi -} - -# Usage: show-archive -#f5# List an archive's content -show-archive() { - emulate -L zsh - if [[ -f $1 ]] ; then - case $1 in - *.tar.gz) gunzip -c $1 | tar -tf - -- ;; - *.tar) tar -tf $1 ;; - *.tgz) tar -ztf $1 ;; - *.zip) unzip -l $1 ;; - *.bz2) bzless $1 ;; - *.deb) dpkg-deb --fsys-tarfile $1 | tar -tf - -- ;; - *) echo "'$1' Error. Please go away" ;; - esac - else - echo "'$1' is not a valid archive" - fi -} - -# It's shameless stolen from -#f5# Use \kbd{vim} as your manpage reader -vman() { - emulate -L zsh - if (( ${#argv} == 0 )); then - printf 'usage: vman \n' - return 1 - fi - man "$@" | col -b | view -c 'set ft=man nomod nolist' - -} - -# function readme() { $PAGER -- (#ia3)readme* } -#f5# View all README-like files in current directory in pager -readme() { - emulate -L zsh - setopt extendedglob - local files - files=(./(#i)*(read*me|lue*m(in|)ut|lies*mich)*(NDr^/=p%)) - if (($#files)) ; then - $PAGER $files - else - print 'No README files.' - fi -} - -# function ansi-colors() -#f5# Display ANSI colors -ansi-colors() { - typeset esc="\033[" line1 line2 - echo " _ _ _40 _ _ _41_ _ _ _42 _ _ 43_ _ _ 44_ _ _45 _ _ _ 46_ _ _ 47_ _ _ 49_ _" - for fore in 30 31 32 33 34 35 36 37; do - line1="$fore " - line2=" " - for back in 40 41 42 43 44 45 46 47 49; do - line1="${line1}${esc}${back};${fore}m Normal ${esc}0m" - line2="${line2}${esc}${back};${fore};1m Bold ${esc}0m" - done - echo -e "$line1\n$line2" - done -} - -#f5# Find all files in \$PATH with setuid bit set -suidfind() { ls -latg $path | grep '^...s' } - -# TODO: So, this is the third incarnation of this function!? -#f5# Reload given functions -refunc() { - for func in $argv ; do - unfunction $func - autoload $func - done -} -compdef _functions refunc - -# a small check to see which DIR is located on which server/partition. -# stolen and modified from Sven's zshrc.forall -#f5# Report diskusage of a directory -dirspace() { - emulate -L zsh - if [[ -n "$1" ]] ; then - for dir in "$@" ; do - if [[ -d "$dir" ]] ; then - ( cd $dir; echo "-<$dir>"; du -shx .; echo); - else - echo "warning: $dir does not exist" >&2 - fi - done - else - for dir in $path; do - if [[ -d "$dir" ]] ; then - ( cd $dir; echo "-<$dir>"; du -shx .; echo); - else - echo "warning: $dir does not exist" >&2 - fi - done - fi -} - -# % slow_print `cat /etc/passwd` -#f5# Slowly print out parameters -slow_print() { - for argument in "$@" ; do - for ((i = 1; i <= ${#1} ;i++)) ; do - print -n "${argument[i]}" - sleep 0.08 - done - print -n " " - done - print "" -} - -#f5# Show some status info -status() { - print - print "Date..: "$(date "+%Y-%m-%d %H:%M:%S") - print "Shell.: Zsh $ZSH_VERSION (PID = $$, $SHLVL nests)" - print "Term..: $TTY ($TERM), ${BAUD:+$BAUD bauds, }$COLUMNS x $LINES chars" - print "Login.: $LOGNAME (UID = $EUID) on $HOST" - print "System: $(cat /etc/[A-Za-z]*[_-][rv]e[lr]*)" - print "Uptime:$(uptime)" - print -} - -# Rip an audio CD -#f5# Rip an audio CD -audiorip() { - mkdir -p ~/ripps - cd ~/ripps - cdrdao read-cd --device $DEVICE --driver generic-mmc audiocd.toc - cdrdao read-cddb --device $DEVICE --driver generic-mmc audiocd.toc - echo " * Would you like to burn the cd now? (yes/no)" - read input - if [[ "$input" = "yes" ]] ; then - echo " ! Burning Audio CD" - audioburn - echo " * done." - else - echo " ! Invalid response." - fi -} - -# and burn it -#f5# Burn an audio CD (in combination with audiorip) -audioburn() { - cd ~/ripps - cdrdao write --device $DEVICE --driver generic-mmc audiocd.toc - echo " * Should I remove the temporary files? (yes/no)" - read input - if [[ "$input" = "yes" ]] ; then - echo " ! Removing Temporary Files." - cd ~ - rm -rf ~/ripps - echo " * done." - else - echo " ! Invalid response." - fi -} - -#f5# Make an audio CD from all mp3 files -mkaudiocd() { - # TODO: do the renaming more zshish, possibly with zmv() - emulate -L zsh - cd ~/ripps - for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done - for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done - for i in *.mp3; do mpg123 -w `basename $i .mp3`.wav $i; done - normalize -m *.wav - for i in *.wav; do sox $i.wav -r 44100 $i.wav resample; done -} - -#f5# Create an ISO image. You are prompted for\\&\quad volume name, filename and directory -mkiso() { - emulate -L zsh - echo " * Volume name " - read volume - echo " * ISO Name (ie. tmp.iso)" - read iso - echo " * Directory or File" - read files - mkisofs -o ~/$iso -A $volume -allow-multidot -J -R -iso-level 3 -V $volume -R $files -} - -#f5# Simple thumbnails generator -genthumbs() { - rm -rf thumb-* index.html - echo " - - - Images - - " > index.html - for f in *.(gif|jpeg|jpg|png) ; do - convert -size 100x200 "$f" -resize 100x200 thumb-"$f" - echo " " >> index.html - done - echo " - -" >> index.html -} - #f5# Set all ulimit parameters to \kbd{unlimited} allulimit() { ulimit -c unlimited @@ -3460,74 +2600,6 @@ allulimit() { ulimit -t unlimited } -#f5# RFC 2396 URL encoding in Z-Shell -urlencode() { - emulate -L zsh - setopt extendedglob - input=( ${(s::)1} ) - print ${(j::)input/(#b)([^A-Za-z0-9_.!~*\'\(\)-])/%${(l:2::0:)$(([##16]#match))}} -} - -# http://strcat.de/blog/index.php?/archives/335-Software-sauber-deinstallieren...html -#f5# Log 'make install' output -mmake() { - emulate -L zsh - [[ ! -d ~/.errorlogs ]] && mkdir ~/.errorlogs - make -n install > ~/.errorlogs/${PWD##*/}-makelog -} - -#f5# Indent source code -smart-indent() { - indent -npro -kr -i8 -ts8 -sob -l80 -ss -ncs "$@" -} - -# highlight important stuff in diff output, usage example: hg diff | hidiff -#m# a2 hidiff \kbd{histring} oneliner for diffs -check_com -c histring && \ - alias hidiff="histring -fE '^Comparing files .*|^diff .*' | histring -c yellow -fE '^\-.*' | histring -c green -fE '^\+.*'" - -# rename pictures based on information found in exif headers -#f5# Rename pictures based on information found in exif headers -exirename() { - emulate -L zsh - if [[ $# -lt 1 ]] ; then - echo 'Usage: jpgrename $FILES' >& 2 - return 1 - else - echo -n 'Checking for jhead with version newer than 1.9: ' - jhead_version=`jhead -h | grep 'used by most Digital Cameras. v.*' | awk '{print $6}' | tr -d v` - if [[ $jhead_version > '1.9' ]]; then - echo 'success - now running jhead.' - jhead -n%Y-%m-%d_%Hh%M_%f $* - else - echo 'failed - exiting.' - fi - fi -} - -# get_ic() - queries imap servers for capabilities; real simple. no imaps -ic_get() { - emulate -L zsh - local port - if [[ ! -z $1 ]] ; then - port=${2:-143} - print "querying imap server on $1:${port}...\n"; - print "a1 capability\na2 logout\n" | nc $1 ${port} - else - print "usage:\n $0 [port]" - fi -} - -# creates a Maildir/ with its {new,cur,tmp} subdirs -mkmaildir() { - emulate -L zsh - local root subdir - root=${MAILDIR_ROOT:-${HOME}/Mail} - if [[ -z ${1} ]] ; then print "Usage:\n $0 " ; return 1 ; fi - subdir=${1} - mkdir -p ${root}/${subdir}/{cur,new,tmp} -} - #f5# Change the xterm title from within GNU-screen xtrename() { emulate -L zsh @@ -3550,66 +2622,6 @@ xtrename() { return 0 } -# hl() highlighted less -# http://ft.bewatermyfriend.org/comp/data/zsh/zfunct.html -if check_com -c highlight ; then - function hl() { - emulate -L zsh - local theme lang - theme=${HL_THEME:-""} - case ${1} in - (-l|--list) - ( printf 'available languages (syntax parameter):\n\n' ; - highlight --list-langs ; ) | less -SMr - ;; - (-t|--themes) - ( printf 'available themes (style parameter):\n\n' ; - highlight --list-themes ; ) | less -SMr - ;; - (-h|--help) - printf 'usage: hl \n' - printf ' available options: --list (-l), --themes (-t), --help (-h)\n\n' - printf ' Example: hl c main.c\n' - ;; - (*) - if [[ -z ${2} ]] || (( ${#argv} > 2 )) ; then - printf 'usage: hl \n' - printf ' available options: --list (-l), --themes (-t), --help (-h)\n' - (( ${#argv} > 2 )) && printf ' Too many arguments.\n' - return 1 - fi - lang=${1%:*} - [[ ${1} == *:* ]] && [[ -n ${1#*:} ]] && theme=${1#*:} - if [[ -n ${theme} ]] ; then - highlight -O xterm256 --syntax ${lang} --style ${theme} ${2} | less -SMr - else - highlight -O ansi --syntax ${lang} ${2} | less -SMr - fi - ;; - esac - return 0 - } - # ... and a proper completion for hl() - # needs 'highlight' as well, so it fits fine in here. - function _hl_genarg() { - local expl - if [[ -prefix 1 *: ]] ; then - local themes - themes=(${${${(f)"$(LC_ALL=C highlight --list-themes)"}/ #/}:#*(Installed|Use name)*}) - compset -P 1 '*:' - _wanted -C list themes expl theme compadd ${themes} - else - local langs - langs=(${${${(f)"$(LC_ALL=C highlight --list-langs)"}/ #/}:#*(Installed|Use name)*}) - _wanted -C list languages expl languages compadd -S ':' -q ${langs} - fi - } - function _hl_complete() { - _arguments -s '1: :_hl_genarg' '2:files:_path_files' - } - compdef _hl_complete hl -fi - # TODO: # Rewrite this by either using tinyurl.com's API # or using another shortening service to comply with @@ -3651,34 +2663,8 @@ fi # fi #} -#f2# Print a specific line of file(s). -linenr () { -# {{{ - emulate -L zsh - if [ $# -lt 2 ] ; then - print "Usage: linenr [,] " ; return 1 - elif [ $# -eq 2 ] ; then - local number=$1 - local file=$2 - command ed -s $file <<< "${number}n" - else - local number=$1 - shift - for file in "$@" ; do - if [ ! -d $file ] ; then - echo "${file}:" - command ed -s $file <<< "${number}n" 2> /dev/null - else - continue - fi - done | less - fi -# }}} -} - #f2# Find history events by search pattern and list them by date. whatwhen() { -# {{{ emulate -L zsh local usage help ident format_l format_s first_char remain first last usage='USAGE: whatwhen [options] ' @@ -3723,77 +2709,9 @@ whatwhen() { fc -li -m "*${first_char}${remain}*" $first $last ;; esac -# }}} -} - -# change fluxbox keys from 'Alt-#' to 'Alt-F#' and vice versa -fluxkey-change() { - emulate -L zsh - [[ -n "$FLUXKEYS" ]] || local FLUXKEYS="$HOME/.fluxbox/keys" - if ! [[ -r "$FLUXKEYS" ]] ; then - echo "Sorry, \$FLUXKEYS file $FLUXKEYS could not be read - nothing to be done." - return 1 - else - if grep -q 'Mod1 F[0-9] :Workspace [0-9]' $FLUXKEYS ; then - echo -n 'Switching to Alt-# mode in ~/.fluxbox/keys: ' - sed -i -e 's|^\(Mod[0-9]\+[: space :]\+\)F\([0-9]\+[: space :]\+:Workspace.*\)|\1\2|' $FLUXKEYS && echo done || echo failed - elif grep -q 'Mod1 [0-9] :Workspace [0-9]' $FLUXKEYS ; then - echo -n 'Switching to Alt-F# mode in ~/.fluxbox/keys: ' - sed -i -e 's|^\(Mod[0-9]\+[: space :]\+\)\([0-9]\+[: space :]\+:Workspace.*\)|\1F\2|' $FLUXKEYS && echo done || echo failed - else - echo 'Sorry, do not know what to do.' - return 1 - fi - fi } -# retrieve weather information on the console -# Usage example: 'weather LOWG' -weather() { - emulate -L zsh - [[ -n "$1" ]] || { - print 'Usage: weather ' >&2 - print 'List of stations: http://en.wikipedia.org/wiki/List_of_airports_by_ICAO_code'>&2 - return 1 - } - - local VERBOSE="yes" # TODO: Make this a command line switch - - local ODIR=`pwd` - local PLACE="${1:u}" - local DIR="${HOME}/.weather" - local LOG="${DIR}/log" - - [[ -d ${DIR} ]] || { - print -n "Creating ${DIR}: " - mkdir ${DIR} - print 'done' - } - - print "Retrieving information for ${PLACE}:" - print - cd ${DIR} && wget -T 10 --no-verbose --output-file=$LOG --timestamping http://weather.noaa.gov/pub/data/observations/metar/decoded/$PLACE.TXT - - if [[ $? -eq 0 ]] ; then - if [[ -n "$VERBOSE" ]] ; then - cat ${PLACE}.TXT - else - DATE=$(grep 'UTC' ${PLACE}.TXT | sed 's#.* /##') - TEMPERATURE=$(awk '/Temperature/ { print $4" degree Celcius / " $2" degree Fahrenheit" }' ${PLACE}.TXT | tr -d '(') - echo "date: $DATE" - echo "temp: $TEMPERATURE" - fi - else - print "There was an error retrieving the weather information for $PLACE" >&2 - cat $LOG - cd $ODIR - return 1 - fi - cd $ODIR -} -# }}} - -# mercurial related stuff {{{ +# mercurial related stuff if check_com -c hg ; then # gnu like diff for mercurial # http://www.selenic.com/mercurial/wiki/index.cgi/TipsAndTricks @@ -3821,54 +2739,7 @@ if check_com -c hg ; then fi # end of check whether we have the 'hg'-executable -# }}} - -# some useful commands often hard to remember - let's grep for them {{{ -# actually use our zg() function now. :) - -# Work around ion/xterm resize bug. -#if [[ "$SHLVL" -eq 1 ]]; then -# if check_com -c resize ; then -# eval `resize Packages.gz -# dpkg-scansources . | gzip > Sources.gz -# grep-dctrl --field Maintainer $* /var/lib/apt/lists/* - -# other stuff: -# convert -geometry 200x200 -interlace LINE -verbose -# ldapsearch -x -b "OU=Bedienstete,O=tug" -h ldap.tugraz.at sn=$1 -# ps -ao user,pcpu,start,command -# gpg --keyserver blackhole.pca.dfn.de --recv-keys -# xterm -bg black -fg yellow -fn -misc-fixed-medium-r-normal--14-140-75-75-c-90-iso8859-15 -ah -# nc -vz $1 1-1024 # portscan via netcat -# wget --mirror --no-parent --convert-links -# pal -d `date +%d` -# autoload -U tetris; zle -N tetris; bindkey '...' ; echo "press ... for playing tennis" -# -# modify console cursor -# see http://www.tldp.org/HOWTO/Framebuffer-HOWTO-5.html -# print $'\e[?96;0;64c' -# }}} - -# grml-small cleanups {{{ +# grml-small cleanups # The following is used to remove zsh-config-items that do not work # in grml-small by default. @@ -3890,11 +2761,9 @@ if (( GRMLSMALL_SPECIFIC > 0 )) && isgrmlsmall ; then fi -#}}} - zrclocal -## genrefcard.pl settings {{{ +## genrefcard.pl settings ### doc strings for external functions from files #m# f5 grml-wallpaper() Sets a wallpaper (try completion for possible values) @@ -3902,8 +2771,6 @@ zrclocal ### example: split functions-search 8,16,24,32 #@# split functions-search 8 -## }}} - ## END OF FILE ################################################################# # vim:filetype=zsh foldmethod=marker autoindent expandtab shiftwidth=4 # Local variables: diff --git a/usr_share_grml/zsh/completion/unix/_hl_complete b/usr_share_grml/zsh/completion/unix/_hl_complete new file mode 100644 index 0000000..28363d4 --- /dev/null +++ b/usr_share_grml/zsh/completion/unix/_hl_complete @@ -0,0 +1,17 @@ +#compdef hl + +function _hl_genarg() { + local expl + if [[ -prefix 1 *: ]] ; then + local themes + themes=(${${${(f)"$(LC_ALL=C highlight --list-themes)"}/ #/}:#*(Installed|Use name)*}) + compset -P 1 '*:' + _wanted -C list themes expl theme compadd ${themes} + else + local langs + langs=(${${${(f)"$(LC_ALL=C highlight --list-langs)"}/ #/}:#*(Installed|Use name)*}) + _wanted -C list languages expl languages compadd -S ':' -q ${langs} + fi +} + +_arguments -s '1: :_hl_genarg' '2:files:_path_files' diff --git a/usr_share_grml/zsh/functions/exirename b/usr_share_grml/zsh/functions/exirename new file mode 100644 index 0000000..2ab3b62 --- /dev/null +++ b/usr_share_grml/zsh/functions/exirename @@ -0,0 +1,18 @@ +# Rename pictures based on information found in exif headers +emulate -L zsh + +if [[ $# -lt 1 ]] ; then + echo 'Usage: jpgrename $FILES' >& 2 + return 1 +else + echo -n 'Checking for jhead with version newer than 1.9: ' + jhead_version=`jhead -h | \ + grep 'used by most Digital Cameras. v.*' | \ + awk '{print $6}' | tr -d v` + if [[ $jhead_version > '1.9' ]]; then + echo 'success - now running jhead.' + jhead -n%Y-%m-%d_%Hh%M_%f $* + else + echo 'failed - exiting.' + fi +fi diff --git a/usr_share_grml/zsh/functions/hl b/usr_share_grml/zsh/functions/hl new file mode 100644 index 0000000..258ea7e --- /dev/null +++ b/usr_share_grml/zsh/functions/hl @@ -0,0 +1,36 @@ +# hl() highlighted less +emulate -L zsh + +local theme lang +theme=${HL_THEME:-""} +case ${1} in +(-l|--list) + ( printf 'available languages (syntax parameter):\n\n' ; + highlight --list-langs ; ) | less -SMr + ;; +(-t|--themes) + ( printf 'available themes (style parameter):\n\n' ; + highlight --list-themes ; ) | less -SMr + ;; +(-h|--help) + printf 'usage: hl \n' + printf ' available options: --list (-l), --themes (-t), --help (-h)\n\n' + printf ' Example: hl c main.c\n' + ;; +(*) + if [[ -z ${2} ]] || (( ${#argv} > 2 )) ; then + printf 'usage: hl \n' + printf ' available options: --list (-l), --themes (-t), --help (-h)\n' + (( ${#argv} > 2 )) && printf ' Too many arguments.\n' + return 1 + fi + lang=${1%:*} + [[ ${1} == *:* ]] && [[ -n ${1#*:} ]] && theme=${1#*:} + if [[ -n ${theme} ]] ; then + highlight -O xterm256 --syntax ${lang} --style ${theme} ${2} | less -SMr + else + highlight -O ansi --syntax ${lang} ${2} | less -SMr + fi + ;; +esac +return 0 diff --git a/usr_share_grml/zsh/functions/ipv6-tunnel b/usr_share_grml/zsh/functions/ipv6-tunnel new file mode 100644 index 0000000..b0fc2c6 --- /dev/null +++ b/usr_share_grml/zsh/functions/ipv6-tunnel @@ -0,0 +1,42 @@ +# set up an ipv6 tunnel +emulate -L zsh + +case $1 in +start) + if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then + print 'ipv6 tunnel already set up, nothing to be done.' + print 'execute: "ifconfig sit1 down ; ifconfig sit0 down" to remove ipv6-tunnel.' ; return 1 + else + [[ -n "$PUBLIC_IP" ]] || \ + local PUBLIC_IP=$(ifconfig $(route -n | awk '/^0\.0\.0\.0/{print $8; exit}') | \ + awk '/inet addr:/ {print $2}' | tr -d 'addr:') + + [[ -n "$PUBLIC_IP" ]] || { + print 'No $PUBLIC_IP set and could not determine default one.' + return 1 + } + local IPV6ADDR=$(printf "2002:%02x%02x:%02x%02x:1::1" $(print ${PUBLIC_IP//./ })) + print -n "Setting up ipv6 tunnel $IPV6ADDR via ${PUBLIC_IP}: " + ifconfig sit0 tunnel ::192.88.99.1 up + ifconfig sit1 add "$IPV6ADDR" && print done || print failed + fi + ;; +status) + if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then + print 'ipv6 tunnel available' ; return 0 + else + print 'ipv6 tunnel not available' ; return 1 + fi + ;; +stop) + if ifconfig sit1 2>/dev/null | grep -q 'inet6 addr: 2002:.*:1::1' ; then + print -n 'Stopping ipv6 tunnel (sit0 + sit1): ' + ifconfig sit1 down ; ifconfig sit0 down && print done || print failed + else + print 'No ipv6 tunnel found, nothing to be done.' ; return 1 + fi + ;; +*) + print "Usage: ipv6-tunnel [start|stop|status]">&2 ; return 1 + ;; +esac diff --git a/usr_share_grml/zsh/functions/linenr b/usr_share_grml/zsh/functions/linenr new file mode 100644 index 0000000..20d3862 --- /dev/null +++ b/usr_share_grml/zsh/functions/linenr @@ -0,0 +1,21 @@ +# Print a specific line of file(s). +emulate -L zsh + +if [ $# -lt 2 ] ; then + print "Usage: linenr [,] " ; return 1 +elif [ $# -eq 2 ] ; then + local number=$1 + local file=$2 + command ed -s $file <<< "${number}n" +else + local number=$1 + shift + for file in "$@" ; do + if [ ! -d $file ] ; then + echo "${file}:" + command ed -s $file <<< "${number}n" 2> /dev/null + else + continue + fi + done | less +fi diff --git a/usr_share_grml/zsh/functions/lsdisk b/usr_share_grml/zsh/functions/lsdisk new file mode 100644 index 0000000..ef0a64e --- /dev/null +++ b/usr_share_grml/zsh/functions/lsdisk @@ -0,0 +1,40 @@ +# show labels and uuids of disk devices +emulate -L zsh +setopt extendedglob + +local -a -U disks +local -A mountinfo + +disks=( /dev/disk/by-id/*(N@:A) ) + +if (( ${#disks} == 0 )); then + printf 'No disks detected.\n' + return 1 +fi + +if [[ -r /proc/mounts ]]; then + for cline in "${(f)$(}/${dev:t}/size(N) + do + print -f " Size: %.3f GiB (%d Byte)\n" \ + $(($(<$sysdevsize)/(2.0*1024.0*1024.0))) \ + $(($(<$sysdevsize)*512)) + done + + print -f " Id: %s\n" /dev/disk/by-id/*(@e/'[[ ${REPLY:A} == $dev ]]'/N:t) +done diff --git a/usr_share_grml/zsh/functions/minimal-shell b/usr_share_grml/zsh/functions/minimal-shell new file mode 100644 index 0000000..dd72cff --- /dev/null +++ b/usr_share_grml/zsh/functions/minimal-shell @@ -0,0 +1,15 @@ +# spawn a minimally set up mksh - useful if you want to umount /usr/. +emulate -L zsh + +local shell="/bin/mksh" +local env_file="/etc/minimal-shellrc" + +if [[ ! -x ${shell} ]]; then + printf '`%s'\'' not available, giving up.\n' ${shell} >&2 + return 1 +elif [[ ! -f ${env_file} ]]; then + printf 'minimal-shell: Configuration missing: `%s'\''\n' ${shell} >&2 + return 2 +fi + +exec env -i ENV="$env_file" HOME="$HOME" TERM="$TERM" ${shell} diff --git a/usr_share_grml/zsh/functions/purge b/usr_share_grml/zsh/functions/purge new file mode 100644 index 0000000..aa5066a --- /dev/null +++ b/usr_share_grml/zsh/functions/purge @@ -0,0 +1,52 @@ +# Clean up directory - remove well known tempfiles +emulate -L zsh + +setopt HIST_SUBST_PATTERN +local -a TEXTEMPFILES GHCTEMPFILES PYTEMPFILES FILES + +TEXTEMPFILES=(*.tex(N:s/%tex/'(log|toc|aux|nav|snm|out|tex.backup|bbl|blg|bib.backup|vrb|lof|lot|hd|idx)(N)'/)) + +GHCTEMPFILES=(*.(hs|lhs)(N:r:s/%/'.(hi|hc|(p|u|s)_(o|hi))(N)'/)) + +PYTEMPFILES=(*.py(N:s/%py/'(pyc|pyo)(N)'/)) + +LONELY_MOOD_FILES=((*.mood)(.NDe:'local -a AF;AF=( ${${REPLY#.}%mood}(mp3|flac|ogg|asf|wmv|aac)(N) ); [[ -z "$AF" ]]':)) + +ZSH_COMPILED=(*.zwc(.NDe:'[[ -f ${REPLY%.zwc} && ${REPLY%.zwc} -nt ${REPLY} ]]':)) + +FILES=( + *~(.N) + \#*\#(.N) + *.o(.N) + a.out(.N) + (*.|)core(.N) + *.cmo(.N) + *.cmi(.N) + .*.swp(.N) + *.(orig|rej)(.DN) + *.dpkg-(old|dist|new)(DN) + ._(cfg|mrg)[0-9][0-9][0-9][0-9]_*(N) + ${~TEXTEMPFILES} + ${~GHCTEMPFILES} + ${~PYTEMPFILES} + ${LONELY_MOOD_FILES} + ${ZSH_COMPILED} +) + +local NBFILES=${#FILES} +local CURDIRSUDO="" + +[[ ! -w ./ ]] && CURDIRSUDO=$SUDO + +if [[ $NBFILES > 0 ]] ; then + print -l $FILES + local ans + echo -n "Remove these files? [y/n] " + read -q ans; echo + if [[ $ans == "y" ]] ; then + $CURDIRSUDO rm ${FILES} + echo ">> $PWD purged, $NBFILES files removed" + else + echo "Ok. .. then not.." + fi +fi diff --git a/usr_share_grml/zsh/functions/readme b/usr_share_grml/zsh/functions/readme new file mode 100644 index 0000000..5400113 --- /dev/null +++ b/usr_share_grml/zsh/functions/readme @@ -0,0 +1,11 @@ +# View all README-like files in current directory in pager +emulate -L zsh + +setopt extendedglob +local files +files=(./(#i)*(read*me|lue*m(in|)ut|lies*mich)*(NDr^/=p%)) +if (($#files)) ; then + $PAGER $files +else + print 'No README files.' +fi diff --git a/usr_share_grml/zsh/functions/urldecode b/usr_share_grml/zsh/functions/urldecode new file mode 100644 index 0000000..8bae53a --- /dev/null +++ b/usr_share_grml/zsh/functions/urldecode @@ -0,0 +1,6 @@ +#f5# RFC 2396 URL encoding in Z-Shell +emulate -L zsh + +setopt extendedglob +input=( ${(s::)1} ) +print ${(j::)input/(#b)([^A-Za-z0-9_.!~*\'\(\)-])/%${(l:2::0:)$(([##16]#match))}} diff --git a/usr_share_grml/zsh/functions/weather b/usr_share_grml/zsh/functions/weather new file mode 100644 index 0000000..44a87e1 --- /dev/null +++ b/usr_share_grml/zsh/functions/weather @@ -0,0 +1,49 @@ +# retrieve weather information on the console +# Usage example: 'weather LOWG' + +emulate -L zsh + +if [[ -n "$1" ]]; then + print 'Usage: weather ' + print \ + 'List of stations: http://en.wikipedia.org/wiki/List_of_airports_by_ICAO_code' + return 0 +fi + +local VERBOSE="yes" # TODO: Make this a command line switch + +local ODIR=`pwd` +local PLACE="${1:u}" +local DIR="${HOME}/.weather" +local LOG="${DIR}/log" + +if [[ -d ${DIR} ]]; then + print -n "Creating ${DIR}: " + mkdir ${DIR} + print 'done' +fi + +print "Retrieving information for ${PLACE}:" +print +cd ${DIR} && \ + wget -T 10 --no-verbose --output-file=$LOG --timestamping \ + http://weather.noaa.gov/pub/data/observations/metar/decoded/$PLACE.TXT + +if [[ $? -eq 0 ]]; then + if [[ -n "$VERBOSE" ]] ; then + cat ${PLACE}.TXT + else + DATE=$(grep 'UTC' ${PLACE}.TXT | sed 's#.* /##') + TEMPERATURE=$(awk '/Temperature/ { + print $4" degree Celcius / " $2" degree Fahrenheit" + }' ${PLACE}.TXT | tr -d '(') + echo "date: $DATE" + echo "temp: $TEMPERATURE" + fi +else + print "There was an error retrieving the weather information for $PLACE" >&2 + cat $LOG + cd $ODIR + return 1 +fi +cd $ODIR