85 Commits

Author SHA1 Message Date
8987dd4492 Bump version to 0.13.0 2017-04-27 19:49:05 +01:00
9049818b25 Add optional target window argument to newly added layout helpers 2017-04-27 19:48:15 +01:00
47ef3bd857 Merge pull request #75 from leesei/sort-list
feat: sort sessions and windows list
2017-04-27 19:32:01 +01:00
a9ca566c28 Merge pull request #73 from Yuki-Inoue/synchronize-helper-methods
Add synchronize helper methods
2017-04-27 19:23:22 +01:00
87e31a03c9 Merge pull request #58 from mlavi/fish2-0-0
Accommodate fish shell 2.0.0
2017-04-27 19:21:02 +01:00
7f3ec1cd5b Merge pull request #76 from xsteve/feature/fix-has-session
Work around a problem with tmux has-session:
2017-04-27 19:18:49 +01:00
9baadfbb1e Bump version to 0.12.3 2017-04-27 18:59:38 +01:00
2adc885bb8 Fix issue with using a tmux version compiled source
Resolves #79.

When tmux is compiled from source the version string is "master" which
the tmux-version command didn't deal with correctly.
2017-04-27 18:59:38 +01:00
7cc0fa2d0e Fix typo in help text of tmux-version command 2017-04-27 18:59:38 +01:00
Stefan Reichoer
e41b15c515 Work around a problem with tmux has-session:
tmux has-session does a prefix match and not an exact match.

When a session "ABC" does exist, the session "A" is also interpreted as "ABC"
Using tmux list-sessions fixes this problem
2016-10-28 13:07:17 +02:00
leesei
690a4465b0 feat: sort sessions and windows list
On branch sort-list
Changes to be committed:
	modified:   libexec/tmuxifier-list-sessions
	modified:   libexec/tmuxifier-list-windows
2016-08-19 23:14:08 +08:00
Yuki Inoue
9bcfbd3428 Add synchronize helper methods 2016-05-09 12:34:48 +09:00
7aeeaf31d1 Merge pull request #71 from Yuki-Inoue/balance-windows-layout-helpers
Add balance_window helper methods
2016-04-28 18:35:42 +01:00
ca6dcfaaf2 Merge pull request #72 from Yuki-Inoue/fix-ci-use-github
Fix tmux sourcecode url to github
2016-04-28 18:30:26 +01:00
Yuki Inoue
fdbb1704e0 Fix tmux sourcecode url to github
The sourceforge project of tmux seems to have been removed.  So,
wgetting from github releases instead of sourceforge.
2016-04-28 22:08:30 +09:00
Yuki Inoue
499c5abd83 Add balance_window helper methods 2016-04-28 15:17:05 +09:00
3563c3d975 Bump version to 0.12.2 2016-04-02 22:28:37 +01:00
3bfbc50918 Merge pull request #70 from blueyed/fix-load-session
Fixes for load_session with file in current dir
2016-04-02 22:26:23 +01:00
Daniel Hahler
3a8a43ccdc style: load_session: move return case up, removing indent 2016-04-02 22:38:40 +02:00
Daniel Hahler
a9a87992df load_session: prefer existing session instead of file in cwd
This also adds './' to a file used from the current working dir (in case
there is no session with that name), which is required for Bash's
`source` to use it (and not look for it in `$PATH`).

