"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Mark Jamsek <mark@jamsek.com>
Subject:
Re: tog: = and * keybindings for <home> and <end> respectively
To:
Mikhail <mp39590@gmail.com>, gameoftrees@openbsd.org
Date:
Sun, 8 Jan 2023 23:27:22 +1100

Download raw body.

Thread
On 23-01-08 12:22PM, Stefan Sperling wrote:
> On Sun, Jan 08, 2023 at 02:09:42PM +0300, Mikhail wrote:
> > On Sun, Jan 08, 2023 at 09:47:28AM +0100, Stefan Sperling wrote:
> > > On Sat, Jan 07, 2023 at 10:17:37PM +0300, Mikhail wrote:
> > > > While in tog I keep pressing those keys just like I'd do in mutt, since
> > > > 'tog log' view is more like mutt for me than like 'less'. Since we have
> > > > J and K for tog diff, which mimics mutt's next/prev email, maybe such
> > > > keybindings can be used too?
> > > 
> > > Mutt is using these keys for all "entry-based" menus.
> > > I would say if we add these keys then they should also work in all
> > > entry-based menus supported by tog, i.e. log, tree, and ref.
> > 
> > I agree, next version below, also added new entries for F1 menu and
> > split g/G from Home/End, since currently only g/G moves to selected
> > line, pressing 3Home or 3End jumps to first or end line unconditionally.
> 
> Indeed, the counter only works for g/G because get_compound_key()
> only sets the counter for those keys.
> 
> I think this can be committed. But I will wait for others to voice
> their opinions, just in case.
> 

I think this is ok.

Part of me was a bit conflicted about splitting g/home G/end in tog's
runtime help, but it's certainly correct. It felt a bit like stating the
obvious at the expense of complicating a reference text but we couldn't
blame someone for wondering why N Home/End doesn't go to line N when the
runtime help says as much!

I also think only g/G should accept count modifiers. N home/end doesn't
make sense to me, so Mikhail's proposed separation is the right way to
go.

We should, however, do the same in tog(1) because I think that should be
the most comprehensive documentation, where tog H is only a reference.
The below diff expands on Mikhail's by continuing the g/G home/end
separation in tog.1:

