+++ /dev/null
-*
-!/.var
-!/.var/zsh
-!/.var/zsh/.gitignore
-!/.zsh
-!/.zsh/dircolors
-!/.zshenv
-!/.zsh/func
-!/.zsh/func/baseconv
-!/.zsh/func/getpw
-!/.zsh/func/gitpub
-!/.zsh/func/giturl
-!/.zsh/func/p
-!/.zsh/func/svngit
-!/.zsh/func/TS
-!/.zsh/func/urlencode
-!/.zsh/.gitignore
-!/.zsh/logging
-!/.zsh/rcsstub
-!/.zsh/sourcedir
-!/.zsh/util
-!/.zsh/zlogin
-!/.zsh/.zlogin
-!/.zsh/zlogin/10_shlvl
-!/.zsh/zlogin/60_mime
-!/.zsh/zlogin/90_db
-!/.zsh/zlogin/.gitignore
-!/.zsh/zlogout
-!/.zsh/.zlogout
-!/.zsh/zlogout/90_sudo
-!/.zsh/zlogout/99_cls
-!/.zsh/zlogout/.gitignore
-!/.zsh/zprofile
-!/.zsh/.zprofile
-!/.zsh/zprofile/00_ulimit
-!/.zsh/zprofile/10_locale
-!/.zsh/zprofile/40_zcompile
-!/.zsh/zprofile/.gitignore
-!/.zsh/zshenv
-!/.zsh/.zshenv
-!/.zsh/zshenv/00_rdirs
-!/.zsh/zshenv/01_fpath
-!/.zsh/zshenv/01_path
-!/.zsh/zshenv/10_zvars
-!/.zsh/zshenv/40_editor
-!/.zsh/zshenv/80_debian
-!/.zsh/zshenv/80_pagers
-!/.zsh/zshenv/80_texmf
-!/.zsh/zshenv/.gitignore
-!/.zsh/zshrc
-!/.zsh/.zshrc
-!/.zsh/zshrc/00_autoload
-!/.zsh/zshrc/00_recompile
-!/.zsh/zshrc/00_varsetup
-!/.zsh/zshrc/19_dircolors
-!/.zsh/zshrc/20_compsys
-!/.zsh/zshrc/20_dirhashes
-!/.zsh/zshrc/30_aliases
-!/.zsh/zshrc/30_aliases_bugfix
-!/.zsh/zshrc/39_tempfuncs
-!/.zsh/zshrc/60_vcsprompt
-!/.zsh/zshrc/75_vcsinfo
-!/.zsh/zshrc/79_bindkeys
-!/.zsh/zshrc/80_abbreviations
-!/.zsh/zshrc/80_history
-!/.zsh/zshrc/80_inplacemkdir
-!/.zsh/zshrc/80_zle
-!/.zsh/zshrc/85_prompt
-!/.zsh/zshrc/85_termfonts
-!/.zsh/zshrc/85_xtermtitle
-!/.zsh/zshrc/90_cleanfiles
-!/.zsh/zshrc/95_fortune.disabled
-!/.zsh/zshrc/95_watch
-!/.zsh/zshrc/99_hookfunctions
-!/.zsh/zshrc/99_TODO
-!/.zsh/zshrc/.gitignore
comp-*
-history
-mailpath
+history-*
compcache
--- /dev/null
+exec $SHELL
--- /dev/null
+.noglob
\ No newline at end of file
--- /dev/null
+grep
\ No newline at end of file
--- /dev/null
+grep
\ No newline at end of file
--- /dev/null
+.noglob
\ No newline at end of file
--- /dev/null
+$0 --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn} -D skip -d skip
--- /dev/null
+.noglob
\ No newline at end of file
--- /dev/null
+.noglob
\ No newline at end of file
--- /dev/null
+LC_COLLATE=POSIX $0 -bC --color=auto --group-directories-first
--- /dev/null
+ps -ao user,pcpu,start,command
--- /dev/null
+.noglob
\ No newline at end of file
--- /dev/null
+.noglob
\ No newline at end of file
--- /dev/null
+.noglob
\ No newline at end of file
### BEGIN dircolors --print-database output ##################################
# Configuration file for dircolors, a utility to help you set the
# LS_COLORS environment variable used by GNU ls with the --color option.
-# Copyright (C) 1996, 1999-2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2016 Free Software Foundation, Inc.
# Copying and distribution of this file, with or without modification,
# are permitted provided the copyright notice and this notice are preserved.
# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
SETUID 37;41 # file that is setuid (u+s)
SETGID 30;43 # file that is setgid (g+s)
+CAPABILITY 30;41 # file with capability
STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
# archives or compressed (bright red)
.tar 01;31
.tgz 01;31
-.svgz 01;31
+.arc 01;31
.arj 01;31
.taz 01;31
+.lha 01;31
+.lz4 01;31
.lzh 01;31
.lzma 01;31
+.tlz 01;31
+.txz 01;31
+.tzo 01;31
+.t7z 01;31
.zip 01;31
.z 01;31
.Z 01;31
.dz 01;31
.gz 01;31
+.lrz 01;31
+.lz 01;31
+.lzo 01;31
+.xz 01;31
+.zst 01;31
+.tzst 01;31
.bz2 01;31
.bz 01;31
+.tbz 01;31
.tbz2 01;31
.tz 01;31
.deb 01;31
.rpm 01;31
.jar 01;31
+.war 01;31
+.ear 01;31
+.sar 01;31
.rar 01;31
+.alz 01;31
.ace 01;31
.zoo 01;31
.cpio 01;31
.7z 01;31
.rz 01;31
+.cab 01;31
# image formats
.jpg 01;35
.jpeg 01;35
+.mjpg 01;35
+.mjpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.tiff 01;35
.png 01;35
.svg 01;35
+.svgz 01;35
.mng 01;35
.pcx 01;35
.mov 01;35
.mpeg 01;35
.m2v 01;35
.mkv 01;35
+.webm 01;35
.ogm 01;35
.mp4 01;35
.m4v 01;35
.flc 01;35
.avi 01;35
.fli 01;35
+.flv 01;35
.gl 01;35
.dl 01;35
.xcf 01;35
.xwd 01;35
.yuv 01;35
+.cgm 01;35
+.emf 01;35
+# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
+.ogv 01;35
+.ogx 01;35
# audio formats
.aac 00;36
.au 00;36
.flac 00;36
+.m4a 00;36
.mid 00;36
.midi 00;36
.mka 00;36
.ogg 00;36
.ra 00;36
.wav 00;36
+# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
+.oga 00;36
+.opus 00;36
+.spx 00;36
+.xspf 00;36
### END dircolors --print-database output ####################################
-# now override stuff for those who don't take as much LSD:
+# now override stuff
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
LINK target
EXEC 00;34
-# archives or compressed
+# and remove all the bold from the images and archives:
+# archives or compressed (bright red)
.tar 00;31
.tgz 00;31
-.svgz 00;31
+.arc 00;31
.arj 00;31
.taz 00;31
+.lha 00;31
+.lz4 00;31
.lzh 00;31
.lzma 00;31
+.tlz 00;31
+.txz 00;31
+.tzo 00;31
+.t7z 00;31
.zip 00;31
.z 00;31
.Z 00;31
.dz 00;31
.gz 00;31
+.lrz 00;31
+.lz 00;31
+.lzo 00;31
+.xz 00;31
+.zst 00;31
+.tzst 00;31
.bz2 00;31
.bz 00;31
+.tbz 00;31
.tbz2 00;31
.tz 00;31
.deb 00;31
.rpm 00;31
.jar 00;31
+.war 00;31
+.ear 00;31
+.sar 00;31
.rar 00;31
+.alz 00;31
.ace 00;31
.zoo 00;31
.cpio 00;31
.7z 00;31
.rz 00;31
+.cab 00;31
# image formats
-.jpg 00
-.jpeg 00
-.gif 00
-.bmp 00
-.pbm 00
-.pgm 00
-.ppm 00
-.tga 00
-.xbm 00
-.xpm 00
-.tif 00
-.tiff 00
-.png 00
-.svg 00
-.mng 00
-.pcx 00
-.mov 00
-.mpg 00
-.mpeg 00
-.m2v 00
-.mkv 00
-.ogm 00
-.mp4 00
-.m4v 00
-.mp4v 00
-.vob 00
-.qt 00
-.nuv 00
-.wmv 00
-.asf 00
-.rm 00
-.rmvb 00
-.flc 00
-.avi 00
-.fli 00
-.gl 00
-.dl 00
-.xcf 00
-.xwd 00
-.yuv 00
-# audio formats
-.aac 00
-.au 00
-.flac 00
-.mid 00
-.midi 00
-.mka 00
-.mp3 00
-.mpc 00
-.ogg 00
-.ra 00
-.wav 00
+.jpg 00;35
+.jpeg 00;35
+.mjpg 00;35
+.mjpeg 00;35
+.gif 00;35
+.bmp 00;35
+.pbm 00;35
+.pgm 00;35
+.ppm 00;35
+.tga 00;35
+.xbm 00;35
+.xpm 00;35
+.tif 00;35
+.tiff 00;35
+.png 00;35
+.svg 00;35
+.svgz 00;35
+.mng 00;35
+.pcx 00;35
+.mov 00;35
+.mpg 00;35
+.mpeg 00;35
+.m2v 00;35
+.mkv 00;35
+.webm 00;35
+.ogm 00;35
+.mp4 00;35
+.m4v 00;35
+.mp4v 00;35
+.vob 00;35
+.qt 00;35
+.nuv 00;35
+.wmv 00;35
+.asf 00;35
+.rm 00;35
+.rmvb 00;35
+.flc 00;35
+.avi 00;35
+.fli 00;35
+.flv 00;35
+.gl 00;35
+.dl 00;35
+.xcf 00;35
+.xwd 00;35
+.yuv 00;35
+.cgm 00;35
+.emf 00;35
+# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
+.ogv 00;35
+.ogx 00;35
# vim:ft=dircolors
--- /dev/null
+/var/cache/apt/archives
\ No newline at end of file
--- /dev/null
+/usr/share/doc
\ No newline at end of file
--- /dev/null
+/var/log
\ No newline at end of file
+++ /dev/null
-#!/bin/sh
-#
-# func/TS
-#
-# a convenient way to create an environment for collaborative testing
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-local topic filename ret
-topic="${(j:_:)@}"
-filename="${TMPDIR:-/tmp}/script.${topic:-$LOGNAME}.$$.$(date +%Y%m%d.%H%M)"
-echo "I: writing typescript to $filename ..." >&2
-PS1="
-%# " PS2= RPS1= script -c "zsh -f" -f -q "$filename"
-ret=$?
-echo "I: typescript is in $filename ."
-return $ret
-exit $ret
+++ /dev/null
-#!/bin/zsh
-#
-# func/baseconv
-#
-# zsh-based conversion between numeric bases
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-if [ $# -ne 3 ]; then
- echo Usage: ${0##*/} ibase obase number
- return 1
-fi
-
-typeset -li $2 var
-eval ((var=${1}#${3}))
-echo ${var#*\#}
-# zshrc/60_vcsprompt
#
-# Make git information available to the prompt
+# My zsh prompt theme
#
# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
#
# Source repository: http://git.madduck.net/v/etc/zsh.git
#
-# Shamelessly based on http://glandium.org/blog/?p=170
+# vcs stuff shamelessly based on http://glandium.org/blog/?p=170
#
+zstyle -m :madduck:prompt:default path-maxlen '*' \
+ || zstyle :madduck:prompt:default path-maxlen 25
+zstyle -m :madduck:prompt:default path-minlen '*' \
+ || zstyle :madduck:prompt:default path-minlen 10
+
__on_networkfs()
{
+ emulate -L zsh
case $(df -T . | sed -rne '$s,^[^[:space:]]+[[:space:]]+([^[:space:]]+).*,\1,p') in
(cifs|nfs) return 0;;
esac
__git_get_reporoot()
{
+ emulate -L zsh
# return the full path to the root of the current git repository
[ -d "$GIT_DIR" ] && echo "$GIT_DIR" && return 0
local dir; dir="$PWD/$(git rev-parse --show-cdup)"
__git_get_branch()
{
+ emulate -L zsh
+ # use oh-my-zsh prompt info function if it exists
+ $(command -v git_prompt_info) && return
+
# return the name of the git branch we're on
local ref gitdir
gitdir="$(git rev-parse --git-dir)"
__git_print_preprompt()
{
+ emulate -L zsh
[ "$(git config --get core.bare)" = false ] || return
__on_networkfs && return
- local output
- output=(${(f):-"$(git diff --stat --relative 2>/dev/null)"})
- if [[ ${#output} -gt 1 ]]; then
- echo changes on filesystem:
- print "${${(F)output[1,-2]}//\.\.\./…}"
- fi
- output=(${(f):-"$(git diff --cached --stat --relative 2>/dev/null)"})
- if [[ ${#output} -gt 1 ]]; then
- echo cached/staged changes:
- print "${${(F)output[1,-2]}//\.\.\./…}"
+ local COLUMNS=${COLUMNS:-80}
+ local LINES=${LINES:-25}
+
+ function output() {
+ emulate -L zsh
+ local title="$@"
+ local output=(${(f)"$(cat)"})
+
+ [[ ${#output} -ge 1 ]] || return
+
+ local statl="$(echo ${output[-1]} | sed -re 's@^\s*([0-9]+)[^,]+(, ([0-9]+) [^(]+\(([-+])\))(, ([0-9]+) [^(]+\(([-+])\))?@\1/\4\3/\7\6@')"
+
+ if [[ ${output[-2]## } = '...' ]]; then
+ print "${title} (${statl%/}, abbrev.):"
+ print "${(F)output[1,-3]}"
+ print " …"
+ else
+ print "${title} (${statl%/}):"
+ print "${(F)output[1,-2]}"
+ fi
+ }
+
+ function gitdiffstat() {
+ emulate -L zsh
+ local common_options="--stat=$((COLUMNS/2-1)),$((COLUMNS/4-2)),$(($LINES/3)) --relative"
+ eval git diff $common_options "$@" 2>/dev/null
+ }
+
+ local cached=(${(f)"$(gitdiffstat --cached | output cached)"})
+ local changed=(${(f)"$(gitdiffstat | output changed)"})
+
+ local max=${#changed}
+ [[ $max -lt ${#cached} ]] && max=${#cached}
+
+ ((max == 0)) && return
+
+ local width=$(((COLUMNS-3)/2))
+
+ if (( ${#cached} > 0 && ${#changed} > 0 )); then
+ local i
+ for (( i=1 ; i <= max ; i++ )) do
+ printf "%-${width}s │ %-${width}s\n" "${cached[$i]}" "${changed[$i]}"
+ done
+ else
+ print ${(F)cached}${(F)changed}
fi
}
__hg_get_reporoot()
{
+ emulate -L zsh
hg root
}
__hg_get_branch()
{
+ emulate -L zsh
echo "hg:$(hg branch)"
}
__bzr_get_reporoot()
{
+ emulate -L zsh
local reporoot
reporoot="$(bzr info | sed -rne 's, *branch root: ,,p')"
case "$reporoot" in
__bzr_get_branch()
{
+ emulate -L zsh
local branch revno
bzr version-info | while read i j; do
case "$i" in
__vcs_get_repo_type()
{
+ emulate -L zsh
# return the type of the closest repository in the path hierarchy
local dir
while true; do
done
}
+__get_prompt_path_len() {
+ emulate -L zsh
+ local result
+ zstyle -s ":madduck:prompt:$PWD" path-${1}len result
+ [ -z "$result" ] && zstyle -s ':madduck:prompt:default' path-${1}len result
+ echo $result
+}
+
__vcs_get_prompt_path_components()
{
+ emulate -L zsh
# return formatted path components (prefix branch postfix) given
# the repository root and the branch.
+ local MAXLEN MINLEN
+ MAXLEN=$(__get_prompt_path_len max)
+ MINLEN=$(__get_prompt_path_len min)
+
# shortcut: if there are no arguments, return a default prompt
if [ -z "${1:-}" ]; then
- pwdnamed="${(%):-%${_PROMPT_PATH_MAXLEN}<…<%~%<<}"
+ pwdnamed="${(%):-%${MAXLEN}<…<%~%<<}"
echo "$pwdnamed"
return
fi
(( $postcomps > 0 )) && postfix="${(%):-%${postcomps}~}"
# we don't want the prompt to get too long, so keep the total prompt length
- # under $_PROMPT_PATH_MAXLEN (25), but ensure that the prefix is not shorter
- # than $_PROMPT_PATH_MINLEN (10), no matter what
+ # under $MAXLEN, but ensure that the prefix is not shorter
+ # than $MINLEN, no matter what
local prelen minlen prefix
- prelen=$((${_PROMPT_PATH_MAXLEN:-25} - $#branch - $#postfix))
- minlen=${_PROMPT_PATH_MINLEN:-10}
+ prelen=$((${MAXLEN} - $#branch - $#postfix))
+ minlen=${MINLEN}
(( $prelen < $minlen )) && prelen=$minlen
prefix="${(%):-%${prelen}<…<%-${precomps}~%<<}"
__vcs_set_prompt_variables()
{
+ emulate -L zsh
# set psvar[1..3] depending on repo type, or just psvar[1] if no repo found
local reporoot branch repotype
repotype="${1:-$(__vcs_get_repo_type)}"
case "$repotype" in
git)
reporoot="$(__git_get_reporoot)" ||
- { error "could not determine git repository root"; return 1 }
+ { zerror "could not determine git repository root"; return 1 }
branch="$(__git_get_branch)" ||
- { error "could not determine git branch"; return 1 }
+ { zerror "could not determine git branch"; return 1 }
if [ -n "$VCSH_REPO_NAME" ]; then
# if vcsh is used to get a subshell, then the repo root is the home
# directory, but we want to indicate the vcsh context too:
eval set -- $(__vcs_get_prompt_path_components "$HOME" "$branch")
- set -- "vcsh:$VCSH_REPO_NAME" "$2" "$3"
+ set -- "vcsh:$VCSH_REPO_NAME" "$2" "$1${3:+/$3}"
else
eval set -- $(__vcs_get_prompt_path_components "$reporoot" "$branch")
if [ -d "$GIT_DIR" ]; then
;;
hg)
reporoot="$(__hg_get_reporoot)" ||
- { error "could not determine hg repository root"; return 1 }
+ { zerror "could not determine hg repository root"; return 1 }
branch="$(__hg_get_branch)" ||
- { error "could not determine hg branch"; return 1 }
+ { zerror "could not determine hg branch"; return 1 }
eval set -- $(__vcs_get_prompt_path_components "$reporoot" "$branch")
;;
bzr)
reporoot="$(__bzr_get_reporoot)" ||
- { error "could not determine bzr repository root"; return 1 }
+ { zerror "could not determine bzr repository root"; return 1 }
branch="$(__bzr_get_branch)" ||
- { error "could not determine bzr branch"; return 1 }
+ { zerror "could not determine bzr branch"; return 1 }
eval set -- $(__vcs_get_prompt_path_components "$reporoot" "$branch")
;;
*)
NONE) :;;
*) warn "$repotype repositories not (yet) supported in the prompt";;
esac
+ local MAXLEN MINLEN
+ MAXLEN=$(__get_prompt_path_len max)
local p="%${MAXLEN}<…<%~%<<"
#TODO find a better way so we don't have to nuke $psvar, but since the
# %(nv.true.false) check for prompts checks element count, not
__vcs_print_preprompt()
{
- local reporoot
- repotype="${1:-$(__vcs_get_repo_type)}"
+ emulate -L zsh
+ local repotype="${1:-$(__vcs_get_repo_type)}"
case "$repotype" in
git)
if ! is_root; then
# too dangerous to be run as root
+ autoload -U add-zsh-hook
_update_vcs_prompt_vars_if_vcs_ran() {
local vcs="$(__vcs_get_repo_type)"
*${vcs}*) __vcs_set_prompt_variables "$vcs"
esac
}
- precmd_functions+=_update_vcs_prompt_vars_if_vcs_ran
+ add-zsh-hook precmd _update_vcs_prompt_vars_if_vcs_ran
_update_vcs_prompt_vars() {
__vcs_set_prompt_variables
}
- chpwd_functions+=_update_vcs_prompt_vars
+ add-zsh-hook chpwd _update_vcs_prompt_vars
_print_preprompt() {
[[ $? -eq 0 ]] && __vcs_print_preprompt
}
- precmd_functions+=_print_preprompt
+ add-zsh-hook precmd _print_preprompt
# call it once
_update_vcs_prompt_vars
fi
+function make_ps1() {
+ # start with '+' if in a subshell
+ echo -n '%(2L.+.)'
+
+ # the machine name, bold or underlined based on non-root/root
+ local ps1_hl=B
+ is_root && ps1_hl=U
+ echo -n "%${ps1_hl:=B}%m%${(L)ps1_hl}"
+
+ # if we're in a Debian chroot, make that stand out
+ echo -n "${DEBIAN_CHROOT:+/%S$DEBIAN_CHROOT%s}"
+
+ # we end this with a :
+ echo -n :
+
+ # now comes the working directory, composed from parts in $psvar,
+ # which is managed by $ZDOTDIR/zshrc/06-vcsprompt
+ echo -n '%1v%(2v.|%B%2v%b|.)%(3v.%3v.)'
+
+ # and we finish with #/% for root/non-root, and a space
+ echo -n '%# '
+ echo
+}
+PS1=$(make_ps1)
+unfunction make_ps1
+PS2="%{$fg[red]%}%_>%{$reset_color%}"
+
+function make_rps1() {
+ # First, a comment character and parens
+ echo -n '#('
+
+ # Next, if the returncode was non-zero, make it stand-out
+ # and include a trailing space
+ echo -n "%(0?..%{$fg[red]%}%S%?%s%{$reset_color%} )"
+
+ # If there are background jobs, print their number, followed by
+ # '@':
+ echo -n '%(1j.%j@.)'
+
+ # and then the terminal line we're using
+ echo -n '%l'
+
+ # this concludes the first part, but there's more
+ echo -n ') '
+
+ # the timestamp will finish it off:
+ echo -n '%D{%d %H:%M:%S.%.}'
+ echo
+}
+RPS1=$(make_rps1)
+unfunction make_rps1
+
# vim:ft=zsh
--- /dev/null
+Subproject commit c5383b10d449697922b6da3262b63a95ed5cc83d
#
__log() {
+ setopt localoptions noxtrace
local level; level="$1"; shift
echo "${level}: $@" >&2
}
__do_debug() {
+ setopt localoptions noxtrace
[ -n "${ZDEBUG:-}" ]
}
zerror() {
- [[ -o xtrace ]] && set +x && local __XTRACE=1
+ setopt localoptions noxtrace
__log E "$@"
- [ "${__XTRACE:-}" ] && set -x
}
zwarn() {
- [[ -o xtrace ]] && set +x && local __XTRACE=1
+ setopt localoptions noxtrace
__log W "$@"
- [ "${__XTRACE:-}" ] && set -x
}
zinfo() {
- [[ -o xtrace ]] && set +x && local __XTRACE=1
+ setopt localoptions noxtrace
__log I "$@"
- [ "${__XTRACE:-}" ] && set -x
}
zdebug() {
- [[ -o xtrace ]] && set +x && local __XTRACE=1
+ setopt localoptions noxtrace
__do_debug && __log D "$@"
- [ "${__XTRACE:-}" ] && set -x
}
# vim:ft=zsh
--- /dev/null
+Subproject commit b908feebcfb0ca8a9a80360d177e716c24c317d6
case "$f" in
*~|*.bak|*.old|*.sw?|*.zwc|*.disabled) continue;;
*-BREAK_HERE)
- zinfo "Breaking out of sourcing file in '$1' due to file '${f##*/}'…"
break;;
esac
# zdebug " sourcing file $f"
test ${EUID:?} -eq 0
}
+array_prepend() {
+ local arrayname="$1"; shift
+ local i
+ for i; do
+ eval "$arrayname=(\$i \${$arrayname[@]/\$i})"
+ done
+}
+
+array_append() {
+ local arrayname="$1"; shift
+ local i
+ for i; do
+ eval "$arrayname=(\${$arrayname[@]/\$i} \$i)"
+ done
+}
+
+function trace() { ( eval "set -x; $@"; ) }
+
# vim:ft=zsh
+++ /dev/null
-# zlogin/90_db
-#
-# print today's reminder items
-#
-# Copyright © 1994–2013 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-if whence db >/dev/null; then
- cnt=0
- db -md1 | while read line; do
- [ -n "$line" ] || continue
- if [ $cnt -eq 0 ]; then
- cnt=$((cnt+1))
- echo "*** $line"
- else
- echo "$line"
- fi
- done
- [ $cnt -gt 0 ] && echo
-fi
-
-# vim:ft=zsh
-# zlogout/99_cls
#
# clear the screen
#
-# zprofile/00_ulimit
#
-# sets process limits
+# disable core dumps
#
# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
# Source repository: http://git.madduck.net/v/etc/zsh.git
#
-# disable core files
ulimit -c 0
# vim:ft=zsh
-# zprofile/10_locale
#
# Defines locale settings
#
unset _LOCALE
fi
-export LANGUAGE="${LANG}:en"
+export LANGUAGE="${LANG}:${LANG%_*}"
unfunction _set_regional_locale
unfunction _set_locale
-# zshenv/40_editor
#
-# set the editor variables
+# Defines a basic, restrictive umask
#
# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
# Source repository: http://git.madduck.net/v/etc/zsh.git
#
-export EDITOR==vim
-export VISUAL=$EDITOR
+umask 0077
# vim:ft=zsh
+++ /dev/null
-# zlogin/40_zcompile
-#
-# compile zsh snippets
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-if [ -n "$ZDOTDIR" ] && [ -d "$ZDOTDIR" ]; then
- rm -f $ZDOTDIR/**/*.zwc{,.old}(D.N)
- for f in $ZDOTDIR/*(D.,@) $ZDOTDIR/**/*(.); do
- case "$f:t" in
- .gitignore|.*.sw?) continue;;
- esac
- zcompile $f
- done
-fi
-
-if [ -n "$ZVARDIR" ] && [ -d "$ZVARDIR" ]; then
- rm -f $ZVARDIR/**/*.zwc{,.old}(.N)
- for f in $ZVARDIR/comp*(.N); do
- case "$f:t" in
- .gitignore|.*.sw?) continue;;
- esac
- zcompile $f
- done
-fi
-
-# vim:ft=zsh
--- /dev/null
+#
+# Adds local alias directory to $apath
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+typeset -gaU apath
+
+for ad in $ZDOTDIR/aliases; do
+ [ -d "$ad" ] && array_prepend apath "$ad"
+done
+
+# vim:ft=zsh
--- /dev/null
+#
+# Adds local dirhashes directory to $dhpath
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+typeset -gaU dhpath
+
+for dh in $ZDOTDIR/dirhashes; do
+ [ -d "$dh" ] && array_prepend dhpath "$dh"
+done
+
+# vim:ft=zsh
-# zshenv/00_fpath
#
# Adds local functions directory to $fpath
#
# Source repository: http://git.madduck.net/v/etc/zsh.git
#
-fpath=($ZDOTDIR/func $fpath)
+typeset -gU fpath FPATH
+
+for fd in $ZDOTDIR/func; do
+ [ -d "$fd" ] && array_prepend fpath "$fd"
+done
# vim:ft=zsh
--- /dev/null
+#
+# Adds custom directories to the $PATH
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+typeset -gU path PATH
+
+for bd in $HOME/bin $HOME/.bin; do
+ [ -d "$bd" ] && array_prepend path "$bd"
+done
+
+# vim:ft=zsh
--- /dev/null
+#
+# Define $TMPDIR and other stuff related to temporary files
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+export TMPDIR="/tmp/${(%):-%n}"
+mkdir --mode=700 --parent "${TMPDIR}"
+
+typeset -l LTMPDIR="${HOME}/.tmp"
+if [ -d $LTMPDIR ]; then
+ typeset -l VOLATILE="${LTMPDIR}/volatile"
+ [ -L "$VOLATILE" ] || ln -snfT "$TMPDIR" "$VOLATILE"
+ nTMPDIR=$LTMPDIR
+fi
+
+TMPPREFIX="${TMPDIR}/zsh"
+
+# vim:ft=zsh
--- /dev/null
+#
+# Define $ZVARDIR as the location where to store variable files
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+if [ -d $HOME/.var ]; then
+ export VARDIR=$HOME/.var
+ ZVARDIR=$VARDIR/zsh
+ mkdir --parent $ZVARDIR
+else
+ ZVARDIR=$ZDOTDIR
+fi
+
+# vim:ft=zsh
+++ /dev/null
-# zshenv/00_rdirs
-#
-# Assigns paths to related directories to a number of variables
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-export VARDIR_REL=.var
-export VARDIR=$HOME/$VARDIR_REL
-export ZVARDIR=$VARDIR/zsh
-
-export BINDIR_REL=.bin
-export BINDIR=$HOME/$BINDIR_REL
-
-export TMPDIR_REL=.tmp
-export TMPDIR=$HOME/$TMPDIR_REL
-mkdir --mode=0700 --parent "$(readlink -f $TMPDIR)"
-
-# vim:ft=zsh
+++ /dev/null
-# zprofile/00_path
-#
-# Adds custom directories to the $PATH
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-__prepend_dir_to_path()
-{
- local dir
- for dir; do
- case "$PATH" in
- "*:${dir}:*"|"${dir}:*"|"*:${dir}") :;;
- *) test -d "$dir" && path=("$dir" $path);;
- esac
- done
-}
-
-__append_dir_to_path()
-{
- local dir
- for dir; do
- case "$PATH" in
- "*:${dir}:*"|"${dir}:*"|"*:${dir}") :;;
- *) test -d "$dir" && path+="$dir";;
- esac
- done
-}
-
-__prepend_dir_to_path $BINDIR
-__append_dir_to_path /usr/lib/surfraw
-
-# vim:ft=zsh
+++ /dev/null
-# zshenv/10_zvars
-#
-# set a number of core zsh variables
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-# use $TMPDIR for TMPPREFIX
-TMPPREFIX="$TMPDIR/zsh"
-
-# vim:ft=zsh
+++ /dev/null
-# zshenv/80_debian
-#
-# set a number of default variables related to Debian
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-export DEBFULLNAME='martin f. krafft'
-export DEBEMAIL=madduck@debian.org
-export DEBKEYID=55c9882d999bbcc4
-
-if [[ -z "$debian_chroot" && -r /etc/debian_chroot ]]; then
- export debian_chroot="$(</etc/debian_chroot)"
-fi
-
-# vim:ft=zsh
+++ /dev/null
-# zshenv/80_pagers
-#
-# set a number of default variables related to pagers
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-eval `lesspipe 2>/dev/null`
-LESS='--no-init --hilite-search --SILENT'
-export LESS
-
-export LESSHISTFILE=~/.var/less/history
-[[ -d ${LESSHISTFILE%/*} ]] || mkdir --parent ${LESSHISTFILE%/*}
-
-# vim:ft=zsh
+++ /dev/null
-# zshenv/80_texmf
-#
-# set a number of default variables related to texmf
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-export TEXMFHOME=$HOME/.texmf
-export TEXMFCONFIG=$TEXMFHOME
-export TEXMFVAR=$VARDIR/texmf
-
-# vim:ft=zsh
--- /dev/null
+#
+# Autoload functions from executable files in $fpath
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+autoload -U $^fpath/*(.xN:t)
+
+# vim:ft=zsh
--- /dev/null
+#
+# Turn files in $apath directories into aliases
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+function make_alias {
+ emulate -L zsh
+ setopt extendedglob
+ local fn="${1:t}" s
+ for l in ${(f)"$(<$1)"}; do
+ case "$s/$l" in
+ (*/\#*) continue;;
+ (/*) eval "alias $fn='${l//\$0/$fn}'"; s=s;;
+ (s/(#b)(*)) eval "$match[1]";;
+ esac
+ done
+}
+
+for ad in $apath; do
+ if [ ! -d "$ad" ]; then
+ zerror "no such directory: $ad"
+ continue
+ fi
+
+# zdebug "sourcing alias directory ${ad#$ZDOTDIR/}"
+ for f in "$ad"/*(N.,@); do
+ case "$f" in
+ *~|*.bak|*.old|*.sw?|*.zwc|*.disabled) continue;;
+ esac
+ make_alias "$f"
+ done
+done
+
+# vim:ft=zsh
--- /dev/null
+#
+# Turn symlinks in $dhpath directories into dirhashes
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+for dh in $dhpath; do
+ if [ ! -d "$dh" ]; then
+ zerror "no such directory: $dh"
+ continue
+ fi
+
+# zdebug "sourcing dirhashes directory ${dh#$ZDOTDIR/}"
+ for l in "$dh"/*(@); do
+ eval hash -d "$l:t"="$l:A"
+ done
+done
+
+# vim:ft=zsh
+++ /dev/null
-# zshrc/00_autoload
-#
-# Autoload available functions
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-# autoload all executable files in $fpath
-autoload -U $^fpath/*(.xN:t)
-
-# smart xargs replacement
-autoload -U zargs
-
-# programmable moving, copying, and linking
-autoload -U zmv
-
-# make color arrays available
-autoload -U colors ; colors
-
-# use shell builtins for standard file operations
-# disabled due to #479764
-#zmodload zsh/files
-
-# allow zwc file recompiling
-autoload -U zrecompile
-
-# vim:ft=zsh
+++ /dev/null
-# zshrc/00_zrecompile
-#
-# recompile zsh snippets, if necessary
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-zrecompile $ZDOTDIR/**/*(/N) $ZVARDIR/**/*(/N) | while read pre file post; do
- case "$post" in
- succeeded*) rm -f "${file%:}".old;;
- *) :;;
- esac
- info "$pre ${file##$HOME/} $post"
- done
-
-# vim:ft=zsh
+++ /dev/null
-# zshrc/00_varsetup
-#
-# set up global variables used by the shell
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-# automatically remove duplicates from these arrays
-typeset -gU path cdpath fpath manpath fignore
-
-# http://xanana.ucsc.edu/~wgscott/wordpress_new/wordpress/?p=12
-typeset -ga preexec_functions
-typeset -ga precmd_functions
-typeset -ga chpwd_functions
-
-__chpwd_run_first()
-{
- [[ -n $__CHPWD_RUN_FIRST ]] || return
- eval "$__CHPWD_RUN_FIRST"
-}
-chpwd_functions+=__chpwd_run_first
-
-# warn on accidental creation of global variables
-# unset for now until we work out the corner cases, like warning about $reply
-# and $HISTFILE or $REPORTTIME.
-#setopt warn_create_global
-
-# vim:ft=zsh
--- /dev/null
+#
+# Set options related to background jobs
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+# report immediately when background jobs finish
+setopt notify
+
+# do not auto-nice background processes
+setopt no_bgnice
+
+# do not send HUP signal to jobs when the shell exits
+setopt nohup
+
+# do alert me of running jobs before exiting
+setopt checkjobs
+
+# display PID when suspending processes as well
+setopt longlistjobs
+
+# vim:ft=zsh
--- /dev/null
+#
+# Set basic options
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+# Warn on accidental creation of global variables
+setopt warn_create_global
+
+# Extended globbing. Why would you not want this?
+setopt extended_glob
+
+# If a pattern for filename generation has no matches, leave it unchanged in
+# the argument list.
+setopt no_nomatch
+
+# Prevent redirection from trunacting existing files.
+setopt no_clobber
+
+# Try to correct the spelling of commands
+setopt correct
+
+# use 0xXX and 0XX output instead of 16#XX/8#XX
+setopt c_bases
+
+# disable backslashed escape sequences unless -e is given to echo·
+setopt bsd_echo
+
+# handy script to query options
+autoload -U allopt
+
+# vim:ft=zsh
--- /dev/null
+#
+# Set up the colors array
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+autoload -U colors
+colors
+
+# vim:ft=zsh
--- /dev/null
+#
+# Load dircolors database
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+eval $(dircolors $ZDOTDIR/dircolors) 2>/dev/null || :
+
+if [ -n "$LS_COLORS" ]; then
+ # uniquify LS_COLORS due to #479544
+
+ local pair key
+ typeset -A pairs
+ for pair in ${(s.:.)LS_COLORS}; do
+ [ -z "${pair%%\=*}" ] && continue
+ pairs["${pair%%\=*}"]="${pair#*=}"
+ done
+
+ typeset -a items
+ for key in ${(k)pairs}; do
+ [ "$pairs[$key]" = 00 ] && continue #removes styles handled by normal
+ items+="${(Q)key}=$pairs[$key]"
+ done
+ LS_COLORS="${(j.:.)items}:"
+else
+ # fallback
+ export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:di=01;30:ln=target:ex=00;34:*.tar=00;31:*.tgz=00;31:*.arc=00;31:*.arj=00;31:*.taz=00;31:*.lha=00;31:*.lz4=00;31:*.lzh=00;31:*.lzma=00;31:*.tlz=00;31:*.txz=00;31:*.tzo=00;31:*.t7z=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.dz=00;31:*.gz=00;31:*.lrz=00;31:*.lz=00;31:*.lzo=00;31:*.xz=00;31:*.zst=00;31:*.tzst=00;31:*.bz2=00;31:*.bz=00;31:*.tbz=00;31:*.tbz2=00;31:*.tz=00;31:*.deb=00;31:*.rpm=00;31:*.jar=00;31:*.war=00;31:*.ear=00;31:*.sar=00;31:*.rar=00;31:*.alz=00;31:*.ace=00;31:*.zoo=00;31:*.cpio=00;31:*.7z=00;31:*.rz=00;31:*.cab=00;31:*.jpg=00;35:*.jpeg=00;35:*.mjpg=00;35:*.mjpeg=00;35:*.gif=00;35:*.bmp=00;35:*.pbm=00;35:*.pgm=00;35:*.ppm=00;35:*.tga=00;35:*.xbm=00;35:*.xpm=00;35:*.tif=00;35:*.tiff=00;35:*.png=00;35:*.svg=00;35:*.svgz=00;35:*.mng=00;35:*.pcx=00;35:*.mov=00;35:*.mpg=00;35:*.mpeg=00;35:*.m2v=00;35:*.mkv=00;35:*.webm=00;35:*.ogm=00;35:*.mp4=00;35:*.m4v=00;35:*.mp4v=00;35:*.vob=00;35:*.qt=00;35:*.nuv=00;35:*.wmv=00;35:*.asf=00;35:*.rm=00;35:*.rmvb=00;35:*.flc=00;35:*.avi=00;35:*.fli=00;35:*.flv=00;35:*.gl=00;35:*.dl=00;35:*.xcf=00;35:*.xwd=00;35:*.yuv=00;35:*.cgm=00;35:*.emf=00;35:*.ogv=00;35:*.ogx=00;35:';
+fi
+
+# vim:ft=zsh
--- /dev/null
+#
+# Load Oh My Zsh
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+declare -g ZSH=$ZDOTDIR/oh-my-zsh
+declare -g ZSH_CUSTOM=$ZDOTDIR
+
+declare -g ZSH_THEME="madduck"
+declare -g DISABLE_AUTO_UPDATE="true"
+
+declare -g HIST_STAMPS="yyyy-mm-dd"
+
+# workaround for https://github.com/robbyrussell/oh-my-zsh/issues/5971
+declare -g ZSH_DISABLE_COMPFIX ZSH_CACHE_DIR config_file custom_config_file SHORT_HOST ZSH_COMPDUMP
+
+# Uncomment the following line to use case-sensitive completion.
+# CASE_SENSITIVE="true"
+
+# Uncomment the following line to use hyphen-insensitive completion. Case
+# sensitive completion must be off. _ and - will be interchangeable.
+# HYPHEN_INSENSITIVE="true"
+
+# Uncomment the following line to disable bi-weekly auto-update checks.
+
+# Uncomment the following line to change how often to auto-update (in days).
+# export UPDATE_ZSH_DAYS=13
+
+# Uncomment the following line to disable colors in ls.
+# DISABLE_LS_COLORS="true"
+
+# Uncomment the following line to display red dots whilst waiting for completion.
+# COMPLETION_WAITING_DOTS="true"
+
+# Uncomment the following line if you want to disable marking untracked files
+# under VCS as dirty. This makes repository status check for large repositories
+# much, much faster.
+# DISABLE_UNTRACKED_FILES_DIRTY="true"
+
+# Uncomment the following line if you want to change the command execution time
+# stamp shown in the history command output.
+# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
+
+# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
+# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
+# Example format: plugins=(rails git textmate ruby lighthouse)
+# Add wisely, as too many plugins slow down shell startup.
+# plugins=(git)
+
+source $ZSH/oh-my-zsh.sh
+
+# User configuration
+
+# export MANPATH="/usr/local/man:$MANPATH"
+
+# You may need to manually set your language environment
+# export LANG=en_US.UTF-8
+
+# Preferred editor for local and remote sessions
+# if [[ -n $SSH_CONNECTION ]]; then
+# export EDITOR='vim'
+# else
+# export EDITOR='mvim'
+# fi
+
+# Compilation flags
+# export ARCHFLAGS="-arch x86_64"
+
+# ssh
+# export SSH_KEY_PATH="~/.ssh/rsa_id"
+
+# Set personal aliases, overriding those provided by oh-my-zsh libs,
+# plugins, and themes. Aliases can be placed here, though oh-my-zsh
+# users are encouraged to define aliases within the ZSH_CUSTOM folder.
+# For a full list of active aliases, run `alias`.
+#
+# Example aliases
+# alias zshconfig="mate ~/.zshrc"
+# alias ohmyzsh="mate ~/.oh-my-zsh"
+
+# vim:ft=zsh
--- /dev/null
+#
+# Fancy setting of the xterm title
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+# Based on http://www.zshwiki.org/cgi-bin/wiki.pl?ZshHardStatus
+#
+
+autoload -U add-zsh-hook
+
+__set_xterm_title() {
+ emulate -L zsh
+ case $TERM in
+ screen)
+ print -nR $'\033k'$1$'\033'\\
+ print -nR $'\033]0;'$2$'\a'
+ ;;
+ xterm|rxvt*)
+ print -nR $'\033]0;'$*$'\a'
+ ;;
+ esac
+}
+
+__get_session_flags() {
+ emulate -L zsh
+ [ -n "$SSH_CONNECTION" ] || return
+ local flags
+ [ -n "$DISPLAY" ] && flags+=x
+ [ -n "$SSH_AUTH_SOCK" ] && flags+=a
+ [[ $SSH_CLIENT = *:* ]] && flags+=6
+ [ -n "$flags" ] && echo "[${flags}]"
+}
+
+__get_standard_prompt() {
+ emulate -L zsh
+ [[ -z $SSH_CLIENT ]] || print -nP "%m"
+ print -P "%#%25\<..\<%~ $(__get_session_flags)"
+}
+
+_set_plain_xterm_title() {
+ emulate -L zsh
+ __set_xterm_title "$(__get_standard_prompt)"
+}
+add-zsh-hook precmd _set_plain_xterm_title
+
+_set_cmd_xterm_title () {
+ emulate -L zsh
+ local -a cmd; cmd=(${(z)1}) # Re-parse the command line
+
+ # Construct a command that will output the desired job number.
+ case $cmd[1] in
+ fg) if (( $#cmd == 1 )); then
+ # No arguments, must find the current job
+ cmd=(builtin jobs -l %+)
+ else
+ # Replace the command name, ignore extra args.
+ cmd=(builtin jobs -l ${(Q)cmd[2]})
+ fi;;
+ %*) cmd=(builtin jobs -l ${(Q)cmd[1]});; # Same as "else" above
+ *) # Not resuming a job,
+ __set_xterm_title $cmd[1]:t${cmd[2]:+ }$cmd[2,-1] "| $(__get_standard_prompt)"
+ return;; # so we're all done
+ esac
+
+ local -A jt; jt=(${(kv)jobtexts}) # Copy jobtexts for subshell
+
+ # Run the command, read its output, and look up the jobtext.
+ # Could parse $rest here, but $jobtexts (via $jt) is easier.
+ $cmd 2>/dev/null >>(read num rest; cmd=(${(z)${(e):-\$jt$num}};)
+ __set_xterm_title $leader$cmd[1]:t${cmd[2]:+ }$cmd[2,-1] "| $(__get_standard_prompt)"
+)
+}
+add-zsh-hook preexec _set_cmd_xterm_title
+
+# vim:ft=zsh
+++ /dev/null
-# zshrc/19_dircolors
-#
-# Load dircolors database
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-eval $(dircolors $ZDOTDIR/dircolors) 2>/dev/null || :
-
-if [ -n "$LS_COLORS" ]; then
- # uniquify LS_COLORS due to #479544
-
- typeset -A pairs
- for pair in ${(s.:.)LS_COLORS}; do
- [ -z "${pair%%\=*}" ] && continue
- pairs["${pair%%\=*}"]="${pair#*=}"
- done
-
- typeset -a items
- for key in ${(k)pairs}; do
- [ "$pairs[$key]" = 00 ] && continue #removes styles handled by normal
- items+="${(Q)key}=$pairs[$key]"
- done
- LS_COLORS="${(j.:.)items}:"
-else
- # fallback
- LS_COLORS="di=01;30:ln=target:ex=00;34:no=00:fi=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:*.tar=00;31:*.tgz=00;31:*.svgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.dz=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tbz2=00;31:*.tz=00;31:*.deb=00;31:*.rpm=00;31:*.jar=00;31:*.rar=00;31:*.ace=00;31:*.zoo=00;31:*.cpio=00;31:*.7z=00;31:*.rz=00;31:*.jpg=00:*.jpeg=00:*.gif=00:*.bmp=00:*.pbm=00:*.pgm=00:*.ppm=00:*.tga=00:*.xbm=00:*.xpm=00:*.tif=00:*.tiff=00:*.png=00:*.svg=00:*.mng=00:*.pcx=00:*.mov=00:*.mpg=00:*.mpeg=00:*.m2v=00:*.mkv=00:*.ogm=00:*.mp4=00:*.m4v=00:*.mp4v=00:*.vob=00:*.qt=00:*.nuv=00:*.wmv=00:*.asf=00:*.rm=00:*.rmvb=00:*.flc=00:*.avi=00:*.fli=00:*.gl=00:*.dl=00:*.xcf=00:*.xwd=00:*.yuv=00:*.aac=00:*.au=00:*.flac=00:*.mid=00:*.midi=00:*.mka=00:*.mp3=00:*.mpc=00:*.ogg=00:*.ra=00:*.wav=00"
-fi
-
-# vim:ft=zsh
--- /dev/null
+#
+# Autoload some smart replacements of common functionality implemented in zsh
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+# smart xargs replacement
+autoload -U zargs
+
+# programmable moving, copying, and linking
+autoload -U zmv
+
+alias zmv='noglob zmv'
+alias mmv='zmv -W'
+alias zcp='zmv -C'
+alias zln='zmv -L'
+
+# vim:ft=zsh
--- /dev/null
+#
+# Helper functions for temporary files, directories, and pastebining
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+cdt() {
+ emulate -L zsh
+ REPLY=$(mktemp -td ${1:-cdt}.XXXXXX)
+ builtin cd $REPLY
+ rm -f ${TMPDIR:-/tmp}/cdt.latest
+ ln -s $REPLY ${TMPDIR:-/tmp}/cdt.latest
+}
+
+_cdt() {
+ cdt "$@"
+ zle reset-prompt
+ zle -M "$REPLY"
+}
+zle -N _cdt
+bindkey '\ed' _cdt
+
+vit() {
+ emulate -L zsh
+ local prefix i
+ for i in "$@"; do
+ case "$i" in
+ -) local stdin=1; shift;;
+ *) if [ -z "${prefix:-}" ]; then
+ prefix="$i"; shift
+ else
+ zwarn "prefix $prefix already specified, skipping: $i"
+ fi
+ ;;
+ esac
+ done
+ REPLY=$(mktemp -t ${prefix:-vit}-XXXXXX.txt)
+ [ -n "$stdin" ] && cat >| $REPLY
+ sensible-editor +start $REPLY </dev/tty >/dev/tty
+ ln -sf $REPLY ${TMPDIR:-/tmp}/vit.latest
+}
+_vit() {
+ vit "$@"
+ zle reset-prompt
+ zle -M "$REPLY"
+}
+zle -N _vit
+bindkey '\ef' _vit
+
+pastebin() {
+ local target="${(%):-"%D{%F-%H%M%S}"}-${1##*/}"
+ pub "${1}==${target}" 2>&1
+}
+
+_pastebinit() {
+ emulate -L zsh
+ if [[ -f "$REPLY" ]]; then
+ read -q "yesno?\rShould I paste the file $REPLY? [yN] "
+ zle reset-prompt
+ else
+ vit paste
+ yesno=y
+ fi
+ if [[ ${yesno:-n} == y ]]; then
+ zle -cR "pasting $REPLY …"
+ REPLY=$(pastebin "${REPLY}")
+ zle -M "$REPLY"
+ fi
+}
+zle -N _pastebinit
+bindkey '\ep' _pastebinit
+
+_copy_reply() {
+ if [[ -n "$REPLY" ]]; then
+ if (( $+commands[xclip] )); then
+ echo -En "$REPLY" | xclip -in
+ zle -M "Copied to primary clipboard: $REPLY"
+ else
+ zle -M "Cannot copy to clipboard, xclip command not found"
+ fi
+ else
+ zle -M "Nothing to copy, \$REPLY is empty"
+ fi
+}
+zle -N _copy_reply
+bindkey '\ec' _copy_reply
+
+TS() {
+ local topic ret quiet
+ typeset -g REPLY
+ topic="${(j:_:)@}"
+ REPLY="${TMPDIR:-/tmp}/script.${topic:-$LOGNAME}.$$.${(%):-"%D{%Y%m%d.%H%M}"}"
+ PS1="
+%# " RPS1= script -qe -c "zsh -f" -f "$REPLY"
+ ret=$?
+ zinfo "typescript is in $REPLY ."
+ return $ret
+}
+
+# vim:ft=zsh
+++ /dev/null
-# zshrc/20_compsys
-#
-# Configures the completions system
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-zstyle :compinstall filename '$ZDOTDIR/zshrc/20_compsys'
-
-# automatically list choices on an ambiguous completion
-setopt auto_list
-
-# use menu after the second completion request
-setopt auto_menu
-
-# recognise exact matches even if they're ambiguous
-setopt rec_exact
-
-# move cursor to end of word being completed
-setopt always_to_end
-
-# correct the command if mistyped
-setopt correct
-
-# correct all arguments, not just the command
-#setopt correctall
-
-# be magic about adding/removing final characters on tab completion
-setopt auto_param_keys auto_param_slash auto_remove_slash
-
-# load fancy completion list and menu handler
-zmodload zsh/complist
-
-# initialise the completion system
-autoload -U compinit
-compinit -d $ZVARDIR/comp-$HOST
-
-# cache results
-zstyle ':completion:*' use-cache on
-zstyle ':completion:*' cache-path $ZVARDIR/compcache
-
-#zstyle ':completion:*' completer _list _expand _complete _ignored _match _correct _approximate _prefix
-zstyle ':completion:*' completer _complete _ignored _match _correct _approximate
-
-# allow cursor-key navigation through completion set
-zstyle ':completion:*:*:*:*' menu select
-
-# use colours in completion lists and menus
-zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
-
-# ignore working and backup copies, and compiled objects
-zstyle ':completion:*:(all-|)files' ignored-patterns \
- '*.bk' '*.bak' '*.old' '*~' '.*.sw?' '*.o' '*.pyc'
-
-zstyle -e ':completion:*:approximate:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/3)) not-numeric )'
-zstyle -e ':completion:*:correct:*' max-errors 'reply=($((($#PREFIX+$#SUFFIX)/2)) numeric )'
-#zstyle ':completion:*:correct:::' max-errors 1 not-numeric
-#zstyle ':completion:*:approximate:::' max-errors 2 numeric
-
-#zstyle ':completion:*' list-suffixes true
-#zstyle ':completion:*' match-original both
-#zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
-#zstyle ':completion:*:match:*' original only
-#zstyle ':completion:*' original true
-#zstyle ':completion:*' squeeze-slashes true
-
-# functions which start with _ are internal and ignored
-zstyle ':completion:*:functions' ignored-patterns '_*'
-
-# do not offer files already specified on the line
-zstyle ':completion:*:rm:*' ignore-line yes
-
-#zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
-#zstyle ':completion::*:(-command-|export):*' fake-parameters ${${${_comps[(I)-value-*]#*,}%%,*}:#-*-}
-
-# ignore current directory when completing in ../
-#zstyle ':completion:*:cd:*' ignore-parents parent pwd
-zstyle ':completion:*' ignore-parents parent pwd
-
-# http://xana.scru.org/2005/08/20#ignorelatexjunk
-zstyle -e ':completion:*:*:vim#:*:*' ignored-patterns \
- 'texfiles=$(echo ${PREFIX}*.tex); [[ -n "$texfiles" ]] &&
- reply=(*.(aux|dvi|log|ps|pdf|bbl|toc|lot|lof|latexmain)) || reply=()'
-
-# http://madism.org/~madcoder/dotfiles/zsh/40_completion
-zstyle ':completion:*:processes' command 'ps -au$USER -o pid,time,cmd|grep -v "ps -au$USER -o pid,time,cmd"'
-
-# commands that take commands as arguments
-compdef _precommand gdb
-compdef _precommand nohup
-compdef _precommand strace
-
-zstyle ':completion:*' verbose yes
-zstyle ':completion:*:descriptions' format '%B%d%b'
-zstyle ':completion:*:messages' format '%d'
-zstyle ':completion:*:warnings' format 'no matches for: %d'
-zstyle ':completion:*' group-name ''
-
-# #527301
-zstyle :completion::complete:xmms2:\*:values list-grouped false
-zstyle :completion::complete:xmms2:\*:values sort false
-
-# vim:ft=zsh
+++ /dev/null
-# zshrc/20_dirhashes
-#
-# populate some hashes for commonly used directories
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-hash -d doc=/usr/share/doc
-hash -d log=/var/log
-hash -d deb=/var/cache/apt/archives
-
-# vim:ft=zsh
--- /dev/null
+#
+# Common aliases for chmod/chown/chgrp
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+typeset -la common_perms=(rw- rwx r-- r-x r-s rws)
+local perm
+for perm in $common_perms; do
+ eval alias $perm="'chmod $perm'"
+done
+
+# vim:ft=zsh
--- /dev/null
+#
+# Common aliases for ls
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+alias l='ls --time-style=+%Y-%m-%d-%H:%M -gG'
+alias ll='ls -l'
+alias la='ls -a'
+alias lla='ls -la'
+alias lt='ls -lt'
+alias lrt='ls -lrt'
+alias lat='ls -lat'
+alias lart='ls -lart'
+# List only directories and symbolic links that point to directories
+alias lsd='ll -d *(-/DN)'
+
+# vim:ft=zsh
# Source repository: http://git.madduck.net/v/etc/zsh.git
#
-function trace() { eval "set -x; $@" }
-
-alias mv='nocorrect mv'
-alias cp='nocorrect cp'
-alias ln='nocorrect ln'
-alias mkdir='nocorrect mkdir'
-alias rm='nocorrect rm'
-
-alias find='noglob find'
-alias w3m='noglob w3m -no-mouse'
-alias links='noglob links'
-alias wb='noglob www-browser'
-alias wget='noglob wget'
-alias curl='noglob curl'
-alias apt-cache='noglob apt-cache'
-alias locate='noglob locate'
-
-local _USER_AGENT="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.14) Gecko/20080404 Iceweasel/2.0.0.14 (Debian-2.0.0.14-2)"
-alias swget="noglob wget --user-agent='$USER_AGENT'"
-
-typeset -a _ls_opts; _ls_opts=(-bC --color=auto)
-command ls --group-directories-first >/dev/null 2>&1 \
- && _ls_opts+=--group-directories-first
-# I prefer POSIX collation for ls
-alias ls="LC_COLLATE=POSIX ls $_ls_opts"
-
-alias l='ls --time-style=+%Y-%m-%d-%H:%M -gG'
-alias ll='ls -l'
-alias la='ls -a'
-alias lla='ls -la'
-alias lt='ls -lt'
-alias lrt='ls -lrt'
-alias lat='ls -lat'
-alias lart='ls -lart'
-# List only directories and symbolic links that point to directories
-alias lsd='ll -d *(-/DN)'
-
-alias lscontext=ls
-cd () { __CHPWD_RUN_FIRST=lscontext && builtin cd "$@" && unset __CHPWD_RUN_FIRST }
-#_cd_l() { ll }
-#chpwd_functions+=_cd_l
-
-# #183394
-alias w='w|cat'
-
-alias -g ND='*(/om[1])' # newest directory
-alias -g NF='*(.om[1])' # newest file
-
-alias egrep='egrep --color=auto -d skip -D skip'
-alias fgrep='fgrep --color=auto -d skip -D skip'
-alias grep='grep --color=auto -d skip -D skip'
-
-alias mmv='noglob zmv -W'
-alias zcp='zmv -C'
-alias zln='zmv -L'
-alias zgmv='zmv -p git-mv'
-
-alias cal='cal -3'
-alias ftp=lftp
-
-alias mbug='bts show --mbox'
-alias bug='BROWSER=www-browser bts show'
-
-edalias() {
- [[ -z "$1" ]] && { echo "Usage: edalias <alias_to_edit>" ; return 1 } || vared aliases'[$1]' ;
-}
-compdef _aliases edalias
-
-edfunc() {
- [[ -z "$1" ]] && { echo "Usage: edfunc <function_to_edit>" ; return 1 } || zed -f "$1" ;
-}
-compdef _functions edfunc
-
-doc() { cd /usr/share/doc/$1 }
-compdef '_files -W /usr/share/doc -/' doc
-
alias giti='git init && git add . && git commit -minitial\ checkin && git tag orig'
gbs() {
local branch; branch="$(git symbolic-ref -q HEAD)"; branch="${branch##*/}"
eval egrep "'$pattern'" "~log/${(j: ~log/:)@}"
}
-alias px='ps afux'
-alias mps='ps -ao user,pcpu,start,command'
-
-function of() { lsof -np "$1" }
-compdef _pids of
-
function psgrep() { ps aux | grep "[${1[1]}]${1[2,-1]}" }
-alias rw-='chmod 600'
-alias rwx='chmod 700'
-alias r--='chmod 644'
-alias r-x='chmod 755'
-alias r-s='chmod 2755'
-alias rws='chmod 2775'
-
-alias bofh='fortune bofh-excuses'
-
-autoload -U baseconv
-alias b2d='baseconv 2 10'
-alias d2b='baseconv 10 2'
-alias d2h='baseconv 10 16'
-alias h2d='baseconv 16 10'
-alias d2o='baseconv 10 8'
-alias d2o='baseconv 10 8'
-alias h2b='baseconv 16 2'
-alias b2h='baseconv 2 16'
-
alias sendmail=/usr/sbin/sendmail
_d() { dict $* }
done
unset _LANGUAGES
-alias dpkg-buildpackage="dpkg-buildpackage -k$DEBKEYID -rfakeroot"
-
bugsub() { echo X-debbugs-autosubscribe: madduck | sendmail -f $DEBEMAIL ${1:?No bug number}-subscribe@bugs.debian.org }
bugunsub() { sendmail -f $DEBEMAIL ${1:?No bug number}-unsubscribe@bugs.debian.org </dev/null }
ptssub() { echo subscribe ${1:?E: no package name given.} | sendmail -f ${2:-$DEBEMAIL} pts@qa.debian.org }
+++ /dev/null
-# zshrc/40_tempfuncs
-#
-# Helper functions to create temporary files and directories
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-cdt () {
- local tmpdir
- tmpdir=$(mktemp -td ${1:-cdt}.XXXXXX)
- builtin cd $tmpdir
- pwd
- rm -f ${TMPDIR:-/tmp}/cdt.latest
- ln -s $tmpdir ${TMPDIR:-/tmp}/cdt.latest
-}
-
-vit () {
- local prefix
- for i in "$@"; do
- case "$i" in
- -) local stdin=1; shift;;
- *) if [ -z "${prefix:-}" ]; then
- prefix="$i"; shift
- else
- error "prefix already specified: $prefix"
- return 1
- fi
- ;;
- esac
- done
- local tmpfile=$(mktemp -t ${prefix:-vit}.XXXXXX)
- [ -n "$stdin" ] && cat >| $tmpfile
- sensible-editor $tmpfile </dev/tty >/dev/tty
- echo $tmpfile
- ln -sf $tmpfile ${TMPDIR:-/tmp}/vit.latest
-}
-
-# vim:ft=zsh
--- /dev/null
+#
+# zsh-based conversion between numeric bases
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+function baseconv() {
+ if [ $# -ne 3 ]; then
+ echo Usage: ${0##*/} ibase obase number
+ return 1
+ fi
+
+ typeset -li $2 var
+ eval ((var=${1}#${3}))
+ echo ${var#*\#}
+}
+
+typeset -lA bases=(b 2 o 8 d 10 h 16)
+typeset -l {k,v}{1,2}
+for k1 v1 in ${(kv)bases}; do
+ for k2 v2 in ${(kv)bases}; do
+ [[ $k1 == $k2 ]] && continue
+ eval alias ${k1}2${k2}="'baseconv $v1 $v2'"
+ done
+done
--- /dev/null
+#
+# Configure keeping a directory stack
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+# make cd push the old directory onto the directory stack.
+setopt auto_pushd
+
+# iexchange the meanings of `+' and `-' when used with a number to specify
+# a directory in the stack
+setopt pushd_minus
+
+# pushd with no arguments act like `pushd $HOME'
+setopt pushd_to_home
+
+# do not push multiple copies of the same directory onto the directory stack
+setopt pushd_ignore_dups
+
+# vim:ft=zsh
--- /dev/null
+#
+# Provide arrays for accept-line and magic-space handlers
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+function _widget_functions_handler() {
+ emulate -L zsh
+ local fn
+ for fn in ${(P)${:-"${WIDGET//-/_}_functions"}}; do eval $fn \"\$@\"; done
+ [[ $WIDGET != zle-* ]] || return
+ zle .${WIDGET} "$@"
+}
+
+# define arrays like $accept_line_functions so we can stack functions to be
+# called for these widgets
+typeset -l widget
+for widget in accept_line magic_space zle_line_init; do
+ typeset -ga ${widget}_functions
+ zle -N ${widget//_/-} _widget_functions_handler
+done
+
+# vim:ft=zsh
+++ /dev/null
-# zshrc/80_bindkeys
-#
-# Defines key bindings
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-# use emacs keybindings by default
-bindkey -e
-
-# history expansion on pressing space
-#bindkey ' ' magic-space
-
-# repeat the previous shell-word ($WORDCHARS)
-bindkey '\e=' copy-prev-shell-word
-
-# allow for better ad-hoc multiline editing
-bindkey '\eq' push-line-or-edit
-
-# fix home/end keys (for mosh)
-bindkey "\e[7~" beginning-of-line
-bindkey "\e[8~" end-of-line
-
-# vim:ft=zsh
--- /dev/null
+#
+# Set up completion
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+### INITIALISATION
+
+zstyle :compinstall filename "$ZDOTDIR/zshrc/80-completion"
+
+autoload -Uz compinit
+compinit -d $ZVARDIR/comp-$HOSTS
+
+# load fancy completion list and menu handler
+zmodload zsh/complist
+
+# avoid old-style completion (compctl)
+zstyle ':completion:*' use-compctl false
+
+# cache results
+zstyle ':completion:*' use-cache on
+zstyle ':completion:*' cache-path $ZVARDIR/compcache-${HOST}
+
+### OPTIONS
+
+# show the list of completions right away when there's an ambiguous prefix
+# note that there's also the 'list' zstyle, which could override this
+setopt auto_list
+setopt no_list_ambiguous
+
+# use menu after the second completion request
+# cf. also the 'menu' zstyle, which eclipses this
+setopt auto_menu
+
+# these mess with the aforementioned behaviour, make sure they're off
+setopt no_menu_complete no_bash_auto_list
+
+# make the completion list smaller by printing the matches in columns with
+# different widths.
+setopt list_packed
+
+# do not recognise exact matches even if they're ambiguous
+# (we don't want this because /var/log/sys<tab> should also
+# offer /var/log/syslog…)
+setopt no_rec_exact
+
+# move cursor to end of word being completed
+setopt always_to_end
+
+# be magic about adding/removing final characters on tab completion
+setopt auto_param_keys auto_param_slash auto_remove_slash
+
+# allow completion to happen in the middle of a word
+setopt complete_in_word
+
+### COMPLETERS
+
+# set the list of completers
+zstyle ':completion:*' completer \
+ _expand_alias _expand \
+ _complete _prefix:-complete \
+ _approximate _prefix:-approximate \
+ _match _ignored
+zstyle ':completion:*:prefix-complete:*' completer _complete
+zstyle ':completion:*:prefix-approximate:*' completer _approximate
+
+# configure the _expand completer
+bindkey '^i' complete-word
+zstyle ':completion::expand:*' tag-order 'expansions all-expansions original'
+
+# do approximated completion, allowing 1 error per three characters
+zstyle ':completion:*:approximate:' max-errors 'reply=( $((($#PREFIX+$#SUFFIX)/3 )) numeric )'
+
+### TRIM OUTPUT OF IGNORED PATTERNS
+
+# functions which start with _ are internal and ignored
+zstyle ':completion:*:*:-command-:*' tag-order 'functions:-non-comp'
+zstyle ':completion:*:functions-non-comp' ignored-patterns '_*'
+
+# ignore working and backup copies, and compiled objects
+zstyle ':completion:*:argument-rest:' file-patterns '
+ *(-/):directories:directories
+ (*.(ba#k|old)|*~):backup-files:"backup files"
+ *.(l#[oa]|py[co]|zwc):compiled-files:"compiled files"
+ *.te#mp:temp-files:"temp files"
+ .*.sw?:vim-swap-files:"vim swap files"
+ %p:globbed-files *:all-files
+ '
+zstyle ':completion:*:argument-rest:(all|globbed)-files' ignored-patterns \
+ '((*.(ba#k|old)|*~)|*.(l#[oa]|py[co]|zwc)|*.te#mp|.*.sw?|*(-/))'
+#TODO directories not ignored in files output:
+#### fishbowl:/tmp/cdt.6kIDed% cat <tab>
+#### directories
+#### foobar/
+#### backup files
+#### foo.bk foo.old
+#### compiled files
+#### foo.a foo.la foo.lo foo.o foo.pyc foo.zwc
+#### temp files
+#### foo.tmp
+#### files
+#### foobar/ foo.c foo.txt
+
+#zstyle ':completion:*:argument*' tag-order "
+# globbed-files files all-files
+# directories
+# backup-files
+# compiled-files
+# temp-files
+# vim-swap-files
+# "
+zstyle ':completion:*:argument*' group-order \
+ vim-swap-files \
+ globbed-files files all-files \
+ directories \
+ backup-files \
+ compiled-files \
+ temp-files \
+#end
+#TODO no effect on ordering yet
+
+zstyle ':completion:*:argument*' group-order vim-swap-files directories \
+ globbed-files files all-files backup-files compiled-files temp-files
+
+resource() { source $ZDOTDIR/zshrc/80-completion; zle -M "resourced"; }
+zle -N resource
+bindkey '\er' resource
+
+# do not offer files already specified on the line
+zstyle ':completion:*:rm' ignore-line yes
+
+# do not offer current directory as completion in ../
+zstyle ':completion:*' ignore-parents parent pwd
+
+# http://xana.scru.org/2005/08/20#ignorelatexjunk
+zstyle -e ':completion:*:*:vim#' ignored-patterns \
+ 'texfiles=$(echo ${PREFIX}*.tex); [[ -n "$texfiles" ]] &&
+ reply=(*.(aux|dvi|log|p(s|df)|bbl|toc|lo[tf]|latexmain)) || reply=()'
+
+### LOOK & FEEL
+
+# Take advantage of $LS_COLORS for completion as well.
+zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
+
+# List directories first/in a separate group
+zstyle ':completion:*' list-dirs-first yes
+
+# Use a less ambiguous list separator
+zstyle ':completion:*' list-separator '::'
+
+# allow cursor-key navigation through completion set
+zstyle ':completion:*' menu select
+
+# always offer the original string as a completion choice
+zstyle ':completion:*:match:*' original true
+
+# squash multiple slashes to one, which is the unix-style
+zstyle ':completion:*' squeeze-slashes true
+
+# Formatting of completion menu/list
+zstyle ':completion:*' verbose yes
+zstyle ':completion:*' auto-description 'missing description: %d'
+zstyle ':completion:*:descriptions' format '%B%d%b'
+zstyle ':completion:*:messages' format '%d'
+zstyle ':completion:*:warnings' format 'no matches for: %d'
+zstyle ':completion:*:corrections' format "%B%d $fg[red](errors: %e)$reset_color%b"
+#zstyle ':completion:*:matches' group 'yes'
+zstyle ':completion:*' group-name ''
+
+# Handle command-line options a bit differently
+zstyle ':completion:*:options' auto-description '%d'
+zstyle ':completion:*:options' description 'yes'
+
+### KEYBINDINGS
+
+# ^x^h :: provide context help, in addition to ^x h
+bindkey '^x^h' _complete_help
+
+### SPECIFIC COMMAND/CONTEXT HANDLING
+
+# commands that take commands as arguments
+compdef _precommand gdb
+compdef _precommand nohup
+compdef _precommand strace
+
+# a couple commands don't yet have -option completion but
+# they're generic GNU tools, so…
+typeset -la gnu_generic_tools=(mv)
+local c
+for c ($gnu_generic_tools) compdef _gnu_generic $c
+
+# custom path when expanding in the sudo context
+zstyle ':completion:*:sudo:*' command-path /usr/local/sbin \
+ /usr/local/bin \
+ /usr/sbin \
+ /usr/bin \
+ /sbin \
+ /bin \
+ /usr/X11R6/bin
+
+# Completion of processes: show all user processes
+zstyle ':completion:*:processes' command 'PS="ps -au$USER -o pid,tty,time,pcpu,cmd"; eval $PS | grep -v "$PS"'
+
+# Integrate directory stack with cd -<tab> completion
+zstyle ':completion:*:*:cd:*:directory-stack' menu yes select
+
+# Offer .. as a special-dir to completions
+zstyle -e ':completion:*' special-dirs '[[ $PREFIX = (../)#(|.|..) ]] && reply=(..)'
+#TODO does not yet work
+
+# complete manual by their section
+zstyle ':completion:*:manuals' separate-sections true
+zstyle ':completion:*:manuals.*' insert-sections true
+zstyle ':completion:*:man:*' menu yes select
+
+# debbug #527301
+zstyle ':completion::complete:xmms2:*:values' list-grouped false
+zstyle ':completion::complete:xmms2:*:values' sort false
+
+# vim:ft=zsh
-# zshrc/80_history
#
-# Set up command line history functions
+# Configure history file storage
#
# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
# Released under the terms of the Artistic Licence 2.0
# typeset -g on this one to make warn_create_global happy
typeset -g HISTFILE=$ZVARDIR/history-$HOST
-[[ -e $ZVARDIR/history ]] && mv $ZVARDIR/history $HISTFILE
HISTSIZE=10000
SAVEHIST=$HISTSIZE
LISTMAX=1000
-# treat ! specially like csh did
-setopt bang_hist
+# properly lock the file on write (better on modern operating systems)
+setopt hist_fcntl_lock
-# ignore duplicates in the history
-setopt hist_ignore_dups
-
-# save timestamp and duration with each event
-setopt extended_history
+# add history lines to the $HISTFILE incrementally (as soon as they are
+# entered), rather than waiting until the shell exits.
+setopt inc_append_history
+setopt no_append_history
-# properly lock the file on write, if that option exists
-setopt hist_fcntl_lock 2>/dev/null
-
-# skip over non-contiguous duplicates when searching history
-setopt hist_find_no_dups
+# do not store duplicates in the history file
+setopt hist_ignore_dups
# don't store commands starting with a space in the history file
setopt hist_ignore_space
-# don't store history/fc -l invocations
-setopt hist_no_store
-
# remove superfluous blanks from each command line
setopt hist_reduce_blanks
+# skip over non-contiguous duplicates when searching history
+setopt hist_find_no_dups
+
+# save timestamp and duration with each event
+setopt extended_history
+
# vim:ft=zsh
--- /dev/null
+#
+# Configure the zsh line editor
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+# allow 700ms between esc and subsequent character
+KEYTIMEOUT=70
+
+# do not consider '/' to be part of a word, i.e. delete-word
+# iterates through URL components
+WORDCHARS="${WORDCHARS//\/}"
+
+# esc-= :: Repeat the previous shell-word ($WORDCHARS)
+bindkey '\e=' copy-prev-shell-word
+
+# esc-q :: allow for better ad-hoc multiline editing
+bindkey '\eq' push-line-or-edit
+
+# Perform history expansion and insert a space into the buffer.
+bindkey ' ' magic-space
+
+# Automatically escape URLs
+autoload -U url-quote-magic
+zle -N self-insert url-quote-magic
+# … even when pasted
+autoload -U bracketed-paste-magic
+zle -N bracketed-paste bracketed-paste-magic
+
+# Change defaults and remove {} from the meta characters, as we often use them
+# in the shell to create multiple URLs, e.g. http://example.org/{1,2,3}.txt
+zstyle ':url-quote-magic:*' url-metas '*?[]^(|)~#='
+
+# Allow editing of the command line using $EDITOR with esc-e
+autoload -U edit-command-line
+zle -N edit-command-line
+bindkey '\ee' edit-command-line
+
+# Bind esc-u/-U to insert date-/timestamp based on shell timezones
+# (esc-t/-T does it from urxvt in the local timezone
+_insert_datestamp() { LBUFFER+=${(%):-'%D{%Y-%m-%d}'}; }
+zle -N insert-datestamp _insert_datestamp
+bindkey '\eu' insert-datestamp
+_insert_timestamp() { LBUFFER+=${(%):-'%D{%Y-%m-%d-%H%M%S}'}; }
+zle -N insert-timestamp _insert_timestamp
+bindkey '\eU' insert-timestamp
+
+# Jump behind the first word (and the space) on the cmdline to add options
+function _jump_after_first_word() {
+ emulate -L zsh
+ local words
+ words=(${(z)BUFFER})
+
+ if (( ${#words} <= 1 )) ; then
+ CURSOR=${#BUFFER}
+ else
+ CURSOR=$((${#${words[1]}}+1))
+ fi
+}
+zle -N _jump_after_first_word
+bindkey '\e1' _jump_after_first_word
+
+# ^k :: kill through the end of the line
+bindkey '^k' kill-line
+
+# ^? :: borrow backspace behaviour from emacs-mode, rather than stilly limited
+# viins
+bindkey $terminfo[kbs] backward-delete-char
+
+# ^a/^e :: move to beginning and end of line, like emacs
+bindkey '^a' beginning-of-line
+bindkey '^e' end-of-line
+
+# \ew :: print pwd to status line
+function _whereami() {
+ zle -M "${(%):-"%m:%~"}"
+}
+zle -N _whereami
+bindkey '\ew' _whereami
+
+# ^x^x :: execute widgets directory
+bindkey '^x^x' execute-named-cmd
+
+# vim:ft=zsh
--- /dev/null
+#
+# Provide a means to (re-)run the command with sudo
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+function sudo-command-line () {
+ [[ -z $BUFFER ]] && zle up-history
+ if [[ $BUFFER != sudo\ * ]]; then
+ BUFFER="sudo $BUFFER"
+ CURSOR=$(( CURSOR+5 ))
+ fi
+}
+zle -N sudo-command-line
+bindkey '^os' sudo-command-line
+
+# vim:ft=zsh
--- /dev/null
+#
+# Useful vared wrappers to edit functions and aliases
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+edalias() {
+ [[ -z "$1" ]] && { echo "Usage: edalias <alias_to_edit>" ; return 1 }
+ vared aliases'[$1]';
+}
+compdef _aliases edalias
+
+edfunc() {
+ [[ -z "$1" ]] && { echo "Usage: edfunc <function_to_edit>" ; return 1 }
+ vared functions'[$1]';
+}
+compdef _functions edfunc
+
+# vim:ft=zsh
--- /dev/null
+#
+# Provide a way to to create directories while composing the ZLE
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+_mkdir_inplace() {
+ emulate -L zsh
+ local pathtomkdir
+ if ((REGION_ACTIVE==1)); then
+ local F=$MARK T=$CURSOR
+ if [[ $F -gt $T ]]; then
+ F=${CURSOR}
+ T=${MARK}
+ fi
+ # get marked area from buffer and eliminate whitespace
+ pathtomkdir=${BUFFER[F+1,T]%%[[:space:]]##}
+ pathtomkdir=${pathtomkdir##[[:space:]]##}
+ else
+ local bufwords iword
+ bufwords=(${(z)LBUFFER})
+ iword=${#bufwords}
+ bufwords=(${(z)BUFFER})
+ pathtomkdir="${(Q)bufwords[iword]}"
+ fi
+ [[ -z "${pathtomkdir}" ]] && return 1
+ pathtomkdir=${~pathtomkdir}
+ if [[ -e "${pathtomkdir}" ]]; then
+ zle -M " path already exists, doing nothing"
+ else
+ zle -M "$(mkdir -p -v "${pathtomkdir}")"
+ zle end-of-line
+ fi
+}
+zle -N _mkdir_inplace
+bindkey '\em' _mkdir_inplace
+
+# vim:ft=zsh
--- /dev/null
+#
+# Configure incremental history search
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+bindkey '^r' history-incremental-search-backward
+bindkey '^f' history-incremental-search-forward
+
+# vim:ft=zsh
--- /dev/null
+typeset -Ag zle_abbrevs
+zle_abbrevs=(
+# '...' '../..'
+# '....' '../../..'
+# '.....' '../../../..'
+# '......' '../../../../..'
+ 'WC' '| wc'
+ 'GR' '|& grep '
+ 'HD' '| head'
+ 'HL' ' --help |& less -r'
+ 'LS' '| less'
+ 'LR' '|& less -r'
+ 'NL' '&>/dev/null'
+ 'SL' '| sort | less'
+ 'SU' '| sort -u'
+ 'TL' '| tail'
+ 'VI' '|& vim -'
+ 'ND' '*(/om[1])'
+ 'NF' '*(.om[1])'
+)
+# the ...## abbrevs are gone in favour of rationalise-dot
+
+magic-abbrev-expand() {
+ emulate -L zsh
+ setopt extendedglob
+ local MATCH MBEGIN MEND
+ LBUFFER=${LBUFFER%%(#m)[.A-Z]#}
+ LBUFFER+=${zle_abbrevs[$MATCH]:-$MATCH}
+}
+
+no-magic-abbrev-expand() {
+ emulate -L zsh
+ LBUFFER+=' '
+}
+
+zle -N magic-abbrev-expand
+zle -N no-magic-abbrev-expand
+
+magic_space_functions+=magic-abbrev-expand
+accept_line_functions+=magic-abbrev-expand
+
+bindkey "^x " no-magic-abbrev-expand
+bindkey -M isearch " " self-insert
+
+function help-show-magic-abbrevs() {
+ zle -M "$(print "Available abbreviations for expansion:"; print -a -C 2 ${(kv)zle_abbrevs})"
+}
+zle -N help-show-magic-abbrevs
+bindkey '\e?' help-show-magic-abbrevs
+
+# vim:ft=zsh
--- /dev/null
+#
+# Fix keys for mosh
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+# fix home/end keys (for mosh)
+bindkey "\e[7~" beginning-of-line
+bindkey "\e[8~" end-of-line
+
+# vim:ft=zsh
--- /dev/null
+#
+# Rationalise occurrences of three consecutive dots
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+rationalise-dot() {
+ if [[ $LBUFFER = *.. ]]; then
+ LBUFFER+=/..
+ else
+ LBUFFER+=.
+ fi
+}
+zle -N rationalise-dot
+bindkey . rationalise-dot
+
+# vim:ft=zsh
+++ /dev/null
-typeset -Ag abbreviations
-abbreviations=(
- '...' '../..'
- '....' '../../..'
- 'BG' '& exit'
- 'WC' '| wc'
- 'GR' '|& grep '
- 'HD' '| head'
- 'HL' ' --help |& less -r'
- 'LS' '| less'
- 'LR' '|& less -r'
- 'NL' '&>/dev/null'
- 'SL' '| sort | less'
- 'SU' '| sort -u'
- 'TL' '| tail'
- 'VI' '|& vim -'
-)
-
-magic-abbrev-expand() {
- local MATCH
- LBUFFER=${LBUFFER%%(#m)[-_a-zA-Z0-9]#}
- LBUFFER+=${abbreviations[$MATCH]:-$MATCH}
- zle self-insert
-}
-
-no-magic-abbrev-expand() {
- LBUFFER+=' '
-}
-
-zle -N magic-abbrev-expand
-zle -N no-magic-abbrev-expand
-bindkey " " magic-abbrev-expand
-bindkey "^x " no-magic-abbrev-expand
-bindkey -M isearch " " self-insert
-
-# vim:ft=zsh
+++ /dev/null
-# from grml
-_inplaceMkDirs() {
- local PATHTOMKDIR
- if ((REGION_ACTIVE==1)); then
- local F=$MARK T=$CURSOR
- if [[ $F -gt $T ]]; then
- F=${CURSOR}
- T=${MARK}
- fi
- # get marked area from buffer and eliminate whitespace
- PATHTOMKDIR=${BUFFER[F+1,T]%%[[:space:]]##}
- PATHTOMKDIR=${PATHTOMKDIR##[[:space:]]##}
- else
- local bufwords iword
- bufwords=(${(z)LBUFFER})
- iword=${#bufwords}
- bufwords=(${(z)BUFFER})
- PATHTOMKDIR="${(Q)bufwords[iword]}"
- fi
- [[ -z "${PATHTOMKDIR}" ]] && return 1
- PATHTOMKDIR=${~PATHTOMKDIR}
- if [[ -e "${PATHTOMKDIR}" ]]; then
- zle -M " path already exists, doing nothing"
- else
- zle -M "$(mkdir -p -v "${PATHTOMKDIR}")"
- zle end-of-line
- fi
-}
-zle -N _inplaceMkDirs && bindkey '^xm' _inplaceMkDirs
+++ /dev/null
-# zshrc/80_zle
-#
-# Configure the zsh line editor
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-# automatically escape URLs
-# /usr/share/zsh*/functions/Zle/url-quote-magic
-autoload -U url-quote-magic
-zle -N self-insert url-quote-magic
-setopt no_nomatch
-
-# http://www.zsh.org/mla/users/2006/msg00399.html
-autoload edit-command-line
-zle -N edit-command-line
-bindkey '\ee' edit-command-line
-
-_insert_datestamp() { LBUFFER+=${(%):-'%D{%Y.%m.%d}'}:; }
-zle -N insert-datestamp _insert_datestamp
-bindkey '\et' insert-datestamp
-
-# prefix search (up to cursor position)
-autoload history-search-end
-zle -N history-beginning-search-backward-end history-search-end
-zle -N history-beginning-search-forward-end history-search-end
-bindkey "\e[5~" history-beginning-search-backward-end # PageUp
-bindkey "\e[6~" history-beginning-search-forward-end # PageDown
-
-_insert_last_typed_word() { zle insert-last-word -- 0 -1 };
-zle -N _insert_last_typed_word;
-bindkey "\em" _insert_last_typed_word
-
-autoload insert-unicode-char
-zle -N insert-unicode-char
-bindkey '^Xi' insert-unicode-char
-
-# jump behind the first word on the cmdline to add options
-function _jump_after_first_word() {
- local words
- words=(${(z)BUFFER})
-
- if (( ${#words} <= 1 )) ; then
- CURSOR=${#BUFFER}
- else
- CURSOR=${#${words[1]}}
- fi
-}
-zle -N _jump_after_first_word
-bindkey '^x1' _jump_after_first_word
-
-# vim:ft=zsh
--- /dev/null
+#
+# Report time for commands running longer than n seconds
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+typeset -g REPORTTIME=5
+
+# vim:ft=zsh
-# zlogin/60_mime
#
# set up the shell's mime support
#
--- /dev/null
+# zshrc/85_direnv
+#
+# load direnv hook
+#
+# Copyright © 2014 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+if whence direnv >/dev/null; then
+ eval "$(direnv hook zsh)"
+fi
+
+# vim:ft=zsh
+++ /dev/null
-# zshrc/80_prompt
-#
-# Formats the shell prompt
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-if [ "${PS1:-}" = '%m%# ' ]; then
- local _MIDDLE="%1v%(2v.|%B%2v%b|.)%(3v.%3v.)"
- if is_root; then
- _MIDDLE="%25<…<%~%<<"
- local _PS1_HL=U
- fi
-
- local _MACHINE_NAME="${_PS1_HL:=B}%m%${(L)_PS1_HL}"
- _MACHINE_NAME="$_MACHINE_NAME${debian_chroot:+/%S$debian_chroot%s}"
-
- PS1="%(2L.+.)%${_MACHINE_NAME}:${_MIDDLE}%# "
-fi
-
-: ${RPS1:="#%(0?..%?,)%! [%l]"}
-
-# vim:ft=zsh
+++ /dev/null
-# zshrc/80_termfonts
-#
-# provide helper methods to increase/decrease fonts from the command line
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-typeset -ga _XTERM_FONTS
-#_XTERM_FONTS+=-misc-fixed-medium-r-normal--6-60-75-75-c-40-iso10646-1
-#_XTERM_FONTS+=-misc-fixed-medium-r-normal--7-70-75-75-c-50-iso10646-1
-#_XTERM_FONTS+=-misc-fixed-medium-r-normal--8-80-75-75-c-50-iso10646-1
-#_XTERM_FONTS+=-misc-fixed-medium-r-normal--9-90-75-75-c-60-iso10646-1
-#_XTERM_FONTS+=-misc-fixed-medium-r-semicondensed--12-110-75-75-c-60-iso10646-1
-_XTERM_FONTS+=-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
-#_XTERM_FONTS+=-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso10646-1
-_XTERM_FONTS+=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso10646-1
-#_XTERM_FONTS+=-misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1
-_XTERM_FONTS+=-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1
-_XTERM_FONTS+=-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1
-_XTERM_FONTS+='-*-lucidatypewriter-*-*-*-*-26-*-*-*-*-*-iso10646-1'
-_XTERM_FONT=${_XTERM_FONT:=1}
-
-_set_xterm_font() {
- if [ $1 -lt 1 ]; then
- warn "no smaller font available"
- _XTERM_FONT=1
- return 1
- elif [ $1 -gt $#_XTERM_FONTS ]; then
- warn "no larger font available"
- _XTERM_FONT=$#_XTERM_FONTS
- return 1
- fi
- _XTERM_FONT=$1
- info "selecting font: $_XTERM_FONTS[$_XTERM_FONT]"
- echo -en "\033]50;$_XTERM_FONTS[$1]\007"
-}
-#_set_xterm_font $_XTERM_FONT 2>/dev/null
-
-f++() { _set_xterm_font $((_XTERM_FONT + 1)) }
-f--() { _set_xterm_font $((_XTERM_FONT - 1)) }
-f0() { _set_xterm_font 1 }
-fx() { _set_xterm_font $#_XTERM_FONTS }
-
-# vim:ft=zsh
+++ /dev/null
-# zshrc/80_xtermtitle
-#
-# Fancy setting of the xterm title
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-# Based on http://www.zshwiki.org/cgi-bin/wiki.pl?ZshHardStatus
-#
-
-__set_xterm_title() {
- case $TERM in
- screen)
- print -nR $'\033k'$1$'\033'\\
- print -nR $'\033]0;'$2$'\a'
- ;;
- xterm|rxvt*)
- print -nR $'\033]0;'$*$'\a'
- ;;
- esac
-}
-
-__get_session_flags() {
- [ -n "$SSH_CONNECTION" ] || return
- local flags; flags=
- [ -n "$DISPLAY" ] && flags="${flags}x"
- [ -n "$SSH_AUTH_SOCK" ] && flags="${flags}a"
- [[ $SSH_CLIENT = *:* ]] && flags="${flags}6"
- [ -n "$flags" ] && echo "[${flags}]"
-}
-
-__get_standard_prompt() {
- [[ -z $SSH_CLIENT ]] || print -nP "%m"
- print -P "%#%25\<..\<%~ $(__get_session_flags)"
-}
-
-_set_plain_xterm_title() {
- __set_xterm_title "$(__get_standard_prompt)"
-}
-precmd_functions+=_set_plain_xterm_title
-
-_set_cmd_xterm_title () {
- local -a cmd; cmd=(${(z)1}) # Re-parse the command line
-
- # Construct a command that will output the desired job number.
- case $cmd[1] in
- fg) if (( $#cmd == 1 )); then
- # No arguments, must find the current job
- cmd=(builtin jobs -l %+)
- else
- # Replace the command name, ignore extra args.
- cmd=(builtin jobs -l ${(Q)cmd[2]})
- fi;;
- %*) cmd=(builtin jobs -l ${(Q)cmd[1]});; # Same as "else" above
- *) # Not resuming a job,
- __set_xterm_title $cmd[1]:t${cmd[2]:+ }$cmd[2,-1] "| $(__get_standard_prompt)"
- return;; # so we're all done
- esac
-
- local -A jt; jt=(${(kv)jobtexts}) # Copy jobtexts for subshell
-
- # Run the command, read its output, and look up the jobtext.
- # Could parse $rest here, but $jobtexts (via $jt) is easier.
- $cmd >>(
- read num rest
- cmd=(${(z)${(e):-\$jt$num}})
- __set_xterm_title $leader$cmd[1]:t${cmd[2]:+ }$cmd[2,-1] "| $(__get_standard_prompt)"
- )
-}
-preexec_functions+=_set_cmd_xterm_title
-
-# vim:ft=zsh
--- /dev/null
+#
+# Print directory context on chdir
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+autoload -U add-zsh-hook
+
+function _ls_on_chpwd() {
+ emulate -L zsh
+ ls -AF --group-directories-first
+}
+add-zsh-hook chpwd _ls_on_chpwd
+
+# vim:ft=zsh
--- /dev/null
+#
+# Enable ZLE access to manpages and run-help
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+(( ${+aliases[run-help]} )) && unalias run-help
+autoload -U run-help{,-{git,ip,openssl,sudo}}
+
+bindkey '\eh' run-help
+bindkey '^[[11~' run-help
+
+# vim:ft=zsh
-# zshrc/95_watch
#
# watch activity of other users
#
# Source repository: http://git.madduck.net/v/etc/zsh.git
#
+typeset -U watch WATCH
watch=(notme)
LOGCHECK=120
+++ /dev/null
-# zshrc/95_fortune
-#
-# Prints a fortune cookie to each interactive shell
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-fortune -a 2>/dev/null || :
-
-# vim:ft=zsh
--- /dev/null
+#
+# Configure the prompt
+#
+# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
+# Released under the terms of the Artistic Licence 2.0
+#
+# Source repository: http://git.madduck.net/v/etc/zsh.git
+#
+
+autoload -Uz promptinit
+promptinit
+prompt madduck
+
+# vim:ft=zsh
+++ /dev/null
-# zshrc/99_TODO
-#
-# All kinds of stuff not yet split to other files
-# TEMPORARY
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-ldir() { eval hash -d $1="$PWD"; cd .; }
-
-alias Q='exec zsh -$-'
-alias ozsh='ZDOTDIR=$HOME/.etc/zsh.migrated exec zsh'
-
-# do not clobber files with >
-setopt noclobber
-
-# automatically maintain a directory stack
-setopt autopushd pushdminus pushdsilent pushdtohome
-
-# brace expansion
-setopt braceccl
-
-# report immediately when background jobs finish
-setopt notify
-# do not auto-nice background processes
-setopt no_bgnice
-# do not send HUP signal to jobs when the shell exits
-setopt nohup
-# do alert me of running jobs before exiting
-setopt checkjobs
-# display PID when suspending processes as well
-setopt longlistjobs
-
-# disable backslashed escape sequences unless -e is given to echo
-setopt bsd_echo
-
-# use full globbing powers
-setopt extended_glob
-
-# don't bitch about bad patterns, just use them verbatim
-setopt no_bad_pattern
-
-# don't bitch about no matches, just the glob character verbatim
-setopt no_nomatch
-
-# do. not. ever. beep.
-setopt no_beep
-
-# use 0xXX and 0XX output instead of 16#XX/8#XX
-setopt c_bases
-
-[ "$(umask)" = 022 ] && umask 0077
-
-# remove '/' from WORDCHARS
-WORDCHARS="${WORDCHARS//\/}"
-
-# report time stats when command takes longer than 5 seconds
-# typeset -g to make warn_create_global happy
-typeset -g REPORTTIME=5
-
-MAILCHECK=0
-
-# http://grml.org/zsh/zsh-lovers.html
-rationalise-dot() {
- if [[ $LBUFFER = *.. ]]; then
- LBUFFER+=/..
- else
- LBUFFER+=.
- fi
-}
-#zle -N rationalise-dot
-#bindkey . rationalise-dot
-
-:
-
-# vim:ft=zsh
+++ /dev/null
-# zshrc/99_hookfunctions
-#
-# define hook functions in case the *_functions arrays are not honoured
-#
-# Copyright © 1994–2017 martin f. krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-autoload -U is-at-least
-if ! is-at-least 4.3.6; then
- for i in precmd preexec chpwd periodic; do
- if [ -n "$functions[$i]" ]; then
- warn "$i function already defined"
- continue
- fi
- eval "${i}() { for fn (\$${i}_functions) \$fn \"\$@\" }"
- done
-fi
-
-# vim:ft=zsh