mirror of
https://github.com/tmux/tmux.git
synced 2024-12-04 19:58:48 +00:00
Rework of copy mode commands ("send-keys -X") to parse the arguments so
that flags may be detected propertly rather than just looking for strings ("-O" and so on). Also add -C and -P flags to the copy commands: -C prevents the commands from sending the text to the clipboard and -P prevents them from adding the text as a paste buffer. Note some of the default key bindings change to add "--" and any similar custom key bindings using "send-keys -X" may need a similar change. GitHub issue 4153.
This commit is contained in:
parent
780a87be9a
commit
9f2a853d87
@ -49,7 +49,7 @@
|
||||
" '#{?#{m/r:(copy|view)-mode,#{pane_mode}},Go To Top,}' '<' {send -X history-top}" \
|
||||
" '#{?#{m/r:(copy|view)-mode,#{pane_mode}},Go To Bottom,}' '>' {send -X history-bottom}" \
|
||||
" ''" \
|
||||
" '#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},}' 'C-r' {if -F '#{?#{m/r:(copy|view)-mode,#{pane_mode}},0,1}' 'copy-mode -t='; send -Xt= search-backward \"#{q:mouse_word}\"}" \
|
||||
" '#{?mouse_word,Search For #[underscore]#{=/9/...:mouse_word},}' 'C-r' {if -F '#{?#{m/r:(copy|view)-mode,#{pane_mode}},0,1}' 'copy-mode -t='; send -Xt= search-backward -- \"#{q:mouse_word}\"}" \
|
||||
" '#{?mouse_word,Type #[underscore]#{=/9/...:mouse_word},}' 'C-y' {copy-mode -q; send-keys -l -- \"#{q:mouse_word}\"}" \
|
||||
" '#{?mouse_word,Copy #[underscore]#{=/9/...:mouse_word},}' 'c' {copy-mode -q; set-buffer -- \"#{q:mouse_word}\"}" \
|
||||
" '#{?mouse_line,Copy Line,}' 'l' {copy-mode -q; set-buffer -- \"#{q:mouse_line}\"}" \
|
||||
@ -489,26 +489,26 @@ key_bindings_init(void)
|
||||
"bind -Tcopy-mode C-k { send -X copy-pipe-end-of-line-and-cancel }",
|
||||
"bind -Tcopy-mode C-n { send -X cursor-down }",
|
||||
"bind -Tcopy-mode C-p { send -X cursor-up }",
|
||||
"bind -Tcopy-mode C-r { command-prompt -T search -ip'(search up)' -I'#{pane_search_string}' { send -X search-backward-incremental '%%' } }",
|
||||
"bind -Tcopy-mode C-s { command-prompt -T search -ip'(search down)' -I'#{pane_search_string}' { send -X search-forward-incremental '%%' } }",
|
||||
"bind -Tcopy-mode C-r { command-prompt -T search -ip'(search up)' -I'#{pane_search_string}' { send -X search-backward-incremental -- '%%' } }",
|
||||
"bind -Tcopy-mode C-s { command-prompt -T search -ip'(search down)' -I'#{pane_search_string}' { send -X search-forward-incremental -- '%%' } }",
|
||||
"bind -Tcopy-mode C-v { send -X page-down }",
|
||||
"bind -Tcopy-mode C-w { send -X copy-pipe-and-cancel }",
|
||||
"bind -Tcopy-mode Escape { send -X cancel }",
|
||||
"bind -Tcopy-mode Space { send -X page-down }",
|
||||
"bind -Tcopy-mode , { send -X jump-reverse }",
|
||||
"bind -Tcopy-mode \\; { send -X jump-again }",
|
||||
"bind -Tcopy-mode F { command-prompt -1p'(jump backward)' { send -X jump-backward '%%' } }",
|
||||
"bind -Tcopy-mode F { command-prompt -1p'(jump backward)' { send -X jump-backward -- '%%' } }",
|
||||
"bind -Tcopy-mode N { send -X search-reverse }",
|
||||
"bind -Tcopy-mode P { send -X toggle-position }",
|
||||
"bind -Tcopy-mode R { send -X rectangle-toggle }",
|
||||
"bind -Tcopy-mode T { command-prompt -1p'(jump to backward)' { send -X jump-to-backward '%%' } }",
|
||||
"bind -Tcopy-mode T { command-prompt -1p'(jump to backward)' { send -X jump-to-backward -- '%%' } }",
|
||||
"bind -Tcopy-mode X { send -X set-mark }",
|
||||
"bind -Tcopy-mode f { command-prompt -1p'(jump forward)' { send -X jump-forward '%%' } }",
|
||||
"bind -Tcopy-mode g { command-prompt -p'(goto line)' { send -X goto-line '%%' } }",
|
||||
"bind -Tcopy-mode f { command-prompt -1p'(jump forward)' { send -X jump-forward -- '%%' } }",
|
||||
"bind -Tcopy-mode g { command-prompt -p'(goto line)' { send -X goto-line -- '%%' } }",
|
||||
"bind -Tcopy-mode n { send -X search-again }",
|
||||
"bind -Tcopy-mode q { send -X cancel }",
|
||||
"bind -Tcopy-mode r { send -X refresh-from-pane }",
|
||||
"bind -Tcopy-mode t { command-prompt -1p'(jump to forward)' { send -X jump-to-forward '%%' } }",
|
||||
"bind -Tcopy-mode t { command-prompt -1p'(jump to forward)' { send -X jump-to-forward -- '%%' } }",
|
||||
"bind -Tcopy-mode Home { send -X start-of-line }",
|
||||
"bind -Tcopy-mode End { send -X end-of-line }",
|
||||
"bind -Tcopy-mode MouseDown1Pane select-pane",
|
||||
@ -553,8 +553,8 @@ key_bindings_init(void)
|
||||
"bind -Tcopy-mode C-Down { send -X scroll-down }",
|
||||
|
||||
/* Copy mode (vi) keys. */
|
||||
"bind -Tcopy-mode-vi '#' { send -FX search-backward '#{copy_cursor_word}' }",
|
||||
"bind -Tcopy-mode-vi * { send -FX search-forward '#{copy_cursor_word}' }",
|
||||
"bind -Tcopy-mode-vi '#' { send -FX search-backward -- '#{copy_cursor_word}' }",
|
||||
"bind -Tcopy-mode-vi * { send -FX search-forward -- '#{copy_cursor_word}' }",
|
||||
"bind -Tcopy-mode-vi C-c { send -X cancel }",
|
||||
"bind -Tcopy-mode-vi C-d { send -X halfpage-down }",
|
||||
"bind -Tcopy-mode-vi C-e { send -X scroll-down }",
|
||||
@ -570,7 +570,7 @@ key_bindings_init(void)
|
||||
"bind -Tcopy-mode-vi Space { send -X begin-selection }",
|
||||
"bind -Tcopy-mode-vi '$' { send -X end-of-line }",
|
||||
"bind -Tcopy-mode-vi , { send -X jump-reverse }",
|
||||
"bind -Tcopy-mode-vi / { command-prompt -T search -p'(search down)' { send -X search-forward '%%' } }",
|
||||
"bind -Tcopy-mode-vi / { command-prompt -T search -p'(search down)' { send -X search-forward -- '%%' } }",
|
||||
"bind -Tcopy-mode-vi 0 { send -X start-of-line }",
|
||||
"bind -Tcopy-mode-vi 1 { command-prompt -Np'(repeat)' -I1 { send -N '%%' } }",
|
||||
"bind -Tcopy-mode-vi 2 { command-prompt -Np'(repeat)' -I2 { send -N '%%' } }",
|
||||
@ -581,14 +581,14 @@ key_bindings_init(void)
|
||||
"bind -Tcopy-mode-vi 7 { command-prompt -Np'(repeat)' -I7 { send -N '%%' } }",
|
||||
"bind -Tcopy-mode-vi 8 { command-prompt -Np'(repeat)' -I8 { send -N '%%' } }",
|
||||
"bind -Tcopy-mode-vi 9 { command-prompt -Np'(repeat)' -I9 { send -N '%%' } }",
|
||||
"bind -Tcopy-mode-vi : { command-prompt -p'(goto line)' { send -X goto-line '%%' } }",
|
||||
"bind -Tcopy-mode-vi : { command-prompt -p'(goto line)' { send -X goto-line -- '%%' } }",
|
||||
"bind -Tcopy-mode-vi \\; { send -X jump-again }",
|
||||
"bind -Tcopy-mode-vi ? { command-prompt -T search -p'(search up)' { send -X search-backward '%%' } }",
|
||||
"bind -Tcopy-mode-vi ? { command-prompt -T search -p'(search up)' { send -X search-backward -- '%%' } }",
|
||||
"bind -Tcopy-mode-vi A { send -X append-selection-and-cancel }",
|
||||
"bind -Tcopy-mode-vi B { send -X previous-space }",
|
||||
"bind -Tcopy-mode-vi D { send -X copy-pipe-end-of-line-and-cancel }",
|
||||
"bind -Tcopy-mode-vi E { send -X next-space-end }",
|
||||
"bind -Tcopy-mode-vi F { command-prompt -1p'(jump backward)' { send -X jump-backward '%%' } }",
|
||||
"bind -Tcopy-mode-vi F { command-prompt -1p'(jump backward)' { send -X jump-backward -- '%%' } }",
|
||||
"bind -Tcopy-mode-vi G { send -X history-bottom }",
|
||||
"bind -Tcopy-mode-vi H { send -X top-line }",
|
||||
"bind -Tcopy-mode-vi J { send -X scroll-down }",
|
||||
@ -597,14 +597,14 @@ key_bindings_init(void)
|
||||
"bind -Tcopy-mode-vi M { send -X middle-line }",
|
||||
"bind -Tcopy-mode-vi N { send -X search-reverse }",
|
||||
"bind -Tcopy-mode-vi P { send -X toggle-position }",
|
||||
"bind -Tcopy-mode-vi T { command-prompt -1p'(jump to backward)' { send -X jump-to-backward '%%' } }",
|
||||
"bind -Tcopy-mode-vi T { command-prompt -1p'(jump to backward)' { send -X jump-to-backward -- '%%' } }",
|
||||
"bind -Tcopy-mode-vi V { send -X select-line }",
|
||||
"bind -Tcopy-mode-vi W { send -X next-space }",
|
||||
"bind -Tcopy-mode-vi X { send -X set-mark }",
|
||||
"bind -Tcopy-mode-vi ^ { send -X back-to-indentation }",
|
||||
"bind -Tcopy-mode-vi b { send -X previous-word }",
|
||||
"bind -Tcopy-mode-vi e { send -X next-word-end }",
|
||||
"bind -Tcopy-mode-vi f { command-prompt -1p'(jump forward)' { send -X jump-forward '%%' } }",
|
||||
"bind -Tcopy-mode-vi f { command-prompt -1p'(jump forward)' { send -X jump-forward -- '%%' } }",
|
||||
"bind -Tcopy-mode-vi g { send -X history-top }",
|
||||
"bind -Tcopy-mode-vi h { send -X cursor-left }",
|
||||
"bind -Tcopy-mode-vi j { send -X cursor-down }",
|
||||
@ -615,7 +615,7 @@ key_bindings_init(void)
|
||||
"bind -Tcopy-mode-vi o { send -X other-end }",
|
||||
"bind -Tcopy-mode-vi q { send -X cancel }",
|
||||
"bind -Tcopy-mode-vi r { send -X refresh-from-pane }",
|
||||
"bind -Tcopy-mode-vi t { command-prompt -1p'(jump to forward)' { send -X jump-to-forward '%%' } }",
|
||||
"bind -Tcopy-mode-vi t { command-prompt -1p'(jump to forward)' { send -X jump-to-forward -- '%%' } }",
|
||||
"bind -Tcopy-mode-vi v { send -X rectangle-toggle }",
|
||||
"bind -Tcopy-mode-vi w { send -X next-word }",
|
||||
"bind -Tcopy-mode-vi '{' { send -X previous-paragraph }",
|
||||
|
24
tmux.1
24
tmux.1
@ -1801,6 +1801,7 @@ Exit copy mode.
|
||||
Clear the current selection.
|
||||
.It Xo
|
||||
.Ic copy-end-of-line
|
||||
.Op Fl CP
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
Copy from the cursor position to the end of the line.
|
||||
@ -1808,11 +1809,13 @@ Copy from the cursor position to the end of the line.
|
||||
is used to name the new paste buffer.
|
||||
.It Xo
|
||||
.Ic copy-end-of-line-and-cancel
|
||||
.Op Fl CP
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
Copy from the cursor position and exit copy mode.
|
||||
.It Xo
|
||||
.Ic copy-pipe-end-of-line
|
||||
.Op Fl CP
|
||||
.Op Ar command
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
@ -1822,6 +1825,7 @@ Copy from the cursor position to the end of the line and pipe the text to
|
||||
is used to name the new paste buffer.
|
||||
.It Xo
|
||||
.Ic copy-pipe-end-of-line-and-cancel
|
||||
.Op Fl CP
|
||||
.Op Ar command
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
@ -1830,16 +1834,19 @@ Same as
|
||||
but also exit copy mode.
|
||||
.It Xo
|
||||
.Ic copy-line
|
||||
.Op Fl CP
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
Copy the entire line.
|
||||
.It Xo
|
||||
.Ic copy-line-and-cancel
|
||||
.Op Fl CP
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
Copy the entire line and exit copy mode.
|
||||
.It Xo
|
||||
.Ic copy-pipe-line
|
||||
.Op Fl CP
|
||||
.Op Ar command
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
@ -1849,6 +1856,7 @@ Copy the entire line and pipe the text to
|
||||
is used to name the new paste buffer.
|
||||
.It Xo
|
||||
.Ic copy-pipe-line-and-cancel
|
||||
.Op Fl CP
|
||||
.Op Ar command
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
@ -1857,6 +1865,7 @@ Same as
|
||||
but also exit copy mode.
|
||||
.It Xo
|
||||
.Ic copy-pipe
|
||||
.Op Fl CP
|
||||
.Op Ar command
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
@ -1866,6 +1875,7 @@ Copy the selection, clear it and pipe its text to
|
||||
is used to name the new paste buffer.
|
||||
.It Xo
|
||||
.Ic copy-pipe-no-clear
|
||||
.Op Fl CP
|
||||
.Op Ar command
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
@ -1874,6 +1884,7 @@ Same as
|
||||
but do not clear the selection.
|
||||
.It Xo
|
||||
.Ic copy-pipe-and-cancel
|
||||
.Op Fl CP
|
||||
.Op Ar command
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
@ -1882,11 +1893,13 @@ Same as
|
||||
but also exit copy mode.
|
||||
.It Xo
|
||||
.Ic copy-selection
|
||||
.Op Fl CP
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
Copies the current selection.
|
||||
.It Xo
|
||||
.Ic copy-selection-no-clear
|
||||
.Op Fl CP
|
||||
.Op Ar prefix
|
||||
.Xc
|
||||
Same as
|
||||
@ -1894,6 +1907,7 @@ Same as
|
||||
but do not clear the selection.
|
||||
.It Xo
|
||||
.Ic copy-selection-and-cancel
|
||||
.Op Fl CP
|
||||
.Op Ar prefix
|
||||
(vi: Enter)
|
||||
(emacs: M-w)
|
||||
@ -2341,6 +2355,16 @@ variants of some commands exit copy mode after they have completed (for copy
|
||||
commands) or when the cursor reaches the bottom (for scrolling commands).
|
||||
.Ql -no-clear
|
||||
variants do not clear the selection.
|
||||
All the copy commands can take the
|
||||
.Fl C
|
||||
and
|
||||
.Fl P
|
||||
flags.
|
||||
The
|
||||
.Fl C
|
||||
flag suppresses setting the terminal clipboard when copying, while the
|
||||
.Fl P
|
||||
flag suppresses adding a paste buffer with the text.
|
||||
.Pp
|
||||
The next and previous word keys skip over whitespace and treat consecutive
|
||||
runs of either word separators or other letters as words.
|
||||
|
455
window-copy.c
455
window-copy.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user