aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mode-key.c5
-rw-r--r--tmux.12
-rw-r--r--tmux.h3
-rw-r--r--window-copy.c20
4 files changed, 29 insertions, 1 deletions
diff --git a/mode-key.c b/mode-key.c
index 823c4429..7c8cb37f 100644
--- a/mode-key.c
+++ b/mode-key.c
@@ -82,6 +82,8 @@ const struct mode_key_cmdstr mode_key_cmdstr_copy[] = {
{ MODEKEYCOPY_BOTTOMLINE, "bottom-line" },
{ MODEKEYCOPY_CANCEL, "cancel" },
{ MODEKEYCOPY_CLEARSELECTION, "clear-selection" },
+ { MODEKEYCOPY_COPYLINE, "copy-line" },
+ { MODEKEYCOPY_COPYENDOFLINE, "copy-end-of-line" },
{ MODEKEYCOPY_COPYSELECTION, "copy-selection" },
{ MODEKEYCOPY_DOWN, "cursor-down" },
{ MODEKEYCOPY_ENDOFLINE, "end-of-line" },
@@ -110,6 +112,7 @@ const struct mode_key_cmdstr mode_key_cmdstr_copy[] = {
{ MODEKEYCOPY_SEARCHDOWN, "search-forward" },
{ MODEKEYCOPY_SEARCHREVERSE, "search-reverse" },
{ MODEKEYCOPY_SEARCHUP, "search-backward" },
+ { MODEKEYCOPY_SELECTLINE, "select-line" },
{ MODEKEYCOPY_STARTNUMBERPREFIX, "start-number-prefix" },
{ MODEKEYCOPY_STARTOFLINE, "start-of-line" },
{ MODEKEYCOPY_STARTSELECTION, "begin-selection" },
@@ -198,6 +201,7 @@ const struct mode_key_entry mode_key_vi_copy[] = {
{ ':', 0, MODEKEYCOPY_GOTOLINE },
{ '?', 0, MODEKEYCOPY_SEARCHUP },
{ 'B', 0, MODEKEYCOPY_PREVIOUSSPACE },
+ { 'D', 0, MODEKEYCOPY_COPYENDOFLINE },
{ 'E', 0, MODEKEYCOPY_NEXTSPACEEND },
{ 'F', 0, MODEKEYCOPY_JUMPBACK },
{ 'G', 0, MODEKEYCOPY_HISTORYBOTTOM },
@@ -323,6 +327,7 @@ const struct mode_key_entry mode_key_emacs_copy[] = {
{ '\005' /* C-e */, 0, MODEKEYCOPY_ENDOFLINE },
{ '\006' /* C-f */, 0, MODEKEYCOPY_RIGHT },
{ '\007' /* C-g */, 0, MODEKEYCOPY_CLEARSELECTION },
+ { '\013' /* C-k */, 0, MODEKEYCOPY_COPYENDOFLINE },
{ '\016' /* C-n */, 0, MODEKEYCOPY_DOWN },
{ '\020' /* C-p */, 0, MODEKEYCOPY_UP },
{ '\022' /* C-r */, 0, MODEKEYCOPY_SEARCHUP },
diff --git a/tmux.1 b/tmux.1
index 7e7ec28e..4b0083a0 100644
--- a/tmux.1
+++ b/tmux.1
@@ -766,7 +766,7 @@ The following keys are supported as appropriate for the mode:
.It Li "Cursor to top line" Ta "H" Ta "M-R"
.It Li "Cursor up" Ta "k" Ta "Up"
.It Li "Delete entire line" Ta "d" Ta "C-u"
-.It Li "Delete to end of line" Ta "D" Ta "C-k"
+.It Li "Delete/Copy to end of line" Ta "D" Ta "C-k"
.It Li "End of line" Ta "$" Ta "C-e"
.It Li "Go to line" Ta ":" Ta "g"
.It Li "Half page down" Ta "C-d" Ta "M-Down"
diff --git a/tmux.h b/tmux.h
index cc398b45..c7875df7 100644
--- a/tmux.h
+++ b/tmux.h
@@ -461,6 +461,8 @@ enum mode_key_cmd {
MODEKEYCOPY_BOTTOMLINE,
MODEKEYCOPY_CANCEL,
MODEKEYCOPY_CLEARSELECTION,
+ MODEKEYCOPY_COPYLINE,
+ MODEKEYCOPY_COPYENDOFLINE,
MODEKEYCOPY_COPYSELECTION,
MODEKEYCOPY_DOWN,
MODEKEYCOPY_ENDOFLINE,
@@ -491,6 +493,7 @@ enum mode_key_cmd {
MODEKEYCOPY_SEARCHDOWN,
MODEKEYCOPY_SEARCHREVERSE,
MODEKEYCOPY_SEARCHUP,
+ MODEKEYCOPY_SELECTLINE,
MODEKEYCOPY_STARTNUMBERPREFIX,
MODEKEYCOPY_STARTOFLINE,
MODEKEYCOPY_STARTSELECTION,
diff --git a/window-copy.c b/window-copy.c
index de0346d0..4ee3c3e3 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -500,6 +500,26 @@ window_copy_key(struct window_pane *wp, struct session *sess, int key)
window_copy_start_selection(wp);
window_copy_redraw_screen(wp);
break;
+ case MODEKEYCOPY_COPYLINE:
+ case MODEKEYCOPY_SELECTLINE:
+ window_copy_cursor_start_of_line(wp);
+ /* FALLTHROUGH */
+ case MODEKEYCOPY_COPYENDOFLINE:
+ window_copy_start_selection(wp);
+ for (; np > 1; np--)
+ window_copy_cursor_down(wp, 0);
+ window_copy_cursor_end_of_line(wp);
+ window_copy_redraw_screen(wp);
+
+ /* If a copy command then copy the selection and exit. */
+ if (sess != NULL &&
+ (cmd == MODEKEYCOPY_COPYLINE ||
+ cmd == MODEKEYCOPY_COPYENDOFLINE)) {
+ window_copy_copy_selection(wp);
+ window_pane_reset_mode(wp);
+ return;
+ }
+ break;
case MODEKEYCOPY_CLEARSELECTION:
window_copy_clear_selection(wp);
window_copy_redraw_screen(wp);