summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2019-10-23 07:42:05 +0000
committernicm <nicm@openbsd.org>2019-10-23 07:42:05 +0000
commitcdce1aab05c68df94008a444b6bdb20e45057286 (patch)
tree379ad4fcaead583c702610eefbfabd171d15b886
parentRewrite the time validity check for mfts. Using ASN1_GENERALIZEDTIME_print (diff)
downloadwireguard-openbsd-cdce1aab05c68df94008a444b6bdb20e45057286.tar.xz
wireguard-openbsd-cdce1aab05c68df94008a444b6bdb20e45057286.zip
Use the existing code in format.c to add foramts for word and line at
cursor position in copy mode, from Anindya Mukherjee.
-rw-r--r--usr.bin/tmux/format.c77
-rw-r--r--usr.bin/tmux/tmux.16
-rw-r--r--usr.bin/tmux/tmux.h4
-rw-r--r--usr.bin/tmux/window-copy.c15
4 files changed, 72 insertions, 30 deletions
diff --git a/usr.bin/tmux/format.c b/usr.bin/tmux/format.c
index b54e2e5ee0d..fd73fe0d632 100644
--- a/usr.bin/tmux/format.c
+++ b/usr.bin/tmux/format.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: format.c,v 1.212 2019/10/14 09:24:06 nicm Exp $ */
+/* $OpenBSD: format.c,v 1.213 2019/10/23 07:42:05 nicm Exp $ */
/*
* Copyright (c) 2011 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -703,30 +703,19 @@ format_cb_cursor_character(struct format_tree *ft, struct format_entry *fe)
xasprintf(&fe->value, "%.*s", (int)gc.data.size, gc.data.data);
}
-/* Callback for mouse_word. */
-static void
-format_cb_mouse_word(struct format_tree *ft, struct format_entry *fe)
+/* Return word at given coordinates. Caller frees. */
+char *
+format_grid_word(struct grid *gd, u_int x, u_int y)
{
- struct window_pane *wp;
- u_int x, y, end;
- struct grid *gd;
struct grid_line *gl;
struct grid_cell gc;
const char *ws;
struct utf8_data *ud = NULL;
+ u_int end;
size_t size = 0;
int found = 0;
+ char *s = NULL;
- if (!ft->m.valid)
- return;
- wp = cmd_mouse_pane(&ft->m, NULL, NULL);
- if (wp == NULL)
- return;
- if (!TAILQ_EMPTY (&wp->modes))
- return;
- if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0)
- return;
- gd = wp->base.grid;
ws = options_get_string(global_s_options, "word-separators");
y = gd->hsize + y;
@@ -779,21 +768,19 @@ format_cb_mouse_word(struct format_tree *ft, struct format_entry *fe)
}
if (size != 0) {
ud[size].size = 0;
- fe->value = utf8_tocstr(ud);
+ s = utf8_tocstr(ud);
free(ud);
}
+ return (s);
}
-/* Callback for mouse_line. */
+/* Callback for mouse_word. */
static void
-format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe)
+format_cb_mouse_word(struct format_tree *ft, struct format_entry *fe)
{
struct window_pane *wp;
u_int x, y;
- struct grid *gd;
- struct grid_cell gc;
- struct utf8_data *ud = NULL;
- size_t size = 0;
+ char *s;
if (!ft->m.valid)
return;
@@ -804,7 +791,21 @@ format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe)
return;
if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0)
return;
- gd = wp->base.grid;
+
+ s = format_grid_word(wp->base.grid, x, y);
+ if (s != NULL)
+ fe->value = s;
+}
+
+/* Return line at given coordinates. Caller frees. */
+char *
+format_grid_line(struct grid *gd, u_int y)
+{
+ struct grid_cell gc;
+ struct utf8_data *ud = NULL;
+ u_int x;
+ size_t size = 0;
+ char *s = NULL;
y = gd->hsize + y;
for (x = 0; x < grid_line_length(gd, y); x++) {
@@ -817,9 +818,33 @@ format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe)
}
if (size != 0) {
ud[size].size = 0;
- fe->value = utf8_tocstr(ud);
+ s = utf8_tocstr(ud);
free(ud);
}
+ return (s);
+}
+
+/* Callback for mouse_line. */
+static void
+format_cb_mouse_line(struct format_tree *ft, struct format_entry *fe)
+{
+ struct window_pane *wp;
+ u_int x, y;
+ char *s;
+
+ if (!ft->m.valid)
+ return;
+ wp = cmd_mouse_pane(&ft->m, NULL, NULL);
+ if (wp == NULL)
+ return;
+ if (!TAILQ_EMPTY (&wp->modes))
+ return;
+ if (cmd_mouse_at(wp, &ft->m, &x, &y, 0) != 0)
+ return;
+
+ s = format_grid_line(wp->base.grid, y);
+ if (s != NULL)
+ fe->value = s;
}
/* Merge a format tree. */
diff --git a/usr.bin/tmux/tmux.1 b/usr.bin/tmux/tmux.1
index 1e9163000aa..1bd3fb8cf7a 100644
--- a/usr.bin/tmux/tmux.1
+++ b/usr.bin/tmux/tmux.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: tmux.1,v 1.691 2019/10/19 19:20:14 nicm Exp $
+.\" $OpenBSD: tmux.1,v 1.692 2019/10/23 07:42:05 nicm Exp $
.\"
.\" Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
.\"
@@ -14,7 +14,7 @@
.\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
.\" OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: October 19 2019 $
+.Dd $Mdocdate: October 23 2019 $
.Dt TMUX 1
.Os
.Sh NAME
@@ -4214,6 +4214,8 @@ The following variables are available, where appropriate:
.It Li "command_list_alias" Ta "" Ta "Command alias if listing commands"
.It Li "command_list_name" Ta "" Ta "Command name if listing commands"
.It Li "command_list_usage" Ta "" Ta "Command usage if listing commands"
+.It Li "copy_cursor_line" Ta "" Ta "Line the cursor is on in copy mode"
+.It Li "copy_cursor_word" Ta "" Ta "Word under cursor in copy mode"
.It Li "copy_cursor_x" Ta "" Ta "Cursor X position in copy mode"
.It Li "copy_cursor_y" Ta "" Ta "Cursor Y position in copy mode"
.It Li "cursor_character" Ta "" Ta "Character at cursor in pane"
diff --git a/usr.bin/tmux/tmux.h b/usr.bin/tmux/tmux.h
index 5907b5e133b..93a144b8a56 100644
--- a/usr.bin/tmux/tmux.h
+++ b/usr.bin/tmux/tmux.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: tmux.h,v 1.929 2019/09/23 15:41:11 nicm Exp $ */
+/* $OpenBSD: tmux.h,v 1.930 2019/10/23 07:42:05 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -1787,6 +1787,8 @@ void format_defaults_pane(struct format_tree *,
void format_defaults_paste_buffer(struct format_tree *,
struct paste_buffer *);
void format_lost_client(struct client *);
+char *format_grid_word(struct grid *, u_int, u_int);
+char *format_grid_line(struct grid *, u_int);
/* format-draw.c */
void format_draw(struct screen_write_ctx *,
diff --git a/usr.bin/tmux/window-copy.c b/usr.bin/tmux/window-copy.c
index 16314f1f05e..36a8575715c 100644
--- a/usr.bin/tmux/window-copy.c
+++ b/usr.bin/tmux/window-copy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: window-copy.c,v 1.236 2019/10/19 19:20:14 nicm Exp $ */
+/* $OpenBSD: window-copy.c,v 1.237 2019/10/23 07:42:05 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -564,6 +564,7 @@ static void
window_copy_formats(struct window_mode_entry *wme, struct format_tree *ft)
{
struct window_copy_mode_data *data = wme->data;
+ char *s;
format_add(ft, "scroll_position", "%d", data->oy);
format_add(ft, "rectangle_toggle", "%d", data->rectflag);
@@ -578,6 +579,18 @@ window_copy_formats(struct window_mode_entry *wme, struct format_tree *ft)
format_add(ft, "selection_end_x", "%d", data->endselx);
format_add(ft, "selection_end_y", "%d", data->endsely);
}
+
+ s = format_grid_word(data->screen.grid, data->cx, data->cy);
+ if (s != NULL) {
+ format_add(ft, "copy_cursor_word", "%s", s);
+ free(s);
+ }
+
+ s = format_grid_line(data->screen.grid, data->cy);
+ if (s != NULL) {
+ format_add(ft, "copy_cursor_line", "%s", s);
+ free(s);
+ }
}
static void