X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fzsh%2Fzshrc;h=2875222438588c2505557c0d71b8c6f67b185c52;hb=764227657c87ea0c1b85bedfbece407c3a02535d;hp=04422c0f217880ddb61fd1e79840b4bbcaabce8a;hpb=5f07a91fbbec4a04c9dec58355ba94472cfbadb0;p=grml-etc-core.git diff --git a/etc/zsh/zshrc b/etc/zsh/zshrc index 04422c0..2875222 100644 --- a/etc/zsh/zshrc +++ b/etc/zsh/zshrc @@ -837,8 +837,16 @@ function grmlcomp () { _ssh_hosts=() _etc_hosts=() fi + + local localname + if check_com hostname ; then + localname=$(hostname) + elif check_com hostnamectl ; then + localname=$(hostnamectl --static) + fi + hosts=( - $(hostname) + "${localname}" "$_ssh_config_hosts[@]" "$_ssh_hosts[@]" "$_etc_hosts[@]" @@ -895,7 +903,7 @@ zle -N end-of-somewhere beginning-or-end-of-somewhere # add a command line to the shells history without executing it function commit-to-history () { - print -s ${(z)BUFFER} + print -rs ${(z)BUFFER} zle send-break } zle -N commit-to-history @@ -2269,6 +2277,7 @@ grml_theme_add_token: Token `%s'\'' exists! Giving up!\n\n' $name return 2 fi if (( init )); then + REPLY='' $token $name token=$REPLY fi @@ -2314,6 +2323,7 @@ function grml_prompt_addto () { zstyle -s ":prompt:${grmltheme}:${lr}:items:$it" token new \ || new=${grml_prompt_token_default[$it]} if (( ${+grml_prompt_token_function[$it]} )); then + REPLY='' ${grml_prompt_token_function[$it]} $it else case $it in @@ -2507,8 +2517,15 @@ function grml_vcs_to_screen_title () { } function grml_maintain_name () { - # set hostname if not running on host with name 'grml' - if [[ -n "$HOSTNAME" ]] && [[ "$HOSTNAME" != $(hostname) ]] ; then + local localname + if check_com hostname ; then + localname=$(hostname) + elif check_com hostnamectl ; then + localname=$(hostnamectl --static) + fi + + # set hostname if not running on local machine + if [[ -n "$HOSTNAME" ]] && [[ "$HOSTNAME" != "${localname}" ]] ; then NAME="@$HOSTNAME" fi } @@ -2525,7 +2542,7 @@ function grml_cmd_to_screen_title () { function grml_control_xterm_title () { case $TERM in (xterm*|rxvt*) - set_title "${(%):-"%n@%m:"}" "$1" + set_title "${(%):-"%n@%m:"}" "$2" ;; esac } @@ -2926,9 +2943,6 @@ function sll () { return ${RTN} } -# TODO: Is it supported to use pager settings like this? -# PAGER='less -Mr' - If so, the use of $PAGER here needs fixing -# with respect to wordsplitting. (ie. ${=PAGER}) if check_com -c $PAGER ; then #f3# View Debian's changelog of given package(s) function dchange () { @@ -2936,13 +2950,28 @@ if check_com -c $PAGER ; then [[ -z "$1" ]] && printf 'Usage: %s \n' "$0" && return 1 local package + + # `less` as $PAGER without e.g. `|lesspipe %s` inside $LESSOPEN can't properly + # read *.gz files, try to detect this to use vi instead iff available + local viewer + + if [[ ${$(typeset -p PAGER)[2]} = -a ]] ; then + viewer=($PAGER) # support PAGER=(less -Mr) but leave array untouched + else + viewer=(${=PAGER}) # support PAGER='less -Mr' + fi + + if [[ ${viewer[1]:t} = less ]] && [[ -z "${LESSOPEN}" ]] && check_com vi ; then + viewer='vi' + fi + for package in "$@" ; do if [[ -r /usr/share/doc/${package}/changelog.Debian.gz ]] ; then - $PAGER /usr/share/doc/${package}/changelog.Debian.gz + $viewer /usr/share/doc/${package}/changelog.Debian.gz elif [[ -r /usr/share/doc/${package}/changelog.gz ]] ; then - $PAGER /usr/share/doc/${package}/changelog.gz + $viewer /usr/share/doc/${package}/changelog.gz elif [[ -r /usr/share/doc/${package}/changelog ]] ; then - $PAGER /usr/share/doc/${package}/changelog + $viewer /usr/share/doc/${package}/changelog else if check_com -c aptitude ; then echo "No changelog for package $package found, using aptitude to retrieve it." @@ -3733,7 +3762,10 @@ if check_com -c hg ; then fi # end of check whether we have the 'hg'-executable -# grml-small cleanups +# disable bracketed paste mode for dumb terminals +[[ "$TERM" == dumb ]] && unset zle_bracketed_paste + +# grml-small cleanups and workarounds # The following is used to remove zsh-config-items that do not work # in grml-small by default. @@ -3743,6 +3775,8 @@ fi # end of check whether we have the 'hg'-executable if (( GRMLSMALL_SPECIFIC > 0 )) && isgrmlsmall ; then + # Clean up + unset "abk[V]" unalias 'V' &> /dev/null unfunction vman &> /dev/null @@ -3753,6 +3787,36 @@ if (( GRMLSMALL_SPECIFIC > 0 )) && isgrmlsmall ; then unfunction manzsh &> /dev/null unfunction man2 &> /dev/null + # Workarounds + + # See https://github.com/grml/grml/issues/56 + if ! [[ -x ${commands[dig]} ]]; then + function dig_after_all () { + unfunction dig + unfunction _dig + autoload -Uz _dig + unfunction dig_after_all + } + function dig () { + if [[ -x ${commands[dig]} ]]; then + dig_after_all + command dig "$@" + return "$!" + fi + printf 'This installation does not include `dig'\'' for size reasons.\n' + printf 'Try `drill'\'' as a light weight alternative.\n' + return 0 + } + function _dig () { + if [[ -x ${commands[dig]} ]]; then + dig_after_all + zle -M 'Found `dig'\'' installed. ' + else + zle -M 'Try `drill'\'' instead of `dig'\''.' + fi + } + compdef _dig dig + fi fi zrclocal