-----------------------------------------------
commit 51c92c51612632debff47151de8fd0b3eff7f243 (main)
from: Mark Jamsek <mark@jamsek.dev>
date: Sun Jan  8 12:15:35 2023 UTC
 
 tog: add mutt-like =/* keymaps as home/end aliases
 
 Also, separate g/G from home/end in the manual and runtime help text as only
 the former accepts a prefixed count modifier. Based on diff from Mikhail.
 
 M  tog/tog.1  |  40+  10-
 M  tog/tog.c  |  10+   2-

2 files changed, 50 insertions(+), 12 deletions(-)

diff dae92a245f6e4d18c4c75048d6ca667d78083cc4 51c92c51612632debff47151de8fd0b3eff7f243
commit - dae92a245f6e4d18c4c75048d6ca667d78083cc4
commit + 51c92c51612632debff47151de8fd0b3eff7f243
blob - 03eeb1401485cf8cdcd6d8b24b43fdf4f2e44907
blob + 0c91ce65953bf0d1b411b12edff380e5ef1d057e
--- tog/tog.1
+++ tog/tog.1
@@ -165,9 +165,9 @@ Move the selection cursor up N half pages (default: 1)
 Move the selection cursor down N half pages (default: 1).
 .It Cm Ctrl+u, u
 Move the selection cursor up N half pages (default: 1).
-.It Cm Home, g
+.It Cm Home, =
 Move the cursor to the newest commit.
-.It Cm End, G
+.It Cm End, *
 Move the cursor to the oldest commit.
 This will traverse all commits on the current branch which may take
 a long time depending on the number of commits in branch history.
@@ -175,6 +175,12 @@ or
 .Cm C-g
 or
 .Cm Backspace .
+.It Cm g
+Move the cursor to commit N (default: 1).
+.It Cm G
+Like
+.Cm g
+but defaults to the oldest commit.
 .It Cm Enter
 Open a
 .Cm diff
@@ -327,10 +333,16 @@ Scroll up N half pages (default: 1).
 Scroll down N half pages (default: 1).
 .It Cm Ctrl+u, u
 Scroll up N half pages (default: 1).
-.It Cm Home, g
+.It Cm Home
 Scroll to the top of the view.
-.It Cm End, G
+.It Cm End
 Scroll to the bottom of the view.
+.It Cm g
+Scroll to line N (default: 1).
+.It Cm G
+Like
+.Cm g
+but defaults to the last line in the diff.
 .It Cm \&(
 Navigate to the Nth previous file in the diff (default: 1).
 .It Cm \&)
@@ -438,10 +450,16 @@ Move the selection cursor up N half pages (default: 1)
 Move the selection cursor down N half pages (default: 1).
 .It Cm Ctrl+u, u
 Move the selection cursor up N half pages (default: 1).
-.It Cm Home, g
+.It Cm Home
 Move the selection cursor to the first line of the file.
-.It Cm End, G
+.It Cm End
 Move the selection cursor to the last line of the file.
+.It Cm g
+Move the selection cursor to line N (default: 1).
+.It Cm G
+Like
+.Cm g
+but defaults to the last line in the file.
 .It Cm Enter
 Open a
 .Cm diff
@@ -538,10 +556,16 @@ Move the selection cursor up N half pages (default: 1)
 Move the selection cursor down N half pages (default: 1).
 .It Cm Ctrl+u, u
 Move the selection cursor up N half pages (default: 1).
-.It Cm Home, g
+.It Cm Home, =
 Move the selection cursor to the first entry.
-.It Cm End, G
+.It Cm End, *
 Move the selection cursor to the last entry.
+.It Cm g
+Move the selection cursor to entry N (default: 1).
+.It Cm G
+Like
+.Cm g
+but defaults to the last entry.
 .It Cm Enter
 Enter the currently selected directory, or switch to the
 .Cm blame
@@ -614,10 +638,16 @@ Move the selection cursor up N half pages (default: 1)
 Move the selection cursor down N half pages (default: 1).
 .It Cm Ctrl+u, u
 Move the selection cursor up N half pages (default: 1).
-.It Cm Home, g
+.It Cm Home, =
 Move the selection cursor to the first reference.
-.It Cm End, G
+.It Cm End, *
 Move the selection cursor to the last reference.
+.It Cm g
+Move the selection cursor to reference N (default: 1).
+.It Cm G
+Like
+.Cm g
+but defaults to the last reference.
 .It Cm Enter
 Open a
 .Cm log
blob - 7a91723cf327c438d7801b8d486b165bd84ba1ea
blob + d3d296f8b7c8ece84d0d00349fe8949bb2ca9eeb
--- tog/tog.c
+++ tog/tog.c
@@ -533,8 +533,10 @@ struct tog_help_view_state {
 	KEY_("C-f f PgDn Space", "Scroll the view down one page"), \
 	KEY_("C-u u", "Scroll the view up one half page"), \
 	KEY_("C-d d", "Scroll the view down one half page"), \
-	KEY_("g Home", "Go to line N (default: first line)"), \
-	KEY_("G End", "Go to line N (default: last line)"), \
+	KEY_("g", "Go to line N (default: first line)"), \
+	KEY_("Home =", "Go to the first line"), \
+	KEY_("G", "Go to line N (default: last line)"), \
+	KEY_("End *", "Go to the last line"), \
 	KEY_("l Right", "Scroll the view right"), \
 	KEY_("h Left", "Scroll the view left"), \
 	KEY_("$", "Scroll view to the rightmost position"), \
@@ -3693,6 +3695,7 @@ input_log_view(struct tog_view **new_view, struct tog_
 		log_move_cursor_up(view, 0, 0);
 		break;
 	case 'g':
+	case '=':
 	case KEY_HOME:
 		log_move_cursor_up(view, 0, 1);
 		view->count = 0;
@@ -3717,6 +3720,7 @@ input_log_view(struct tog_view **new_view, struct tog_
 		s->use_committer = !s->use_committer;
 		break;
 	case 'G':
+	case '*':
 	case KEY_END: {
 		/* We don't know yet how many commits, so we're forced to
 		 * traverse them all. */
@@ -7350,6 +7354,7 @@ input_tree_view(struct tog_view **new_view, struct tog
 		err = view_request_new(new_view, view, TOG_VIEW_REF);
 		break;
 	case 'g':
+	case '=':
 	case KEY_HOME:
 		s->selected = 0;
 		view->count = 0;
@@ -7360,6 +7365,7 @@ input_tree_view(struct tog_view **new_view, struct tog
 			s->first_displayed_entry = NULL;
 		break;
 	case 'G':
+	case '*':
 	case KEY_END: {
 		int eos = view->nlines - 3;
 
@@ -8270,12 +8276,14 @@ input_ref_view(struct tog_view **new_view, struct tog_
 		err = view_request_new(new_view, view, TOG_VIEW_TREE);
 		break;
 	case 'g':
+	case '=':
 	case KEY_HOME:
 		s->selected = 0;
 		view->count = 0;
 		s->first_displayed_entry = TAILQ_FIRST(&s->refs);
 		break;
 	case 'G':
+	case '*':
 	case KEY_END: {
 		int eos = view->nlines - 1;
 

-- 
Mark Jamsek <fnc.bsdbox.org>
GPG: F2FF 13DE 6A06 C471 CA80  E6E2 2930 DC66 86EE CF68