Applied thanks
On Sun, Aug 10, 2014 at 09:49:14AM +0100, Balazs Kezes wrote: > On 2014-06-07 15:16 +0100, Balazs Kezes wrote: > > OK, I've attached a patch which fixes the behavior for the vi mode and > > also fixes the left key bug for the emacs mode. Please test both > > modes! > > Hi Nicholas! > > I believe you missed this patch, can you reconsider? > > Thanks! > > -- > Balazs > From 49b46f56046bf562e7de084fd6f580e4841e0fa1 Mon Sep 17 00:00:00 2001 > From: Balazs Kezes <rlblas...@gmail.com> > Date: Sat, 7 Jun 2014 15:05:38 +0100 > Subject: [PATCH] Fix the selection behavior bugs > > The two bugs: > 1. In vi mode the selection doesn't include the last character if you moved > the > cursor up or left. > 2. In emacs mode the selection includes the last character if you moved the > cursor to the left. > --- > screen.c | 23 ++++++++++++++++++----- > tmux.h | 1 + > window-copy.c | 1 + > 3 files changed, 20 insertions(+), 5 deletions(-) > > diff --git a/screen.c b/screen.c > index 7bfc015..d97e31b 100644 > --- a/screen.c > +++ b/screen.c > @@ -277,6 +277,7 @@ int > screen_check_selection(struct screen *s, u_int px, u_int py) > { > struct screen_sel *sel = &s->sel; > + u_int xx; > > if (!sel->flag) > return (0); > @@ -326,16 +327,24 @@ screen_check_selection(struct screen *s, u_int px, > u_int py) > if (py < sel->sy || py > sel->ey) > return (0); > > - if ((py == sel->sy && px < sel->sx) > - || (py == sel->ey && px > sel->ex)) > + if (py == sel->sy && px < sel->sx) > + return 0; > + > + if (py == sel->ey && px > sel->ex) > return (0); > } else if (sel->sy > sel->ey) { > /* starting line > ending line -- upward selection. */ > if (py > sel->sy || py < sel->ey) > return (0); > > - if ((py == sel->sy && px >= sel->sx) > - || (py == sel->ey && px < sel->ex)) > + if (py == sel->ey && px < sel->ex) > + return (0); > + > + if (sel->mode_keys == MODEKEY_EMACS) > + xx = sel->sx-1; > + else > + xx = sel->sx; > + if (py == sel->sy && px > xx) > return (0); > } else { > /* starting line == ending line. */ > @@ -344,7 +353,11 @@ screen_check_selection(struct screen *s, u_int px, u_int > py) > > if (sel->ex < sel->sx) { > /* cursor (ex) is on the left */ > - if (px > sel->sx || px < sel->ex) > + if (sel->mode_keys == MODEKEY_EMACS) > + xx = sel->sx-1; > + else > + xx = sel->sx; > + if (px > xx || px < sel->ex) > return (0); > } else { > /* selection start (sx) is on the left */ > diff --git a/tmux.h b/tmux.h > index 1f80f41..27db059 100644 > --- a/tmux.h > +++ b/tmux.h > @@ -756,6 +756,7 @@ LIST_HEAD(joblist, job); > struct screen_sel { > int flag; > int rectflag; > + int mode_keys; /* vim or emacs mode? */ > > u_int sx; > u_int sy; > diff --git a/window-copy.c b/window-copy.c > index ac29e6d..79bfe7d 100644 > --- a/window-copy.c > +++ b/window-copy.c > @@ -195,6 +195,7 @@ window_copy_init(struct window_pane *wp) > s->mode |= MODE_MOUSE_STANDARD; > > keys = options_get_number(&wp->window->options, "mode-keys"); > + s->sel.mode_keys = keys; > if (keys == MODEKEY_EMACS) > mode_key_init(&data->mdata, &mode_key_tree_emacs_copy); > else > -- > 2.0.0.526.g5318336 > ------------------------------------------------------------------------------ _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users