Add -p/--pretty option to swaymsg

This new option forces pretty (non-raw/non-JSON) output. By default, when
not using a tty, swaymsg outputs using the "raw" format. This makes it
impossible to, for example, pipe the pretty output to a pager such as
`less` since piping does not use a tty.

The new -p/--pretty option gives the user explicit control over the output
format while retaining the default tty-dependent behavior.

Signed-off-by: Peter Grayson <pete@jpgrayson.net>
This commit is contained in:
Peter Grayson 2019-03-08 12:43:04 -05:00 committed by Drew DeVault
parent c8085038cf
commit bedf2ac2fb
5 changed files with 17 additions and 5 deletions

View file

@ -21,6 +21,7 @@ _swaymsg()
short=( short=(
-h -h
-p
-q -q
-r -r
-s -s
@ -30,6 +31,7 @@ _swaymsg()
long=( long=(
--help --help
--pretty
--quiet --quiet
--raw --raw
--socket --socket

View file

@ -1,10 +1,11 @@
# swaymsg(1) completion # swaymsg(1) completion
complete -c swaymsg -s h -l help --description "Show help message and quit." complete -c swaymsg -s h -l help --description "Show help message and quit."
complete -c swaymsg -s p -l pretty --description "Use pretty output even when not using a tty."
complete -c swaymsg -s q -l quiet --description "Sends the IPC message but does not print the response from sway." complete -c swaymsg -s q -l quiet --description "Sends the IPC message but does not print the response from sway."
complete -c swaymsg -s v -l version --description "Print the version (of swaymsg) and quit."
complete -c swaymsg -s r -l raw --description "Use raw output even if using tty." complete -c swaymsg -s r -l raw --description "Use raw output even if using tty."
complete -c swaymsg -s s -l socket -r --description "Use the specified socket path. Otherwise, swaymsg will ask where the socket is (which is the value of $SWAYSOCK, then of $I3SOCK)." complete -c swaymsg -s s -l socket -r --description "Use the specified socket path. Otherwise, swaymsg will ask where the socket is (which is the value of $SWAYSOCK, then of $I3SOCK)."
complete -c swaymsg -s v -l version --description "Print the version (of swaymsg) and quit."
complete -c swaymsg -s t -l type -fr --description "Specify the type of IPC message." complete -c swaymsg -s t -l type -fr --description "Specify the type of IPC message."
complete -c swaymsg -s t -l type -fra 'get_workspaces' --description "Gets a JSON-encoded list of workspaces and their status." complete -c swaymsg -s t -l type -fra 'get_workspaces' --description "Gets a JSON-encoded list of workspaces and their status."

View file

@ -28,10 +28,11 @@ types=(
) )
_arguments -s \ _arguments -s \
'(-v --version)'{-v,--version}'[Show the version number and quit]' \
'(-m --monitor)'{-m,--monitor}'[Monitor until killed (-t SUBSCRIBE only)]' \
'(-h --help)'{-h,--help}'[Show help message and quit]' \ '(-h --help)'{-h,--help}'[Show help message and quit]' \
'(-m --monitor)'{-m,--monitor}'[Monitor until killed (-t SUBSCRIBE only)]' \
'(-p --pretty)'{-p,--pretty}'[Use pretty output even when not using a tty]' \
'(-q --quiet)'{-q,--quiet}'[Be quiet]' \ '(-q --quiet)'{-q,--quiet}'[Be quiet]' \
'(-r --raw)'{-r,--raw}'[Use raw output even if using a tty]' \ '(-r --raw)'{-r,--raw}'[Use raw output even if using a tty]' \
'(-s --socket)'{-s,--socket}'[Use the specified socket path]:files:_files' \ '(-s --socket)'{-s,--socket}'[Use the specified socket path]:files:_files' \
'(-t --type)'{-t,--type}'[Specify the message type]:type:{_describe "type" types}' '(-t --type)'{-t,--type}'[Specify the message type]:type:{_describe "type" types}' \
'(-v --version)'{-v,--version}'[Show the version number and quit]'

View file

@ -326,6 +326,7 @@ int main(int argc, char **argv) {
static struct option long_options[] = { static struct option long_options[] = {
{"help", no_argument, NULL, 'h'}, {"help", no_argument, NULL, 'h'},
{"monitor", no_argument, NULL, 'm'}, {"monitor", no_argument, NULL, 'm'},
{"pretty", no_argument, NULL, 'p'},
{"quiet", no_argument, NULL, 'q'}, {"quiet", no_argument, NULL, 'q'},
{"raw", no_argument, NULL, 'r'}, {"raw", no_argument, NULL, 'r'},
{"socket", required_argument, NULL, 's'}, {"socket", required_argument, NULL, 's'},
@ -339,6 +340,7 @@ int main(int argc, char **argv) {
"\n" "\n"
" -h, --help Show help message and quit.\n" " -h, --help Show help message and quit.\n"
" -m, --monitor Monitor until killed (-t SUBSCRIBE only)\n" " -m, --monitor Monitor until killed (-t SUBSCRIBE only)\n"
" -p, --pretty Use pretty output even when not using a tty\n"
" -q, --quiet Be quiet.\n" " -q, --quiet Be quiet.\n"
" -r, --raw Use raw output even if using a tty\n" " -r, --raw Use raw output even if using a tty\n"
" -s, --socket <socket> Use the specified socket.\n" " -s, --socket <socket> Use the specified socket.\n"
@ -350,7 +352,7 @@ int main(int argc, char **argv) {
int c; int c;
while (1) { while (1) {
int option_index = 0; int option_index = 0;
c = getopt_long(argc, argv, "hmqrs:t:v", long_options, &option_index); c = getopt_long(argc, argv, "hmpqrs:t:v", long_options, &option_index);
if (c == -1) { if (c == -1) {
break; break;
} }
@ -358,6 +360,9 @@ int main(int argc, char **argv) {
case 'm': // Monitor case 'm': // Monitor
monitor = true; monitor = true;
break; break;
case 'p': // Pretty
raw = false;
break;
case 'q': // Quiet case 'q': // Quiet
quiet = true; quiet = true;
break; break;

View file

@ -19,6 +19,9 @@ _swaymsg_ [options...] [message]
there is a malformed response or an invalid event type was requested, there is a malformed response or an invalid event type was requested,
swaymsg will stop monitoring and exit. swaymsg will stop monitoring and exit.
*-p, --pretty*
Use raw output even when not using a tty.
*-q, --quiet* *-q, --quiet*
Sends the IPC message but does not print the response from sway. Sends the IPC message but does not print the response from sway.