{"thread":{"id":"56989","subject":"[PATCH tig 0/2] Allow to toggle revision filter","startedAt":"2021-11-28T08:00:42Z","lastAt":"2021-11-28T08:00:53Z","messageCount":3,"participants":["Johannes Altmanninger"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"442409","messageId":"20211128075818.981790-1-aclopte@gmail.com","threadId":"56989","inReplyTo":null,"subject":"[PATCH tig 0/2] Allow to toggle revision filter","fromName":"Johannes Altmanninger","fromEmail":"aclopte@gmail.com","sentAt":"2021-11-28T07:58:16Z","receivedAt":"2021-11-28T08:00:42Z","isPatch":true,"sender":{"key":"aclopte@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6853872?v=4"},"body":"I submitted the same on github but sending here to see if there are comments.\nThese patches remove the need for starting a fresh tig in some scenarios\n(nothing wrong with that but it adds up)\n\n\n"},{"id":"442410","messageId":"20211128075818.981790-2-aclopte@gmail.com","threadId":"56989","inReplyTo":"20211128075818.981790-1-aclopte@gmail.com","subject":"[PATCH tig 1/2] argv_format(): extract bool params into bitfield","fromName":"Johannes Altmanninger","fromEmail":"aclopte@gmail.com","sentAt":"2021-11-28T07:58:17Z","receivedAt":"2021-11-28T08:00:45Z","isPatch":true,"sender":{"key":"aclopte@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6853872?v=4"},"body":"argv_format() takes two boolean parameters, and the next patch wants\nto add another one.\n\nAdd the same bitfield to struct format_context, instead of just the\nfile-filter bit.  This is not strictly needed -- we don't read the\nextra bits -- but this forces us to consistently access it with \"&\nargv_flag_file_filter\", also in callees of argv_format().\n---\n include/tig/argv.h |  7 ++++++-\n src/argv.c         | 14 +++++++-------\n src/prompt.c       |  6 +++---\n src/reflog.c       |  2 +-\n src/refs.c         |  2 +-\n src/stash.c        |  2 +-\n src/status.c       |  2 +-\n src/view.c         |  8 ++++++--\n 8 files changed, 26 insertions(+), 17 deletions(-)\n\ndiff --git a/include/tig/argv.h b/include/tig/argv.h\nindex cc8a5691..395ede94 100644\n--- a/include/tig/argv.h\n+++ b/include/tig/argv.h\n@@ -69,7 +69,12 @@ struct argv_env {\n \n extern struct argv_env argv_env;\n \n-bool argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], bool first, bool file_filter);\n+enum argv_flag {\n+\targv_flag_first = 1 << 0,\n+\targv_flag_file_filter = 1 << 1,\n+};\n+\n+bool argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], int flags);\n char *argv_format_arg(struct argv_env *argv_env, const char *src_arg);\n \n struct rev_flags {\ndiff --git a/src/argv.c b/src/argv.c\nindex 5ba7fc17..40e9256e 100644\n--- a/src/argv.c\n+++ b/src/argv.c\n@@ -277,7 +277,7 @@ struct format_context {\n \tsize_t vars_size;\n \tchar buf[SIZEOF_MED_STR];\n \tsize_t bufpos;\n-\tbool file_filter;\n+\tint argv_flags;\n };\n \n #define ARGV_ENV_INIT(type, name, ifempty, initval)\tinitval,\n@@ -318,7 +318,7 @@ format_expand_arg(struct format_context *format, const char *name, const char *e\n \t\tif (string_enum_compare(name, vars[i].name, vars[i].namelen))\n \t\t\tcontinue;\n \n-\t\tif (vars[i].value_ref == &argv_env.file && !format->file_filter)\n+\t\tif (vars[i].value_ref == &argv_env.file && !(format->argv_flags & argv_flag_file_filter))\n \t\t\treturn true;\n \n \t\treturn vars[i].formatter(format, &vars[i]);\n@@ -420,7 +420,7 @@ repo_rev_formatter(struct format_context *format, struct format_var *var)\n }\n \n bool\n-argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], bool first, bool file_filter)\n+argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], int flags)\n {\n \tstruct format_var vars[] = {\n #define FORMAT_VAR(type, name, ifempty, initval) \\\n@@ -430,7 +430,7 @@ argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_a\n \t{ \"%(repo:\" #name \")\", STRING_SIZE(\"%(repo:\" #name \")\"), type ## _formatter, &repo.name, \"\" },\n \t\tREPO_INFO(FORMAT_REPO_VAR)\n \t};\n-\tstruct format_context format = { vars, ARRAY_SIZE(vars), \"\", 0, file_filter };\n+\tstruct format_context format = { vars, ARRAY_SIZE(vars), \"\", 0, flags };\n \tint argc;\n \n \targv_free(*dst_argv);\n@@ -439,7 +439,7 @@ argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_a\n \t\tconst char *arg = src_argv[argc];\n \n \t\tif (!strcmp(arg, \"%(fileargs)\")) {\n-\t\t\tif (file_filter && !argv_append_array(dst_argv, opt_file_args))\n+\t\t\tif ((flags & argv_flag_file_filter) && !argv_append_array(dst_argv, opt_file_args))\n \t\t\t\tbreak;\n \n \t\t} else if (!strcmp(arg, DIFF_ARGS)) {\n@@ -463,7 +463,7 @@ argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_a\n \t\t\t\tbreak;\n \n \t\t} else if (!strcmp(arg, \"%(revargs)\") ||\n-\t\t\t   (first && !strcmp(arg, \"%(commit)\"))) {\n+\t\t\t   ((flags & argv_flag_first) && !strcmp(arg, \"%(commit)\"))) {\n \t\t\tif (!argv_append_array(dst_argv, opt_rev_args))\n \t\t\t\tbreak;\n \n@@ -606,7 +606,7 @@ argv_format_arg(struct argv_env *argv_env, const char *src_arg)\n \tconst char **dst_argv = NULL;\n \tchar *dst_arg = NULL;\n \n-\tif (argv_format(argv_env, &dst_argv, src_argv, false, true))\n+\tif (argv_format(argv_env, &dst_argv, src_argv, argv_flag_file_filter))\n \t\tdst_arg = (char *) dst_argv[0];\n \n \tfree(dst_argv);\ndiff --git a/src/prompt.c b/src/prompt.c\nindex bc037a95..961b61d3 100644\n--- a/src/prompt.c\n+++ b/src/prompt.c\n@@ -939,7 +939,7 @@ run_prompt_command(struct view *view, const char *argv[])\n \n \t\t/* Trim the leading '!'. */\n \t\targv[0] = cmd + 1;\n-\t\tcopied = argv_format(view->env, &next->argv, argv, false, true);\n+\t\tcopied = argv_format(view->env, &next->argv, argv, argv_flag_file_filter);\n \t\targv[0] = cmd;\n \n \t\tif (!copied) {\n@@ -967,7 +967,7 @@ run_prompt_command(struct view *view, const char *argv[])\n \n \t\tif (argv[1]\n \t\t    && strlen(argv[1]) > 0\n-\t\t    && (!argv_format(view->env, &fmt_argv, &argv[1], false, true)\n+\t\t    && (!argv_format(view->env, &fmt_argv, &argv[1], argv_flag_file_filter)\n \t\t\t|| !argv_to_string(fmt_argv, text, sizeof(text), \" \")\n \t\t\t)) {\n \t\t\treport(\"Failed to format echo string\");\n@@ -1102,7 +1102,7 @@ exec_run_request(struct view *view, struct run_request *req)\n \n \tif (!argv_to_string(req->argv, cmd, sizeof(cmd), \" \")\n \t    || !argv_from_string_no_quotes(req_argv, &req_argc, cmd)\n-\t    || !argv_format(view->env, &argv, req_argv, false, true)\n+\t    || !argv_format(view->env, &argv, req_argv, argv_flag_file_filter)\n \t    || !argv) {\n \t\treport(\"Failed to format arguments\");\n \t\treturn REQ_NONE;\ndiff --git a/src/reflog.c b/src/reflog.c\nindex 67a10694..0f5dd0eb 100644\n--- a/src/reflog.c\n+++ b/src/reflog.c\n@@ -48,7 +48,7 @@ reflog_request(struct view *view, enum request request, struct line *line)\n \t\t};\n \t\tenum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n \n-\t\tif (!argv_format(main_view.env, &main_view.argv, main_argv, false, false))\n+\t\tif (!argv_format(main_view.env, &main_view.argv, main_argv, 0))\n \t\t\treport(\"Failed to format argument\");\n \t\telse\n \t\t\topen_main_view(view, flags | OPEN_PREPARED);\ndiff --git a/src/refs.c b/src/refs.c\nindex 86ff4032..49b12726 100644\n--- a/src/refs.c\n+++ b/src/refs.c\n@@ -81,7 +81,7 @@ refs_request(struct view *view, enum request request, struct line *line)\n \t\t};\n \t\tenum open_flags flags = view_is_displayed(view) ? OPEN_SPLIT : OPEN_DEFAULT;\n \n-\t\tif (!argv_format(main_view.env, &main_view.argv, all_references_argv, false, false))\n+\t\tif (!argv_format(main_view.env, &main_view.argv, all_references_argv, 0))\n \t\t\treport(\"Failed to format argument\");\n \t\telse\n \t\t\topen_main_view(view, flags | OPEN_PREPARED);\ndiff --git a/src/stash.c b/src/stash.c\nindex c32bcab7..255c8052 100644\n--- a/src/stash.c\n+++ b/src/stash.c\n@@ -87,7 +87,7 @@ stash_request(struct view *view, enum request request, struct line *line)\n \t\t\t\t\t\"--no-color\", \"%(stash)\", NULL\n \t\t\t};\n \n-\t\t\tif (!argv_format(diff_view.env, &diff_view.argv, diff_argv, false, false))\n+\t\t\tif (!argv_format(diff_view.env, &diff_view.argv, diff_argv, 0))\n \t\t\t\treport(\"Failed to format argument\");\n \t\t\telse\n \t\t\t\topen_diff_view(view, flags | OPEN_PREPARED);\ndiff --git a/src/status.c b/src/status.c\nindex 6e3953b5..c3f1e262 100644\n--- a/src/status.c\n+++ b/src/status.c\n@@ -91,7 +91,7 @@ status_run(struct view *view, const char *argv[], char status, enum line_type ty\n \tstruct buffer buf;\n \tstruct io io;\n \tconst char **status_argv = NULL;\n-\tbool ok = argv_format(view->env, &status_argv, argv, false, false) &&\n+\tbool ok = argv_format(view->env, &status_argv, argv, 0) &&\n \t\t  io_run(&io, IO_RD, repo.exec_dir, NULL, status_argv);\n \n \targv_free(status_argv);\ndiff --git a/src/view.c b/src/view.c\nindex 52c808d1..4da10581 100644\n--- a/src/view.c\n+++ b/src/view.c\n@@ -575,10 +575,14 @@ begin_update(struct view *view, const char *dir, const char **argv, enum open_fl\n \tview->unrefreshable = open_in_pager_mode(flags);\n \n \tif (!refresh && argv) {\n-\t\tbool file_filter = !view_has_flags(view, VIEW_FILE_FILTER) || opt_file_filter;\n+\t\tint flags = 0;\n+\t\tif (!view->prev)\n+\t\t\tflags |= argv_flag_first;\n+\t\tif (!view_has_flags(view, VIEW_FILE_FILTER) || opt_file_filter)\n+\t\t\tflags |= argv_flag_file_filter;\n \n \t\tview->dir = dir;\n-\t\tif (!argv_format(view->env, &view->argv, argv, !view->prev, file_filter))\n+\t\tif (!argv_format(view->env, &view->argv, argv, flags))\n \t\t\treturn error(\"Failed to format %s arguments\", view->name);\n \t}\n \n-- \n2.33.1\n\n"},{"id":"442411","messageId":"20211128075818.981790-3-aclopte@gmail.com","threadId":"56989","inReplyTo":"20211128075818.981790-1-aclopte@gmail.com","subject":"[PATCH tig 2/2] Allow to toggle revision filter","fromName":"Johannes Altmanninger","fromEmail":"aclopte@gmail.com","sentAt":"2021-11-28T07:58:18Z","receivedAt":"2021-11-28T08:00:53Z","isPatch":true,"sender":{"key":"aclopte@gmail.com","avatar":"https://avatars.githubusercontent.com/u/6853872?v=4"},"body":"\"tig -- <pathspec>\" shows only commits that touch files matching\n<pathspec>.  The command \":toggle file-filter\" (bound to %) can be\nused to toggle this filtering dynamically.\n\n\"tig <revisions range>\" shows only commits in the given range.\nThis patch adds \":toggle rev-filter\" (bound to ^) to quickly toggle\nthis filter.\n\nThere is already \":toggle rev-args\" which is meant to disable rev\nfiltering but that does not work because it fails to redraw the\nview. Also it cannot re-enable filtering.\nAlso \":set rev-args = HEAD\" works but doesn't redraw the view either.\nWe should fix that (should be easy but I didn't check yet), and make\n\":toggle rev-args\" reversible, then both the rev-filter and file-filter\ntoggles will be obsolete.\n\nThis feature is particularly useful with a new feature in Tig 2.5.2:\nwhen pressing m in the blame view, Tig will show the blamed commit\ncentered in the main view, making it easy to explore adjacent\ncommits. Note that if there are many commits between the blamed commit\nand HEAD, you'll need to wait a bit after pressing m.\n---\n doc/manual.adoc                         |  1 +\n include/tig/argv.h                      |  1 +\n include/tig/options.h                   |  1 +\n include/tig/view.h                      | 15 ++++++++-------\n src/argv.c                              |  4 ++--\n src/main.c                              |  2 +-\n src/options.c                           |  2 ++\n src/prompt.c                            |  6 +++---\n src/tig.c                               |  1 +\n src/view.c                              |  2 ++\n test/help/all-keybindings-test          |  2 +-\n test/help/all-keybindings-test.expected |  3 ++-\n test/help/default-test                  |  4 ++--\n test/help/user-command-test             |  2 +-\n tigrc                                   |  3 ++-\n 15 files changed, 30 insertions(+), 19 deletions(-)\n\ndiff --git a/doc/manual.adoc b/doc/manual.adoc\nindex 8f456d26..81f06535 100644\n--- a/doc/manual.adoc\n+++ b/doc/manual.adoc\n@@ -470,6 +470,7 @@ Misc\n |X\t|Toggle commit ID display on/off\n |%\t|Toggle file filtering in order to see the full diff instead of only\n \t the diff concerning the currently selected file.\n+|^      |Toggle revision filtering in the main view.\n |$\t|Toggle highlighting of commit title overflow.\n |H\t|Go to the HEAD commit.\n |:\t|Open prompt. This allows you to specify what command to run and also to\ndiff --git a/include/tig/argv.h b/include/tig/argv.h\nindex 395ede94..96bb2bd5 100644\n--- a/include/tig/argv.h\n+++ b/include/tig/argv.h\n@@ -72,6 +72,7 @@ extern struct argv_env argv_env;\n enum argv_flag {\n \targv_flag_first = 1 << 0,\n \targv_flag_file_filter = 1 << 1,\n+\targv_flag_rev_filter = 1 << 2,\n };\n \n bool argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_argv[], int flags);\ndiff --git a/include/tig/options.h b/include/tig/options.h\nindex 9fc1eecc..1550dbea 100644\n--- a/include/tig/options.h\n+++ b/include/tig/options.h\n@@ -69,6 +69,7 @@ typedef struct view_column *view_settings;\n \t_(refresh_mode,\t\t\tenum refresh_mode,\tVIEW_NO_FLAGS) \\\n \t_(refs_view,\t\t\tview_settings,\t\tVIEW_NO_FLAGS) \\\n \t_(rev_args,\t\t\tconst char **,\t\tVIEW_NO_FLAGS) \\\n+\t_(rev_filter,\t\t\tbool,\t\t\tVIEW_LOG_LIKE) \\\n \t_(send_child_enter,\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n \t_(show_changes,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\n \t_(show_notes,\t\t\tbool,\t\t\tVIEW_NO_FLAGS) \\\ndiff --git a/include/tig/view.h b/include/tig/view.h\nindex a0defaf4..83fc6535 100644\n--- a/include/tig/view.h\n+++ b/include/tig/view.h\n@@ -65,13 +65,14 @@ enum view_flag {\n \tVIEW_BLAME_LIKE\t\t= 1 << 8,\n \tVIEW_SEND_CHILD_ENTER\t= 1 << 9,\n \tVIEW_FILE_FILTER\t= 1 << 10,\n-\tVIEW_LOG_LIKE\t\t= 1 << 11,\n-\tVIEW_STATUS_LIKE\t= 1 << 12,\n-\tVIEW_REFRESH\t\t= 1 << 13,\n-\tVIEW_GREP_LIKE\t\t= 1 << 14,\n-\tVIEW_SORTABLE\t\t= 1 << 15,\n-\tVIEW_FLEX_WIDTH\t\t= 1 << 16,\n-\tVIEW_RESET_DISPLAY\t= 1 << 17,\n+\tVIEW_REV_FILTER\t\t= 1 << 11,\n+\tVIEW_LOG_LIKE\t\t= 1 << 12,\n+\tVIEW_STATUS_LIKE\t= 1 << 13,\n+\tVIEW_REFRESH\t\t= 1 << 14,\n+\tVIEW_GREP_LIKE\t\t= 1 << 15,\n+\tVIEW_SORTABLE\t\t= 1 << 16,\n+\tVIEW_FLEX_WIDTH\t\t= 1 << 17,\n+\tVIEW_RESET_DISPLAY\t= 1 << 18,\n };\n \n #define view_has_flags(view, flag)\t((view)->ops->flags & (flag))\ndiff --git a/src/argv.c b/src/argv.c\nindex 40e9256e..154c3767 100644\n--- a/src/argv.c\n+++ b/src/argv.c\n@@ -464,7 +464,7 @@ argv_format(struct argv_env *argv_env, const char ***dst_argv, const char *src_a\n \n \t\t} else if (!strcmp(arg, \"%(revargs)\") ||\n \t\t\t   ((flags & argv_flag_first) && !strcmp(arg, \"%(commit)\"))) {\n-\t\t\tif (!argv_append_array(dst_argv, opt_rev_args))\n+\t\t\tif ((flags & argv_flag_rev_filter) && !argv_append_array(dst_argv, opt_rev_args))\n \t\t\t\tbreak;\n \n \t\t} else if (!format_append_arg(&format, dst_argv, arg)) {\n@@ -606,7 +606,7 @@ argv_format_arg(struct argv_env *argv_env, const char *src_arg)\n \tconst char **dst_argv = NULL;\n \tchar *dst_arg = NULL;\n \n-\tif (argv_format(argv_env, &dst_argv, src_argv, argv_flag_file_filter))\n+\tif (argv_format(argv_env, &dst_argv, src_argv, argv_flag_file_filter | argv_flag_rev_filter))\n \t\tdst_arg = (char *) dst_argv[0];\n \n \tfree(dst_argv);\ndiff --git a/src/main.c b/src/main.c\nindex 54ca950c..d6f656be 100644\n--- a/src/main.c\n+++ b/src/main.c\n@@ -629,7 +629,7 @@ main_select(struct view *view, struct line *line)\n static struct view_ops main_ops = {\n \t\"commit\",\n \targv_env.head,\n-\tVIEW_SEND_CHILD_ENTER | VIEW_FILE_FILTER | VIEW_LOG_LIKE | VIEW_REFRESH,\n+\tVIEW_SEND_CHILD_ENTER | VIEW_FILE_FILTER | VIEW_REV_FILTER | VIEW_LOG_LIKE | VIEW_REFRESH,\n \tsizeof(struct main_state),\n \tmain_open,\n \tmain_read,\ndiff --git a/src/options.c b/src/options.c\nindex f5ee2bc2..4977da80 100644\n--- a/src/options.c\n+++ b/src/options.c\n@@ -873,6 +873,7 @@ option_bind_command(int argc, const char *argv[])\n \t\t\t{ \"toggle-date\",\t\t\"date\" },\n \t\t\t{ \"toggle-files\",\t\t\"file-filter\" },\n \t\t\t{ \"toggle-file-filter\",\t\t\"file-filter\" },\n+\t\t\t{ \"toggle-rev-filter\",\t\t\"rev-filter\" },\n \t\t\t{ \"toggle-file-size\",\t\t\"file-size\" },\n \t\t\t{ \"toggle-filename\",\t\t\"filename\" },\n \t\t\t{ \"toggle-graphic\",\t\t\"show-graphic\" },\n@@ -1058,6 +1059,7 @@ load_options(void)\n \tchar buf[SIZEOF_STR];\n \n \topt_file_filter = true;\n+\topt_rev_filter = true;\n \tif (!find_option_info_by_value(&opt_diff_context)->seen)\n \t\topt_diff_context = -3;\n \ndiff --git a/src/prompt.c b/src/prompt.c\nindex 961b61d3..b0ed7a45 100644\n--- a/src/prompt.c\n+++ b/src/prompt.c\n@@ -939,7 +939,7 @@ run_prompt_command(struct view *view, const char *argv[])\n \n \t\t/* Trim the leading '!'. */\n \t\targv[0] = cmd + 1;\n-\t\tcopied = argv_format(view->env, &next->argv, argv, argv_flag_file_filter);\n+\t\tcopied = argv_format(view->env, &next->argv, argv, argv_flag_file_filter | argv_flag_rev_filter);\n \t\targv[0] = cmd;\n \n \t\tif (!copied) {\n@@ -967,7 +967,7 @@ run_prompt_command(struct view *view, const char *argv[])\n \n \t\tif (argv[1]\n \t\t    && strlen(argv[1]) > 0\n-\t\t    && (!argv_format(view->env, &fmt_argv, &argv[1], argv_flag_file_filter)\n+\t\t    && (!argv_format(view->env, &fmt_argv, &argv[1], argv_flag_file_filter | argv_flag_rev_filter)\n \t\t\t|| !argv_to_string(fmt_argv, text, sizeof(text), \" \")\n \t\t\t)) {\n \t\t\treport(\"Failed to format echo string\");\n@@ -1102,7 +1102,7 @@ exec_run_request(struct view *view, struct run_request *req)\n \n \tif (!argv_to_string(req->argv, cmd, sizeof(cmd), \" \")\n \t    || !argv_from_string_no_quotes(req_argv, &req_argc, cmd)\n-\t    || !argv_format(view->env, &argv, req_argv, argv_flag_file_filter)\n+\t    || !argv_format(view->env, &argv, req_argv, argv_flag_file_filter | argv_flag_rev_filter)\n \t    || !argv) {\n \t\treport(\"Failed to format arguments\");\n \t\treturn REQ_NONE;\ndiff --git a/src/tig.c b/src/tig.c\nindex 1c332f52..4546a7cf 100644\n--- a/src/tig.c\n+++ b/src/tig.c\n@@ -104,6 +104,7 @@ view_request(struct view *view, enum request request)\n \t_('C', \"local change display\",\t\t\"show-changes\"), \\\n \t_('X', \"commit ID display\",\t\t\"id\"), \\\n \t_('%', \"file filtering\",\t\t\"file-filter\"), \\\n+\t_('^', \"revision filtering\",\t\t\"rev-filter\"), \\\n \t_('$', \"commit title overflow display\",\t\"commit-title-overflow\"), \\\n \t_('d', \"untracked directory info\",\t\"status-show-untracked-dirs\"), \\\n \t_('|', \"view split\",\t\t\t\"vertical-split\"), \\\ndiff --git a/src/view.c b/src/view.c\nindex 4da10581..f4f3dea9 100644\n--- a/src/view.c\n+++ b/src/view.c\n@@ -580,6 +580,8 @@ begin_update(struct view *view, const char *dir, const char **argv, enum open_fl\n \t\t\tflags |= argv_flag_first;\n \t\tif (!view_has_flags(view, VIEW_FILE_FILTER) || opt_file_filter)\n \t\t\tflags |= argv_flag_file_filter;\n+\t\tif (!view_has_flags(view, VIEW_REV_FILTER) || opt_rev_filter)\n+\t\t\tflags |= argv_flag_rev_filter;\n \n \t\tview->dir = dir;\n \t\tif (!argv_format(view->env, &view->argv, argv, flags))\ndiff --git a/test/help/all-keybindings-test b/test/help/all-keybindings-test\nindex f47b6dcd..1139e4bd 100755\n--- a/test/help/all-keybindings-test\n+++ b/test/help/all-keybindings-test\n@@ -3,7 +3,7 @@\n . libtest.sh\n \n export COLUMNS=90\n-export LINES=129\n+export LINES=130\n \n steps '\n \t:view-help\ndiff --git a/test/help/all-keybindings-test.expected b/test/help/all-keybindings-test.expected\nindex f69e1703..ae66028a 100755\n--- a/test/help/all-keybindings-test.expected\n+++ b/test/help/all-keybindings-test.expected\n@@ -68,6 +68,7 @@ Option toggling:\n                            X :toggle id\n                            $ :toggle commit-title-overflow\n                            % :toggle file-filter\n+                           ^ :toggle rev-filter\n [-] search bindings\n View manipulation\n                     <Ctrl-C> view-close          Close the current view\n@@ -125,4 +126,4 @@ External commands:\n [-] pager bindings\n Internal commands:\n                            @ :/^@@\n-[help] - line 1 of 127                                                                100%\n+[help] - line 1 of 128                                                                 100%\ndiff --git a/test/help/default-test b/test/help/default-test\nindex f60bcd13..8adb397f 100755\n--- a/test/help/default-test\n+++ b/test/help/default-test\n@@ -51,7 +51,7 @@ View manipulation\n                      R, <F5> refresh             Reload and refresh view\n                            O maximize            Maximize the current view\n                            q view-close          Close the current view\n-[help] - line 1 of 127                                                       22%\n+[help] - line 1 of 128                                                       21%\n EOF\n \n assert_equals 'help-search.screen' <<EOF\n@@ -83,7 +83,7 @@ View manipulation\n                      R, <F5> refresh             Reload and refresh view\n                            O maximize            Maximize the current view\n                            q view-close          Close the current view\n-[help] - line 19 of 127                                                      22%\n+[help] - line 19 of 128                                                      21%\n EOF\n \n assert_equals 'help-collapsed.screen' <<EOF\ndiff --git a/test/help/user-command-test b/test/help/user-command-test\nindex c0218bf5..9de58285 100755\n--- a/test/help/user-command-test\n+++ b/test/help/user-command-test\n@@ -55,5 +55,5 @@ Searching\n [-] main bindings\n Cursor navigation\n                               G move-last-line      Move cursor to last line\n-[help] - line 80 of 154                                                                          69%\n+[help] - line 81 of 155                                                                          69%\n EOF\ndiff --git a/tigrc b/tigrc\nindex e2f1f84d..7e671fba 100644\n--- a/tigrc\n+++ b/tigrc\n@@ -309,7 +309,8 @@ bind generic\t$\t:toggle commit-title-overflow\n # bind generic\t???\t:toggle status-show-untracked-dirs\n \t\t\t\t\t\t# Toggle display of file in untracked directories\n # bind generic\t???\t:toggle vertical-split\t# Toggle vertical split\n-bind generic\t%\t:toggle file-filter\n+bind generic\t%\t:toggle file-filter\t# Toggle filtering by pathspecs in file-args\n+bind generic\t^\t:toggle rev-filter\t# Toggle filtering by revisions in rev-args\n \n # Misc\n bind generic\te\tedit\t\t\t# Open in editor\n-- \n2.33.1\n\n"}]}