86 Commits

Author SHA1 Message Date
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
255fe78572 Bump version to 0.11.0 2014-05-13 23:47:35 +01:00
a5426d4e12 Add some comments, if for nothing else, then for educational purposes 2014-05-13 23:47:35 +01:00
5850c15d87 Check for minimum required Tmux version (fixed #37) 2014-05-13 23:47:34 +01:00
4ccf61f692 Merge pull request #36 from MrAlexLau/master
Correct typo in window template, fixes #35.
2014-05-03 08:09:01 +01:00
mralexlau
44c443efe4 Correct typo in window template, fixes #35. 2014-05-02 16:19:18 -05:00
72cfab20a0 Fix typo in fish examples 2014-02-28 11:14:42 +00:00
33f26bca56 Wrap long line 2014-02-27 23:41:11 +00:00
90caa0d362 Fix typo in code comment 2014-02-27 23:40:48 +00:00
0aa0e43949 Improve custom tmux arguments section
Don't ask why there was no header, cause it's beyond me >_<
2014-02-27 22:46:00 +00:00
2a09683851 Bump version to 0.10.0
The 0.9.2 bump should have been 0.10.0. Support for fish shell was
added, hence a minor version bump is needed, not a patch.
2014-02-27 22:36:40 +00:00
5b3f4d8488 Bump version to 0.9.2 2014-02-27 22:34:23 +00:00
36c702cb88 Improve TMUXIFIER_TMUX_OPTS section 2014-02-27 22:33:39 +00:00
50f84b1586 Improve Update section, slightly, just slightly :) 2014-02-27 22:33:05 +00:00
feed17581a Mention fish shell where sensible 2014-02-27 22:32:23 +00:00
91722a4895 Update copyright year 2014-02-27 22:31:55 +00:00
cd7ae2ebce Merge pull request #32 from trekdemo/fish_support
Full fish shell support
2014-02-27 22:23:47 +00:00
Gergő Sulymosi
a9479df7c1 Update README with fish related stuff 2014-02-27 23:03:09 +01:00
Gergő Sulymosi
84de3da9ac Initialization under fish 2014-02-27 23:02:54 +01:00
7f8840eac9 Bump version to 0.9.1 2014-02-25 00:35:13 +00:00
0653074570 Fix issue #28, default-path error with Tmux 1.9
When using Tmux 1.9 and later the "-c" argument is given to the
"new-session" command to set the session's root/default path. When using
Tmux 1.8.x and earlier, the old "default-path" session option method is
used instead.
2014-02-25 00:30:34 +00:00
5047f596af Merge pull request #31 from trekdemo/fish_completion
Add completion for fish shell
2014-02-24 22:41:45 +00:00
Gergő Sulymosi
f2c5e9bb66 Add completion for fish shell 2014-02-24 10:06:01 +01:00
ae96c17580 Merge pull request #29 from matthias-guenther/installation-fix-for-zsh
Problems with zsh installation
2014-02-11 09:28:49 +00:00
Matthias Guenther
f5c4361268 Add /home/wikimatze variable 2014-02-04 20:28:48 +01:00
Matthias Guenther
8a9174c1c5 Fixing the export path option for bash and zsh in the README 2014-02-04 18:23:21 +01:00
3dfa166041 Bump version to 0.9.0 2014-01-29 08:12:42 +00:00
e231f2d642 Enable passing custom arguments to tmux
Custom arguments can now be passed to tmux by setting the
TMUXIFIER_TMUX_OPTS environment variable.
2014-01-29 08:11:20 +00:00
966e500b40 Bump version to 0.8.1 2013-07-17 14:43:17 +01:00
4c1cb0762a Fix issue #23 - Some consoles don't seem to support C-l 2013-07-17 14:42:46 +01:00
a7473208c0 Bump version to 0.8.0 2013-07-02 23:06:03 +02:00
1dddbb502c Enable load commands to accept file paths in addition to layout names
Resolves issue #20. Additionally, load_session now has an optional
second argument to set the default session name. And error output from
both load commands is now printed to STDERR and give a return code of 1
on error.
2013-07-02 23:05:18 +02:00
da1354d5b7 Bump version to 0.7.3 2013-06-27 08:56:40 +02:00
f01c789de4 Fix typo 2013-06-27 08:55:43 +02:00
b52ef20be8 Merge pull request #22 from limeyd/master
Add optional window name when loading windows
2013-06-26 23:54:38 -07:00
limeyd
212693b1e9 added optional window name 2013-06-26 20:55:29 -06:00
908152bb57 Bump version to 0.7.2 2013-06-20 09:38:22 +01:00
a0365273d0 Minor formatting fixes 2013-06-20 09:38:00 +01:00
6c8777adc2 Merge pull request #19 from gryftir/master
split_hl, split_vl and clock functions
2013-06-20 01:36:45 -07:00
Lawrence Siebert
5e33aefa7d modified: lib/layout-helpers.sh
added split_hl and split_hl and split_vl which split with a count of
columns/lines instead of by percentage,  and clock which starts
clock-mode.  Comments for each added.
2013-06-19 23:35:13 -07:00
e15ae597e4 Bump version to 0.7.1 2013-06-18 09:13:41 +01:00
d982588302 Merge pull request #18 from fomichev/master
tmux set-option default-path
2013-06-18 01:11:42 -07:00
Stanislav Fomichev
0fc1f20af7 Fix typo 2013-06-18 11:11:22 +04:00
Stanislav Fomichev
8c2582a948 Add set_default_path option
This option lets user disable 'tmux set-option default-path' for
$session_root, like this:
	session_root "~/x/y/z"
	set_default_path=false
