tmux config: what is -t in bind-key setting should mean? - macos

Suddenly my tmux started with error .tmux.conf:41: usage: bind-key [-cnr] [-T key-table] key command [arguments]
on that line in tmux.conf was bind-key -t vi-copy v begin-selection
I suppose, the problem is with -t key, which is not predicted by bind-key command.
But it was working!

The different types of key table were integrated together and the -t flag dropped several years ago. Copy mode commands are now sent using send -X and the new table is called copy-mode-vi.
So your example becomes:
bind-key -Tcopy-mode-vi v send -X begin-selection

Related

Send prefix key to tmux session

So I am using this tmux plugin for logging the entire tmux history. https://github.com/tmux-plugins/tmux-logging
The plugin uses the key bindings C-b + P to start and stop the logging session. Basically, prefix + P.
I am programatically trying to to stop and start the logging session to create a new output file for each day. For this, I want to setup a crontab to run a simple script. The content of the script is as follows.
tmux send-keys -t 0:0 C-b P # stops the logging session
tmux send-keys -t 0:0 C-b P # restarts the logging session
But when I attach to the tmux session, what I see is this printed on the screen.
^BP^BP
So C-b instead of being treated as a prefix, is being treated as a normal key combination. I have also tried using the following, but still the same result.
tmux send-prefix -t 0:0 # prints ^B on the session window
tmux send-keys -t 0:0 P
What is the workaround for this?
According to the maintainer of tmux, "You can't trigger tmux key bindings with send-keys. You could just run the commands the key is bound to instead.".
For your specific case, I see in logging.tmux:
tmux bind-key "$logging_key" run-shell "$CURRENT_DIR/scripts/toggle_logging.sh"
tmux bind-key "$pane_screen_capture_key" run-shell "$CURRENT_DIR/scripts/screen_capture.sh"
tmux bind-key "$save_complete_history_key" run-shell "$CURRENT_DIR/scripts/save_complete_history.sh"
tmux bind-key "$clear_history_key" run-shell "$CURRENT_DIR/scripts/clear_history.sh"
where $CURRENT_DIR is the directory that this script lives in.
So, find that script on your machine and then change your send-keys to
tmux send-keys -t 0:0 '$SCRIPT_DIR/scripts/toggle_logging.sh' Enter

Bash reading tmux config?

I'm having several issues with tmux on my new account but the most bizarre one is this: what I write in my tmux configuration file is read by bash (or the terminal, whatever). My ~/.tmux.conf is quite small:
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
This has the effect of disabling h,j,k,l in the terminal (k doesn't work like up, so I suppose it doesn't actually read the configs per se). My .bashrc is quite small as well (apart from the default Ubuntu stuff):
alias ls='ls --group-directories-first --color'
alias tmux='tmux new-session \; split-window -h\;'
source ~/dir/fileNotRelatedToThis
Removing the entries in .tmux.conf solves the problem, but I have those settings for a reason and have never experienced anything like this problem before. Anyone who can think of a real solution?
Oh and removing .tmux.conf does not solve the problem, so currently I don't have h,j,k,l in the terminal, hm...
edit: Rebooting enabled the letters again, phew...
This will work for setting ctrl + key_press.
bind-key -n C-h select-pane -L
bind-key -n C-l select-pane -R
bind-key -n C-j select-pane -D
bind-key -n C-k select-pane -U
You also need to attach to the session something like this should work:
tmux new-session -d -n Dropdown -s Command;
tmux splitw -h -p 50 -t 0
tmux attach-session -t Command

tmux mouse copy-mode jumps to bottom

