From a4aa1466791b786069ec3c8abddef77e797cf876 Mon Sep 17 00:00:00 2001 From: Darshaka Pathirana Date: Fri, 25 Nov 2022 14:39:14 +0100 Subject: [PATCH] tmux.conf: detect running as tmate and disable non-supported features MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit tmux versions >=2.3 support the -q option for source-file to suppress errors for nonexistent files. Even Debian/oldoldstable has tmux v2.3-4, so this works nice everwhere, *except* for when invoking tmate, which is a fork based on an old version of tmux, which then complains about: | /etc/tmux.conf:75: usage: source-file path | /etc/tmux.conf:36: usage: source-file path Try to detect tmate from within the environment, and then enable the configuration only when *not* running from within tmate. This commit relies on @mika's commit grml/grml-etc-core@71101e0 (the commit message was shamelessly copied, thx!), but two things changed: * Use "! (env | grep -q TMUX=/tmp/tmate)" instead of "env | grep -q TMUX=/tmp/tmate && false" which always results in false: $ true && false; echo $? 1 * Double escape the semicolon (;) (i.e. \\;). Because if bind-key is set up to call multiple commands, each command needs to be separated with \;. (Each command is terminated by a newline or a semicolon. Commands separated by semicolons together form a ‘command sequence’). And if bind-key is called within if-shell \; needs to be escaped one more time. (No escaping would have been needed when using braces ({}), but tmate does not seem to support braces.) See: COMMAND PARSING AND EXECUTION + PARSING SYNTAX in man page tmux(1). Replaces the PR: grml/grml-etc-core#151 --- etc/tmux.conf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/etc/tmux.conf b/etc/tmux.conf index ea20b33..a1ea76d 100644 --- a/etc/tmux.conf +++ b/etc/tmux.conf @@ -30,7 +30,8 @@ bind-key J join-pane bind-key B if-shell "! tmux has-session -t bg" "new-session -d -s bg" \; move-window -t bg ### Reload Config -bind-key R source-file ~/.tmux.conf \; source-file -q ~/.tmux.conf.local \; display-message "~/.tmux.conf[.local] reloaded" +if-shell "! (env | grep -q TMUX=/tmp/tmate)" \ + "bind-key R source-file ~/.tmux.conf \\; source-file -q ~/.tmux.conf.local \\; display-message '~/.tmux.conf[.local] reloaded'" ###rebind keys bind-key h next-layout @@ -68,4 +69,5 @@ set-window-option -g window-status-style fg=blue,bg=black set-window-option -g window-status-current-style bold ### source user-specific local configuration file -source-file -q ~/.tmux.conf.local +if-shell "! (env | grep -q TMUX=/tmp/tmate)" \ + "source-file -q ~/.tmux.conf.local" -- 2.1.4