2013-06-18 11:10:48 +04:00
c1ecc0a7c8 Update LICENSE file to match license details in readme 2013-06-18 00:27:22 +01:00
85718b9a9e Update Todos section in readme 2013-06-18 00:24:51 +01:00
1b5c451e39 Remove "Heed My Warning" section from readme, it's no longer relevant 2013-06-18 00:24:36 +01:00
887bbc4fbc No need to attempt to syntax highlight shell command examples 2013-06-18 00:23:18 +01:00
103cf66ec3 Bump version to 0.7.0 2013-06-18 00:13:57 +01:00
f3797204fb Merge pull request #15 from jimeh/new-init-system
New init system
2013-06-17 16:11:56 -07:00
83b6b47f7c Update readme 2013-06-18 00:05:15 +01:00
fb5a775d98 Improve EDITOR checks 2013-06-17 13:39:13 +01:00
0359e09806 Merge branch 'master' into new-init-system 2013-06-17 13:36:09 +01:00
ee32ac25b8 Merge pull request #17 from peter-d/new-init-system-check
New init system check
2013-06-17 05:32:04 -07:00
peter-d
54561b9bbd fixed a typo 2013-06-17 14:25:24 +02:00
peter-d
a4e3edc4ca Fixed the path setup for tcsh 2013-06-17 14:24:32 +02:00
9f1a3621f0 Fix an error and tweak some styling in readme 2013-06-12 09:00:18 +01:00
831deec069 Update readme with details of new init system 2013-06-12 08:50:25 +01:00
536f625b5d Print correct help info for init command based on the shell used 2013-06-12 00:53:40 +01:00
9e8a5c3dc9 Separate init command output commands with ; fixing issues with tcsh 2013-06-12 00:48:48 +01:00
f0647b0326 Update init scripts 2013-06-12 00:31:51 +01:00
c9c3534f05 Improve init command's argument parsing 2013-06-12 00:08:44 +01:00
7a9c94ff6f Merge pull request #14 from raulbrito/patch-1
Update README.md
2013-06-06 11:43:16 -07:00
Raul Brito
0caf3a78f5 Update README.md 2013-06-06 20:31:26 +02:00
21c43be558 Merge branch 'master' into new-init-system 2013-06-03 09:50:38 +03:00
bb97d5791b Bump version to 0.6.1 2013-06-03 09:48:21 +03:00
dea8939ee0 Remove forgotten and useless variable 2013-06-03 09:46:26 +03:00
df5e6031cd Alter how internal help invocation work to make life a bit easier 2013-06-03 09:46:03 +03:00
adcea18bdc Get rid of now needless for loops 2013-06-03 09:44:57 +03:00
f9c91e5fcd Improve --help and --complete argument handling 2013-06-03 09:32:13 +03:00
1a9dd4787d Improve argument handling of init command 2013-06-03 09:16:58 +03:00
4d486d48d0 Fix a typo 2013-06-02 21:30:56 +03:00
d94ccf560e Simplify internals of init command a bit 2013-06-02 21:29:38 +03:00
ed3fda5769 Update init command to use new help system 2013-06-02 21:25:19 +03:00
35832165ec Merge branch 'master' into new-init-system 2013-06-02 21:04:49 +03:00
7d91ca4292 Bump version to 0.6.0 2013-06-02 20:35:30 +03:00
15bbca80d4 Update aliases and fixed inconsistencies with list command aliases 2013-06-02 20:35:06 +03:00
bd585ca2bb Misc. code cleanup and minor improvement to help command 2013-06-02 20:27:28 +03:00
7cc9228839 Add early version new tmuxifier-init command 2013-06-02 17:51:43 +03:00
7ab7586f74 Auto-set $TMUXIFIER to correct directory based on relative path 2013-06-02 17:43:41 +03:00
51ebf880dc Only add $TMUXIFIER/bin to $PATH if it is not in $PATH already 2013-06-02 17:42:31 +03:00
29 changed files with 580 additions and 162 deletions

View File

@@ -1,4 +1,4 @@
Copyright (c) 2012 Jim Myhrberg. Copyright (c) 2014 Jim Myhrberg.
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

107
README.md
View File

