summary refs log tree commit diff
path: root/Functions/TCP/tcp_rename
blob: 8d926ca0dc838dad2f810d1f2644f37f3cbdadee (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Rename session OLD (defaults to current session) to session NEW.
# Does not handle aliases; use tcp_alias for all alias redefinitions.

local old new

if (( $# == 1 )); then
  old=$TCP_SESS
  new=$1
elif (( $# == 2 )); then
  old=$1
  new=$2
else
  print "Usage: $0 OLD NEW" >&2
  return 1
fi

local fd=$tcp_by_name[$old]
if [[ -z $fd ]]; then
  print "No such session: $old" >&2
  return 1
fi
if [[ -n $tcp_by_name[$new] ]]; then
  print "Session $new already exists." >&2
  return 1
fi
# Can't rename an alias
if [[ $tcp_by_fd[$fd] != $old ]]; then
  print "Use tcp_alias to redefine an alias." >&2
  return 1
fi

tcp_by_name[$new]=$fd
unset "tcp_by_name[$old]"

tcp_by_fd[$fd]=$new

[[ $TCP_SESS = $old ]] && TCP_SESS=$new

if zmodload -i zsh/parameter; then
  if (( ${+functions[tcp_on_rename]} )); then
    tcp_on_rename $new $fd $old
  fi
fi