From 2e3bd5e23c68280ec95498a4afe176b5f94964e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 9 Sep 2020 19:40:48 +0200 Subject: [PATCH 1/2] config: add scrollback-{up,down}-half key bindings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These new bindings scroll up/down half a page in the scrollback (instead of the full page scrolled by ‘scrollback-{up,down}’). Closes #128. --- CHANGELOG.md | 3 +++ config.c | 2 ++ doc/foot.ini.5.scd | 13 +++++++++++-- foot.ini | 2 ++ input.c | 8 ++++++++ wayland.h | 2 ++ 6 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73028676..6701bc2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,9 @@ `-W,--window-size-chars` command line option to `foot`. This option configures the initial window size in **characters**, and is an alternative to **initial-window-size-pixels**. +* **scrollback-up-half** and **scrollback-down-half** key + bindings. They scroll up/down half of a page in the scrollback + (https://codeberg.org/dnkl/foot/issues/128). ### Removed diff --git a/config.c b/config.c index 164431c6..d654eeb9 100644 --- a/config.c +++ b/config.c @@ -56,7 +56,9 @@ static const uint32_t default_bright[] = { static const char *const binding_action_map[] = { [BIND_ACTION_NONE] = NULL, [BIND_ACTION_SCROLLBACK_UP] = "scrollback-up", + [BIND_ACTION_SCROLLBACK_UP_HALF] = "scrollback-up-half", [BIND_ACTION_SCROLLBACK_DOWN] = "scrollback-down", + [BIND_ACTION_SCROLLBACK_DOWN_HALF] = "scrollback-down-half", [BIND_ACTION_CLIPBOARD_COPY] = "clipboard-copy", [BIND_ACTION_CLIPBOARD_PASTE] = "clipboard-paste", [BIND_ACTION_PRIMARY_PASTE] = "primary-paste", diff --git a/doc/foot.ini.5.scd b/doc/foot.ini.5.scd index 25a40e45..b1c0f45f 100644 --- a/doc/foot.ini.5.scd +++ b/doc/foot.ini.5.scd @@ -239,10 +239,19 @@ default binding. This can be done by setting _action=none_; e.g. *search-start=none*. *scrollback-up* - Scrolls up/back in history. Default: _Shift+Page\_Up_. + Scrolls up/back one page in history. Default: _Shift+Page\_Up_. + +*scrollback-up-half* + Scrolls up/back half of a page in history. Default: + _Shift+Page\_Up_. *scrollback-down* - Scroll down/forward in history. Default: _Shift+Page\_Down_. + Scroll down/forward one page in history. Default: + _Shift+Page\_Down_. + +*scrollback-down-half* + Scroll down/forward half of a page in history. Default: + _Shift+Page\_Down_. *clipboard-copy* Copies the current selection into the _clipboard_. Default: _Control+Shift+C_. diff --git a/foot.ini b/foot.ini index 59806254..7bb082fd 100644 --- a/foot.ini +++ b/foot.ini @@ -58,7 +58,9 @@ [key-bindings] # scrollback-up=Shift+Page_Up +# scrollback-up-half=none # scrollback-down=Shift+Page_Down +# scrollback-down-half=none # clipboard-copy=Control+Shift+C # clipboard-paste=Control+Shift+V # search-start=Control+Shift+R diff --git a/input.c b/input.c index dd9d604e..f24ec128 100644 --- a/input.c +++ b/input.c @@ -91,10 +91,18 @@ execute_binding(struct seat *seat, struct terminal *term, cmd_scrollback_up(term, term->rows); return true; + case BIND_ACTION_SCROLLBACK_UP_HALF: + cmd_scrollback_up(term, max(term->rows / 2, 1)); + return true; + case BIND_ACTION_SCROLLBACK_DOWN: cmd_scrollback_down(term, term->rows); return true; + case BIND_ACTION_SCROLLBACK_DOWN_HALF: + cmd_scrollback_down(term, max(term->rows / 2, 1)); + return true; + case BIND_ACTION_CLIPBOARD_COPY: selection_to_clipboard(seat, term, serial); return true; diff --git a/wayland.h b/wayland.h index e12d816a..24b8c7b0 100644 --- a/wayland.h +++ b/wayland.h @@ -27,7 +27,9 @@ typedef tll(struct key_binding) key_binding_list_t; enum bind_action_normal { BIND_ACTION_NONE, BIND_ACTION_SCROLLBACK_UP, + BIND_ACTION_SCROLLBACK_UP_HALF, BIND_ACTION_SCROLLBACK_DOWN, + BIND_ACTION_SCROLLBACK_DOWN_HALF, BIND_ACTION_CLIPBOARD_COPY, BIND_ACTION_CLIPBOARD_PASTE, BIND_ACTION_PRIMARY_PASTE, From 4d13429235e00290230dd7d070156c610a9502cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 10 Sep 2020 18:17:47 +0200 Subject: [PATCH 2/2] key-binding: deprecate scrollback-up/down, add scrollback-up/down-line This deprecates/renames scrollback-up/down to scrollback-up/down-page. It also renames scrollback-up/down-half to scrollback-up/down-half-page, and adds the new bindings scrollback-up/down-line. --- CHANGELOG.md | 11 +++++++-- config.c | 56 ++++++++++++++++++++++++++++++++++++++++++---- doc/foot.ini.5.scd | 20 ++++++++++------- foot.ini | 10 +++++---- input.c | 14 ++++++++++-- wayland.h | 12 ++++++---- 6 files changed, 99 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6701bc2e..aebffc9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,11 @@ * `$XDG_CONFIG_HOME/footrc`/`~/.config/footrc`. Use `$XDG_CONFIG_HOME/foot/foot.ini`/`~/.config/foot/foot.ini` instead. -* **scrollback** option in `foot.ini`. Use **scrollback.lines** instead. +* **scrollback** option in `foot.ini`. Use **scrollback.lines** + instead. +* **scrollback-up** key binding. Use **scrollback-up-page** instead. +* **scrollback-down** key binding. Use **scrollback-down-page** + instead. ### Added @@ -64,9 +68,11 @@ `-W,--window-size-chars` command line option to `foot`. This option configures the initial window size in **characters**, and is an alternative to **initial-window-size-pixels**. -* **scrollback-up-half** and **scrollback-down-half** key +* **scrollback-up-half-page** and **scrollback-down-half-page** key bindings. They scroll up/down half of a page in the scrollback (https://codeberg.org/dnkl/foot/issues/128). +* **scrollback-up-line** and **scrollback-down-line** key + bindings. They scroll up/down a single line in the scrollback. ### Removed @@ -84,6 +90,7 @@ `$XDG_CONFIG_HOME/foot/foot.ini` or in `$XDG_CONFIG_HOME/footrc`. * Minimum window size changed from four rows and 20 columns, to 1 row and 2 columns. +* **scrollback-up/down** renamed to **scrollback-up/down-page**. ### Fixed diff --git a/config.c b/config.c index d654eeb9..dc4d2873 100644 --- a/config.c +++ b/config.c @@ -56,9 +56,13 @@ static const uint32_t default_bright[] = { static const char *const binding_action_map[] = { [BIND_ACTION_NONE] = NULL, [BIND_ACTION_SCROLLBACK_UP] = "scrollback-up", - [BIND_ACTION_SCROLLBACK_UP_HALF] = "scrollback-up-half", + [BIND_ACTION_SCROLLBACK_UP_PAGE] = "scrollback-up-page", + [BIND_ACTION_SCROLLBACK_UP_HALF_PAGE] = "scrollback-up-half-page", + [BIND_ACTION_SCROLLBACK_UP_LINE] = "scrollback-up-line", [BIND_ACTION_SCROLLBACK_DOWN] = "scrollback-down", - [BIND_ACTION_SCROLLBACK_DOWN_HALF] = "scrollback-down-half", + [BIND_ACTION_SCROLLBACK_DOWN_PAGE] = "scrollback-down-page", + [BIND_ACTION_SCROLLBACK_DOWN_HALF_PAGE] = "scrollback-down-half-page", + [BIND_ACTION_SCROLLBACK_DOWN_LINE] = "scrollback-down-line", [BIND_ACTION_CLIPBOARD_COPY] = "clipboard-copy", [BIND_ACTION_CLIPBOARD_PASTE] = "clipboard-paste", [BIND_ACTION_PRIMARY_PASTE] = "primary-paste", @@ -458,7 +462,7 @@ parse_section_main(const char *key, const char *value, struct config *conf, strcmp(key, "geometry") == 0 /* deprecated */) { if (strcmp(key, "geometry") == 0) { - LOG_WARN("deprecated: [default]: geometry: use 'initial-window-size-pixels' instead'"); + LOG_WARN("deprecated: %s:%d: [default]: geometry: use 'initial-window-size-pixels' instead'", path, lineno); const char *fmt = "%s:%d: \033[1mgeometry\033[21m, use \033[1minitial-window-size-pixels\033[21m instead"; char *text = xasprintf(fmt, path, lineno); @@ -553,7 +557,7 @@ parse_section_main(const char *key, const char *value, struct config *conf, } else if (strcmp(key, "scrollback") == 0) { - LOG_WARN("deprecated: [default]: scrollback: use 'scrollback.lines' instead'"); + LOG_WARN("deprecated: %s:%d: [default]: scrollback: use 'scrollback.lines' instead'", path, lineno); const char *fmt = "%s:%d: \033[1mdefault.scrollback\033[21m, use \033[1mscrollback.lines\033[21m instead"; char *text = xasprintf(fmt, path, lineno); @@ -1034,6 +1038,44 @@ argv_compare(char *const *argv1, char *const *argv2) return 1; } +static void +maybe_deprecated_key_binding(struct config *conf, + const char *section, + enum bind_action_normal action, + const char *path, unsigned lineno) +{ + enum bind_action_normal replacement = BIND_ACTION_NONE; + + switch (action) { + case BIND_ACTION_SCROLLBACK_UP: + replacement = BIND_ACTION_SCROLLBACK_UP_PAGE; + break; + + case BIND_ACTION_SCROLLBACK_DOWN: + replacement = BIND_ACTION_SCROLLBACK_DOWN_PAGE; + break; + + default: + return; + } + + LOG_WARN("deprecated: %s:%d: [%s]: key binding %s, use %s instead", + path, lineno, section, + binding_action_map[action], binding_action_map[replacement]); + + const char *fmt = "%s:%d: [%s]: \033[1m%s\033[21m, use \033[1m%s\033[21m instead"; + char *text = xasprintf( + fmt, path, lineno, section, + binding_action_map[action], binding_action_map[replacement]); + + struct user_notification deprecation = { + .kind = USER_NOTIFICATION_DEPRECATED, + .text = text, + }; + tll_push_back(conf->notifications, deprecation); + +} + static bool parse_section_key_bindings( const char *key, const char *value, struct config *conf, @@ -1074,6 +1116,9 @@ parse_section_key_bindings( if (strcmp(key, binding_action_map[action]) != 0) continue; + maybe_deprecated_key_binding( + conf, "key-bindings", action, path, lineno); + /* Unset binding */ if (strcasecmp(value, "none") == 0) { tll_foreach(conf->bindings.key, it) { @@ -1346,6 +1391,9 @@ parse_section_mouse_bindings( if (strcmp(key, binding_action_map[action]) != 0) continue; + maybe_deprecated_key_binding( + conf, "mouse-bindings", action, path, lineno); + /* Unset binding */ if (strcasecmp(value, "none") == 0) { tll_foreach(conf->bindings.mouse, it) { diff --git a/doc/foot.ini.5.scd b/doc/foot.ini.5.scd index b1c0f45f..b404d716 100644 --- a/doc/foot.ini.5.scd +++ b/doc/foot.ini.5.scd @@ -238,20 +238,24 @@ default shortcut for *search-start*, you first need to unmap the default binding. This can be done by setting _action=none_; e.g. *search-start=none*. -*scrollback-up* +*scrollback-up-page* Scrolls up/back one page in history. Default: _Shift+Page\_Up_. -*scrollback-up-half* - Scrolls up/back half of a page in history. Default: - _Shift+Page\_Up_. +*scrollback-up-half-page* + Scrolls up/back half of a page in history. Default: _not set_. -*scrollback-down* +*scrollback-up-line* + Scrolls up/back a single line in history. Default: _not set_. + +*scrollback-down-page* Scroll down/forward one page in history. Default: _Shift+Page\_Down_. -*scrollback-down-half* - Scroll down/forward half of a page in history. Default: - _Shift+Page\_Down_. +*scrollback-down-half-page* + Scroll down/forward half of a page in history. Default: _not set_. + +*scrollback-down-line* + Scroll down/forward a single line in history. Default: _not set_. *clipboard-copy* Copies the current selection into the _clipboard_. Default: _Control+Shift+C_. diff --git a/foot.ini b/foot.ini index 7bb082fd..7c49be5a 100644 --- a/foot.ini +++ b/foot.ini @@ -57,10 +57,12 @@ # button-close-color=ffff0000 [key-bindings] -# scrollback-up=Shift+Page_Up -# scrollback-up-half=none -# scrollback-down=Shift+Page_Down -# scrollback-down-half=none +# scrollback-up-page=Shift+Page_Up +# scrollback-up-half-page=none +# scrollback-up-line=none +# scrollback-down-page=Shift+Page_Down +# scrollback-down-half-page=none +# scrollback-down-line=none # clipboard-copy=Control+Shift+C # clipboard-paste=Control+Shift+V # search-start=Control+Shift+R diff --git a/input.c b/input.c index f24ec128..65dbba0b 100644 --- a/input.c +++ b/input.c @@ -88,21 +88,31 @@ execute_binding(struct seat *seat, struct terminal *term, return true; case BIND_ACTION_SCROLLBACK_UP: + case BIND_ACTION_SCROLLBACK_UP_PAGE: cmd_scrollback_up(term, term->rows); return true; - case BIND_ACTION_SCROLLBACK_UP_HALF: + case BIND_ACTION_SCROLLBACK_UP_HALF_PAGE: cmd_scrollback_up(term, max(term->rows / 2, 1)); return true; + case BIND_ACTION_SCROLLBACK_UP_LINE: + cmd_scrollback_up(term, 1); + return true; + case BIND_ACTION_SCROLLBACK_DOWN: + case BIND_ACTION_SCROLLBACK_DOWN_PAGE: cmd_scrollback_down(term, term->rows); return true; - case BIND_ACTION_SCROLLBACK_DOWN_HALF: + case BIND_ACTION_SCROLLBACK_DOWN_HALF_PAGE: cmd_scrollback_down(term, max(term->rows / 2, 1)); return true; + case BIND_ACTION_SCROLLBACK_DOWN_LINE: + cmd_scrollback_down(term, 1); + return true; + case BIND_ACTION_CLIPBOARD_COPY: selection_to_clipboard(seat, term, serial); return true; diff --git a/wayland.h b/wayland.h index 24b8c7b0..430d6b66 100644 --- a/wayland.h +++ b/wayland.h @@ -26,10 +26,14 @@ typedef tll(struct key_binding) key_binding_list_t; enum bind_action_normal { BIND_ACTION_NONE, - BIND_ACTION_SCROLLBACK_UP, - BIND_ACTION_SCROLLBACK_UP_HALF, - BIND_ACTION_SCROLLBACK_DOWN, - BIND_ACTION_SCROLLBACK_DOWN_HALF, + BIND_ACTION_SCROLLBACK_UP, /* Deprecated, alias for UP_PAGE */ + BIND_ACTION_SCROLLBACK_UP_PAGE, + BIND_ACTION_SCROLLBACK_UP_HALF_PAGE, + BIND_ACTION_SCROLLBACK_UP_LINE, + BIND_ACTION_SCROLLBACK_DOWN, /* Deprecated, alias for DOWN_PAGE */ + BIND_ACTION_SCROLLBACK_DOWN_PAGE, + BIND_ACTION_SCROLLBACK_DOWN_HALF_PAGE, + BIND_ACTION_SCROLLBACK_DOWN_LINE, BIND_ACTION_CLIPBOARD_COPY, BIND_ACTION_CLIPBOARD_PASTE, BIND_ACTION_PRIMARY_PASTE,