]> git.madduck.net Git - etc/ssh.git/blob - .zsh/zshrc/parts.d/50-ssh

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

improved known_hosts completion
[etc/ssh.git] / .zsh / zshrc / parts.d / 50-ssh
1 # zshrc/parts.d/50-ssh
2 #
3 # ssh configuration for zsh
4 #
5 # Copyright © 2008 martin f. krafft <madduck@madduck.net>
6 # Released under the terms of the Artistic Licence 2.0
7 #
8 # Source repository: git://git.madduck.net/etc/ssh.git
9 #
10
11 # populate hosts completion with SSH's known_hosts
12 if [ -r $HOME/.ssh/known_hosts ]; then
13   local _myhosts
14   _myhosts=$(while read host rest; do
15     host="${(f)host%%,*}"
16     case "$host" in
17       ([[:alnum:]]*) echo "$host";;
18       (\[[[:alnum:]]*) echo "${${host#\[}%\]*}";;
19     esac
20   done < ~/.ssh/known_hosts)
21   #_myhosts=(${${${${(f)"$(<$HOME/.ssh/known_hosts)"}:#[0-9]*}%%\ *}%%,*})
22   #zstyle ':completion:*' hosts $_myhosts
23   unset _myhosts
24 fi
25
26 _ssh_proxy() {
27   local cmd sshopts cmdopts
28   cmd="$1"; shift
29   sshopts="${*%%--*}"; sshopts="${sshopts%% }"
30   [[ -n "$sshopts" ]] || { ssh; return $? }
31   cmdopts="${*#$sshopts}"; cmdopts="${cmdopts#*-- }"
32   eval ssh $sshopts -t $cmd $cmdopts
33 }
34
35 # need functions instead of aliases for completion
36 rrsh() { _ssh_proxy "sudo -i" "$@" }
37 compdef rrsh=ssh
38
39 ttsh() { _ssh_proxy "tmux last" "$@" }
40 compdef ttsh=ssh
41
42 rtsh() { _ssh_proxy "tmux new sudo -i" "$@" }
43 compdef rtsh=ssh
44
45 declare _SSH_SOCKDIR="${VARDIR}/ssh"
46 kssh() {
47   if [[ -z "$1" ]]; then
48     rm -vf -- ${_SSH_SOCKDIR}/*(=as-60Y1omN)
49   else
50     rm "$@"
51   fi
52 }
53 compdef -e "compset -P ${_SSH_SOCKDIR}/ || PREFIX=${_SSH_SOCKDIR}/; _files -W ${_SSH_SOCKDIR}" kssh
54
55 scd() {
56   local args host dir arg
57
58   for arg in "$@"; do
59     case "$arg" in
60       (*:*) host=${arg%%:*}; dir="${arg#*:}";;
61       (*) args="${args:+$args }$arg";;
62     esac
63   done
64
65   if [[ -z $dir ]]; then
66     ssh "$@"
67
68   else
69
70     ssh -t $args $host "cd '${dir:gs/\'/\'\\\'\'}' && exec \$SHELL --login"
71   fi
72 }
73 compdef scd=scp
74
75 # vim:ft=zsh