diff -Nru tmux-xpanes-2.1.0/bin/tmux-xpanes tmux-xpanes-2.1.2/bin/tmux-xpanes --- tmux-xpanes-2.1.0/bin/tmux-xpanes 2017-05-18 14:54:16.000000000 +0000 +++ tmux-xpanes-2.1.2/bin/tmux-xpanes 2017-06-11 13:15:06.000000000 +0000 @@ -4,7 +4,7 @@ # @Filename xpanes set -u -readonly XP_VERSION="2.1.0" +readonly XP_VERSION="2.1.2" # =============== # Error constants @@ -55,8 +55,6 @@ readonly XP_EMPTY_STR="EMPTY" readonly XP_SUPPORT_TMUX_VERSION_LOWER="1.6" -readonly XP_SUPPORT_TMUX_VERSION_UPPER="2.4" -readonly XP_SUPPORT_TMUX_VERSIONS="${XP_SUPPORT_TMUX_VERSIONS:-(1.6|1.7|1.8|1.9|1.9a|2.0|2.1|2.2|2.3|2.4)}" readonly XP_DEPENDENCIES="${XP_DEPENDENCIES:-tmux perl}" : "Initialize options" && { @@ -151,6 +149,9 @@ And etc. Other sequences are available. Please refer to date(1) manual. +Copyright (c) 2017 Yamada, Yasuhiro +Released under the MIT License. +https://github.com/greymd/tmux-xpanes _EOS_ } @@ -172,6 +173,30 @@ echo "$_tmux_version" | perl -anle 'printf "%s", "$F[1]"' } +# Check whether the given version is greater than current tmux version. +# $1 ... target version. +# $2 ... curent tmux version. +# In case of tmux version is 1.7, the result will be like this. +# 0 is true, 1 is false. +## arg -> result +# func 1.5 1.7 -> 0 +# func 1.6 1.7 -> 0 +# func 1.7 1.7 -> 0 +# func 1.8 1.7 -> 1 +# func 1.9 1.7 -> 1 +# func 1.9a 1.7 -> 1 +# func 2.0 1.7 -> 1 +xpns_tmux_is_greater_equals() { + local _check_version="$1" + local _tmux_version="${2:-$(xpns_get_tmux_version)}" + # Simple numerical comparison does not work because there is the version like "1.9a". + if [[ "$((echo "$_tmux_version"; echo "$_check_version") | sort -n | head -n 1)" != "$_check_version" ]];then + return 1 + else + return 0 + fi +} + xpns_get_tmux_conf() { local _conf_name="$1" local _session="${2-}" @@ -193,8 +218,8 @@ local _default_allow_rename="$1" local _session="${2-}" if [[ "${_default_allow_rename-}" == "on" ]]; then - # Temporary, disable "allow-rename" - xpns_msg "Info" "'allow-rename' option is 'off' temporarily." + ## Temporary, disable "allow-rename" + # xpns_msg "Info" "'allow-rename' option is 'off' temporarily." if [ -z "${_session-}" ];then tmux set-window-option -g allow-rename off else @@ -210,7 +235,7 @@ local _default_allow_rename="$1" local _session="${2-}" if [[ "${_default_allow_rename-}" == "on" ]]; then - xpns_msg "Info" "Restore original value of 'allow-rename' option." + # xpns_msg "Info" "Restore original value of 'allow-rename' option." if [ -z "${_session-}" ];then tmux set-window-option -g allow-rename on else @@ -324,17 +349,21 @@ local _unprintable_str="${1-}"; shift cat <<<"${1:-$_unprintable_str}" \ | \ - # following characters should be replaced - # because they are interepred by tmux. - sed 's/\./\\x2e/g' \ + # Leave first 200 characters to prevent + # the name exceed the maximum length of tmux window name (2000 byte). + grep -oE '^.{1,200}' \ | \ - sed 's/:/\\x3a/g' \ - | \ - sed 's/-/\\x2d/g' \ - | \ - sed 's/%/\\x25/g' \ - | \ - perl -anle 'printf "%s", "$F[0]-'$$'"' + perl -anle 'printf "%s", "$F[0]-'$$'"' +} + +# Convert string to another string which can be handled as tmux window name. +xpns_value2key() { + perl -nle 'printf unpack("H*", $_);' +} + +# Restore string encoded by xpns_value2key function. +xpns_key2value() { + perl -nle 'printf pack("H*", $_);' } # @@ -468,13 +497,17 @@ fi XP_CURRENT_TMUX_VERSION="${XP_CURRENT_TMUX_VERSION:-$(xpns_get_tmux_version)}" - echo "$XP_CURRENT_TMUX_VERSION" | grep -qE "$XP_SUPPORT_TMUX_VERSIONS" - if [ $? -eq 1 ];then + if ( xpns_tmux_is_greater_equals \ + $XP_SUPPORT_TMUX_VERSION_LOWER \ + $XP_CURRENT_TMUX_VERSION ) ;then + : "Supported tmux version" + else xpns_msg "Warning" \ "'$XP_THIS_FILE_NAME' may not work correctly! Current tmux version $XP_CURRENT_TMUX_VERSION is out of support. -From version $XP_SUPPORT_TMUX_VERSION_LOWER to $XP_SUPPORT_TMUX_VERSION_UPPER is officially supported." +Version $XP_SUPPORT_TMUX_VERSION_LOWER and over is officially supported." fi + return 0 } @@ -517,10 +550,12 @@ fi _args4args=$(xpns_arr2args "${XP_ARGS[@]}") - tmux -S "$XP_SOCKET_PATH" send-keys -t "$XP_SESSION_NAME:$XP_TMP_WIN_NAME" \ + tmux -S "$XP_SOCKET_PATH" \ + send-keys -t "$XP_SESSION_NAME:$XP_TMP_WIN_NAME" \ "$XP_ABS_THIS_FILE_NAME $_opts4args $_args4args" C-m - tmux -S "$XP_SOCKET_PATH" send-keys -t "$XP_SESSION_NAME:$XP_TMP_WIN_NAME" "exit" C-m + tmux -S "$XP_SOCKET_PATH" \ + send-keys -t "$XP_SESSION_NAME:$XP_TMP_WIN_NAME" "exit" C-m # Avoid attaching (for unit testing). if [ $XP_OPT_ATTACH -eq 1 ]; then @@ -549,13 +584,21 @@ fi local _pane_base_index=$(xpns_get_tmux_conf 'pane-base-index') - local _window_name=$(xpns_generate_window_name "$XP_EMPTY_STR" "${XP_ARGS[0]}") + local _window_name=$( + xpns_generate_window_name \ + "$XP_EMPTY_STR" \ + "${XP_ARGS[0]}" \ + | xpns_value2key) local _last_args_idx=$((${#XP_ARGS[@]} - 1)) local _def_allow_rename="$(xpns_get_tmux_conf 'allow-rename')" xpns_suppress_allow_rename "${_def_allow_rename-}" - xpns_prepare_window "$_window_name" "$_pane_base_index" "$_last_args_idx" "$XP_OPT_ATTACH" + xpns_prepare_window \ + "$_window_name" \ + "$_pane_base_index" \ + "$_last_args_idx" \ + "$XP_OPT_ATTACH" if [ $XP_OPT_LOG_STORE -eq 1 ]; then xpns_enable_logging \ @@ -576,13 +619,18 @@ "${XP_ARGS[@]}" # This is just the author's preference (You can remove next statement.) - xpns_arrange_pane_location "$_window_name" $_last_args_idx + xpns_arrange_pane_location \ + "$_window_name" \ + $_last_args_idx # Enable broadcasting if [ $XP_OPT_IS_SYNC -eq 1 ]; then tmux set-window-option -t "${_window_name}" synchronize-panes on fi + # Restore original window name. + tmux rename-window -t "$_window_name" "$(echo "$_window_name" | xpns_key2value)" + xpns_restore_allow_rename "${_def_allow_rename-}" } diff -Nru tmux-xpanes-2.1.0/bin/xpanes tmux-xpanes-2.1.2/bin/xpanes --- tmux-xpanes-2.1.0/bin/xpanes 2017-05-18 14:54:16.000000000 +0000 +++ tmux-xpanes-2.1.2/bin/xpanes 2017-06-11 13:15:06.000000000 +0000 @@ -4,7 +4,7 @@ # @Filename xpanes set -u -readonly XP_VERSION="2.1.0" +readonly XP_VERSION="2.1.2" # =============== # Error constants @@ -55,8 +55,6 @@ readonly XP_EMPTY_STR="EMPTY" readonly XP_SUPPORT_TMUX_VERSION_LOWER="1.6" -readonly XP_SUPPORT_TMUX_VERSION_UPPER="2.4" -readonly XP_SUPPORT_TMUX_VERSIONS="${XP_SUPPORT_TMUX_VERSIONS:-(1.6|1.7|1.8|1.9|1.9a|2.0|2.1|2.2|2.3|2.4)}" readonly XP_DEPENDENCIES="${XP_DEPENDENCIES:-tmux perl}" : "Initialize options" && { @@ -151,6 +149,9 @@ And etc. Other sequences are available. Please refer to date(1) manual. +Copyright (c) 2017 Yamada, Yasuhiro +Released under the MIT License. +https://github.com/greymd/tmux-xpanes _EOS_ } @@ -172,6 +173,30 @@ echo "$_tmux_version" | perl -anle 'printf "%s", "$F[1]"' } +# Check whether the given version is greater than current tmux version. +# $1 ... target version. +# $2 ... curent tmux version. +# In case of tmux version is 1.7, the result will be like this. +# 0 is true, 1 is false. +## arg -> result +# func 1.5 1.7 -> 0 +# func 1.6 1.7 -> 0 +# func 1.7 1.7 -> 0 +# func 1.8 1.7 -> 1 +# func 1.9 1.7 -> 1 +# func 1.9a 1.7 -> 1 +# func 2.0 1.7 -> 1 +xpns_tmux_is_greater_equals() { + local _check_version="$1" + local _tmux_version="${2:-$(xpns_get_tmux_version)}" + # Simple numerical comparison does not work because there is the version like "1.9a". + if [[ "$((echo "$_tmux_version"; echo "$_check_version") | sort -n | head -n 1)" != "$_check_version" ]];then + return 1 + else + return 0 + fi +} + xpns_get_tmux_conf() { local _conf_name="$1" local _session="${2-}" @@ -193,8 +218,8 @@ local _default_allow_rename="$1" local _session="${2-}" if [[ "${_default_allow_rename-}" == "on" ]]; then - # Temporary, disable "allow-rename" - xpns_msg "Info" "'allow-rename' option is 'off' temporarily." + ## Temporary, disable "allow-rename" + # xpns_msg "Info" "'allow-rename' option is 'off' temporarily." if [ -z "${_session-}" ];then tmux set-window-option -g allow-rename off else @@ -210,7 +235,7 @@ local _default_allow_rename="$1" local _session="${2-}" if [[ "${_default_allow_rename-}" == "on" ]]; then - xpns_msg "Info" "Restore original value of 'allow-rename' option." + # xpns_msg "Info" "Restore original value of 'allow-rename' option." if [ -z "${_session-}" ];then tmux set-window-option -g allow-rename on else @@ -324,17 +349,21 @@ local _unprintable_str="${1-}"; shift cat <<<"${1:-$_unprintable_str}" \ | \ - # following characters should be replaced - # because they are interepred by tmux. - sed 's/\./\\x2e/g' \ + # Leave first 200 characters to prevent + # the name exceed the maximum length of tmux window name (2000 byte). + grep -oE '^.{1,200}' \ | \ - sed 's/:/\\x3a/g' \ - | \ - sed 's/-/\\x2d/g' \ - | \ - sed 's/%/\\x25/g' \ - | \ - perl -anle 'printf "%s", "$F[0]-'$$'"' + perl -anle 'printf "%s", "$F[0]-'$$'"' +} + +# Convert string to another string which can be handled as tmux window name. +xpns_value2key() { + perl -nle 'printf unpack("H*", $_);' +} + +# Restore string encoded by xpns_value2key function. +xpns_key2value() { + perl -nle 'printf pack("H*", $_);' } # @@ -468,13 +497,17 @@ fi XP_CURRENT_TMUX_VERSION="${XP_CURRENT_TMUX_VERSION:-$(xpns_get_tmux_version)}" - echo "$XP_CURRENT_TMUX_VERSION" | grep -qE "$XP_SUPPORT_TMUX_VERSIONS" - if [ $? -eq 1 ];then + if ( xpns_tmux_is_greater_equals \ + $XP_SUPPORT_TMUX_VERSION_LOWER \ + $XP_CURRENT_TMUX_VERSION ) ;then + : "Supported tmux version" + else xpns_msg "Warning" \ "'$XP_THIS_FILE_NAME' may not work correctly! Current tmux version $XP_CURRENT_TMUX_VERSION is out of support. -From version $XP_SUPPORT_TMUX_VERSION_LOWER to $XP_SUPPORT_TMUX_VERSION_UPPER is officially supported." +Version $XP_SUPPORT_TMUX_VERSION_LOWER and over is officially supported." fi + return 0 } @@ -517,10 +550,12 @@ fi _args4args=$(xpns_arr2args "${XP_ARGS[@]}") - tmux -S "$XP_SOCKET_PATH" send-keys -t "$XP_SESSION_NAME:$XP_TMP_WIN_NAME" \ + tmux -S "$XP_SOCKET_PATH" \ + send-keys -t "$XP_SESSION_NAME:$XP_TMP_WIN_NAME" \ "$XP_ABS_THIS_FILE_NAME $_opts4args $_args4args" C-m - tmux -S "$XP_SOCKET_PATH" send-keys -t "$XP_SESSION_NAME:$XP_TMP_WIN_NAME" "exit" C-m + tmux -S "$XP_SOCKET_PATH" \ + send-keys -t "$XP_SESSION_NAME:$XP_TMP_WIN_NAME" "exit" C-m # Avoid attaching (for unit testing). if [ $XP_OPT_ATTACH -eq 1 ]; then @@ -549,13 +584,21 @@ fi local _pane_base_index=$(xpns_get_tmux_conf 'pane-base-index') - local _window_name=$(xpns_generate_window_name "$XP_EMPTY_STR" "${XP_ARGS[0]}") + local _window_name=$( + xpns_generate_window_name \ + "$XP_EMPTY_STR" \ + "${XP_ARGS[0]}" \ + | xpns_value2key) local _last_args_idx=$((${#XP_ARGS[@]} - 1)) local _def_allow_rename="$(xpns_get_tmux_conf 'allow-rename')" xpns_suppress_allow_rename "${_def_allow_rename-}" - xpns_prepare_window "$_window_name" "$_pane_base_index" "$_last_args_idx" "$XP_OPT_ATTACH" + xpns_prepare_window \ + "$_window_name" \ + "$_pane_base_index" \ + "$_last_args_idx" \ + "$XP_OPT_ATTACH" if [ $XP_OPT_LOG_STORE -eq 1 ]; then xpns_enable_logging \ @@ -576,13 +619,18 @@ "${XP_ARGS[@]}" # This is just the author's preference (You can remove next statement.) - xpns_arrange_pane_location "$_window_name" $_last_args_idx + xpns_arrange_pane_location \ + "$_window_name" \ + $_last_args_idx # Enable broadcasting if [ $XP_OPT_IS_SYNC -eq 1 ]; then tmux set-window-option -t "${_window_name}" synchronize-panes on fi + # Restore original window name. + tmux rename-window -t "$_window_name" "$(echo "$_window_name" | xpns_key2value)" + xpns_restore_allow_rename "${_def_allow_rename-}" } diff -Nru tmux-xpanes-2.1.0/debian/changelog tmux-xpanes-2.1.2/debian/changelog --- tmux-xpanes-2.1.0/debian/changelog 2017-05-18 14:54:16.000000000 +0000 +++ tmux-xpanes-2.1.2/debian/changelog 2017-06-11 13:15:06.000000000 +0000 @@ -1,3 +1,20 @@ +tmux-xpanes (2.1.2-1) trusty; urgency=medium + + * tmux-xpanes officially supports tmux version 2.5. + * man page is added. + * Suppress some warning messages. + * Message for temporal changes of allow-rename options. + * Abolish warning message for unsupported **latest** tmux versions. + + -- Yamada, Yasuhiro Sun, 11 Jun 2017 13:13:55 +0000 + +tmux-xpanes (2.1.1-1) trusty; urgency=medium + + * Window name gets escaped characters ( Fix #59 ). + * Copyright statement is declared in the code. + + -- Yamada, Yasuhiro Sun, 28 May 2017 08:00:20 +0000 + tmux-xpanes (2.1.0-1) trusty; urgency=medium # New feature diff -Nru tmux-xpanes-2.1.0/Makefile tmux-xpanes-2.1.2/Makefile --- tmux-xpanes-2.1.0/Makefile 2017-05-18 14:54:16.000000000 +0000 +++ tmux-xpanes-2.1.2/Makefile 2017-06-11 13:15:06.000000000 +0000 @@ -3,6 +3,9 @@ BINDIR=$(DESTDIR)/usr/bin BIN1_DEST=bin/tmux-xpanes BIN2_DEST=bin/xpanes +MANDIR=$(DESTDIR)/usr/share/man/man1 +MAN1_DEST=man/tmux-xpanes.1 +MAN2_DEST=man/xpanes.1 INSTALL?=/usr/bin/install RM?=/bin/rm -f @@ -12,11 +15,15 @@ install: ${INSTALL} -d ${BINDIR} ${INSTALL} -m755 ${BIN1_DEST} ${BINDIR} - ${INSTALL} -d ${BINDIR} ${INSTALL} -m755 ${BIN2_DEST} ${BINDIR} + ${INSTALL} -d ${MANDIR} + ${INSTALL} -m644 ${MAN1_DEST} ${MANDIR} + ${INSTALL} -m644 ${MAN2_DEST} ${MANDIR} uninstall: ${RM} ${BINDIR}/${BIN1_DEST} ${RM} ${BINDIR}/${BIN2_DEST} + ${RM} ${MANDIR}/${MAN2_DEST} + ${RM} ${MANDIR}/${MAN2_DEST} deinstall: uninstall diff -Nru tmux-xpanes-2.1.0/man/tmux-xpanes.1 tmux-xpanes-2.1.2/man/tmux-xpanes.1 --- tmux-xpanes-2.1.0/man/tmux-xpanes.1 1970-01-01 00:00:00.000000000 +0000 +++ tmux-xpanes-2.1.2/man/tmux-xpanes.1 2017-06-11 13:15:06.000000000 +0000 @@ -0,0 +1,331 @@ +.TH XPANES 1 "MAY 2017" "User Commands" "" +.SH NAME +.PP +xpanes, tmux\-xpanes \- Ultimate terminal divider powered by tmux. +.SH SYNOPSIS +.SS Normal mode +.PP +\fB\fCxpanes\fR [\fB\fCOPTIONS\fR] \fIargument\fP ... +.SS Pipe mode +.PP +command ... | \fB\fCxpanes\fR [\fB\fCOPTIONS\fR] [<\fIutility\fP> ...] +.SH DESCRIPTION +.PP +\fB\fCxpanes\fR or \fB\fCtmux\-xpanes\fR (alias of \fB\fCxpanes\fR) commands have following features. +.RS +.IP \(bu 2 +Split tmux window into multiple panes. +.RS +.IP \(bu 2 +Build command lines from given arguments & execute them on the panes. +.RE +.IP \(bu 2 +Runnable from outside of tmux session. +.IP \(bu 2 +Runnable from inside of tmux session. +.IP \(bu 2 +Record operation log. +.IP \(bu 2 +Layout arrangement for panes. +.IP \(bu 2 +Generate command lines from standard input (Pipe mode). +.RE +.SH OPTIONS +.TP +\fB\fC\-h\fR, \fB\fC\-\-help\fR +Show this screen. +.TP +\fB\fC\-V\fR, \fB\fC\-\-version\fR +Show version. +.TP +\fB\fC\-c\fR <\fIutility\fP> +Specify <\fIutility\fP> which is executed as a command in each panes. If <\fIutility\fP> is omitted, \fB\fCecho(1)\fR is used. +.TP +\fB\fC\-d\fR, \fB\fC\-\-desync\fR +Make synchronize\-panes option off on new window. +.TP +\fB\fC\-e\fR +Execute given arguments as is. +.TP +\fB\fC\-I\fR <\fIrepstr\fP> +Replacing one or more occurrences of <\fIrepstr\fP> in <\fIutility\fP> given by \-c option. Default value of <\fIrepstr\fP> is {}. +.PP +\fB\fC\-l\fR <\fIlayout\fP> + Specify a layout for a window. Recognized layout arguments are: + \fB\fCt\fR tiled (default) + \fB\fCeh\fR even\-horizontal + \fB\fCev\fR even\-vertical + \fB\fCmh\fR main\-horizontal + \fB\fCmv\fR main\-vertical +.TP +\fB\fC\-n\fR <\fInumber\fP> +Set the maximum number of arguments taken for each pane of <\fIutility\fP>. +.TP +\fB\fC\-S\fR <\fIsocket\-path\fP> +Specify a full alternative path to the server socket. +.TP +\fB\fC\-\-log\fR[\fB\fC=\fR<\fIdirectory\fP>] +Enable logging and store log files to ~/.cache/xpanes/logs or given <\fIdirectory\fP>. +.TP +\fB\fC\-\-log\-format=\fR<\fIFORMAT\fP> +File name of log files follows given <\fIFORMAT\fP>. +.TP +\fB\fC\-\-ssh\fR +Let <\fIutility\fP> 'ssh \-o StrictHostKeyChecking=no {}'. +.TP +\fB\fC\-\-stay\fR +Do not switch to new window. +.SS \fIFORMAT\fP +.PP +Default value is "[:ARG:].log.%Y\-%m\-%d_%H\-%M\-%S". + Interpreted sequences are: + \fB\fC[:PID:]\fR Process id of the tmux session. (e.g, 41531) + \fB\fC[:ARG:]\fR Argument name +.PP +In addition, sequences same as \fB\fCdate(1)\fR command are available. + For example: + \fB\fC%Y\fR year (e.g, 1960) + \fB\fC%m\fR month (e.g, 01) + \fB\fC%d\fR date (e.g, 31) + And etc. +Other sequences are available. Please refer to \fB\fCdate(1)\fR manual. +.SH MODES +.SS [Normal mode1] Outside of tmux session. +.PP +When the tmux is not being opened and \fB\fCxpanes\fR command is executed on the normal terminal, the command's behavior is supposed to be that. The command newly creates a tmux session and new window on the session. In addition, it separates the window into multiple panes. Finally, the session will be attached. +.SS [Normal mode2] Inside of tmux session. +.PP +When the tmux is already being opened and \fB\fCxpanes\fR command is executed on the existing tmux session, the command's behavior is supposed to be that. The command newly creates a window \fBon the exisging active session\fP\&. In addition, it separates the window into multiple panes. Finally, the window will be active window. +.SS [Pipe mode] Inside of tmux session & Accepting standard input. +.PP +When the tmux is already being opened and \fB\fCxpanes\fR command is executed on the tmux (which means Normal mode2). In addition, when the command is accepting standard input ( the command followed by any other commands and pipe \fB\fC|\fR), the command's behavior will be special one called "Pipe mode". Then, \fB\fCxpanes\fR behaves like UNIX \fB\fCxargs(1)\fR\&. Pipe mode has two features. +.nr step0 0 1 +.RS +.IP \n+[step0] +\fB\fCxpanes\fR command's argument will be the common command line which will be used within all panes (this is corresponding to the \fB\fC\-c\fR option's argument in Normal mode). +.IP \n+[step0] +Single line given by standard input is corresponding to the single pane's command line (this is corresponding to normal argument of \fB\fCxpanes\fR in Normal mode). +.RE +.SH EXAMPLES +.SS Simple example +.PP +\fB\fCxpanes\fR 1 2 3 4 +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ echo 1 |$ echo 2 | +|1 |2 | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ echo 3 |$ echo 4 | +|3 |4 | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS \fB\fC\-c\fR option and \fB\fC\-I\fR option +.PP +\fB\fCxpanes\fR \-I@ \-c 'seq @' 1 2 3 4 +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ seq 1 |$ seq 2 | +|1 |1 | +| |2 | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ seq 3 |$ seq 4 | +|1 |1 | +|2 |2 | +|3 |3 | +| |4 | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Ping multiple hosts +.PP +\fB\fCxpanes\fR \-c "ping {}" 192.168.1.{5..8} +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ ping 192.168.1.5 |$ ping 192.168.1.6 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ ping 192.168.1.7 |$ ping 192.168.1.8 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Use SSH without key checking +.PP +\fB\fCxpanes\fR \-\-ssh myuser1@host1 myuser2@host2 +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ ssh \-o StrictHostKeyChecking=no myuser@host1 | $ ssh \-o StrictHostKeyChecking=no myuser@host2 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Execute different commands on the different panes +.PP +\fB\fCxpanes\fR \-e "top" "vmstat 1" "watch \-n 1 free" +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ top |$ vmstat 1 | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ watch \-n 1 free | +| | +| | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Change layout of panes +.PP +\fB\fCxpanes\fR \-l ev \-c "{}" "top" "vmstat 1" "watch \-n 1 df" +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ top | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ vmstat 1 | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ watch \-n 1 df | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Pipe mode +.PP +\fB\fCseq\fR 3 | \fB\fCxpanes\fR +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ echo 1 |$ echo 2 | +|1 |2 | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ echo 3 | +|3 | +| | +| | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Pipe mode with an argument +.PP +\fB\fCseq\fR 4 | \fB\fCxpanes\fR seq +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ seq 1 |$ seq 2 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ seq 3 |$ seq 4 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SH AUTHOR AND COPYRIGHT +.PP +Copyright (c) 2017 Yamada, Yasuhiro \[la]greengregson@gmail.com\[ra] Released under the MIT License. +\[la]https://github.com/greymd/tmux-xpanes\[ra] +.SH SEE ALSO +.PP +.BR tmux (1) diff -Nru tmux-xpanes-2.1.0/man/xpanes.1 tmux-xpanes-2.1.2/man/xpanes.1 --- tmux-xpanes-2.1.0/man/xpanes.1 1970-01-01 00:00:00.000000000 +0000 +++ tmux-xpanes-2.1.2/man/xpanes.1 2017-06-11 13:15:06.000000000 +0000 @@ -0,0 +1,331 @@ +.TH XPANES 1 "MAY 2017" "User Commands" "" +.SH NAME +.PP +xpanes, tmux\-xpanes \- Ultimate terminal divider powered by tmux. +.SH SYNOPSIS +.SS Normal mode +.PP +\fB\fCxpanes\fR [\fB\fCOPTIONS\fR] \fIargument\fP ... +.SS Pipe mode +.PP +command ... | \fB\fCxpanes\fR [\fB\fCOPTIONS\fR] [<\fIutility\fP> ...] +.SH DESCRIPTION +.PP +\fB\fCxpanes\fR or \fB\fCtmux\-xpanes\fR (alias of \fB\fCxpanes\fR) commands have following features. +.RS +.IP \(bu 2 +Split tmux window into multiple panes. +.RS +.IP \(bu 2 +Build command lines from given arguments & execute them on the panes. +.RE +.IP \(bu 2 +Runnable from outside of tmux session. +.IP \(bu 2 +Runnable from inside of tmux session. +.IP \(bu 2 +Record operation log. +.IP \(bu 2 +Layout arrangement for panes. +.IP \(bu 2 +Generate command lines from standard input (Pipe mode). +.RE +.SH OPTIONS +.TP +\fB\fC\-h\fR, \fB\fC\-\-help\fR +Show this screen. +.TP +\fB\fC\-V\fR, \fB\fC\-\-version\fR +Show version. +.TP +\fB\fC\-c\fR <\fIutility\fP> +Specify <\fIutility\fP> which is executed as a command in each panes. If <\fIutility\fP> is omitted, \fB\fCecho(1)\fR is used. +.TP +\fB\fC\-d\fR, \fB\fC\-\-desync\fR +Make synchronize\-panes option off on new window. +.TP +\fB\fC\-e\fR +Execute given arguments as is. +.TP +\fB\fC\-I\fR <\fIrepstr\fP> +Replacing one or more occurrences of <\fIrepstr\fP> in <\fIutility\fP> given by \-c option. Default value of <\fIrepstr\fP> is {}. +.PP +\fB\fC\-l\fR <\fIlayout\fP> + Specify a layout for a window. Recognized layout arguments are: + \fB\fCt\fR tiled (default) + \fB\fCeh\fR even\-horizontal + \fB\fCev\fR even\-vertical + \fB\fCmh\fR main\-horizontal + \fB\fCmv\fR main\-vertical +.TP +\fB\fC\-n\fR <\fInumber\fP> +Set the maximum number of arguments taken for each pane of <\fIutility\fP>. +.TP +\fB\fC\-S\fR <\fIsocket\-path\fP> +Specify a full alternative path to the server socket. +.TP +\fB\fC\-\-log\fR[\fB\fC=\fR<\fIdirectory\fP>] +Enable logging and store log files to ~/.cache/xpanes/logs or given <\fIdirectory\fP>. +.TP +\fB\fC\-\-log\-format=\fR<\fIFORMAT\fP> +File name of log files follows given <\fIFORMAT\fP>. +.TP +\fB\fC\-\-ssh\fR +Let <\fIutility\fP> 'ssh \-o StrictHostKeyChecking=no {}'. +.TP +\fB\fC\-\-stay\fR +Do not switch to new window. +.SS \fIFORMAT\fP +.PP +Default value is "[:ARG:].log.%Y\-%m\-%d_%H\-%M\-%S". + Interpreted sequences are: + \fB\fC[:PID:]\fR Process id of the tmux session. (e.g, 41531) + \fB\fC[:ARG:]\fR Argument name +.PP +In addition, sequences same as \fB\fCdate(1)\fR command are available. + For example: + \fB\fC%Y\fR year (e.g, 1960) + \fB\fC%m\fR month (e.g, 01) + \fB\fC%d\fR date (e.g, 31) + And etc. +Other sequences are available. Please refer to \fB\fCdate(1)\fR manual. +.SH MODES +.SS [Normal mode1] Outside of tmux session. +.PP +When the tmux is not being opened and \fB\fCxpanes\fR command is executed on the normal terminal, the command's behavior is supposed to be that. The command newly creates a tmux session and new window on the session. In addition, it separates the window into multiple panes. Finally, the session will be attached. +.SS [Normal mode2] Inside of tmux session. +.PP +When the tmux is already being opened and \fB\fCxpanes\fR command is executed on the existing tmux session, the command's behavior is supposed to be that. The command newly creates a window \fBon the exisging active session\fP\&. In addition, it separates the window into multiple panes. Finally, the window will be active window. +.SS [Pipe mode] Inside of tmux session & Accepting standard input. +.PP +When the tmux is already being opened and \fB\fCxpanes\fR command is executed on the tmux (which means Normal mode2). In addition, when the command is accepting standard input ( the command followed by any other commands and pipe \fB\fC|\fR), the command's behavior will be special one called "Pipe mode". Then, \fB\fCxpanes\fR behaves like UNIX \fB\fCxargs(1)\fR\&. Pipe mode has two features. +.nr step0 0 1 +.RS +.IP \n+[step0] +\fB\fCxpanes\fR command's argument will be the common command line which will be used within all panes (this is corresponding to the \fB\fC\-c\fR option's argument in Normal mode). +.IP \n+[step0] +Single line given by standard input is corresponding to the single pane's command line (this is corresponding to normal argument of \fB\fCxpanes\fR in Normal mode). +.RE +.SH EXAMPLES +.SS Simple example +.PP +\fB\fCxpanes\fR 1 2 3 4 +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ echo 1 |$ echo 2 | +|1 |2 | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ echo 3 |$ echo 4 | +|3 |4 | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS \fB\fC\-c\fR option and \fB\fC\-I\fR option +.PP +\fB\fCxpanes\fR \-I@ \-c 'seq @' 1 2 3 4 +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ seq 1 |$ seq 2 | +|1 |1 | +| |2 | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ seq 3 |$ seq 4 | +|1 |1 | +|2 |2 | +|3 |3 | +| |4 | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Ping multiple hosts +.PP +\fB\fCxpanes\fR \-c "ping {}" 192.168.1.{5..8} +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ ping 192.168.1.5 |$ ping 192.168.1.6 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ ping 192.168.1.7 |$ ping 192.168.1.8 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Use SSH without key checking +.PP +\fB\fCxpanes\fR \-\-ssh myuser1@host1 myuser2@host2 +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ ssh \-o StrictHostKeyChecking=no myuser@host1 | $ ssh \-o StrictHostKeyChecking=no myuser@host2 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Execute different commands on the different panes +.PP +\fB\fCxpanes\fR \-e "top" "vmstat 1" "watch \-n 1 free" +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ top |$ vmstat 1 | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ watch \-n 1 free | +| | +| | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Change layout of panes +.PP +\fB\fCxpanes\fR \-l ev \-c "{}" "top" "vmstat 1" "watch \-n 1 df" +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ top | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ vmstat 1 | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ watch \-n 1 df | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Pipe mode +.PP +\fB\fCseq\fR 3 | \fB\fCxpanes\fR +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ echo 1 |$ echo 2 | +|1 |2 | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ echo 3 | +|3 | +| | +| | +| | +| | +| | +| | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SS Pipe mode with an argument +.PP +\fB\fCseq\fR 4 | \fB\fCxpanes\fR seq +.PP +.RS +.nf ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ seq 1 |$ seq 2 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +|$ seq 3 |$ seq 4 | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | +| | | ++\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ +.fi +.RE +.SH AUTHOR AND COPYRIGHT +.PP +Copyright (c) 2017 Yamada, Yasuhiro \[la]greengregson@gmail.com\[ra] Released under the MIT License. +\[la]https://github.com/greymd/tmux-xpanes\[ra] +.SH SEE ALSO +.PP +.BR tmux (1)