]>
Commit | Line | Data |
---|---|---|
c1072f64 | 1 | #compdef loginctl -*- shell-script -*- |
7059062c | 2 | # SPDX-License-Identifier: LGPL-2.1+ |
799d54be | 3 | |
c501ecd7 | 4 | (( $+functions[_loginctl_all_sessions] )) || |
b0fe29ff | 5 | _loginctl_all_sessions() { |
843cfcb1 ZJS |
6 | local session description |
7 | loginctl --no-legend list-sessions | while read -r session description; do | |
8 | _sys_all_sessions+=( "$session" ) | |
9 | _sys_all_sessions_descr+=( "${session}:$description" ) | |
10 | done | |
b0fe29ff EC |
11 | } |
12 | ||
c501ecd7 | 13 | (( $+functions[_loginctl_all_users] )) || |
b0fe29ff | 14 | _loginctl_all_users() { |
843cfcb1 ZJS |
15 | local uid description |
16 | loginctl --no-legend list-users | while read -r uid description; do | |
17 | _sys_all_users+=( "$uid" ) | |
18 | _sys_all_users_descr+=( "${uid}:$description" ) | |
19 | done | |
b0fe29ff | 20 | } |
799d54be | 21 | |
c501ecd7 | 22 | (( $+functions[_loginctl_all_seats] )) || |
b0fe29ff | 23 | _loginctl_all_seats() { |
843cfcb1 ZJS |
24 | local seat description |
25 | loginctl --no-legend list-seats | while read -r seat description; do | |
26 | _sys_all_seats+=( "$seat" ) | |
27 | _sys_all_seats_descr+=( "${seat}:$description" ) | |
28 | done | |
b0fe29ff EC |
29 | } |
30 | ||
31 | local fun | |
799d54be WG |
32 | # Completion functions for SESSIONS |
33 | for fun in session-status show-session activate lock-session unlock-session terminate-session kill-session ; do | |
843cfcb1 ZJS |
34 | (( $+functions[_loginctl_$fun] )) || |
35 | _loginctl_$fun() { | |
b0fe29ff EC |
36 | local -a _sys_all_sessions{,_descr} |
37 | ||
799d54be | 38 | _loginctl_all_sessions |
b0fe29ff | 39 | for _ignore in $words[2,-1]; do |
843cfcb1 ZJS |
40 | _sys_all_sessions[(i)$_ignore]=() |
41 | _sys_all_sessions_descr[(i)$_ignore:*]=() | |
b0fe29ff EC |
42 | done |
43 | ||
fb9d85b7 | 44 | if zstyle -T ":completion:${curcontext}:systemd-sessions" verbose; then |
843cfcb1 | 45 | _describe -t systemd-sessions session _sys_all_sessions_descr _sys_all_sessions "$@" |
fb9d85b7 | 46 | else |
843cfcb1 ZJS |
47 | local expl |
48 | _wanted systemd-sessions expl session compadd "$@" -a _sys_all_sessions | |
fb9d85b7 | 49 | fi |
843cfcb1 | 50 | } |
799d54be WG |
51 | done |
52 | ||
53 | # Completion functions for USERS | |
54 | for fun in user-status show-user enable-linger disable-linger terminate-user kill-user ; do | |
843cfcb1 ZJS |
55 | (( $+functions[_loginctl_$fun] )) || |
56 | _loginctl_$fun() { | |
b0fe29ff EC |
57 | local -a _sys_all_users{,_descr} |
58 | zstyle -a ":completion:${curcontext}:users" users _sys_all_users | |
59 | ||
60 | if ! (( $#_sys_all_users )); then | |
843cfcb1 | 61 | _loginctl_all_users |
b0fe29ff EC |
62 | fi |
63 | ||
64 | for _ignore in $words[2,-1]; do | |
843cfcb1 ZJS |
65 | _sys_all_users[(i)$_ignore]=() |
66 | _sys_all_users_descr[(i)$_ignore:*]=() | |
b0fe29ff | 67 | done |
fb9d85b7 | 68 | |
b0fe29ff | 69 | # using the common tag `users' here, not rolling our own `systemd-users' tag |
fb9d85b7 | 70 | if zstyle -T ":completion:${curcontext}:users" verbose; then |
843cfcb1 | 71 | _describe -t users user ${_sys_all_users_descr:+_sys_all_users_descr} _sys_all_users "$@" |
fb9d85b7 | 72 | else |
843cfcb1 ZJS |
73 | local expl |
74 | _wanted users expl user compadd "$@" -a _sys_all_users | |
fb9d85b7 | 75 | fi |
843cfcb1 | 76 | } |
799d54be WG |
77 | done |
78 | ||
79 | # Completion functions for SEATS | |
843cfcb1 ZJS |
80 | (( $+functions[_loginctl_seats] )) || |
81 | _loginctl_seats() { | |
82 | local -a _sys_all_seats{,_descr} | |
83 | ||
84 | _loginctl_all_seats | |
85 | for _ignore in $words[2,-1]; do | |
86 | _sys_all_seats[(i)$_ignore]=() | |
87 | _sys_all_seats_descr[(i)$_ignore:*]=() | |
88 | done | |
89 | ||
90 | if zstyle -T ":completion:${curcontext}:systemd-seats" verbose; then | |
91 | _describe -t systemd-seats seat _sys_all_seats_descr _sys_all_seats "$@" | |
92 | else | |
93 | local expl | |
94 | _wanted systemd-seats expl seat compadd "$@" -a _sys_all_seats | |
95 | fi | |
799d54be WG |
96 | } |
97 | for fun in seat-status show-seat terminate-seat ; do | |
843cfcb1 ZJS |
98 | (( $+functions[_loginctl_$fun] )) || |
99 | _loginctl_$fun() { _loginctl_seats } | |
799d54be WG |
100 | done |
101 | ||
102 | # Completion functions for ATTACH | |
843cfcb1 ZJS |
103 | (( $+functions[_loginctl_attach] )) || |
104 | _loginctl_attach() { | |
105 | _arguments -w -C -S -s \ | |
106 | ':seat:_loginctl_seats' \ | |
107 | '*:device:_files' | |
799d54be WG |
108 | } |
109 | ||
110 | # no loginctl completion for: | |
111 | # [STANDALONE]='list-sessions list-users list-seats flush-devices' | |
112 | ||
843cfcb1 ZJS |
113 | (( $+functions[_loginctl_commands] )) || |
114 | _loginctl_commands() { | |
115 | local -a _loginctl_cmds | |
116 | _loginctl_cmds=( | |
117 | "list-sessions:List sessions" | |
118 | "session-status:Show session status" | |
119 | "show-session:Show properties of one or more sessions" | |
120 | "activate:Activate a session" | |
121 | "lock-session:Screen lock one or more sessions" | |
122 | "unlock-session:Screen unlock one or more sessions" | |
123 | "lock-sessions:Screen lock all current sessions" | |
124 | "unlock-sessions:Screen unlock all current sessions" | |
125 | "terminate-session:Terminate one or more sessions" | |
126 | "kill-session:Send signal to processes of a session" | |
127 | "list-users:List users" | |
128 | "user-status:Show user status" | |
129 | "show-user:Show properties of one or more users" | |
130 | "enable-linger:Enable linger state of one or more users" | |
131 | "disable-linger:Disable linger state of one or more users" | |
132 | "terminate-user:Terminate all sessions of one or more users" | |
133 | "kill-user:Send signal to processes of a user" | |
134 | "list-seats:List seats" | |
135 | "seat-status:Show seat status" | |
136 | "show-seat:Show properties of one or more seats" | |
137 | "attach:Attach one or more devices to a seat" | |
138 | "flush-devices:Flush all device associations" | |
139 | "terminate-seat:Terminate all sessions on one or more seats" | |
140 | ) | |
141 | ||
142 | if (( CURRENT == 1 )); then | |
143 | _describe -t commands 'loginctl command' _loginctl_cmds || compadd "$@" | |
799d54be | 144 | else |
843cfcb1 ZJS |
145 | local curcontext="$curcontext" _ignore |
146 | ||
147 | cmd="${${_loginctl_cmds[(r)$words[1]:*]%%:*}}" | |
148 | ||
149 | if (( $#cmd )); then | |
150 | curcontext="${curcontext%:*:*}:loginctl-${cmd}:" | |
151 | ||
152 | _call_function ret _loginctl_$cmd || _message 'no more arguments' | |
153 | else | |
154 | _message "unknown loginctl command: $words[1]" | |
155 | fi | |
156 | return ret | |
799d54be | 157 | fi |
799d54be WG |
158 | } |
159 | ||
160 | ||
161 | _arguments -s \ | |
162 | {-h,--help}'[Show help]' \ | |
163 | '--version[Show package version]' \ | |
862f4963 | 164 | \*{-p+,--property=}'[Show only properties by this name]:unit property' \ |
799d54be WG |
165 | {-a,--all}'[Show all properties, including empty ones]' \ |
166 | '--kill-who=[Who to send signal to]:killwho:(main control all)' \ | |
862f4963 | 167 | {-s+,--signal=}'[Which signal to send]:signal:_signals' \ |
6da49b8b | 168 | {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \ |
84700255 | 169 | {-M+,--machine=}'[Operate on local container]:machine:_sd_machines' \ |
4433c995 | 170 | {-l,--full}'[Do not ellipsize output]' \ |
799d54be | 171 | '--no-pager[Do not pipe output into a pager]' \ |
4433c995 DM |
172 | '--no-legend[Do not show the headers and footers]' \ |
173 | '--no-ask-password[Do not ask for system passwords]' \ | |
84700255 RC |
174 | {-n+,--lines=}'[Number of journal entries to show]' \ |
175 | {-o+,--output=}'[Change journal output mode]:output modes:_sd_outputmodes' \ | |
c501ecd7 | 176 | '*::loginctl command:_loginctl_commands' |