I am using tmux in a ssh session.
I am using multiple panes and windows.
I have mouse-mode enabled which works great so far.
When I select text it gets automatically copied to the tmux-buffer and the window jumps to the end.
So if i scroll up and click on something it jumps to the end...
When I switch between panes a copy command is triggered and the output goes to the end.
I really dislike this behaviour and I'd rather have to press a button to copy or click q to finish copy mode or something.
Is it possible to disable auto-copy // auto jump to the end on mouse button release?
I am running tmux 2.0 on the server through ssh. In Terminator on the client.
# config
#{{{
# 0 is too far from ` ;)
set -g base-index 1
# Automatically set window title
# set-window-option -g automatic-rename on
# set-option -g set-titles on
set -g default-terminal screen-256color
set -g history-limit 10000
set -g status-keys vi
setw -g mode-keys vi
setw -g mode-mouse on
set -g mouse-select-window on
set -g mouse-select-pane on
set -g mouse-resize-pane on
# No delay for escape key press
set -sg escape-time 0
#}}}
# bind keys
#{{{
# Reload tmux config
bind r source-file ~/.tmux.conf
# remap prefix to Control + a
set -g prefix C-a
# bind 'C-a C-a' to type 'C-a'
bind C-a send-prefix
unbind C-b
# switch tabs with <b n>
bind b previous-window
# vi like paste
bind-key p paste-buffer
# quick pane cycling
unbind a
bind a select-pane -t :.+
bind-key v split-window -h
bind-key s split-window -v
bind-key J resize-pane -D 10
bind-key K resize-pane -U 10
bind-key H resize-pane -L 10
bind-key L resize-pane -R 10
bind-key M-j resize-pane -D 2
bind-key M-k resize-pane -U 2
bind-key M-h resize-pane -L 2
bind-key M-l resize-pane -R 2
# Vim style pane selection
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind -n M-Down select-pane -D
# find asci keycodes with "sudo showkey -a" - works only tmux >1.7
# us-keyboard like [ ]
bind-key -r 0xc3 display 'c3 prefix binding hack'
bind-key -r 0xb6 copy-mode # ö
bind-key -r 0xa3 paste-buffer # ä
# us { }
bind-key -r 0x96 swap-pane -U # Ö - swap pane to prev position
bind-key -r 0x84 swap-pane -D # Ä - to next pos
#}}}
As of tmux 2.5 you should use
unbind -T copy-mode-vi MouseDragEnd1Pane
I'd say the easiest way nowadays is to just use the tmux-yank plugin and add the yank_action configuration option:
# ~/.tmux.conf
set -g #yank_action 'copy-pipe' # or 'copy-pipe-and-cancel' for the default
Additionally, tmux-yank also manages for you the differences between OS clipboards (Linux, macOS, WSL) and adds some very useful shortcuts for copying the current command line content and cwd. Highly recommended.
i was able to get mouse selection to stop jumping to the bottom in tmux (version 2.2) by adding the following to my ~/.tmux.conf:
setw -g mouse on
setw -g mode-keys vi
unbind -t vi-copy MouseDragEnd1Pane
caveat: this has the side effect of turning on vi mode.
i found this issue to be relevant, and found the configuration above in these dotfiles.
The following worked for me. Thanks to #stagebind on github!
For vi-mode config, https://github.com/tmux/tmux/issues/140#issuecomment-321144647:
unbind -T copy-mode-vi MouseDragEnd1Pane
For non vi-mode config, https://github.com/tmux/tmux/issues/140#issuecomment-302742783:
# 2.4+
unbind -T copy-mode MouseDragEnd1Pane
# 2.2 - 2.3
unbind -t vi-copy MouseDragEnd1Pane
Took me some time to get the correct answer.
I am also using Alacritty and cannot enable copy on mouse select because of an issue with MouseDragEnd1Pane as described in: https://github.com/jwilm/alacritty/issues/1002.
Selecting the text with the mouse and then if I need copy it using the key y works for me with this config:
bind -T copy-mode-vi y send -X copy-pipe "reattach-to-user-namespace pbcopy"\; display-message "copied to system clipboard"
Complete config for copy and pasting with mouse and vi key binding support looks like this:
set-option -g default-command "reattach-to-user-namespace -l bash"
set -g mouse on
bind P paste-buffer
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send -X copy-pipe "reattach-to-user-namespace pbcopy"\; display-message "copied to system clipboard"
bind-key -T copy-mode-vi r send-keys -X rectangle-toggle
## don't jump to bottom on mouse select - when vi-mode enabled - 2.4+
#unbind -T copy-mode MouseDragEnd1Pane
## don't jump to bottom on mouse select - when vi-mode enabled - 2.2 - 2.3
#unbind -t vi-copy MouseDragEnd1Pane
## don't jump to bottom on mouse select - when vi-mode enabled
unbind -T copy-mode-vi MouseDragEnd1Pane
I am using OS X.
as of tmux 2.2 the feature copy-selection -x is available. With the following options tmux stays in copy mode after selecting. Choose the one that fits your mode setting.
bind-key -t vi-copy MouseDragEnd1Pane copy-selection -x
bind-key -t emacs-copy MouseDragEnd1Pane copy-selection -x
Looks like upgrading to tmux 2.1 might solve your problem.
Reasonable mouse support in tmux
In version 2.1 they changed mouse-mode, mouse-select-window/pane etc with single mouse switch. Mouse actions now generates key events that can be mapped as ordinary keys.