@@ -1,11 +1,11 @@
# Tmuxifier # Tmuxifier
Tmuxify your Tmux. Create, edit, mangage 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.
In short, Tmuxifier allows you to easily create, edit, and load "layout" In short, Tmuxifier allows you to easily create, edit, and load "layout"
files, which are simple shell scripts where you use the `tmux` command and files, which are simple shell scripts where you use the `tmux` command and
helper commands provided by tmuxifier to manage Tmux sessions and windows helper commands provided by `tmuxifier` to manage Tmux sessions and windows
### Window Layouts ### Window Layouts
@@ -42,9 +42,7 @@ select_pane 0
You can then load that window layout into a new window in the You can then load that window layout into a new window in the
current tmux session using: current tmux session using:
```bash tmuxifier load-window example
tmuxifier load-window example
```
Which will yield a Tmux window looking like this: Which will yield a Tmux window looking like this:
@@ -54,27 +52,84 @@ Which will yield a Tmux window looking like this:
Clone the repo to your machine: Clone the repo to your machine:
git clone https://github.com/jimeh/tmuxifier.git ~/.tmuxifier
Then add `$HOME/.tmuxifier/bin` to your PATH to make the `tmuxifier` executable
available to you:
__In bash & zsh:__
```bash ```bash
git clone https://github.com/jimeh/tmuxifier.git ~/.tmuxifier export PATH="$HOME/.tmuxifier/bin:$PATH"
``` ```
### bash & zsh __In tcsh:__
```tcsh
set path = ( "~/.tmuxifier/bin" $path )
```
__In fish:__
```bash
set -gx PATH "~/.tmuxifier/bin" $PATH
```
### Custom Installation Path
To install Tmuxifier somewhere else than the suggested `~/.tmuxifier`, simply
clone the repository to your custom location, and ensure the `bin` folder is
added to your PATH making the `tmuxifier` executable available to you.
## Setup
__In bash & zsh:__
And add the following to your `~/.profile`, `~/.bash_profile`, `~/.zshrc` or And add the following to your `~/.profile`, `~/.bash_profile`, `~/.zshrc` or
equivalent: equivalent:
```bash ```bash
[[ -s "$HOME/.tmuxifier/init.sh" ]] && source "$HOME/.tmuxifier/init.sh" eval "$(tmuxifier init -)"
``` ```
### tcsh __In tcsh:__
Add the following to your `~/.cshrc`, `~/.tcshrc` or equivalent: Add the following to your `~/.cshrc`, `~/.tcshrc` or equivalent:
```tcsh ```tcsh
if ( -s "$HOME/.tmuxifier/init.sh" ) then eval `tmuxifier init -`
source "$HOME/.tmuxifier/init.sh" ```
endif
__In fish:__
And add the following to your `~/.config/fish/config.fish` or equivalent:
```bash
eval (tmuxifier init -)
```
### Custom Tmux Arguments
If you need to pass custom arguments to `tmux` itself, you can do so by
setting the `TMUXIFIER_TMUX_OPTS` environment variable. For example to set
custom arguments globally:
```bash
export TMUXIFIER_TMUX_OPTS="-L my-awesome-socket-name"
eval "$(tmuxifier init -)"
```
And/or specify dynamically when calling `tmuxifier`:
```bash
TMUXIFIER_TMUX_OPTS="-L other-socket" tmuxifier load-session welcome
```
## Updating
```bash
cd ~/.tmuxifier # or where you've cloned tmuxifier to
git pull
``` ```
## Usage ## Usage
@@ -129,17 +184,6 @@ in it.
## Configure & Customize ## Configure & Customize
### Custom Installaton Path
To install Tmuxifier to a custom path, clone the repository to your desired
path and set `$TMUXIFIER` to that path, additionally loading `init.sh` or
`init.tcsh` from that same path.
```bash
export TMUXIFIER="$HOME/.dotfiles/tmuxifier"
[[ -s "$TMUXIFIER/init.sh" ]] && source "$TMUXIFIER/init.sh"
```
### Custom Layouts Path ### Custom Layouts Path
You can customize the layouts directory used by Tmuxifier by setting You can customize the layouts directory used by Tmuxifier by setting
@@ -151,8 +195,8 @@ export TMUXIFIER_LAYOUT_PATH="$HOME/.tmux-layouts"
### Disable Shell-Completion ### Disable Shell-Completion
Tmuxifier comes with shell-completion for bash, zsh and tcsh. If for any Tmuxifier comes with shell-completion for bash, zsh, tcsh, and fish. If for
reason you need to disable it, just set `$TMUXIFIER_NO_COMPLETE`. any reason you need to disable it, just set `$TMUXIFIER_NO_COMPLETE`.
```bash ```bash
export TMUXIFIER_NO_COMPLETE=1 export TMUXIFIER_NO_COMPLETE=1
@@ -182,25 +226,16 @@ it does set itself apart in a number of ways:
[tmuxinator]: https://github.com/aziz/tmuxinator [tmuxinator]: https://github.com/aziz/tmuxinator
[rbenv]: https://github.com/sstephenson/rbenv [rbenv]: https://github.com/sstephenson/rbenv
## Heed My Warning
Tmuxifier is pretty much an alpha product hacked together over a weekend at
this point. Documentation is sketchy at best, and things might drastically
change and/or break.
But if that doesn't put you off, please enjoy Tmuxifier :)
## Todos ## Todos
* Improve Readme, specially Usage section. * Improve Readme, specially Usage section.
* Expand `help` command with details for most commands, rather than just the * Write up a detailed reference for all available layout helper functions.
essential ones.
## License ## License
(The MIT license) (The MIT license)
Copyright (c) 2013 Jim Myhrberg. Copyright (c) 2014 Jim Myhrberg.
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@@ -2,17 +2,47 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_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"
}
if [ -z "${TMUXIFIER}" ]; then if [ -z "${TMUXIFIER}" ]; then
export TMUXIFIER="${HOME}/.tmuxifier" # Set TMUXIFIER relative to the "tmuxifier" executable.
export TMUXIFIER="$(dirname "$(abs_dirname "$0")")"
else else
# Strip any trailing slash (/) characters from TMUXIFIER variable.
export TMUXIFIER="${TMUXIFIER%/}" export TMUXIFIER="${TMUXIFIER%/}"
fi fi
# Load tmuxifier environment variables. # Load tmuxifier environment variables.
source "$TMUXIFIER/lib/env.sh" source "$TMUXIFIER/lib/env.sh"
# Add tmuxifier's internal commands to PATH.
export PATH="$TMUXIFIER/libexec:$PATH" export PATH="$TMUXIFIER/libexec:$PATH"
# Check Tmux version.
export TMUXIFIER_MIN_TMUX_VERSION="1.6"
if [ "$(tmuxifier-tmux-version "$TMUXIFIER_MIN_TMUX_VERSION")" == "<" ]; then
echo -e "ERROR: Tmuxifier requires Tmux v${TMUXIFIER_MIN_TMUX_VERSION}" \
"or newer. You have v$(tmuxifier-tmux-version)." >&2
exit 1
fi
# Parse given command
command="$1" command="$1"
case "$command" in case "$command" in
"" | "-h" | "--help" ) "" | "-h" | "--help" )

36
completion/tmuxifier.fish Normal file
View File

@@ -0,0 +1,36 @@
set -l cmd_load_session 'load-session s'
set -l cmd_load_window 'load-window w'
set -l cmd_list 'list l'
set -l cmd_list_sessions 'list-sessions ls'
set -l cmd_list_windows 'list-windows lw'
set -l cmd_new_session 'new-session ns'
set -l cmd_new_window 'new-window nw'
set -l cmd_edit_session 'edit-session es'
set -l cmd_edit_window 'edit-window ew'
set -l cmd_commands 'commands'
set -l cmd_version 'version'
set -l cmd_help 'help'
complete -c tmuxifier -x
# Commands
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_load_session -d 'Load the specified session layout.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_load_window -d 'Load the specified window layout into current session.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_list -d 'List all session and window layouts.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_list_sessions -d 'List session layouts.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_list_windows -d 'List window layouts.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_new_session -d 'Create new session layout and open it with $EDITOR.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_new_window -d 'Create new window layout and open it with $EDITOR.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_edit_session -d 'Edit specified session layout with $EDITOR.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_edit_window -d 'Edit specified window layout with $EDITOR.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_commands -d 'List all tmuxifier commands.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_version -d 'Print Tmuxifier version.'
complete -c tmuxifier -n '__fish_use_subcommand' -a $cmd_help -d 'Show this message.'
# Complete subcommands
complete -c tmuxifier -x -n "__fish_seen_subcommand_from $cmd_load_session" -a '(tmuxifier list-sessions)' -d 'session-template'
complete -c tmuxifier -x -n "__fish_seen_subcommand_from $cmd_load_window" -a '(tmuxifier list-windows)' -d 'window-template'
complete -c tmuxifier -x -n "__fish_seen_subcommand_from $cmd_edit_session" -a '(tmuxifier list-sessions)' -d 'session-template'
complete -c tmuxifier -x -n "__fish_seen_subcommand_from $cmd_edit_window" -a '(tmuxifier list-windows)' -d 'window-template'

