34 Commits

Author SHA1 Message Date
307c959b65 Bump version to 0.3.1 2012-07-04 20:01:04 +01:00
b79125f55d Rename function to match existing naming convention 2012-07-04 19:56:00 +01:00
ddc11cc192 Merge pull request #6 from trobrock/work-with-rvm
When specifying a windows default path, rvm no longer works
2012-07-04 11:51:36 -07:00
Trae Robrock
5c2659c8e7 Use cd to set the working dir of a split or window so that rvm works 2012-06-27 17:46:12 -07:00
Trae Robrock
54a4f565c6 Merge branch 'master' of https://github.com/jimeh/tmuxifier 2012-06-27 14:03:49 -07:00
6a5bf32991 Bump version to 0.3.0 2012-06-27 21:47:12 +01:00
1f81e98e73 Add send_keys examples to window layout template 2012-06-27 21:40:59 +01:00
5989b1f516 Add send_keys layout helper 2012-06-27 21:39:54 +01:00
012526656e Remove send-keys -l support check as it is not needed
After some experimentation it turns out that if input to send-keys is
not a known key sequence like `C-m` or `C-l` for example, it it
automatically treated as literal input.

 Negating the need to use it and hence check if it's supported.
2012-06-27 21:29:29 +01:00
b2857b7df9 Merge pull request #4 from trobrock/no-l-flag
Support tmux versions that do not have the -l flag
2012-06-27 13:08:12 -07:00
Trae Robrock
8df639ae47 Merge branch 'no-l-flag' 2012-06-26 16:36:17 -07:00
Trae Robrock
75ae3ba142 Support tmux versions that do not have the -l flag 2012-06-26 16:35:23 -07:00
c862df2d82 Merge pull request #2 from greeneca/current_session_fix
fixed current session script
2012-06-04 11:52:19 -07:00
Charlie Greene
c06df475be fixed current session script 2012-06-04 14:25:02 -03:00
10104b7412 Update example window layout file with new helpers 2012-05-24 01:02:53 +01:00
3fa749dbf3 Update example in readme with new layout helpers 2012-05-24 00:58:48 +01:00
f8c0c8c749 Bump version to 0.2.1 2012-05-24 00:53:50 +01:00
147db787d5 Add completion to new-session and new-window commands
Complete names of existing sessions and windows for the `new` commands,
enabling easier creation of similarly named layouts.
2012-05-24 00:53:20 +01:00
4477b69f7a Bump version to 0.2.0 2012-05-24 00:42:37 +01:00
71303c8eba Update window template with new layout helpers 2012-05-24 00:42:36 +01:00
89325d0982 Add new layout helper functions for pane creation and command execution 2012-05-24 00:42:35 +01:00
8155740ceb Fix window specific root path
If a session root was set, any window layouts loaded with a window root
set caused the window root to be ignored. This resolves the issue.
2012-05-24 00:42:34 +01:00
ae70bae022 Reorganize functions a bit 2012-05-24 00:42:31 +01:00
a8ff37808a Clean up the code a bit 2012-05-24 00:41:37 +01:00
12100e7f79 Ensure default layouts directory exists after fresh git clone 2012-04-30 17:05:47 +01:00
98b50afb37 Bump version to 0.1.3 2012-04-30 02:18:57 +01:00
99bd6a9bd5 Improve error output from edit-session and edit-window commands 2012-04-30 02:15:50 +01:00
5a0e4c912c Remove useless piece of code left from "borrowing" it from rbenv 2012-04-30 02:15:22 +01:00
178bbdecff Make better use of conditional operators and quote vars properly 2012-04-30 02:14:52 +01:00
1fc854dbdd Move internal runtime functions to layout-helpers.sh file 2012-04-30 02:12:01 +01:00
addb754ac7 Use new tmuxifier-resolve-command-path everywhere 2012-04-30 02:10:43 +01:00
3063c6f1f3 Correctly resolve aliases in help command.
This resolves issue #1.
2012-04-30 02:08:40 +01:00
7d2c9aa49f Bump version to 0.1.2 2012-04-26 08:52:02 +01:00
b65355a35a Boolean logic is hard (and buggy? wtf?)
Fixed a bug with alias resolution not working, for reasons that are
currently beyond my understanding of shell scripting it would seem.
2012-04-26 08:51:49 +01:00
19 changed files with 196 additions and 109 deletions

