about summary refs log tree commit diff
path: root/Completion/Unix/Command/_last
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_last')
-rw-r--r--Completion/Unix/Command/_last66
1 files changed, 51 insertions, 15 deletions
diff --git a/Completion/Unix/Command/_last b/Completion/Unix/Command/_last
index 43a08a709..706d82f26 100644
--- a/Completion/Unix/Command/_last
+++ b/Completion/Unix/Command/_last
@@ -1,17 +1,53 @@
 #compdef last lastb
 
-_arguments -s \
-  '-a[display hostname in last column]' \
-  '-n[number]:number' \
-  '-[number]:number' \
-  '-f[filename]:filename:_files' \
-  '-R[suppress display of hostname field]' \
-  '-d[translate IP to hostname]' \
-  '-i[display IP]' \
-  '-o[read old-format wtmp]' \
-  '-x[display shutdown/runlevel entries]' \
-  '-h[hostname]:host:_hosts' \
-  '-s[report duration in seconds]' \
-  '-t[tty]:tty' \
-  '-w[widen duration field]' \
-  '*:user:_users'
+local pattern arg args ttys
+ttys=( /dev/tty*(N) /dev/pts/*(N) reboot )
+ttys=( ${ttys#/dev/} )
+
+for pattern arg in \
+  '(solaris*|linux-gnu)' '-a[display hostname in last column]' \
+  '((free|net|open)bsd*|darwin*|dragonfly*|linux-gnu)' '-h[limit sessions by hostname]:host:_hosts' \
+  '((free|open)bsd*|linux-gnu)' '-s[report duration in seconds]' \
+  '(freebsd*|openbsd*)' '-d[limit sessions to those active at snapshot time]:time ([[CC]YY][MMDD]hhmm[.SS])' \
+  '((net|free|open)bsd*|darwin*|dragonfly*)' '-t[limit sessions by tty]:tty:compadd -a ttys' \
+  'openbsd*' '-c[calculate total time]' \
+  '^darwin*' '-f[specify account file]:file:_files' \
+  '(solaris*|linux-gnu|freebsd*|openbsd*)' '-n[specify number of lines to show]:number' \
+  '((open|net)bsd*|dragonfly*)' '-T[show more detailed time information including year and seconds]' \
+  'netbsd*' '-x[assume file is in wtmpx(5) format]' \
+  'netbsd*' '-n[show IP of remote hosts]' \
+  'freebsd*' '-w[show seconds in durarion field]' \
+  'freebsd*' '-y[show year in session start time]'
+do
+  [[ $OSTYPE = $~pattern ]] && args+=( $arg )
+done
+
+case $OSTYPE in
+  netbsd*|dragonfly*)
+    args+=(
+      '-H[specify width for host field]:width'
+      '-N[specify width for login name field]:width'
+      '-L[specify width for tty field]:width'
+    )
+  ;;
+  linux-gnu)
+    args+=(
+      '-R[suppress display of hostname field]'
+      '-d[translate IP to hostname]'
+      '-F[show full login and logout times and dates]'
+      '-i[show IP of remote hosts]'
+      '-o[read old-format wtmp]'
+      '-t[limit sessions to those active at snapshot time]:time (YYYYMMDDhhmmss)'
+      '-w[show full user and domain names]'
+      '-x[display shutdown/runlevel entries]'
+    )
+  ;;
+esac
+
+if [[ $OSTYPE = (linux-gnu|solaris*) ]]; then
+  args+=( '*:arg: _alternative "users:user:_users" "ttys:tty:compadd -a ttys"' )
+else
+  args+=( '*:user:_users' )
+fi
+
+_arguments -s $args