Tmux not responding to commands in shell script

I have a simple bash script that creates a new tmux session and does some layout:
#!/usr/local/bin/bash
tmux new-session -s $1
tmux split-window -h -p 50 -t 1
tmux new-window
tmux split-window -h -p 50 -t 1
The contents are in an executable script. When i execute the script with the name of the session as the argument, I get a new tmux session but there is only one un-split window, instead of the two [split] windows that I am telling it to create. If I run the scripts one by one on the shell prompt then I do get the desired outcome. So why is this not working in the script?
The problem is that first command starts tmux and wait for it to finish before continue. What you need to do is write custom tmux.conf file and add pass it through -f filename.conf with first command.
the other possible way is use tmux -d
#!/bin/bash
tmux new-session -d -s $1
tmux split-window -h -p 50 -t $1
tmux new-window -t $1
tmux split-window -h -p 50 -t $1
tmux attach -t $1

tmux copy does not work

I'm trying to become more proficient with tmux, but I ran into ( what seems to me ), a weird issue. Here's my tmux.conf:
1 TERM=screen-256color
2 set-option -g default-terminal $TERM
3
4 TMUX_COLOUR_BORDER="colour237"
5 TMUX_COLOUR_ACTIVE="colour231"
6 TMUX_COLOUR_INACTIVE="colour16"
7
8 set-window-option -g window-status-activity-bg $TMUX_COLOUR_BORDER
9 set-window-option -g window-status-activity-fg $TMUX_COLOUR_ACTIVE
10 set-window-option -g window-status-current-format "#[fg=$TMUX_COLOUR_ACTIVE]#I:#W#F"
11 set-window-option -g window-status-format "#[fg=$TMUX_COLOUR_INACTIVE]#I:#W#F"
12
13
14 set -g prefix C-a
15
16 bind-key o split-window -v
17 bind-key e split-window -h
18
19 bind-key w kill-pane
I'm trying to copy paste between two panes. So, I hit Ctrl-a-[ , and then Ctrl-space. The thing is, I don't see a visual selection of the block, and alt-w also does not work ( since I guess it's not even entering copy mode ). Is there an obvious error in my tmux.conf? Can you spot what I'm doing wrong?
tmux has an option, mode-keys, you can find it in man page.
default is emacs, but if your $EDITOR is vim/vi, tmux will use vi.
So the key binding will be in vi mode.
E.g. your Alt-w won't work, it is emacs binding. you can see a table of key-binds in tmux man page.
some related to your question:
Function vi emacs
Copy selection Enter M-w
Start selection Space C-Space
so you should go with the vi-mode keys.
I used vim mode too, and did a little customization (to make it same as vim) in my tmux.conf, maybe you could give it a try:
bind-key -t vi-copy 'v' begin-selection # Begin selection in copy mode.
bind-key -t vi-copy 'C-v' rectangle-toggle # Begin selection in copy mode.
bind-key -t vi-copy 'y' copy-selection # Yank selection in copy mode.
In case it helps, I had a correct tmux configuration (with vi like settings for selection & copy/paste) but needed to set these two environment variables in my .zshrc file (using Zsh & Neovim):
export EDITOR='nvim'
export VISUAL='nvim'

Resources