View File

@@ -33,9 +33,10 @@ looks like:
```bash
window_root "~/Desktop"
new_window "Example Window"
tmux split-window -t "$session:$window.0" -v -p 20 "watch -t date"
tmux split-window -t "$session:$window.1" -h -p 60
tmux select-pane -t "$session:$window.0"
split_v 20
run_cmd "watch -t date"
split_h 60
select_pane 0
```
You can then load that window layout into a new window in the

View File

@@ -24,14 +24,7 @@ case "$command" in
;;
* )
# Lookup command, attempt to resolve as alias if fails
! command_path="$(command -v "tmuxifier-$command")"
if [ ! -n $? ]; then
resolved="$(tmuxifier-alias "$command")"
if [ ! -z "$resolved" ]; then
! command_path="$(command -v "tmuxifier-$resolved")"
fi
fi
! command_path="$(tmuxifier-resolve-command-path "$command")"
if [ -z "$command_path" ]; then
echo "tmuxifier: no such command '$command'" >&2

View File

@@ -7,8 +7,9 @@ window_root "~/Desktop"
new_window "Example Window"
# Split window into panes.
tmux split-window -t "$session:$window.0" -v -p 20 "watch -t date"
tmux split-window -t "$session:$window.1" -h -p 60
split_v 20
run_cmd "watch -t date"
split_h 60
# Set active pane.
tmux select-pane -t "$session:$window.0"
select_pane 0

View File

@@ -10,7 +10,7 @@ export PATH="$TMUXIFIER/bin:$PATH"
# If `tmuxifier` is available, and `$TMUXIFIER_NO_COMPLETE` is not set, then
# load tmuxifier shell completion.
if [ ! -z $(command -v "tmuxifier") ] && [ -z "$TMUXIFIER_NO_COMPLETE" ]; then
if [ -n "$(command -v "tmuxifier")" ] && [ -z "$TMUXIFIER_NO_COMPLETE" ]; then
if [ -n "$BASH_VERSION" ]; then
source "$TMUXIFIER/completion/tmuxifier.bash"
elif [ -n "$ZSH_VERSION" ]; then

0
layouts/.gitkeep Normal file
View File

View File