17
init.fish Normal file
View File

@@ -0,0 +1,17 @@
# Set/fix Tmuxifier root path if needed.
if test -z $TMUXIFIER
set -gx TMUXIFIER "$HOME/.tmuxifier"
end
# Add `bin` directroy to `$PATH`.
if not contains "$TMUXIFIER/bin" $PATH
set -gx PATH "$TMUXIFIER/bin" $PATH
end
# If `tmuxifier` is available, and `$TMUXIFIER_NO_COMPLETE` is not set, then
# load Tmuxifier shell completion.
if test -n (which tmuxifier); and test -z $TMUXIFIER_NO_COMPLETE
source "$TMUXIFIER/completion/tmuxifier.fish"
end

View File

@@ -1,4 +1,4 @@
# Set tmuxifier root path. # Set/fix Tmuxifier root path if needed.
if [ -z "${TMUXIFIER}" ]; then if [ -z "${TMUXIFIER}" ]; then
export TMUXIFIER="${HOME}/.tmuxifier" export TMUXIFIER="${HOME}/.tmuxifier"
else else
@@ -6,10 +6,12 @@ else
fi fi
# Add `bin` directroy to `$PATH`. # Add `bin` directroy to `$PATH`.
export PATH="$TMUXIFIER/bin:$PATH" if [[ ":$PATH:" != *":$TMUXIFIER/bin:"* ]]; then
export PATH="$TMUXIFIER/bin:$PATH"
fi
# 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 [ -n "$(command -v "tmuxifier")" ] && [ -z "$TMUXIFIER_NO_COMPLETE" ]; then if [ -n "$(command -v "tmuxifier")" ] && [ -z "$TMUXIFIER_NO_COMPLETE" ]; then
if [ -n "$BASH_VERSION" ]; then if [ -n "$BASH_VERSION" ]; then
source "$TMUXIFIER/completion/tmuxifier.bash" source "$TMUXIFIER/completion/tmuxifier.bash"

View File

@@ -1,13 +1,15 @@
# Set tmuxifier root path. # Set Tmuxifier root path if needed.
if ( ! $?TMUXIFIER ) then if ( ! $?TMUXIFIER ) then
setenv TMUXIFIER "${HOME}/.tmuxifier" setenv TMUXIFIER "${HOME}/.tmuxifier"
endif endif
# Add `bin` directroy to `$PATH`. # Add `bin` directroy to `$path` if needed.
set path = ( $TMUXIFIER/bin $path ) if ( ! (" $path " =~ "* $TMUXIFIER/bin *" ) ) then
set path = ( $TMUXIFIER/bin $path )
endif
# 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 ( ! $?TMUXIFIER_NO_COMPLETE ) then if ( ! $?TMUXIFIER_NO_COMPLETE ) then
which tmuxifier > /dev/null && source "$TMUXIFIER/completion/tmuxifier.tcsh" which tmuxifier > /dev/null && source "$TMUXIFIER/completion/tmuxifier.tcsh"
endif endif

View File