Fixes https://github.com/jimeh/tmuxifier/issues/69.
2016-04-02 22:38:25 +02:00
5f4dd92d7f Merge pull request #66 from shalecraig/patch-1
Update link to iterm2
2016-01-26 23:09:54 +00:00
shale
bdaa272ca5 Update link to iterm2
iterm2 moved to gitlab from google project hosting.
2016-01-19 10:30:28 -08:00
dce4fb3ad2 Merge pull request #65 from bchretien/topic/window-rename
new_window: disable allow-rename if a window name was given
2015-12-20 23:38:43 +00:00
Benjamin Chrétien
6f8773133d new_window: disable allow-rename if a window name was given 2015-12-15 17:53:45 +01:00
92d188f9f5 Bump version to 0.12.1 2015-07-25 13:38:00 +01:00
8d1751daea Merge pull request #62 from jimeh/fix-issue-61
Fix issue #61
2015-07-25 13:35:24 +01:00
dafa938923 Add Tmux 2.0 to Travis-CI test environments 2015-07-25 13:27:12 +01:00
595269dd6a Make load-window within a session adhere to session_root setting
This should fix #61. Previously when you manually ran `tmuxifier
load-window` from within a session created by Tmuxifier, the
`session_root` path set in the session was ignored, and the new window
would be cd'd to `$HOME` unless the window configuration had
`window_root` set.
2015-07-25 13:24:02 +01:00
Mark Lavi
3c37e18987 Accommodate fish shell 2.0.0 2015-03-22 00:38:17 -07:00
b801aade99 Bump version to 0.12.0 2014-12-02 22:23:37 +00:00
a888efe6d0 Update __go_to_session layout helper test 2014-12-02 22:22:09 +00:00
4a4f62fcf2 Improve/fix help messages for a few commands 2014-12-01 21:03:26 +00:00
41da75ad39 Add support for iTerm2's Tmux integration
This should resolve #52.
2014-12-01 21:01:58 +00:00
6f98020309 Bump version to 0.11.6 2014-08-29 22:59:23 +01:00
a96b5a1d44 Merge pull request #50 from jimeh/fix-new_window-active-window-tracking
Fix new window active window tracking
2014-08-29 22:52:48 +01:00
fe3beeac29 Attempt to avoid timing issue which sometimes causes test to fail 2014-08-29 22:46:41 +01:00
ef0f25591c Set $window var based on currently active window
Previously $window was only set by the new_window() helper when it was
passed a name argument. This caused weird behavior cause if it was
called without a name it would simply attempt to recreate the same
window and fail. That was until @blueyed's fix in 2249cf8.

However, the $window var still wasn't being set correctly, leaving
split_v(), split_h() and other helpers to operate on the wrong
window. This is no longer an issue as $window is always set to the index
of the currently active window at the end of new_window() and
select_window().
2014-08-29 22:29:03 +01:00
0ae0bc84e3 Add __get_current_window_index internal helper function 2014-08-29 22:28:25 +01:00
Daniel Hahler
2249cf8d1b new_window: only set $window and pass -n if a name is provided
Otherwise `new_window` after `new_window foo` would re-use the same
name, resulting in an error.
2014-08-29 20:20:07 +01:00
4bf105eebc Improve wording of comment 2014-08-29 20:15:32 +01:00
71236afccf Clean up structure of initialize_session helper function 2014-08-29 20:14:59 +01:00
6e5794a2b4 Add travis build status to readme 2014-08-29 19:33:38 +01:00
f8f0054c99 Merge pull request #46 from jimeh/add-tests
Add tests
2014-08-29 19:26:47 +01:00
6a1e9e4de7 Cleanup Makefile a bit 2014-08-21 01:54:05 +01:00
77ccb5d532 Clean up test a bit 2014-07-21 16:13:16 +01:00
48b5150b0d Bump version to 0.11.5 2014-07-21 16:08:22 +01:00
38932bf33e Fix issue where EDITOR contains flags 2014-07-21 16:07:33 +01:00
d8b8dff61f Add tests for new_window layout helper 2014-06-04 00:36:33 +01:00
d47838ca1f Add and use test helpers to create/kill test-specific tmux sessions 2014-06-04 00:07:23 +01:00
87d767d1c5 Fix issue with PATH in test environment 2014-06-03 23:19:34 +01:00
1b0b3b8ba8 Add tests for __get_first_window_index layout helper 2014-06-03 20:31:41 +01:00
94b9559bfa Use full tmux command names rather than aliases 2014-06-03 20:31:19 +01:00
636e92b118 Add tests for __go_to_window_or_session_path layout helper 2014-06-03 20:01:47 +01:00
8a06ad149e Update test-runner.sh to v0.2.0 2014-06-03 20:01:31 +01:00
7e63149c26 Add tests for tmux layout helper 2014-05-26 20:20:39 +01:00
36add22637 Use test-runner.sh instead of homegrown test.sh 2014-05-26 13:52:55 +01:00
3aa151b865 Add tests for __go_to_session layout helper 2014-05-26 11:35:10 +01:00
f977850ea9 Add tests for __expand_path layout helper 2014-05-26 11:34:53 +01:00
47219d2d40 Improve test environment for individual test files 2014-05-26 11:28:28 +01:00
6e634ecba9 Update stub.sh 2014-05-26 11:28:16 +01:00
396120cf53 Add slight speed improvements for Travis-CI 2014-05-25 02:41:54 +01:00
a875b63033 Attempt to fix test failing with Tmux 1.6 and 1.7 2014-05-25 02:38:05 +01:00
0d0106e7ba Attempt to run travis-ci tests against multiple versions of tmux 2014-05-25 02:34:13 +01:00
ed52353bba Attempt to get tmux 1.8 on Travis-CI boxes 2014-05-25 01:42:09 +01:00
57b4f303f2 Install tmux on travis-ci.org 2014-05-25 01:32:27 +01:00
359f1a9a94 Use tput instead of hard-coded color codes 2014-05-25 01:32:07 +01:00
41218e3072 Colorize part of test output 2014-05-25 01:24:49 +01:00
5602bf650e Add basic tests for tmuxifier-tmux 2014-05-25 01:24:30 +01:00
54f6f890bb Add tests for lib/util.sh 2014-05-25 00:27:09 +01:00
e5ffdc6f16 A few further tweaks to how path handling in tests 2014-05-25 00:27:09 +01:00
1fb80660b8 Add tests for lib/runtime.sh 2014-05-25 00:27:09 +01:00
a700770757 Fix path related test setup issue 2014-05-25 00:27:09 +01:00
c927126cb3 Improve global test setup in test-helper.sh 2014-05-25 00:27:08 +01:00
279e68f7c5 Add tests for lib/env.sh 2014-05-25 00:27:08 +01:00
1bf087faa3 Basic setup for tests
Based on the test setup of stub.sh: https://github.com/jimeh/stub.sh
2014-05-25 00:27:08 +01:00
2aa549ff70 Bump version to 0.11.4 2014-05-25 00:17:14 +01:00
6f0fdba121 Remove all argument handling from tmuxifier-tmux
It's meant to be a wrapper for tmux, allowing additional arguments to be
passed. Hence having the wrapper itself intercept -h as previously, or
--help as removed in this commit prevents the wrapper from working
properly.
2014-05-25 00:15:29 +01:00
a1e6972434 Bump version to 0.11.3 2014-05-25 00:12:22 +01:00
7443dd74f8 Fix #45 - tmuxifier-tmux should not treat -h flag as output help 2014-05-25 00:12:17 +01:00
e08ee38927 Bump version to 0.11.2 2014-05-15 14:10:53 +01:00
8416e63094 Merge pull request #38 from fritzgrabo/source-missing-utility-functions
Source missing utility functions in tmuxifier-tmux
2014-05-15 14:06:13 +01:00
Fritz Grabo
fe1ac9d2f9 Source missing utility functions in tmuxifier-tmux 2014-05-15 14:22:34 +02:00
87c38ae818 Bump version to 0.11.1 2014-05-14 00:11:38 +01:00
3a74ff3a60 Minor tweaks and updates to a few help messages 2014-05-14 00:08:09 +01:00
7df4a33a7d Fix typo in readme 2014-05-13 23:56:43 +01:00
31 changed files with 861 additions and 80 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
test-runner.sh
test/assert.sh
test/stub.sh

16
.travis.yml Normal file
View File

@@ -0,0 +1,16 @@
language: c
env:
- TMUX_VERSION="1.6"
- TMUX_VERSION="1.7"
- TMUX_VERSION="1.8"
- TMUX_VERSION="1.9a"
- TMUX_VERSION="2.0"
before_install:
- sudo apt-get update
- sudo apt-get install -y bc build-essential libevent-dev libncurses5-dev
- wget https://github.com/tmux/tmux/releases/download/${TMUX_VERSION}/tmux-${TMUX_VERSION}.tar.gz
- tar -zxf tmux-${TMUX_VERSION}.tar.gz
- cd tmux-${TMUX_VERSION}
- ./configure && make && sudo make install
- cd ..
script: make test

50
Makefile Normal file
View File

@@ -0,0 +1,50 @@
test: bootstrap
./test-runner.sh
bootstrap: test-runner.sh test/assert.sh test/stub.sh
clean: remove_test-runner.sh remove_test/assert.sh remove_test/stub.sh
update: update_test-runner.sh update_test/assert.sh update_test/stub.sh
test-runner.sh:
echo "fetching test-runner.sh..." && \
curl -s -L -o test-runner.sh \
https://github.com/jimeh/test-runner.sh/raw/v0.2.0/test-runner.sh && \
chmod +x test-runner.sh
remove_test-runner.sh:
( \
test -f "test-runner.sh" && rm "test-runner.sh" && \
echo "removed test-runner.sh"\
) || exit 0
update_test-runner.sh: remove_test-runner.sh test-runner.sh
test/assert.sh:
echo "fetching test/assert.sh..." && \
curl -s -L -o test/assert.sh \
https://raw.github.com/lehmannro/assert.sh/v1.0.2/assert.sh
remove_test/assert.sh:
test -f "test/assert.sh" && \
rm "test/assert.sh" && \
echo "removed test/assert.sh"
update_test/assert.sh: remove_test/assert.sh test/assert.sh
test/stub.sh:
echo "fetching test/stub.sh..." && \
curl -s -L -o test/stub.sh \
https://raw.github.com/jimeh/stub.sh/v1.0.1/stub.sh
remove_test/stub.sh:
test -f "test/stub.sh" && \
rm "test/stub.sh" && \
echo "removed test/stub.sh"
update_test/stub.sh: remove_test/stub.sh test/stub.sh
.SILENT:
.PHONY: test bootstrap clean \
remove_test-runner.sh update_test-runner.sh \
remove_test/assert.sh update_test/assert.sh \
remove_test/stub.sh update_test/stub.sh

View File

@@ -1,4 +1,4 @@
# Tmuxifier # Tmuxifier [![Build Status](https://api.travis-ci.org/jimeh/tmuxifier.svg)](https://travis-ci.org/jimeh/tmuxifier)
Tmuxify your Tmux. Create, edit, manage and load complex Tmux session, window Tmuxify your Tmux. Create, edit, manage and load complex Tmux session, window
and pane configurations with ease. and pane configurations with ease.
@@ -105,7 +105,7 @@ __In fish:__
And add the following to your `~/.config/fish/config.fish` or equivalent: And add the following to your `~/.config/fish/config.fish` or equivalent:
```bash ```bash
eval (tmuxifier init -) eval (tmuxifier init - fish)
``` ```
### Custom Tmux Arguments ### Custom Tmux Arguments
@@ -122,7 +122,7 @@ eval "$(tmuxifier init -)"
And/or specify dynamically when calling `tmuxifier`: And/or specify dynamically when calling `tmuxifier`:
```bash ```bash
TMUXIFIER_TMUX_OPTS="-L other-session" tmuxifier load-session welcome TMUXIFIER_TMUX_OPTS="-L other-socket" tmuxifier load-session welcome
``` ```
## Updating ## Updating
@@ -202,6 +202,22 @@ any reason you need to disable it, just set `$TMUXIFIER_NO_COMPLETE`.
export TMUXIFIER_NO_COMPLETE=1 export TMUXIFIER_NO_COMPLETE=1
``` ```
## Tips
### iTerm2 Integration
Tmuxifier supports iTerm2's [Tmux integration][]. It can be used in two ways:
- Passing `-CC` as a second argument to the `load-session` command. For
example:
tmuxifier load-session my-awesome-session -CC
- Setting the `TMUXIFIER_TMUX_ITERM_ATTACH` environment variable to `-CC`
before calling the `load-session` command.
[tmux integration]: https://gitlab.com/gnachman/iterm2/wikis/TmuxIntegration
## Inspiration ## Inspiration
- Tmuxifier is largely inspired by [Tmuxinator][]. - Tmuxifier is largely inspired by [Tmuxinator][].

View File

@@ -11,7 +11,10 @@ end
# If `tmuxifier` is available, and `$TMUXIFIER_NO_COMPLETE` is not set, then # If `tmuxifier` is available, and `$TMUXIFIER_NO_COMPLETE` is not set, then
# load Tmuxifier shell completion. # load Tmuxifier shell completion.
if test -n (which tmuxifier); and test -z $TMUXIFIER_NO_COMPLETE if test -n (which tmuxifier); and test -z $TMUXIFIER_NO_COMPLETE
source "$TMUXIFIER/completion/tmuxifier.fish" # fish shell 2.0.0 does not have the source alias
if [ (fish --version 2>| awk -F'version ' '{print $2}') = '2.0.0' ];
. "$TMUXIFIER/completion/tmuxifier.fish"
else
source "$TMUXIFIER/completion/tmuxifier.fish"
end
end end

View File

@@ -18,11 +18,15 @@ tmux() {
# - $2: (optional) Shell command to execute when window is created. # - $2: (optional) Shell command to execute when window is created.
# #
new_window() { new_window() {
if [ -n "$1" ]; then window="$1"; fi if [ -n "$1" ]; then local winarg=(-n "$1"); fi
if [ -n "$2" ]; then local command=("$2"); fi if [ -n "$2" ]; then local command=("$2"); fi
if [ -n "$window" ]; then local winarg=(-n "$window"); fi
tmuxifier-tmux new-window -t "$session:" "${winarg[@]}" "${command[@]}" tmuxifier-tmux new-window -t "$session:" "${winarg[@]}" "${command[@]}"
# Disable renaming if a window name was given.
if [ -n "$1" ]; then tmuxifier-tmux set-option -t "$1" allow-rename off; fi
window="$(__get_current_window_index)"
__go_to_window_or_session_path __go_to_window_or_session_path
} }
@@ -89,6 +93,7 @@ clock() {
# #
select_window() { select_window() {
tmuxifier-tmux select-window -t "$session:$1" tmuxifier-tmux select-window -t "$session:$1"
window="$(__get_current_window_index)"
} }
# Select a specific pane in the current window. # Select a specific pane in the current window.
@@ -100,6 +105,44 @@ select_pane() {
tmuxifier-tmux select-pane -t "$session:$window.$1" tmuxifier-tmux select-pane -t "$session:$window.$1"
} }
# Balance windows vertically with the "even-vertical" layout.
#
# Arguments:
# - $1: (optional) Window ID or name to operate on.
#
balance_windows_vertical() {
tmuxifier-tmux select-layout -t "$session:${1:-$window}" even-vertical
}
# Balance windows horizontally with the "even-horizontal" layout.
#
# Arguments:
# - $1: (optional) Window ID or name to operate on.
#
balance_windows_horizontal() {
tmuxifier-tmux select-layout -t "$session:${1:-$window}" even-horizontal
}
# Turn on synchronize-panes in a window.
#
# Arguments:
# - $1: (optional) Window ID or name to operate on.
#
synchronize_on() {
tmuxifier-tmux set-window-option -t "$session:${1:-$window}" \
synchronize-panes on
}
# Turn off synchronize-panes in a window.
#
# Arguments:
# - $1: (optional) Window ID or name to operate on.
#
synchronize_off() {
tmuxifier-tmux set-window-option -t "$session:${1:-$window}" \
synchronize-panes off
}
# Send/paste keys to the currently active pane/window. # Send/paste keys to the currently active pane/window.
# #
# Arguments: # Arguments:
@@ -184,31 +227,39 @@ load_window() {
# - $2: (optional) Override default window name. # - $2: (optional) Override default window name.
# #
load_session() { load_session() {
local file="$1" local file
if [ ! -f "$file" ]; then if [ "${1#*/}" = "$1" ]; then
file="$TMUXIFIER_LAYOUT_PATH/$1.session.sh" # There's no slash in the path.
fi if [ -f "$TMUXIFIER_LAYOUT_PATH/$1.session.sh" ] || [ ! -f "$1" ]; then
file="$TMUXIFIER_LAYOUT_PATH/$1.session.sh"
if [ -f "$file" ]; then
if [ $# -gt 1 ]; then
session="$2"
else else
session="${1/%.session.sh}" # bash's 'source' requires an slash in the filename to not use $PATH.
session="${session/%.sh}" file="./$1"
fi
set_default_path=true
source "$file"
session=
# Reset `$session_root`.
if [[ "$session_root" != "$HOME" ]]; then
session_root="$HOME"
fi fi
else else
file="$1"
fi
if ! [ -f "$file" ]; then
echo "\"$1\" session layout not found." >&2 echo "\"$1\" session layout not found." >&2
return 1 return 1
fi fi
if [ $# -gt 1 ]; then
session="$2"
else
session="${1/%.session.sh}"
session="${session/%.sh}"
fi
set_default_path=true
source "$file"
session=
# Reset `$session_root`.
if [[ "$session_root" != "$HOME" ]]; then
session_root="$HOME"
fi
} }
# Create a new session, returning 0 on success, 1 on failure. # Create a new session, returning 0 on success, 1 on failure.
@@ -232,40 +283,45 @@ initialize_session() {
tmuxifier-tmux start-server tmuxifier-tmux start-server
# Check if the named session already exists. # Check if the named session already exists.
if ! tmuxifier-tmux has-session -t "$session:" 2>/dev/null; then if tmuxifier-tmux list-sessions | grep -q "^$session:"; then
if [ "$(tmuxifier-tmux-version "1.9")" == "<" ]; then return 1
# Tmux 1.8 and earlier. fi
# Create the new session. # Tmux 1.8 and earlier.
env TMUX="" tmuxifier-tmux new-session -d -s "$session" if [ "$(tmuxifier-tmux-version "1.9")" == "<" ]; then
# Create the new session.
env TMUX="" tmuxifier-tmux new-session -d -s "$session"
# Set default-path for session # Set default-path for session
if [ -n "$session_root" ] && [ -d "$session_root" ]; then if [ -n "$session_root" ] && [ -d "$session_root" ]; then
cd "$session_root" cd "$session_root"
$set_default_path && tmuxifier-tmux \ $set_default_path && tmuxifier-tmux \
set-option -t "$session:" \ set-option -t "$session:" \
default-path "$session_root" 1>/dev/null default-path "$session_root" 1>/dev/null
fi
else
# Tmux 1.9 and later.
if $set_default_path; then local session_args=(-c "$session_root"); fi
env TMUX="" tmuxifier-tmux new-session \
-d -s "$session" "${session_args[@]}"
fi fi
# In order to ensure only specified windows are created, we move the # Tmux 1.9 and later.
# default window to position 999, and later remove it with the else
# `finalize_and_go_to_session` function. if $set_default_path; then
local first_window_index=$(__get_first_window_index) local session_args=(-c "$session_root")
tmuxifier-tmux move-window \ fi
-s "$session:$first_window_index" -t "$session:999"
# Session created, return ok exit status. env TMUX="" tmuxifier-tmux new-session \
return 0 -d -s "$session" "${session_args[@]}"
fi fi
# Session already existed, return error exit status.
return 1 if $set_default_path && [[ "$session_root" != "$HOME" ]]; then
tmuxifier-tmux setenv -t "$session:" \
TMUXIFIER_SESSION_ROOT "$session_root"
fi
# In order to ensure only specified windows are created, we move the
# default window to position 999, and later remove it with the
# `finalize_and_go_to_session` function.
local first_window_index=$(__get_first_window_index)
tmuxifier-tmux move-window \
-s "$session:$first_window_index" -t "$session:999"
} }
# Finalize session creation and then switch to it if needed. # Finalize session creation and then switch to it if needed.
@@ -275,8 +331,7 @@ initialize_session() {
# a window that was not explicitly created. Hence we kill it. # a window that was not explicitly created. Hence we kill it.
# #
# If the session was created, we've already been switched to it. If it was not # 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 # created, but already existed, then we'll need to specifically switch to it.
# to it here.
# #
finalize_and_go_to_session() { finalize_and_go_to_session() {
! tmuxifier-tmux kill-window -t "$session:999" 2>/dev/null ! tmuxifier-tmux kill-window -t "$session:999" 2>/dev/null
@@ -312,18 +367,38 @@ __get_first_window_index() {
fi fi
} }
__get_current_window_index() {
local lookup=$(tmuxifier-tmux list-windows -t "$session:" \
-F "#{window_active}:#{window_index}" 2>/dev/null | grep "^1:")
if [ -n "$lookup" ]; then
echo "${lookup/1:}"
fi
}
__go_to_session() { __go_to_session() {
if [ -z "$TMUX" ]; then if [ -z "$TMUX" ]; then
tmuxifier-tmux -u attach-session -t "$session:" tmuxifier-tmux $TMUXIFIER_TMUX_ITERM_ATTACH -u \
attach-session -t "$session:"
else else
tmuxifier-tmux -u switch-client -t "$session:" tmuxifier-tmux -u switch-client -t "$session:"
fi fi
} }
__go_to_window_or_session_path() { __go_to_window_or_session_path() {
local window_or_session_root=${window_root-$session_root} local target_path
if [ -n "$window_or_session_root" ]; then
run_cmd "cd \"$window_or_session_root\"" if [ -n "$window_root" ]; then
target_path="$window_root"
elif [ -n "$TMUXIFIER_SESSION_ROOT" ]; then
target_path="$TMUXIFIER_SESSION_ROOT"
elif [ -n "$session_root" ]; then
target_path="$session_root"
fi
# local window_or_session_root=${window_root-$session_root}
if [ -n "$target_path" ]; then
run_cmd "cd \"$target_path\""
run_cmd "clear" run_cmd "clear"
fi fi
} }

View File

@@ -38,7 +38,7 @@ if [ ! -f "$layout_file" ]; then
fi fi
if [ -n "$EDITOR" ]; then if [ -n "$EDITOR" ]; then
exec "$EDITOR" "$layout_file" exec $EDITOR "$layout_file"
else else
echo "'\$EDITOR' is not set. Please manually open the layout for editing:" echo "'\$EDITOR' is not set. Please manually open the layout for editing:"
echo "$layout_file" echo "$layout_file"

View File

@@ -38,7 +38,7 @@ if [ ! -f "$layout_file" ]; then
fi fi
if [ -n "$EDITOR" ]; then if [ -n "$EDITOR" ]; then
exec "$EDITOR" "$layout_file" exec $EDITOR "$layout_file"
else else
echo "'\$EDITOR' is not set. Please manually open the layout for editing:" echo "'\$EDITOR' is not set. Please manually open the layout for editing:"
echo "$layout_file" echo "$layout_file"

View File

@@ -35,7 +35,7 @@ Some useful tmuxifier commands are:
new-window nw Create new window 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-session es Edit specified session layout with \$EDITOR.
edit-window ew Edit specified window layout with \$EDITOR. edit-window ew Edit specified window layout with \$EDITOR.
commands List all tmuxifier commands. commands List all tmuxifier commands (including internal).
version Print Tmuxifier version. version Print Tmuxifier version.
help Show this message. help Show this message.

View File

@@ -76,7 +76,12 @@ case "$shell" in
;; ;;
fish ) fish )
echo "set -gx TMUXIFIER \"$TMUXIFIER\";" echo "set -gx TMUXIFIER \"$TMUXIFIER\";"
echo "source \"\$TMUXIFIER/init.fish\";" # fish shell 2.0.0 does not have the source alias
if [[ $(fish --version 2>&1 | awk -F'version ' '{print $2}') = '2.0.0' ]]; then
echo ". \"\$TMUXIFIER/init.fish\";"
else
echo "source \"\$TMUXIFIER/init.fish\";"
fi
;; ;;
* ) * )
echo "export TMUXIFIER=\"$TMUXIFIER\";" echo "export TMUXIFIER=\"$TMUXIFIER\";"

View File

@@ -15,7 +15,7 @@ List all session layouts."
exit exit
fi fi
list=$(find -L "$TMUXIFIER_LAYOUT_PATH" -name "*.session.sh") list=$(find -L "$TMUXIFIER_LAYOUT_PATH" -name "*.session.sh" | sort)
for file in $list; do for file in $list; do
file=${file/$TMUXIFIER_LAYOUT_PATH\//} file=${file/$TMUXIFIER_LAYOUT_PATH\//}
echo "${file/.session.sh/}" echo "${file/.session.sh/}"

View File

@@ -15,7 +15,7 @@ List all window layouts."
exit exit
fi fi
list=$(find -L "$TMUXIFIER_LAYOUT_PATH" -name "*.window.sh") list=$(find -L "$TMUXIFIER_LAYOUT_PATH" -name "*.window.sh" | sort)
for file in $list; do for file in $list; do
file=${file/$TMUXIFIER_LAYOUT_PATH\//} file=${file/$TMUXIFIER_LAYOUT_PATH\//}
echo "${file/.window.sh/}" echo "${file/.window.sh/}"

View File

@@ -7,12 +7,19 @@ source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if calling-help "$@"; then if calling-help "$@"; then
echo "usage: tmuxifier load-session <layout_name | file_path> echo "usage: tmuxifier load-session <layout_name | file_path> [<iterm mode>]
Aliases: session, ses, s Aliases: session, ses, s
Create a session using the session layout, unless the session already exists Create a session using the session layout, unless the session already exists
in which case, we simply attach/switch to the existing one." in which case, we simply attach/switch to the existing one.
Arguments:
<layout_name | file_path> - Name of a session layout stored in the layouts
directory, or path to a session layout file.
<iterm mode> - When given as \"-CC\" tmux will be called with
the -CC argument enabling iTerm2 integration.
More info: http://bit.ly/1yDbMlm"
exit exit
fi fi
@@ -30,5 +37,9 @@ fi
# Load runtime functions. # Load runtime functions.
source "$TMUXIFIER/lib/runtime.sh" source "$TMUXIFIER/lib/runtime.sh"
if [ "$2" == "-CC" ]; then
export TMUXIFIER_TMUX_ITERM_ATTACH="-CC"
fi
# Load session file. # Load session file.
load_session "$1" load_session "$1"

View File

@@ -11,7 +11,11 @@ if calling-help "$@"; then
Aliases: window, win, w Aliases: window, win, w
Create a new window using the specified window layout in the current session." Create a new window using the specified window layout in the current session.
Arguments:
<layout_name | file_path> - Name of a window layout stored in the layouts
directory, or path to a window layout file."
exit exit
fi fi

View File

@@ -47,7 +47,7 @@ content="$(cat "$template")"
echo "${content//\{\{SESSION_NAME\}\}/$layout_name}" > "$layout_file" echo "${content//\{\{SESSION_NAME\}\}/$layout_name}" > "$layout_file"
if [ -n "$EDITOR" ]; then if [ -n "$EDITOR" ]; then
exec "$EDITOR" "$layout_file" exec $EDITOR "$layout_file"
else else
echo "Layout file has been created, but '\$EDITOR' is not set. Please " echo "Layout file has been created, but '\$EDITOR' is not set. Please "
echo "manually open the layout for editing:" echo "manually open the layout for editing:"

View File

@@ -47,7 +47,7 @@ content="$(cat "$template")"
echo "${content//\{\{WINDOW_NAME\}\}/$layout_name}" > "$layout_file" echo "${content//\{\{WINDOW_NAME\}\}/$layout_name}" > "$layout_file"
if [ -n "$EDITOR" ]; then if [ -n "$EDITOR" ]; then
exec "$EDITOR" "$layout_file" exec $EDITOR "$layout_file"
else else
echo "Layout file has been created, but '\$EDITOR' is not set. Please " echo "Layout file has been created, but '\$EDITOR' is not set. Please "
echo "manually open the layout for editing:" echo "manually open the layout for editing:"

View File

@@ -7,12 +7,11 @@ source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if calling-help "$@"; then if calling-help "$@"; then
echo "usage: tmuxifier tmux-version [target-version] echo "usage: tmuxifier tmux-version [<target-version>]
Outputs current Tmux version. If given optional target-version it uses the Outputs current Tmux version. If given optional target-version it outputs one
compare-versions command to output one of three possible characters indicating of three possible characters indicating if the current Tmux version number is
if the current Tmux version is equal to, less, or higher version than the equal to, less than, or greater than the <target-version>.
the [target-version].
The three possible outputs are \"=\", \"<\", and \">\"." The three possible outputs are \"=\", \"<\", and \">\"."
exit exit
@@ -45,7 +44,16 @@ vercomp () {
version=$(tmux -V) version=$(tmux -V)
version=${version/tmux /} version=${version/tmux /}
if [ -n "$1" ]; then if [ -z "$1" ]; then
echo "$version"
exit
fi
if [ "$version" == "master" ]; then
# When version string is "master", tmux was compiled from source, and we
# assume it's later than whatever the <target-version> is.
echo '>'
else
# Fix for "1.9a" version comparison, as vercomp() can only deal with # Fix for "1.9a" version comparison, as vercomp() can only deal with
# purely numeric version numbers. # purely numeric version numbers.
version=${version//+([a-zA-Z])/} version=${version//+([a-zA-Z])/}
@@ -56,6 +64,4 @@ if [ -n "$1" ]; then
1) echo '>';; 1) echo '>';;
2) echo '<';; 2) echo '<';;
esac esac
else
echo "$version"
fi fi

View File

@@ -13,4 +13,4 @@ Outputs Tmuxifier version."
exit exit
fi fi
echo "0.11.0" echo "0.13.0"

33
test/lib/env.test.sh Executable file
View File

@@ -0,0 +1,33 @@
#! /usr/bin/env bash
source "../test-helper.sh"
#
# env.sh tests.
#
# Setup.
realTMUXIFIER="$TMUXIFIER"
TMUXIFER="/path/to/tmuxifier"
# When TMUXIFIER_LAYOUT_PATH is not set.
source "${root}/lib/env.sh"
assert 'echo $TMUXIFIER_LAYOUT_PATH' "${TMUXIFIER}/layouts"
# When TMUXIFIER_LAYOUT_PATH is set and has a trailing slash.
TMUXIFIER_LAYOUT_PATH="/path/to/layouts/"
source "${root}/lib/env.sh"
assert 'echo $TMUXIFIER_LAYOUT_PATH' "/path/to/layouts"
unset TMUXIFIER_LAYOUT_PATH
# When TMUXIFIER_LAYOUT_PATH is set and does not have a trailing slash.
TMUXIFIER_LAYOUT_PATH="/path/to/layouts"
source "${root}/lib/env.sh"
assert 'echo $TMUXIFIER_LAYOUT_PATH' "/path/to/layouts"
unset TMUXIFIER_LAYOUT_PATH
# Tear down.
TMUXIFER="$realTMUXIFIER"
unset realTMUXIFIER
# End of tests.
assert_end "env.sh"

View File

@@ -0,0 +1,27 @@
#! /usr/bin/env bash
source "../../test-helper.sh"
source "${root}/lib/layout-helpers.sh"
#
# __expand_path() tests.
#
# Setup.
realHOME="$HOME"
HOME="/home/test-user"
# When given a path containing "~", it expands "~" to "$HOME".
assert '__expand_path "~/Foo/Bar"' "${HOME}/Foo/Bar"
# When given a path without "~", it returns path as is.
assert '__expand_path "/path/to/file"' "/path/to/file"
# When given a path containing spaces, it returns path correctly.
assert '__expand_path "~/Path To/File"' "${HOME}/Path To/File"
# Tear down.
HOME="$realHOME"
unset realHOME
# End of tests.
assert_end "__expand_path()"

View File

@@ -0,0 +1,48 @@
#! /usr/bin/env bash
source "../../test-helper.sh"
source "${root}/lib/layout-helpers.sh"
#
# __get_current_window_index() tests.
#
# When current window is the first and only window.
create-test-session
assert "__get_current_window_index" "0"
kill-test-session
# When creating a second window.
create-test-session
test-socket-tmux new-window -t "$session:1"
assert "__get_current_window_index" "1"
kill-test-session
# When creating a second window and then switching back to the first window.
create-test-session
test-socket-tmux new-window -t "$session:1"
test-socket-tmux select-window -t "$session:0"
assert "__get_current_window_index" "0"
kill-test-session
# When creating multiples windows and switching between them randomly.
create-test-session
assert "__get_current_window_index" "0"
test-socket-tmux new-window -t "$session:1"
assert "__get_current_window_index" "1"
test-socket-tmux new-window -t "$session:2"
assert "__get_current_window_index" "2"
test-socket-tmux new-window -t "$session:3"
assert "__get_current_window_index" "3"
test-socket-tmux select-window -t "$session:1"
assert "__get_current_window_index" "1"
test-socket-tmux select-window -t "$session:0"
assert "__get_current_window_index" "0"
test-socket-tmux select-window -t "$session:3"
assert "__get_current_window_index" "3"
test-socket-tmux select-window -t "$session:2"
assert "__get_current_window_index" "2"
kill-test-session
# End of tests.
assert_end "__get_current_window_index()"

View File

@@ -0,0 +1,30 @@
#! /usr/bin/env bash
source "../../test-helper.sh"
source "${root}/lib/layout-helpers.sh"
#
# __get_first_window_index() tests.
#
# When first window has a index of 0.
create-test-session
assert "__get_first_window_index" "0"
kill-test-session
# When first window has a index of 1.
create-test-session
test-socket-tmux new-window -t "$session:1"
test-socket-tmux kill-window -t "$session:0"
assert "__get_first_window_index" "1"
kill-test-session
# When first window has a index of 2.
create-test-session
test-socket-tmux new-window -t "$session:2"
test-socket-tmux kill-window -t "$session:0"
assert "__get_first_window_index" "2"
kill-test-session
# End of tests.
assert_end "__get_first_window_index()"

View File

@@ -0,0 +1,42 @@
#! /usr/bin/env bash
source "../../test-helper.sh"
source "${root}/lib/layout-helpers.sh"
#
# __go_to_session() tests.
#
# Setup.
session="tmuxifier-test-session"
# When TMUX is not set, attach to $session.
stub tmuxifier-tmux
__go_to_session
assert_raises \
"stub_called_with tmuxifier-tmux -u attach-session -t \"${session}:\"" 0
restore tmuxifier-tmux
# When TMUXIFIER_TMUX_ITERM_ATTACH is set, pass it in as first argument(s) to
# tmuxifier-tmux
TMUXIFIER_TMUX_ITERM_ATTACH="-CC"
stub tmuxifier-tmux
__go_to_session
assert_raises \
"stub_called_with tmuxifier-tmux -CC -u attach-session -t \"${session}:\"" 0
restore tmuxifier-tmux
unset TMUXIFIER_TMUX_ITERM_ATTACH
# When TMUX is set, switch to $session.
TMUX="/tmp/tmux-501/default,1203,0"
stub tmuxifier-tmux
__go_to_session
assert_raises \
"stub_called_with tmuxifier-tmux -u switch-client -t \"${session}:\"" 0
restore tmuxifier-tmux
unset TMUX
# Tear down.
unset session
# End of tests.
assert_end "__go_to_session()"

View File

@@ -0,0 +1,88 @@
#! /usr/bin/env bash
source "../../test-helper.sh"
source "${root}/lib/layout-helpers.sh"
#
# __go_to_window_or_session_path() tests.
#
# When neither $window_root or $session_root are set, does nothing.
stub run_cmd
__go_to_window_or_session_path
assert "stub_called_times run_cmd" "0"
restore run_cmd
# When only $window_root is set, runs cd to $window_root path.
stub run_cmd
window_root="/tmp"
__go_to_window_or_session_path
assert 'stub_called_with_times run_cmd cd \"/tmp\"' "1"
assert 'stub_called_with_times run_cmd clear' "1"
unset window_root
restore run_cmd
# When only $TMUXIFIER_SESSION_ROOT is set, runs cd to $TMUXIFIER_SESSION_ROOT
# path.
stub run_cmd
TMUXIFIER_SESSION_ROOT="/opt"
__go_to_window_or_session_path
assert 'stub_called_with_times run_cmd cd \"/opt\"' "1"
assert 'stub_called_with_times run_cmd clear' "1"
unset TMUXIFIER_SESSION_ROOT
restore run_cmd
# When only $session_root is set, runs cd to $session_root path.
stub run_cmd
session_root="/usr"
__go_to_window_or_session_path
assert 'stub_called_with_times run_cmd cd \"/usr\"' "1"
assert 'stub_called_with_times run_cmd clear' "1"
unset session_root
restore run_cmd
# When $window_root and $session_root are set, runs cd to $window_root path.
stub run_cmd
window_root="/tmp"
session_root="/usr"
__go_to_window_or_session_path
assert 'stub_called_with_times run_cmd cd \"/tmp\"' "1"
assert 'stub_called_with_times run_cmd clear' "1"
unset window_root
unset session_root
restore run_cmd
# When $TMUXIFIER_SESSION_ROOT and $session_root are set, runs cd to
# $TMUXIFIER_SESSION_ROOT path.
stub run_cmd
TMUXIFIER_SESSION_ROOT="/opt"
session_root="/usr"
__go_to_window_or_session_path
assert 'stub_called_with_times run_cmd cd \"/opt\"' "1"
assert 'stub_called_with_times run_cmd clear' "1"
unset TMUXIFIER_SESSION_ROOT
unset session_root
restore run_cmd
# When $window_root, $TMUXIFIER_SESSION_ROOT, and $session_root are set, runs
# cd to $window_root path.
stub run_cmd
window_root="/tmp"
TMUXIFIER_SESSION_ROOT="/opt"
session_root="/usr"
__go_to_window_or_session_path
assert 'stub_called_with_times run_cmd cd \"/tmp\"' "1"
assert 'stub_called_with_times run_cmd clear' "1"
unset window_root
unset TMUXIFIER_SESSION_ROOT
unset session_root
restore run_cmd
# End of tests.
assert_end "__go_to_window_or_session_path()"

View File

@@ -0,0 +1,59 @@
#! /usr/bin/env bash
source "../../test-helper.sh"
source "${root}/lib/layout-helpers.sh"
#
# new_window() tests.
#
# When called without arguments, creates new window.
create-test-session
stub __go_to_window_or_session_path
assert "test-socket-window-count" "1"
new_window
assert "test-socket-window-count" "2"
assert "stub_called_times __go_to_window_or_session_path" "1"
restore __go_to_window_or_session_path
kill-test-session
# When called with name argument, creates new window with specified name.
create-test-session
stub __go_to_window_or_session_path
assert "test-socket-window-count yippieezzz" "0"
new_window "yippieezzz"
assert "test-socket-window-count" "2"
assert "test-socket-window-count yippieezzz" "1"
restore __go_to_window_or_session_path
kill-test-session
# When called with name and command argument, creates new window with
# specified name and executes given command.
rm "/tmp/tmuxifier-new_window-test" &> /dev/null
create-test-session
stub __go_to_window_or_session_path
new_window "foobardoo" "touch /tmp/tmuxifier-new_window-test; bash"
assert "test-socket-window-count" "2"
assert "test-socket-window-count foobardoo" "1"
sleep 0.1 # attempt to avoid timing issue causing flicker
assert_raises 'test -f "/tmp/tmuxifier-new_window-test"' 0
restore __go_to_window_or_session_path
kill-test-session
rm "/tmp/tmuxifier-new_window-test" &> /dev/null
# When called ensure it sets the $window variable to the index of the newly
# created window.
unset window
create-test-session
stub __go_to_window_or_session_path
new_window "foo"
assert "echo $window" "1"
new_window
assert "echo $window" "2"
new_window "bar"
assert "echo $window" "3"
restore __go_to_window_or_session_path
kill-test-session
unset window
# End of tests.
assert_end "new_window()"

View File

@@ -0,0 +1,55 @@
#! /usr/bin/env bash
source "../../test-helper.sh"
source "${root}/lib/layout-helpers.sh"
#
# select_window() tests.
#
window_list() {
test-socket-tmux list-windows -t "$session:" \
-F "#{window_active}:#{window_index}" 2>/dev/null
}
# Selects given window when passed a window index
create-test-session
test-socket-tmux new-window -t "$session:1"
test-socket-tmux new-window -t "$session:2"
select_window 0
assert "window_list | grep '^1:'" "1:0"
select_window 1
assert "window_list | grep '^1:'" "1:1"
select_window 2
assert "window_list | grep '^1:'" "1:2"
kill-test-session
# Selects given window when passed a window name
create-test-session
test-socket-tmux new-window -t "$session:1" -n "foo"
test-socket-tmux new-window -t "$session:2" -n "bar"
select_window foo
assert "window_list | grep '^1:'" "1:1"
select_window bar
assert "window_list | grep '^1:'" "1:2"
kill-test-session
# When called ensure it sets the $window variable to the index of the newly
# created window.
unset window
create-test-session
test-socket-tmux new-window -t "$session:1" -n "foo"
test-socket-tmux new-window -t "$session:2" -n "bar"
select_window "foo"
assert "echo $window" "1"
select_window "bar"
assert "echo $window" "2"
select_window 1
assert "echo $window" "1"
select_window 2
assert "echo $window" "2"
kill-test-session
unset window
# End of tests.
assert_end "select_window()"

View File

@@ -0,0 +1,20 @@
#! /usr/bin/env bash
source "../../test-helper.sh"
source "${root}/lib/layout-helpers.sh"
#
# tmux() tests.
#
# Passes all arguments to tmuxifier-tmux.
stub tmuxifier-tmux
tmux -V
tmux --help
tmux new -s dude
assert_raises "stub_called_with tmuxifier-tmux -V" 0
assert_raises "stub_called_with tmuxifier-tmux --help" 0
assert_raises "stub_called_with tmuxifier-tmux new -s dude" 0
restore tmuxifier-tmux
# End of tests.
assert_end "tmux()"

23
test/lib/runtime.test.sh Executable file
View File

@@ -0,0 +1,23 @@
#! /usr/bin/env bash
source "../test-helper.sh"
#
# runtime.sh tests.
#
source "${root}/lib/runtime.sh"
# We assume env.sh has been sourced if $TMUXIFIER_LAYOUT_PATH has been set.
assert 'echo $TMUXIFIER_LAYOUT_PATH' "${TMUXIFIER}/layouts"
# We ensure $session_root is set to $HOME by default.
assert 'echo $session_root' "$HOME"
# We assume layout-helpers.sh has been sourced if a few of them are available.
for helper in new_window split_v split_h select_window select_pane; do
assert "type $helper | head -1" "$helper is a function"
done
# End of tests.
assert_end "runtime.sh"

58
test/lib/util.test.sh Executable file
View File

@@ -0,0 +1,58 @@
#! /usr/bin/env bash
source "../test-helper.sh"
source "${root}/lib/util.sh"
#
# calling-help() tests.
#
# Returns 0 when "--help" is part of passed arguments.
assert_raises 'calling-help --help' 0
assert_raises 'calling-help foo --help' 0
assert_raises 'calling-help --help bar' 0
assert_raises 'calling-help foo --help bar' 0
# Returns 0 when "-h" is part of passed arguments.
assert_raises 'calling-help -h' 0
assert_raises 'calling-help foo -h' 0
assert_raises 'calling-help -h bar' 0
assert_raises 'calling-help foo -h bar' 0
# Returns 1 when neither "--help" or "-h" is not part of passed arguments.
assert_raises 'calling-help' 1
assert_raises 'calling-help foo' 1
assert_raises 'calling-help foo bar' 1
# Returns 1 when "--help" is part of passed arguments, but not free-standing.
assert_raises 'calling-help --help-me' 1
assert_raises 'calling-help foo--help' 1
# Returns 1 when "-h" is part of passed arguments, but not free-standing.
assert_raises 'calling-help -hj' 1
assert_raises 'calling-help welcome-home' 1
# End of tests.
assert_end "calling-help()"
#
# calling-complete() tests.
#
# Returns 0 when "--complete" is part of passed arguments.
assert_raises 'calling-complete --complete' 0
assert_raises 'calling-complete foo --complete' 0
assert_raises 'calling-complete --complete bar' 0
assert_raises 'calling-complete foo --complete bar' 0
# Returns 1 when "--complete" is not part of passed arguments.
assert_raises 'calling-complete' 1
assert_raises 'calling-complete foo' 1
assert_raises 'calling-complete foo bar' 1
# Returns 1 when "--complete" is part of passed arguments, but not free-standing.
assert_raises 'calling-complete --complete-me' 1
assert_raises 'calling-complete foo--complete' 1
# End of tests.
assert_end "calling-complete()"

View File

@@ -0,0 +1,22 @@
#! /usr/bin/env bash
source "../test-helper.sh"
source "${root}/lib/util.sh"
#
# tmuxifier-tmux tests.
#
# Setup.
libexec="${root}/libexec"
test-socket-tmux new-session -d -s foobar
test-socket-tmux new-session -d -s dude
# Passes all arguments to Tmux.
assert "${libexec}/tmuxifier-tmux list-sessions -F \"- #{session_name}\"" \
"- dude\n- foobar"
# Tear down.
kill-test-server
# End of tests.
assert_end "tmuxifier-tmux"

87
test/test-helper.sh Normal file
View File

@@ -0,0 +1,87 @@
[ -n "$TEST_DEBUG" ] && set -x
resolve_link() {
$(type -p greadlink readlink | head -1) $1
}
abs_dirname() {
local cwd="$(pwd)"
local path="$1"
while [ -n "$path" ]; do
cd "${path%/*}"
local name="${path##*/}"
path="$(resolve_link "$name" || true)"
done
pwd
cd "$cwd"
}
# Find and store path to Tmux binary.
TMUX_BIN="$(command -v tmux)"
# Set testroot variable.
testroot="$(abs_dirname "$BASH_SOURCE")"
# Set root variable.
root="$(abs_dirname "$testroot/../..")"
# Set TMUXIFIER environment variable.
TMUXIFIER="$root"
# Setup PATH environment variable.
PATH="$root/bin:$root/libexec:$PATH"
# Unset TMUX environment variable, tests assume they're not running within
# Tmux.
unset TMUX
# Unset various Tmuxifier environment variables to prevent a local install of
# Tmuxifier interfering with tests.
unset TMUXIFIER_LAYOUT_PATH
unset TMUXIFIER_TMUX_OPTS
unset TMUXIFIER_NO_COMPLETE
# Include assert.sh and stub.sh libraries.
source "${testroot}/assert.sh"
source "${testroot}/stub.sh"
#
# Test Helpers
#
test-socket-tmux() {
export TMUXIFIER_TMUX_OPTS="-L tmuxifier-tests"
"$TMUX_BIN" $TMUXIFIER_TMUX_OPTS $@
}
create-test-session() {
session="$1"
if [ -z "$session" ]; then session="test"; fi
test-socket-tmux new-session -d -s "$session"
}
kill-test-session() {
local target="$1"
if [ -z "$target" ]; then target="$session"; fi
test-socket-tmux kill-session -t "$target"
}
kill-test-server() {
test-socket-tmux kill-server
unset TMUXIFIER_TMUX_OPTS
unset session
}
test-socket-window-count() {
local list="$(test-socket-tmux list-windows)"
if [ -n "$1" ]; then
echo "$list" | grep $1 | wc -l | awk '{print $1}'
else
echo "$list" | wc -l | awk '{print $1}'
fi
}