@@ -13,17 +13,36 @@
# - $2: (optional) Shell command to execute when window is created.
#
new_window() {
if [ ! -z "$1" ]; then
window="$1"
fi
local command=()
if [ ! -z "$2" ]; then
command+=("$2")
fi
if [ ! -z "$window" ]; then
local winarg=(-n "$window")
fi
if [ -n "$1" ]; then window="$1"; fi
if [ -n "$2" ]; then local command=("$2"); fi
if [ -n "$window" ]; then local winarg=(-n "$window"); fi
tmux new-window -t "$session:" "${winarg[@]}" "${command[@]}"
__go_to_window_or_session_path
}
# Split current window/pane vertically.
#
# Arguments:
# - $1: (optional) Percentage of frame the new pane will use.
# - $2: (optional) Target pane ID to split in current window.
#
split_v() {
if [ -n "$1" ]; then local percentage=(-p "$1"); fi
tmux split-window -t "$session:$window.$2" -v "${percentage[@]}"
__go_to_window_or_session_path
}
# Split current window/pane horizontally.
#
# Arguments:
# - $1: (optional) Percentage of frame the new pane will use.
# - $2: (optional) Target pane ID to split in current window.
#
split_h() {
if [ -n "$1" ]; then local percentage=(-p "$1"); fi
tmux split-window -t "$session:$window.$2" -h "${percentage[@]}"
__go_to_window_or_session_path
}
# Select a specific window.
@@ -35,6 +54,60 @@ select_window() {
tmux select-window -t "$session:$1"
}
# Select a specific pane in the current window.
#
# Arguments:
# - $1: Pane ID to select.
#
select_pane() {
tmux select-pane -t "$session:$window.$1"
}
# Send/paste keys to the currently active pane/window.
#
# Arguments:
# - $1: String to paste.
# - $2: (optional) Target pane ID to send input to.
#
send_keys() {
tmux send-keys -t "$session:$window.$2" "$1"
}
# Runs a shell command in the currently active pane/window.
#
# Arguments:
# - $1: Shell command to run.
# - $2: (optional) Target pane ID to run command in.
#
run_cmd() {
send_keys "$1" "$2"
send_keys "C-m" "$2"
}
# Cusomize session root path. Default is `$HOME`.
#
# Arguments:
# - $1: Directory path to use for session root.
#
session_root() {
local dir="$(__expand_path $@)"
if [ -d "$dir" ]; then
session_root="$dir"
fi
}
# Customize window root path. Default is `$session_root`.
#
# Arguments:
# - $1: Directory path to use for window root.
#
window_root() {
local dir="$(__expand_path $@)"
if [ -d "$dir" ]; then
window_root="$dir"
fi
}
# Load specified window layout.
#
# Arguments:
@@ -45,7 +118,7 @@ load_window() {
if [ -f "$file" ]; then
window="$1"
source "$file"
window=""
window=
# Reset `$window_root`.
if [[ "$window_root" != "$session_root" ]]; then
@@ -77,30 +150,6 @@ load_session() {
fi
}
# Cusomize session root path. Default is `$HOME`.
#
# Arguments:
# - $1: Directory path to use for session root.
#
session_root() {
local dir="$(__expand_path $@)"
if [ -d "$dir" ]; then
session_root="$dir"
fi
}
# Customize window root path. Default is `$session_root`.
#
# Arguments:
# - $1: Directory path to use for window root.
#
window_root() {
local dir="$(__expand_path $@)"
if [ -d "$dir" ]; then
cd "$dir"
fi
}
# Create a new session, returning 0 on success, 1 on failure.
#
# Arguments:
@@ -114,7 +163,7 @@ window_root() {
# fi
#
initialize_session() {
if [ ! -z "$1" ]; then
if [ -n "$1" ]; then
session="$1"
fi
@@ -122,14 +171,14 @@ initialize_session() {
tmux start-server
# Check if the named session already exists.
if ! tmux has-session -t "$session" 2>/dev/null; then
if ! tmux has-session -t "$session:" 2>/dev/null; then
# Create the new session.
env TMUX= tmux new-session -d -s "$session"
env TMUX="" tmux new-session -d -s "$session"
# Set default-path for session
if [ ! -z "$session_root" ] && [ -d "$session_root" ]; then
if [ -n "$session_root" ] && [ -d "$session_root" ]; then
cd "$session_root"
tmux set-option -t "$session" default-path "$session_root" 1>/dev/null
tmux set-option -t "$session:" default-path "$session_root" 1>/dev/null
fi
# In order to ensure only specified windows are created, we move the
@@ -156,9 +205,42 @@ initialize_session() {
# If the session was created, we've already been switched to it. If it was not
# created, the session already exists, and we'll need to specifically switch
# to it here.
#
finalize_and_go_to_session() {
! tmux kill-window -t "$session:99" 2>/dev/null
if [[ "$(tmuxifier-current-session)" != "$session" ]]; then
__go_to_session
fi
}
#
# Internal functions
#
# Expands given path.
#
# Example:
#
# $ __expand_path "~/Projects"
# /Users/jimeh/Projects
#
__expand_path() {
echo $(eval echo "$@")
}
__go_to_session() {
if [ -z "$TMUX" ]; then
tmux -u attach-session -t "$session:"
else
tmux -u switch-client -t "$session:"
fi
}
__go_to_window_or_session_path() {
local window_or_session_root=${window_root-$session_root}
if [ -n "$window_or_session_root" ]; then
run_cmd "cd \"$window_or_session_root\""
send_keys "C-l"
fi
}

View File

@@ -31,6 +31,5 @@ case "$1" in
echo "list-windows"
;;
* )
echo "unknown alias \"$1\""
exit 1
esac

View File

@@ -7,7 +7,7 @@ shopt -s nullglob
{ for path in ${PATH//:/$'\n'}; do
for command in "${path}/tmuxifier-"*; do
command="${command##*tmuxifier-}"
echo ${command##sh-}
echo "$command"
done
done
} | sort | uniq

View File

@@ -18,16 +18,9 @@ if [ -z "$command" ]; then
exit 1
fi
# Lookup command, attempt to resolve as alias if fails
! command_path="$(command -v "tmuxifier-$command")"
if [ ! -n $? ]; then
resolved="$(tmuxifier-alias "$command")"
if [ ! -z "$resolved" ]; then
! command_path="$(command -v "tmuxifier-$resolved")"
fi
fi
! command_path="$(tmuxifier-resolve-command-path "$command")"
if [ ! -z "$command_path" ] && has-completions "$command_path"; then
if [ -n "$command_path" ] && has-completions "$command_path"; then
shift
exec "$command_path" --complete "$@"
fi

View File

@@ -2,12 +2,10 @@
set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x
if [ ! -z $TMUX ]; then
for item in $(tmux list-sessions -F "#{?session_attached,1,0}:#S"); do
if [[ "$item" == "1:"* ]]; then
echo ${item/1:/}
exit 0
fi
if [ -n "$TMUX" ]; then
for item in $(tmux list-pane -F "#{session_name}");do
echo $item
exit 0
done
fi

View File

@@ -22,7 +22,7 @@ if [ ! -f "$layout_file" ]; then
echo "tmuxifier: session layout '$layout_name' does not exist." >&2
echo "" >&2
echo "You can create it with:" >&2
echo " tmuxifier new-session $layout_name" >&2
echo " tmuxifier new-session '$layout_name'" >&2
exit 1
fi

View File

@@ -22,7 +22,7 @@ if [ ! -f "$layout_file" ]; then
echo "tmuxifier: window layout '$layout_name' does not exist." >&2
echo "" >&2
echo "You can create it with:" >&2
echo " tmuxifier new-window $layout_name" >&2
echo " tmuxifier new-window '$layout_name'" >&2
exit 1
fi

View File

@@ -10,13 +10,11 @@ fi
command="$1"
# Lookup command, attempt to resolve as alias if fails
! command_path="$(command -v "tmuxifier-$command")"
if [ ! -n $? ]; then
resolved="$(tmuxifier-alias "$command")"
if [ ! -z "$resolved" ]; then
# 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"
! command_path="$(command -v "tmuxifier-$command")"
fi
fi
@@ -111,14 +109,16 @@ Aliases: list-win, lsw
List all window layouts."
;;
* )
if [ ! -z "$command_path" ]; then
! 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'"
echo "tmuxifier: no such command '$command'" >&2
exit 1
fi
;;
esac

View File

@@ -2,6 +2,14 @@
set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x
# Provide tmuxifier completions
if [ "$1" == "--complete" ]; then
for item in $(tmuxifier-list-sessions); do
echo "$item"
done
exit
fi
if [ -z "$1" ]; then
echo "$(tmuxifier-help new-session)" >&2
exit 1

View File

@@ -2,6 +2,14 @@
set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x
# Provide tmuxifier completions
if [ "$1" == "--complete" ]; then
for item in $(tmuxifier-list-windows); do
echo "$item"
done
exit
fi
if [ -z "$1" ]; then
echo "$(tmuxifier-help new-window)" >&2
exit 1

View File

@@ -0,0 +1,19 @@
#! /usr/bin/env bash
set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x
if [ -n "$1" ]; then
! command_path="$(command -v "tmuxifier-$1")"
if [ -z "$command_path" ]; then
resolved="$(tmuxifier-alias "$1")"
if [ -n "$resolved" ]; then
! command_path="$(command -v "tmuxifier-$resolved")"
fi
fi
fi
if [ -n "$command_path" ]; then
echo "$command_path"
else
exit 1
fi

View File

@@ -2,4 +2,4 @@
set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x
echo "0.1.1"
echo "0.3.1"

View File

@@ -10,27 +10,3 @@ session_root="$HOME"
# Load layout helper functions.
source "$TMUXIFIER/lib/layout-helpers.sh"
#
# Internal functions
#
# Expands given path.
#
# Example:
#
# $ __expand_path "~/Projects"
# /Users/jimeh/Projects
#
__expand_path() {
echo $(eval echo "$@")
}
__go_to_session() {
if [ -z $TMUX ]; then
tmux -u attach-session -t "$session"
else
tmux -u switch-client -t "$session"
fi
}

View File

@@ -7,7 +7,16 @@
new_window "{{WINDOW_NAME}}"
# Split window into panes.
#tmux split-window -t "$session:$window.0" -h -p 20
#split_v 20
#split_h 50
# Run commands.
#run_cmd "top" # runs in active pane
#run_cmd "date" 1 # runs in pane 1
# Paste text
#send_keys "top" # paste into active pane
#send_keys "date" 1 # paste into active pane
# Set active pane.
#tmux select-pane -t "$session:$window.0"
#select_pane 0