@@ -6,6 +6,11 @@
# otherwise more complex means. # otherwise more complex means.
# #
# Alias tmux to tmuxifier-tmux wrapper.
tmux() {
tmuxifier-tmux "$@"
}
# Create a new window. # Create a new window.
# #
# Arguments: # Arguments:
@@ -17,7 +22,7 @@ new_window() {
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 if [ -n "$window" ]; then local winarg=(-n "$window"); fi
tmux new-window -t "$session:" "${winarg[@]}" "${command[@]}" tmuxifier-tmux new-window -t "$session:" "${winarg[@]}" "${command[@]}"
__go_to_window_or_session_path __go_to_window_or_session_path
} }
@@ -29,7 +34,7 @@ new_window() {
# #
split_v() { split_v() {
if [ -n "$1" ]; then local percentage=(-p "$1"); fi if [ -n "$1" ]; then local percentage=(-p "$1"); fi
tmux split-window -t "$session:$window.$2" -v "${percentage[@]}" tmuxifier-tmux split-window -t "$session:$window.$2" -v "${percentage[@]}"
__go_to_window_or_session_path __go_to_window_or_session_path
} }
@@ -41,17 +46,49 @@ split_v() {
# #
split_h() { split_h() {
if [ -n "$1" ]; then local percentage=(-p "$1"); fi if [ -n "$1" ]; then local percentage=(-p "$1"); fi
tmux split-window -t "$session:$window.$2" -h "${percentage[@]}" tmuxifier-tmux split-window -t "$session:$window.$2" -h "${percentage[@]}"
__go_to_window_or_session_path __go_to_window_or_session_path
} }
# Split current window/pane vertically by line count.
#
# Arguments:
# - $1: (optional) Number of lines the new pane will use.
# - $2: (optional) Target pane ID to split in current window.
#
split_vl() {
if [ -n "$1" ]; then local count=(-l "$1"); fi
tmuxifier-tmux split-window -t "$session:$window.$2" -v "${count[@]}"
__go_to_window_or_session_path
}
# Split current window/pane horizontally by column count.
#
# Arguments:
# - $1: (optional) Number of columns the new pane will use.
# - $2: (optional) Target pane ID to split in current window.
#
split_hl() {
if [ -n "$1" ]; then local count=(-l "$1"); fi
tmuxifier-tmux split-window -t "$session:$window.$2" -h "${count[@]}"
__go_to_window_or_session_path
}
# Run clock mode.
#
# Arguments:
# - $1: (optional) Target pane ID in which to run
clock() {
tmuxifier-tmux clock-mode -t "$session:$window.$1"
}
# Select a specific window. # Select a specific window.
# #
# Arguments: # Arguments:
# - $1: Window ID or name to select. # - $1: Window ID or name to select.
# #
select_window() { select_window() {
tmux select-window -t "$session:$1" tmuxifier-tmux select-window -t "$session:$1"
} }
# Select a specific pane in the current window. # Select a specific pane in the current window.
@@ -60,7 +97,7 @@ select_window() {
# - $1: Pane ID to select. # - $1: Pane ID to select.
# #
select_pane() { select_pane() {
tmux select-pane -t "$session:$window.$1" tmuxifier-tmux select-pane -t "$session:$window.$1"
} }
# Send/paste keys to the currently active pane/window. # Send/paste keys to the currently active pane/window.
@@ -70,7 +107,7 @@ select_pane() {
# - $2: (optional) Target pane ID to send input to. # - $2: (optional) Target pane ID to send input to.
# #
send_keys() { send_keys() {
tmux send-keys -t "$session:$window.$2" "$1" tmuxifier-tmux send-keys -t "$session:$window.$2" "$1"
} }
# Runs a shell command in the currently active pane/window. # Runs a shell command in the currently active pane/window.
@@ -84,7 +121,7 @@ run_cmd() {
send_keys "C-m" "$2" send_keys "C-m" "$2"
} }
# Cusomize session root path. Default is `$HOME`. # Customize session root path. Default is `$HOME`.
# #
# Arguments: # Arguments:
# - $1: Directory path to use for session root. # - $1: Directory path to use for session root.
@@ -111,12 +148,22 @@ window_root() {
# Load specified window layout. # Load specified window layout.
# #
# Arguments: # Arguments:
# - $1: Name of window layout to load. # - $1: Name of or file path to window layout to load.
# - $2: (optional) Override default window name.
# #
load_window() { load_window() {
local file="$TMUXIFIER_LAYOUT_PATH/$1.window.sh" local file="$1"
if [ ! -f "$file" ]; then
file="$TMUXIFIER_LAYOUT_PATH/$1.window.sh"
fi
if [ -f "$file" ]; then if [ -f "$file" ]; then
window="$1" if [ $# -gt 1 ]; then
window="$2"
else
window="${1/%.window.sh}"
window="${window/%.sh}"
fi
source "$file" source "$file"
window= window=
@@ -125,19 +172,32 @@ load_window() {
window_root "$session_root" window_root "$session_root"
fi fi
else else
echo "No such window layout found '$1' in '$TMUXIFIER_LAYOUT_PATH'." echo "\"$1\" window layout not found." >&2
return 1
fi fi
} }
# Load specified session layout. # Load specified session layout.
# #
# Arguments: # Arguments:
# - $1: Name of session layout to load. # - $1: Name of or file path to session layout to load.
# - $2: (optional) Override default window name.
# #
load_session() { load_session() {
local file="$TMUXIFIER_LAYOUT_PATH/$1.session.sh" local file="$1"
if [ ! -f "$file" ]; then
file="$TMUXIFIER_LAYOUT_PATH/$1.session.sh"
fi
if [ -f "$file" ]; then if [ -f "$file" ]; then
session="$1" if [ $# -gt 1 ]; then
session="$2"
else
session="${1/%.session.sh}"
session="${session/%.sh}"
fi
set_default_path=true
source "$file" source "$file"
session= session=
@@ -146,7 +206,8 @@ load_session() {
session_root="$HOME" session_root="$HOME"
fi fi
else else
echo "No such session layout found '$1' in '$TMUXIFIER_LAYOUT_PATH'." echo "\"$1\" session layout not found." >&2
return 1
fi fi
} }
@@ -168,24 +229,37 @@ initialize_session() {
fi fi
# Ensure tmux server is running for has-session check. # Ensure tmux server is running for has-session check.
tmux start-server tmuxifier-tmux start-server
# Check if the named session already exists. # Check if the named session already exists.
if ! tmux has-session -t "$session:" 2>/dev/null; then if ! tmuxifier-tmux has-session -t "$session:" 2>/dev/null; then
# Create the new session. if [ "$(tmuxifier-tmux-version "1.9")" == "<" ]; then
env TMUX="" tmux new-session -d -s "$session" # Tmux 1.8 and earlier.
# Set default-path for session # Create the new session.
if [ -n "$session_root" ] && [ -d "$session_root" ]; then env TMUX="" tmuxifier-tmux new-session -d -s "$session"
cd "$session_root"
tmux set-option -t "$session:" default-path "$session_root" 1>/dev/null # Set default-path for session
if [ -n "$session_root" ] && [ -d "$session_root" ]; then
cd "$session_root"
$set_default_path && tmuxifier-tmux \
set-option -t "$session:" \
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 # In order to ensure only specified windows are created, we move the
# default window to position 999, and later remove it with the # default window to position 999, and later remove it with the
# `finalize_and_go_to_session` function. # `finalize_and_go_to_session` function.
local first_window_index=$(__get_first_window_index) local first_window_index=$(__get_first_window_index)
tmux move-window -s "$session:$first_window_index" -t "$session:999" tmuxifier-tmux move-window \
-s "$session:$first_window_index" -t "$session:999"
# Session created, return ok exit status. # Session created, return ok exit status.
return 0 return 0
@@ -196,16 +270,16 @@ initialize_session() {
# Finalize session creation and then switch to it if needed. # Finalize session creation and then switch to it if needed.
# #
# When the session is created, it leaves a unused window in position #99, this # When the session is created, it leaves a unused window in position #999,
# is the default window which was created with the session, but it's also a # this is the default window which was created with the session, but it's also
# 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, the session already exists, and we'll need to specifically switch
# to it here. # to it here.
# #
finalize_and_go_to_session() { finalize_and_go_to_session() {
! tmux kill-window -t "$session:999" 2>/dev/null ! tmuxifier-tmux kill-window -t "$session:999" 2>/dev/null
if [[ "$(tmuxifier-current-session)" != "$session" ]]; then if [[ "$(tmuxifier-current-session)" != "$session" ]]; then
__go_to_session __go_to_session
fi fi
@@ -228,8 +302,9 @@ __expand_path() {
} }
__get_first_window_index() { __get_first_window_index() {
local index local index=$(tmuxifier-tmux list-windows -t "$session:" \
index=$(tmux list-windows -t "$session:" -F "#{window_index}" 2>/dev/null) -F "#{window_index}" 2>/dev/null)
if [ -n "$index" ]; then if [ -n "$index" ]; then
echo "$index" | head -1 echo "$index" | head -1
else else
@@ -239,9 +314,9 @@ __get_first_window_index() {
__go_to_session() { __go_to_session() {
if [ -z "$TMUX" ]; then if [ -z "$TMUX" ]; then
tmux -u attach-session -t "$session:" tmuxifier-tmux -u attach-session -t "$session:"
else else
tmux -u switch-client -t "$session:" tmuxifier-tmux -u switch-client -t "$session:"
fi fi
} }
@@ -249,6 +324,6 @@ __go_to_window_or_session_path() {
local window_or_session_root=${window_root-$session_root} local window_or_session_root=${window_root-$session_root}
if [ -n "$window_or_session_root" ]; then if [ -n "$window_or_session_root" ]; then
run_cmd "cd \"$window_or_session_root\"" run_cmd "cd \"$window_or_session_root\""
send_keys "C-l" run_cmd "clear"
fi fi
} }

11
lib/util.sh Normal file
View File

@@ -0,0 +1,11 @@
calling-help() {
if [[ " $@ " != *" --help "* ]] && [[ " $@ " != *" -h "* ]]; then
return 1
fi
}
calling-complete() {
if [[ " $@ " != *" --complete "* ]]; then
return 1
fi
}

View File

@@ -2,8 +2,11 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier alias <alias> echo "usage: tmuxifier alias <alias>
Resolve a command alias to it's full name." Resolve a command alias to it's full name."
@@ -17,25 +20,25 @@ case "$1" in
"window" | "win" | "w" ) "window" | "win" | "w" )
echo "load-window" echo "load-window"
;; ;;
"new-ses" | "ns" ) "new-ses" | "nses" | "ns" )
echo "new-session" echo "new-session"
;; ;;
"new-win" | "nw" ) "new-win" | "nwin" | "nw" )
echo "new-window" echo "new-window"
;; ;;
"edit-ses" | "es" ) "edit-ses" | "eses" | "es" )
echo "edit-session" echo "edit-session"
;; ;;
"edit-win" | "ew" ) "edit-win" | "ewin" | "ew" )
echo "edit-window" echo "edit-window"
;; ;;
"ls" ) "l" )
echo "list" echo "list"
;; ;;
"list-ses" | "lss" ) "list-ses" | "lses" | "ls" )
echo "list-sessions" echo "list-sessions"
;; ;;
"list-win" | "lsw" ) "list-win" | "lwin" | "lw" )
echo "list-windows" echo "list-windows"
;; ;;
* ) * )

