Cannot copy/paste anymore in tmux 2.1 - macos

I just update to tmux 2.1(OS X10.11.3 Terminal.app), and my .tmux.conf(accroding to http://joehanchoi.com/quick-fixes-for-tmux-2-1-on-osx/)
set-option -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
but the problem is after I start tmux, the mouse pointer becomes a plus: +, and I cannot copy/paste anymore.
And right click on Terminal does not work, no popups
How to solve this?

There are two factors:
Terminal.app in El Capitan recognizes (some of) xterm's escape sequences for the mouse.
tmux 2.1 has some changes — for the (xterm) mouse protocol
This was discussed extensively in Mouse scrolling in tmux 2.1 on OSX no longer auto-starts #145 , but no one suggested a different configuration than the one you are using.

Related

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 clear history in bash vi mode

I just recently switched to using bash vi mode with set -o vi setting in my .bash_profile. But this leads a problem
I had a tmux mapping that would run the clear-history command when I pressed <ctrl>+k. This was the relevant mapping
bind -n C-k clear-history
This does not work in bash vi mode, probably because vi mode takes precedence. How do I resolve or work around this issue?
You could change the key, this is what I use:
# reset & clear history
bind r send-keys -R \; send-keys C-l \; clear-history
You have to press ctrl+b+r
k can indeed be used but if you also move across panels (ctrl + hkjl), it may become confusing.
In any case this work by just using ctrl+k
bind -n C-k send-keys C-l \; run-shell "sleep .3s; tmux clear-history"
Without using the sleep:
bind -n C-k send-keys -R \; send-keys C-l \; clear-history
From this question, I have the following tmux mapping:
bind-key -n C-k send-keys -R \; send-keys Escape C-l a \; clear-history
There are many variants of this (each with pros and cons, and for different use cases); see the linked question.

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 - attach to a session and specify window

I have a script (.sh) and I want it to run in a existing tmux session. I have 1 session with 8 windows in.
Is there a command like tmux a -t session-name, which also specify the window?
And would a script like this work?
#!/bin/bash
tmux a -t session-name #What ever to write to specify window# java -jar -Xmx4G -Xms4G Spigot.jar
You can change the active window of a session before you attach to the session.
tmux -t <session-name> select-window -t <windowID>
tmux a -t <session-name>
You can combine two tmux commands as well.
tmux -t session-name select-window -t <windowID> \; a
If you really want to run java, presumably you want to create a new window with new-window, rather than select an existing one with select-window.
Newer versions of tmux (at least 1.9; did the above ever work, perhaps in 1.6?) no longer appear to have a -t option to specify the session to apply commands to. Instead, each individual command specifies the session.
tmux select-window -t <session-name>:<windowID> \; a -t <session-name>
For tmux version 2.1 this works
tmux a -t <session-name> \; select-window -t <windowID> \;
You can specify the window after the session separated by a colon.
tmux a -t session:window
You can even attach to a specific pane.
tmux a -t session:window.pane
Pane can be a number starting from 0. Window can be a number or name.
man tmux has more info about different syntaxes allowed for target-session, target-window, and target-pane.
target-window (or src-window or dst-window) specifies a window in the form session:window...
This syntax works on any other command like send-keys. If it's not working you may be on an older version of tmux and need to upgrade or try an approach suggested in the other answers.

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