diff --git a/README.md b/README.md index 14d4800..83a042f 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ export TMUXIFIER_LAYOUT_PATH="$HOME/.tmux-layouts" ### Disable Shell-Completion -Tmuxifier comes with shell-completion for bash and zsh. If for any +Tmuxifier comes with shell-completion for bash, zsh and tcsh. If for any reason you need to disable it, just set `$TMUXIFIER_NO_COMPLETE`. ```bash @@ -167,7 +167,7 @@ export TMUXIFIER_NO_COMPLETE=1 ## Tmuxifier vs. Tmuxinator Though Tmuxifier is largely inspired by the excellent [Tmuxinator][] project, -but does set itself apart in a number of ways: +it does set itself apart in a number of ways: - Uses shell scripts to define Tmux sessions and windows instead of YAML files. The benefit is total control over Tmux, but the definition files are @@ -200,7 +200,7 @@ But if that doesn't put you off, please enjoy Tmuxifier :) (The MIT license) -Copyright (c) 2012 Jim Myhrberg. +Copyright (c) 2013 Jim Myhrberg. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/bin/tmuxifier b/bin/tmuxifier index 656a187..ab482fc 100755 --- a/bin/tmuxifier +++ b/bin/tmuxifier @@ -27,7 +27,7 @@ else fi # Load tmuxifier environment variables. -source "$TMUXIFIER/env.sh" +source "$TMUXIFIER/lib/env.sh" export PATH="$TMUXIFIER/libexec:$PATH" diff --git a/env.sh b/lib/env.sh similarity index 100% rename from env.sh rename to lib/env.sh diff --git a/lib/layout-helpers.sh b/lib/layout-helpers.sh index 57bbbe0..c0d2738 100644 --- a/lib/layout-helpers.sh +++ b/lib/layout-helpers.sh @@ -187,9 +187,6 @@ initialize_session() { local first_window_index=$(__get_first_window_index) tmux move-window -s "$session:$first_window_index" -t "$session:999" - # Ensure correct pane splitting. - __go_to_session - # Session created, return ok exit status. return 0 fi diff --git a/runtime.sh b/lib/runtime.sh similarity index 87% rename from runtime.sh rename to lib/runtime.sh index 7666b44..fbd7963 100644 --- a/runtime.sh +++ b/lib/runtime.sh @@ -3,7 +3,7 @@ # # Load tmuxifier environment. -source "$TMUXIFIER/env.sh" +source "$TMUXIFIER/lib/env.sh" # Setup default variables. session_root="$HOME" diff --git a/libexec/tmuxifier-alias b/libexec/tmuxifier-alias index 2e4dcb9..1bca770 100755 --- a/libexec/tmuxifier-alias +++ b/libexec/tmuxifier-alias @@ -2,6 +2,14 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier alias + +Resolve a command alias to it's full name." + exit +fi + case "$1" in "session" | "ses" | "s" ) echo "load-session" @@ -9,25 +17,25 @@ case "$1" in "window" | "win" | "w" ) echo "load-window" ;; - "new-ses" | "ns" ) + "new-ses" | "nses" | "ns" ) echo "new-session" ;; - "new-win" | "nw" ) + "new-win" | "nwin" | "nw" ) echo "new-window" ;; - "edit-ses" | "es" ) + "edit-ses" | "eses" | "es" ) echo "edit-session" ;; - "edit-win" | "ew" ) + "edit-win" | "ewin" | "ew" ) echo "edit-window" ;; - "ls" ) + "l" ) echo "list" ;; - "list-ses" | "lss" ) + "list-ses" | "lses" | "ls" ) echo "list-sessions" ;; - "list-win" | "lsw" ) + "list-win" | "lwin" | "lw" ) echo "list-windows" ;; * ) diff --git a/libexec/tmuxifier-commands b/libexec/tmuxifier-commands index 2d06e25..db1dfe0 100755 --- a/libexec/tmuxifier-commands +++ b/libexec/tmuxifier-commands @@ -2,6 +2,15 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier commands + +List all available commands, includes internal commands not intended for +normal use by users." + exit +fi + shopt -s nullglob { for path in ${PATH//:/$'\n'}; do diff --git a/libexec/tmuxifier-completions b/libexec/tmuxifier-completions index 57598ad..5d72703 100755 --- a/libexec/tmuxifier-completions +++ b/libexec/tmuxifier-completions @@ -2,6 +2,14 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier completion + +Print a list of available completions for specified command." + exit +fi + # Provide tmuxifier completions if [ "$1" == "--complete" ]; then tmuxifier-commands @@ -9,16 +17,15 @@ if [ "$1" == "--complete" ]; then fi has-completions() { - grep -i "^# provide tmuxifier completions" "$1" >/dev/null + grep -i "^# Provide tmuxifier completions" "$1" >/dev/null } -command="$1" -if [ -z "$command" ]; then +if [ -z "$1" ]; then echo "$(tmuxifier-help completions)" >&2 exit 1 fi -! command_path="$(tmuxifier-resolve-command-path "$command")" +! command_path="$(tmuxifier-resolve-command-path "$1")" if [ -n "$command_path" ] && has-completions "$command_path"; then shift diff --git a/libexec/tmuxifier-current-session b/libexec/tmuxifier-current-session index 0baa21e..706ca01 100755 --- a/libexec/tmuxifier-current-session +++ b/libexec/tmuxifier-current-session @@ -2,6 +2,14 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier current-session + +Outputs the name of the current Tmux session." + exit +fi + if [ -n "$TMUX" ]; then for item in $(tmux list-pane -F "#{session_name}");do echo $item diff --git a/libexec/tmuxifier-edit-session b/libexec/tmuxifier-edit-session index 3ec5e6e..17f5125 100755 --- a/libexec/tmuxifier-edit-session +++ b/libexec/tmuxifier-edit-session @@ -2,6 +2,16 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier edit-session + +Aliases: edit-ses, eses, es + +Open specified session layout for editing in \$EDITOR." + exit +fi + # Provide tmuxifier completions if [ "$1" == "--complete" ]; then for item in $(tmuxifier-list-sessions); do diff --git a/libexec/tmuxifier-edit-window b/libexec/tmuxifier-edit-window index 89ff1bd..6ff6736 100755 --- a/libexec/tmuxifier-edit-window +++ b/libexec/tmuxifier-edit-window @@ -2,6 +2,16 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier edit-window + +Aliases: edit-win, ewin, ew + +Open specified window layout for editing in \$EDITOR." + exit +fi + # Provide tmuxifier completions if [ "$1" == "--complete" ]; then for item in $(tmuxifier-list-windows); do diff --git a/libexec/tmuxifier-help b/libexec/tmuxifier-help index 08befed..c0579ff 100755 --- a/libexec/tmuxifier-help +++ b/libexec/tmuxifier-help @@ -2,33 +2,33 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + tmuxifier-help + exit +fi + # Provide tmuxifier completions if [ "$1" == "--complete" ]; then tmuxifier-commands exit fi +has-help() { + grep -i "^# Provide tmuxifier help" "$1" >/dev/null +} + command="$1" - -# Ensure we have the correct command name in case an alias was given. -if [ -n "$command" ]; then - ! resolved="$(tmuxifier-alias "$command")" - if [ -n "$resolved" ]; then - command="$resolved" - fi -fi - -case "$command" in - "" ) - echo "usage: tmuxifier [] +if [ -z "$1" ]; then + echo "usage: tmuxifier [] Some useful tmuxifier commands are: 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. + list l List all session and window layouts. + list-sessions ls List session layouts. + list-windows lw 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. @@ -38,87 +38,25 @@ Some useful tmuxifier commands are: help Show this message. See 'tmuxifier help ' for information on a specific command." - ;; - "load-session" ) - echo "usage: tmuxifier load-session + exit +fi -Aliases: session, ses, s +! command_path="$(tmuxifier-resolve-command-path "$1")" -Create a session using the session layout, unless the session already exists -in which case, we simply switch to the existing one." - ;; - "load-window" ) - echo "usage: tmuxifier load-window +if [ -z "$command_path" ]; then + echo "tmuxifier: no such command '$1'" >&2 + exit 1 +fi -Aliases: window, win, w - -Create a new window using the specified window layout in the current session." - ;; - "new-session" ) - echo "usage: tmuxifier new-session - -Aliases: new-ses, ns - -Create a new session layout and open it for editing in \$EDITOR." - ;; - "new-window" ) - echo "usage: tmuxifier new-window - -Aliases: new-win, ws - -Create a new window layout and open it for editing in \$EDITOR." - ;; - "edit-session" ) - echo "usage: tmuxifier edit-session - -Aliases: edit-ses, es - -Open specified session layout for editing in \$EDITOR." - ;; - "edit-window" ) - echo "usage: tmuxifier edit-window - -Aliases: edit-win, ew - -Open specified window layout for editing in \$EDITOR." - ;; - "completions" ) - echo "usage: tmuxifier completion - -Print a list of available completions for specified command." - ;; - "list" ) - echo "usage: tmuxifier list - -Aliases: ls - -List all available session and window layouts." - ;; - "list-sessions" ) - echo "usage: tmuxifier list-sessions - -Aliases: list-ses, lss - -List all session layouts." - ;; - "list-windows" ) - echo "usage: tmuxifier list-windows - -Aliases: list-win, lsw - -List all window layouts." - ;; - * ) - ! command_path="$(tmuxifier-resolve-command-path "$command")" - if [ -n "$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 '$command'" >&2 - exit 1 - fi - ;; -esac +if has-help "$command_path"; then + shift + exec "$command_path" --help "$@" +else + command="$(basename "$command_path")" + command="${command/tmuxifier\-/}" + echo "Sorry, the '$command' command isn't documented yet." + echo "" + echo "You can view the command's source here:" + echo "$command_path" + echo "" +fi diff --git a/libexec/tmuxifier-list b/libexec/tmuxifier-list index dcfbe4b..2c4cab7 100755 --- a/libexec/tmuxifier-list +++ b/libexec/tmuxifier-list @@ -2,10 +2,24 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier list + +Aliases: l + +List all available session and window layouts." + exit +fi + echo "" echo "Sessions:" -tmuxifier-list-sessions +for item in $(tmuxifier-list-sessions); do + echo " - $item" +done echo "" echo "Windows:" -tmuxifier-list-windows +for item in $(tmuxifier-list-windows); do + echo " - $item" +done echo "" diff --git a/libexec/tmuxifier-list-sessions b/libexec/tmuxifier-list-sessions index be7c993..8651ef8 100755 --- a/libexec/tmuxifier-list-sessions +++ b/libexec/tmuxifier-list-sessions @@ -2,8 +2,18 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier list-sessions + +Aliases: list-ses, lses, ls + +List all session layouts." + exit +fi + list=$(find -L "$TMUXIFIER_LAYOUT_PATH" -name "*.session.sh") for file in $list; do file=${file/$TMUXIFIER_LAYOUT_PATH\//} - echo " ${file/.session.sh/}" + echo "${file/.session.sh/}" done diff --git a/libexec/tmuxifier-list-windows b/libexec/tmuxifier-list-windows index ccc4149..0cc6179 100755 --- a/libexec/tmuxifier-list-windows +++ b/libexec/tmuxifier-list-windows @@ -2,8 +2,18 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier list-windows + +Aliases: list-win, lwin, lw + +List all window layouts." + exit +fi + list=$(find -L "$TMUXIFIER_LAYOUT_PATH" -name "*.window.sh") for file in $list; do file=${file/$TMUXIFIER_LAYOUT_PATH\//} - echo " ${file/.window.sh/}" + echo "${file/.window.sh/}" done diff --git a/libexec/tmuxifier-load-session b/libexec/tmuxifier-load-session index 7f82c88..87a88b3 100755 --- a/libexec/tmuxifier-load-session +++ b/libexec/tmuxifier-load-session @@ -2,6 +2,17 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier load-session + +Aliases: session, ses, s + +Create a session using the session layout, unless the session already exists +in which case, we simply attach/switch to the existing one." + exit +fi + # Provide tmuxifier completions if [ "$1" == "--complete" ]; then for item in $(tmuxifier-list-sessions); do @@ -16,11 +27,7 @@ if [ -z "$1" ]; then fi # Load runtime functions. -source "$TMUXIFIER/runtime.sh" +source "$TMUXIFIER/lib/runtime.sh" -if [ ! -z $TMUX ]; then - load_session "$1" -else - echo "tmuxifier: 'load-session' command can only be used from within Tmux." - exit 1 -fi +# Load session file. +load_session "$1" diff --git a/libexec/tmuxifier-load-window b/libexec/tmuxifier-load-window index 8a15a91..5153796 100755 --- a/libexec/tmuxifier-load-window +++ b/libexec/tmuxifier-load-window @@ -2,6 +2,16 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier load-window + +Aliases: window, win, w + +Create a new window using the specified window layout in the current session." + exit +fi + # Provide tmuxifier completions if [ "$1" == "--complete" ]; then for item in $(tmuxifier-list-windows); do @@ -16,7 +26,7 @@ if [ -z "$1" ]; then fi # Load runtime functions. -source "$TMUXIFIER/runtime.sh" +source "$TMUXIFIER/lib/runtime.sh" if [ ! -z $TMUX ]; then session="$(tmuxifier-current-session)" diff --git a/libexec/tmuxifier-new-session b/libexec/tmuxifier-new-session index e8ce920..23e370d 100755 --- a/libexec/tmuxifier-new-session +++ b/libexec/tmuxifier-new-session @@ -2,6 +2,16 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier new-session + +Aliases: new-ses, nses, ns + +Create a new session layout and open it for editing in \$EDITOR." + exit +fi + # Provide tmuxifier completions if [ "$1" == "--complete" ]; then for item in $(tmuxifier-list-sessions); do diff --git a/libexec/tmuxifier-new-window b/libexec/tmuxifier-new-window index a405446..0dd6a4a 100755 --- a/libexec/tmuxifier-new-window +++ b/libexec/tmuxifier-new-window @@ -2,6 +2,16 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier new-window + +Aliases: new-win, nwin, nw + +Create a new window layout and open it for editing in \$EDITOR." + exit +fi + # Provide tmuxifier completions if [ "$1" == "--complete" ]; then for item in $(tmuxifier-list-windows); do diff --git a/libexec/tmuxifier-resolve-command-path b/libexec/tmuxifier-resolve-command-path index bf7a83e..087190c 100755 --- a/libexec/tmuxifier-resolve-command-path +++ b/libexec/tmuxifier-resolve-command-path @@ -2,6 +2,14 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier resolve-command-path + +Outputs the absolute path to the given command or command alias." + exit +fi + if [ -n "$1" ]; then ! command_path="$(command -v "tmuxifier-$1")" if [ -z "$command_path" ]; then diff --git a/libexec/tmuxifier-version b/libexec/tmuxifier-version index 04240df..09fa445 100755 --- a/libexec/tmuxifier-version +++ b/libexec/tmuxifier-version @@ -2,4 +2,12 @@ set -e [ -n "$TMUXIFIER_DEBUG" ] && set -x -echo "0.4.1" +# Provide tmuxifier help +if [ "$1" == "--help" ]; then + echo "usage: tmuxifier version + +Outputs Tmuxifier version." + exit +fi + +echo "0.6.0"