View File

@@ -2,8 +2,11 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier commands echo "usage: tmuxifier commands
List all available commands, includes internal commands not intended for List all available commands, includes internal commands not intended for

View File

@@ -2,8 +2,11 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier completion <command> echo "usage: tmuxifier completion <command>
Print a list of available completions for specified command." Print a list of available completions for specified command."
@@ -11,7 +14,7 @@ Print a list of available completions for specified command."
fi fi
# Provide tmuxifier completions # Provide tmuxifier completions
if [ "$1" == "--complete" ]; then if calling-complete "$@"; then
tmuxifier-commands tmuxifier-commands
exit exit
fi fi
@@ -20,13 +23,12 @@ has-completions() {
grep -i "^# Provide tmuxifier completions" "$1" >/dev/null grep -i "^# Provide tmuxifier completions" "$1" >/dev/null
} }
command="$1" if [ -z "$1" ]; then
if [ -z "$command" ]; then echo "$(tmuxifier-help completions $@)" >&2
echo "$(tmuxifier-help completions)" >&2
exit 1 exit 1
fi fi
! command_path="$(tmuxifier-resolve-command-path "$command")" ! command_path="$(tmuxifier-resolve-command-path "$1")"
if [ -n "$command_path" ] && has-completions "$command_path"; then if [ -n "$command_path" ] && has-completions "$command_path"; then
shift shift

View File

@@ -2,8 +2,11 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier current-session echo "usage: tmuxifier current-session
Outputs the name of the current Tmux session." Outputs the name of the current Tmux session."
@@ -11,7 +14,7 @@ Outputs the name of the current Tmux session."
fi fi
if [ -n "$TMUX" ]; then if [ -n "$TMUX" ]; then
for item in $(tmux list-pane -F "#{session_name}");do for item in $(tmuxifier-tmux list-pane -F "#{session_name}");do
echo $item echo $item
exit 0 exit 0
done done

View File

@@ -2,26 +2,27 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier edit-session <layout_name> echo "usage: tmuxifier edit-session <layout_name>
Aliases: edit-ses, es Aliases: edit-ses, eses, es
Open specified session layout for editing in \$EDITOR." Open specified session layout for editing in \$EDITOR."
exit exit
fi fi
# Provide tmuxifier completions # Provide tmuxifier completions
if [ "$1" == "--complete" ]; then if calling-complete "$@"; then
for item in $(tmuxifier-list-sessions); do tmuxifier-list-sessions
echo "$item"
done
exit exit
fi fi
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "$(tmuxifier-help edit-session)" >&2 echo "$(tmuxifier-help edit-session $@)" >&2
exit 1 exit 1
fi fi
@@ -36,4 +37,10 @@ if [ ! -f "$layout_file" ]; then
exit 1 exit 1
fi fi
exec "$EDITOR" "$layout_file" if [ -n "$EDITOR" ]; then
exec "$EDITOR" "$layout_file"
else
echo "'\$EDITOR' is not set. Please manually open the layout for editing:"
echo "$layout_file"
echo
fi

View File

