From d35a214e99ec21bc4342798c958f90c8b552a8e5 Mon Sep 17 00:00:00 2001 From: Jim Myhrberg Date: Sun, 22 Apr 2012 16:43:18 +0100 Subject: [PATCH] Add support for command aliases * `session` and `window` commands are now know as `load-session` and `load-window` respectively, with aliases for their former names. * Add short aliases for various commands. * `help` and `completions` commands have been expanded with support for aliases. * `help` command has been expanded upon with brief docs for a few more commands. --- bin/tmuxifier | 9 +++ libexec/tmuxifier-alias | 33 ++++++++++ libexec/tmuxifier-completions | 17 +++++- libexec/tmuxifier-edit-session | 2 +- libexec/tmuxifier-edit-window | 2 +- libexec/tmuxifier-help | 61 +++++++++++++------ ...uxifier-session => tmuxifier-load-session} | 0 ...tmuxifier-window => tmuxifier-load-window} | 0 libexec/tmuxifier-new-session | 2 +- libexec/tmuxifier-new-window | 2 +- 10 files changed, 103 insertions(+), 25 deletions(-) create mode 100755 libexec/tmuxifier-alias rename libexec/{tmuxifier-session => tmuxifier-load-session} (100%) rename libexec/{tmuxifier-window => tmuxifier-load-window} (100%) diff --git a/bin/tmuxifier b/bin/tmuxifier index 60ea355..7628ecf 100755 --- a/bin/tmuxifier +++ b/bin/tmuxifier @@ -25,7 +25,16 @@ case "$command" in * ) command_path="$(command -v "tmuxifier-$command" || true)" + + # Attempt to resolve aliases if [ -z $command_path ]; then + resolved="$(tmuxifier-alias "$command")" + if [ ! -z "$resolved" ]; then + command_path="$(command -v "tmuxifier-$resolved" || true)" + fi + fi + + if [ -z "$command_path" ]; then echo "tmuxifier: no such command '$command'" >&2 exit 1 fi diff --git a/libexec/tmuxifier-alias b/libexec/tmuxifier-alias new file mode 100755 index 0000000..17a7f6e --- /dev/null +++ b/libexec/tmuxifier-alias @@ -0,0 +1,33 @@ +#! /usr/bin/env bash +set -e +[ -n "$TMUXIFIER_DEBUG" ] && set -x + +case "$1" in + "window" | "win" | "w" ) + echo "load-window" + ;; + "session" | "ses" | "s" ) + echo "load-session" + ;; + "new-ses" | "ns" ) + echo "new-session" + ;; + "new-win" | "nw" ) + echo "new-window" + ;; + "edit-ses" | "es" ) + echo "edit-session" + ;; + "edit-win" | "ew" ) + echo "edit-window" + ;; + "ls" ) + echo "list" + ;; + "list-ses" | "lss" ) + echo "list-sessions" + ;; + "list-win" | "lsw" ) + echo "list-windows" + ;; +esac diff --git a/libexec/tmuxifier-completions b/libexec/tmuxifier-completions index 9d604d8..fa5c21a 100755 --- a/libexec/tmuxifier-completions +++ b/libexec/tmuxifier-completions @@ -2,14 +2,27 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +has-completions() { + grep -i "^# provide tmuxifier completions" "$1" >/dev/null +} + command="$1" if [ -z "$command" ]; then echo "Usage: tmuxifier completions COMMAND [arg1 arg2...]" >&2 exit 1 fi -command_path="$(command -v "tmuxifier-$command")" -if grep -i "^# provide tmuxifier completions" "$command_path" >/dev/null; then +command_path="$(command -v "tmuxifier-$command" || true)" + +# Attempt to resolve aliases +if [ -z "$command_path" ]; then + resolved="$(tmuxifier-alias "$command")" + if [ ! -z "$resolved" ]; then + command_path="$(command -v "tmuxifier-$resolved" || true)" + fi +fi + +if [ ! -z "$command_path" ] && has-completions "$command_path"; then shift exec "$command_path" --complete "$@" fi diff --git a/libexec/tmuxifier-edit-session b/libexec/tmuxifier-edit-session index 16ca6b0..ef9a2d4 100755 --- a/libexec/tmuxifier-edit-session +++ b/libexec/tmuxifier-edit-session @@ -11,7 +11,7 @@ if [ "$1" == "--complete" ]; then fi if [ -z "$1" ]; then - echo "usage: tmuxifier edit-session " >&2 + echo "$(tmuxifier-help edit-session)" >&2 exit 1 fi diff --git a/libexec/tmuxifier-edit-window b/libexec/tmuxifier-edit-window index 8eeca78..313a280 100755 --- a/libexec/tmuxifier-edit-window +++ b/libexec/tmuxifier-edit-window @@ -11,7 +11,7 @@ if [ "$1" == "--complete" ]; then fi if [ -z "$1" ]; then - echo "usage: tmuxifier edit-window " >&2 + echo "$(tmuxifier-help edit-window)" >&2 exit 1 fi diff --git a/libexec/tmuxifier-help b/libexec/tmuxifier-help index f227bf1..264bcd3 100755 --- a/libexec/tmuxifier-help +++ b/libexec/tmuxifier-help @@ -8,45 +8,68 @@ if [ "$1" == "--complete" ]; then exit fi -case $1 in +command="$1" +command_path="$(command -v "tmuxifier-$command" || true)" + +# Attempt to resolve aliases +if [ -z "$command_path" ]; then + resolved="$(tmuxifier-alias "$command")" + if [ ! -z "$resolved" ]; then + echo "'$command' is an alias for the '$resolved' command" + command="$resolved" + command_path="$(command -v "tmuxifier-$command" || true)" + fi +fi + +case "$command" in "" ) echo "usage: tmuxifier [] Some useful tmuxifier commands are: - session Load the specified session layout. - window Load the specified window layout into current session. - list List all session and window layouts. - list-sessions List session layouts. - list-windows List window layouts. - new-session Create new session layout and open it with \`\$EDITOR\`. - new-window Create new window layout and open it with \`\$EDITOR\`. - edit-session Edit specified session layout with \`\$EDITOR\`. - edit-window Edit specified window layout with \`\$EDITOR\`. - commands List all tmuxifier commands. + + load-session s Load the specified session layout. + load-window w Load the specified window layout into current session. + list ls List all session and window layouts. + list-sessions lss List session layouts. + list-windows lsw List window layouts. + new-session ns Create new session layout and open it with \$EDITOR. + new-window nw Create new window layout and open it with \$EDITOR. + edit-session es Edit specified session layout with \$EDITOR. + edit-window ew Edit specified window layout with \$EDITOR. + commands List all tmuxifier commands. See 'tmuxifier help ' for information on a specific command." ;; - "session" ) - echo "usage: tmuxifier session + "load-session" ) + echo "usage: tmuxifier load-session Create a session using the session layout, unless the session already exists in which case, we simply switch to the existing one." ;; - "window" ) - echo "usage: tmuxifier window + "load-window" ) + echo "usage: tmuxifier load-window Create a new window using the specified window layout in the current session." ;; + "edit-session" ) + echo "usage: tmuxifier edit-session + +Open specified session layout for editing in \$EDITOR." + ;; + "edit-window" ) + echo "usage: tmuxifier edit-window + +Open specified window layout for editing in \$EDITOR." + ;; * ) - command_path="$(command -v "tmuxifier-$1" || true)" - if [ -n "$command_path" ]; then - echo "Sorry, the '$1' command isn't documented yet." + if [ ! -z "$command_path" ]; then + echo "Sorry, the '$command' command isn't documented yet." echo echo "You can view the command's source here:" echo "$command_path" echo else - echo "tmuxifier: no such command \`$1'" + echo "tmuxifier: no such command '$command'" fi ;; esac diff --git a/libexec/tmuxifier-session b/libexec/tmuxifier-load-session similarity index 100% rename from libexec/tmuxifier-session rename to libexec/tmuxifier-load-session diff --git a/libexec/tmuxifier-window b/libexec/tmuxifier-load-window similarity index 100% rename from libexec/tmuxifier-window rename to libexec/tmuxifier-load-window diff --git a/libexec/tmuxifier-new-session b/libexec/tmuxifier-new-session index 608a7d9..60f2048 100755 --- a/libexec/tmuxifier-new-session +++ b/libexec/tmuxifier-new-session @@ -20,7 +20,7 @@ if [ -f "$layout_file" ]; then echo "session layout '$layout_name' already exists." >&2 echo "" >&2 echo "You can edit it with:" >&2 - echo " tmuxifier edit-session $layout_name" >&2 + echo " tmuxifier edit-session \"$layout_name\"" >&2 exit 1 fi diff --git a/libexec/tmuxifier-new-window b/libexec/tmuxifier-new-window index 39ea23f..bc534c3 100755 --- a/libexec/tmuxifier-new-window +++ b/libexec/tmuxifier-new-window @@ -20,7 +20,7 @@ if [ -f "$layout_file" ]; then echo "window layout '$layout_name' already exists." >&2 echo "" >&2 echo "You can edit it with:" >&2 - echo " tmuxifier edit-window $layout_name" >&2 + echo " tmuxifier edit-window \"$layout_name\"" >&2 exit 1 fi