@@ -2,26 +2,27 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier edit-window <layout_name> echo "usage: tmuxifier edit-window <layout_name>
Aliases: edit-win, ew Aliases: edit-win, ewin, ew
Open specified window layout for editing in \$EDITOR." Open specified window layout for editing in \$EDITOR."
exit exit
fi fi
# Provide tmuxifier completions # Provide tmuxifier completions
if [ "$1" == "--complete" ]; then if calling-complete "$@"; then
for item in $(tmuxifier-list-windows); do tmuxifier-list-windows
echo "$item"
done
exit exit
fi fi
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "$(tmuxifier-help edit-window)" >&2 echo "$(tmuxifier-help edit-window $@)" >&2
exit 1 exit 1
fi fi
@@ -36,4 +37,10 @@ if [ ! -f "$layout_file" ]; then
exit 1 exit 1
fi fi
exec "$EDITOR" "$layout_file" if [ -n "$EDITOR" ]; then
exec "$EDITOR" "$layout_file"
else
echo "'\$EDITOR' is not set. Please manually open the layout for editing:"
echo "$layout_file"
echo
fi

View File

@@ -2,14 +2,17 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
tmuxifier-help tmuxifier-help
exit exit
fi fi
# Provide tmuxifier completions # Provide tmuxifier completions
if [ "$1" == "--complete" ]; then if calling-complete "$@"; then
tmuxifier-commands tmuxifier-commands
exit exit
fi fi
@@ -18,22 +21,21 @@ has-help() {
grep -i "^# Provide tmuxifier help" "$1" >/dev/null grep -i "^# Provide tmuxifier help" "$1" >/dev/null
} }
command="$1" if [ -z "$1" ]; then
if [ -z "$command" ]; then
echo "usage: tmuxifier <command> [<args>] echo "usage: tmuxifier <command> [<args>]
Some useful tmuxifier commands are: Some useful tmuxifier commands are:
<command> <alias> <command> <alias>
load-session s Load the specified session layout. load-session s Load the specified session layout.
load-window w Load the specified window layout into current session. load-window w Load the specified window layout into current session.
list ls List all session and window layouts. list l List all session and window layouts.
list-sessions lss List session layouts. list-sessions ls List session layouts.
list-windows lsw List window layouts. list-windows lw List window layouts.
new-session ns Create new session layout and open it with \$EDITOR. new-session ns Create new session layout and open it with \$EDITOR.
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.
@@ -41,17 +43,19 @@ See 'tmuxifier help <command>' for information on a specific command."
exit exit
fi fi
! command_path="$(tmuxifier-resolve-command-path "$command")" ! command_path="$(tmuxifier-resolve-command-path "$1")"
if [ -z "$command_path" ]; then if [ -z "$command_path" ]; then
echo "tmuxifier: no such command '$command'" >&2 echo "tmuxifier: no such command '$1'" >&2
exit 1 exit 1
fi fi
if has-help "$command_path"; then if has-help "$command_path"; then
shift shift
exec "$command_path" --help "$@" exec "$command_path" "$@" --help
else else
command="$(basename "$command_path")"
command="${command/tmuxifier\-/}"
echo "Sorry, the '$command' command isn't documented yet." echo "Sorry, the '$command' command isn't documented yet."
echo "" echo ""
echo "You can view the command's source here:" echo "You can view the command's source here:"

85
libexec/tmuxifier-init Executable file
View File

@@ -0,0 +1,85 @@
#! /usr/bin/env bash
set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x
# Set shell to first argument that is not "-", "-h" or "--help".
for arg in "$@"; do
if [ "$arg" != "-" ] && [ "$arg" != "-h" ] && [ "$arg" != "--help" ]; then
shell="$arg"
fi
done
if [ -z "$shell" ]; then
shell="$(basename "$SHELL")"
fi
case "$shell" in
bash )
profile='~/.bash_profile'
;;
zsh )
profile='~/.zshrc'
;;
ksh )
profile='~/.profile'
;;
csh )
profile='~/.cshrc'
;;
tcsh )
profile='~/.tcshrc'
;;
fish )
profile='~/.config/fish/config.fish'
;;
* )
profile='shell init file'
;;
esac
# Provide tmuxifier help
if [[ " $@ " == *" --help "* ]]; then
echo "usage: tmuxifier init -
Load Tmuxifier by adding the following to your ${profile}:
"
case "$shell" in
csh | tcsh )
echo " eval \`tmuxifier init -\`
"
;;
fish )
echo " eval (tmuxifier init -)
"
;;
* )
echo " eval \"\$(tmuxifier init -)\"
"
;;
esac
echo "You might also need to add Tmuxifier's bin directory to your PATH."
exit
fi
# Print help if "-" argument is not given
if [[ " $@ " != *" - "* ]]; then
echo "$(tmuxifier-help init $@)" >&2
exit 1
fi
case "$shell" in
csh | tcsh )
echo "setenv TMUXIFIER \"$TMUXIFIER\";"
echo "source \"\$TMUXIFIER/init.tcsh\";"
;;
fish )
echo "set -gx TMUXIFIER \"$TMUXIFIER\";"
echo "source \"\$TMUXIFIER/init.fish\";"
;;
* )
echo "export TMUXIFIER=\"$TMUXIFIER\";"
echo "source \"\$TMUXIFIER/init.sh\";"
;;
esac

View File

@@ -2,11 +2,14 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier list echo "usage: tmuxifier list
Aliases: ls Aliases: l
List all available session and window layouts." List all available session and window layouts."
exit exit

View File

@@ -2,11 +2,14 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier list-sessions echo "usage: tmuxifier list-sessions
Aliases: list-ses, lss Aliases: list-ses, lses, ls
List all session layouts." List all session layouts."
exit exit

View File

@@ -2,11 +2,14 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier list-windows echo "usage: tmuxifier list-windows
Aliases: list-win, lsw Aliases: list-win, lwin, lw
List all window layouts." List all window layouts."
exit exit

View File

@@ -2,9 +2,12 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier load-session <layout_name> echo "usage: tmuxifier load-session <layout_name | file_path>
Aliases: session, ses, s Aliases: session, ses, s
@@ -14,15 +17,13 @@ in which case, we simply attach/switch to the existing one."
fi fi
# Provide tmuxifier completions # Provide tmuxifier completions
if [ "$1" == "--complete" ]; then if calling-complete "$@"; then
for item in $(tmuxifier-list-sessions); do tmuxifier-list-sessions
echo "$item"
done
exit exit
fi fi
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "$(tmuxifier-help load-session)" >&2 echo "$(tmuxifier-help load-session $@)" >&2
exit 1 exit 1
fi fi

View File

@@ -2,9 +2,12 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier load-window <layout_name> echo "usage: tmuxifier load-window <layout_name | file_path>
Aliases: window, win, w Aliases: window, win, w
@@ -13,15 +16,13 @@ Create a new window using the specified window layout in the current session."
fi fi
# Provide tmuxifier completions # Provide tmuxifier completions
if [ "$1" == "--complete" ]; then if calling-complete "$@"; then
for item in $(tmuxifier-list-windows); do tmuxifier-list-windows
echo "$item"
done
exit exit
fi fi
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "$(tmuxifier-help load-window)" >&2 echo "$(tmuxifier-help load-window $@)" >&2
exit 1 exit 1
fi fi

View File

@@ -2,26 +2,27 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier new-session <layout_name> echo "usage: tmuxifier new-session <layout_name>
Aliases: new-ses, ns Aliases: new-ses, nses, ns
Create a new session layout and open it for editing in \$EDITOR." Create a new session layout and open it for editing in \$EDITOR."
exit exit
fi fi
# Provide tmuxifier completions # Provide tmuxifier completions
if [ "$1" == "--complete" ]; then if calling-complete "$@"; then
for item in $(tmuxifier-list-sessions); do tmuxifier-list-sessions
echo "$item"
done
exit exit
fi fi
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "$(tmuxifier-help new-session)" >&2 echo "$(tmuxifier-help new-session $@)" >&2
exit 1 exit 1
fi fi
@@ -45,7 +46,7 @@ fi
content="$(cat "$template")" content="$(cat "$template")"
echo "${content//\{\{SESSION_NAME\}\}/$layout_name}" > "$layout_file" echo "${content//\{\{SESSION_NAME\}\}/$layout_name}" > "$layout_file"
if [ ! -z "$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 "

View File

@@ -2,26 +2,27 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier new-window <layout_name> echo "usage: tmuxifier new-window <layout_name>
Aliases: new-win, ws Aliases: new-win, nwin, nw
Create a new window layout and open it for editing in \$EDITOR." Create a new window layout and open it for editing in \$EDITOR."
exit exit
fi fi
# Provide tmuxifier completions # Provide tmuxifier completions
if [ "$1" == "--complete" ]; then if calling-complete "$@"; then
for item in $(tmuxifier-list-windows); do tmuxifier-list-windows
echo "$item"
done
exit exit
fi fi
if [ -z "$1" ]; then if [ -z "$1" ]; then
echo "$(tmuxifier-help new-window)" >&2 echo "$(tmuxifier-help new-window $@)" >&2
exit 1 exit 1
fi fi
@@ -45,7 +46,7 @@ fi
content="$(cat "$template")" content="$(cat "$template")"
echo "${content//\{\{WINDOW_NAME\}\}/$layout_name}" > "$layout_file" echo "${content//\{\{WINDOW_NAME\}\}/$layout_name}" > "$layout_file"
if [ ! -z "$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 "

View File

@@ -2,8 +2,11 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier resolve-command-path <command_or_alias> echo "usage: tmuxifier resolve-command-path <command_or_alias>
Outputs the absolute path to the given command or command alias." Outputs the absolute path to the given command or command alias."

17
libexec/tmuxifier-tmux Executable file
View File

@@ -0,0 +1,17 @@
#! /usr/bin/env bash
set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help
if calling-help "$@"; then
echo "usage: tmuxifier tmux [...]
Wrapper command for Tmux executable allowing Tmuxifier to pass in any custom
arguments specified in the TMUXIFIER_TMUX_OPTS environment variable."
exit
fi
tmux $TMUXIFIER_TMUX_OPTS "$@"

60
libexec/tmuxifier-tmux-version Executable file
View File

@@ -0,0 +1,60 @@
#! /usr/bin/env bash
shopt -s extglob
[ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help
if calling-help "$@"; then
echo "usage: tmuxifier tmux-version [target-version]
Outputs current Tmux version. If given optional target-version it outputs one
of three possible characters indicating if the current Tmux version number is
equal to, less than, or greater than the [target-version].
The three possible outputs are \"=\", \"<\", and \">\"."
exit
fi
# The vercomp() function is shamelessly ripped/borrowed from the following
# StackOverflow answer: http://stackoverflow.com/a/4025065/42146
vercomp () {
if [[ $1 == $2 ]]; then return 0; fi
local IFS=.
local i ver1=($1) ver2=($2)
# fill empty fields in ver1 with zeros
for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do ver1[i]=0; done
for ((i=0; i<${#ver1[@]}; i++)); do
# fill empty fields in ver2 with zeros
if [[ -z ${ver2[i]} ]]; then ver2[i]=0; fi
if ((10#${ver1[i]} > 10#${ver2[i]})); then
return 1
elif ((10#${ver1[i]} < 10#${ver2[i]})); then
return 2
fi
done
return 0
}
version=$(tmux -V)
version=${version/tmux /}
if [ -n "$1" ]; then
# Fix for "1.9a" version comparison, as vercomp() can only deal with
# purely numeric version numbers.
version=${version//+([a-zA-Z])/}
vercomp "$version" "$1"
case $? in
0) echo '=';;
1) echo '>';;
2) echo '<';;
esac
else
echo "$version"
fi

View File

@@ -2,12 +2,15 @@
set -e set -e
[ -n "$TMUXIFIER_DEBUG" ] && set -x [ -n "$TMUXIFIER_DEBUG" ] && set -x
# Load internal utility functions.
source "$TMUXIFIER/lib/util.sh"
# Provide tmuxifier help # Provide tmuxifier help
if [ "$1" == "--help" ]; then if calling-help "$@"; then
echo "usage: tmuxifier version echo "usage: tmuxifier version
Outputs Tmuxifier version." Outputs Tmuxifier version."
exit exit
fi fi
echo "0.5.1" echo "0.11.2"

View File

@@ -16,7 +16,7 @@ new_window "{{WINDOW_NAME}}"
# Paste text # Paste text
#send_keys "top" # paste into active pane #send_keys "top" # paste into active pane
#send_keys "date" 1 # paste into active pane #send_keys "date" 1 # paste into pane 1
# Set active pane. # Set active pane.
#select_pane 0 #select_pane 0