1919
2020extern const struct menu_item toggle_menu_items [];
2121
22+ static const char collapse_expand_names [2 ][14 ] = {
23+ "Collapse all" , "Expand all"
24+ };
25+ static struct keymap collapse_expand_keymap = {
26+ collapse_expand_names [0 ], NULL , 0 , false
27+ };
2228static struct keymap toggle_menu_keymap = {
2329 "toggle" , NULL , 0 , false
2430};
@@ -52,8 +58,9 @@ help_draw(struct view *view, struct line *line, unsigned int lineno)
5258 struct help_state * state = view -> private ;
5359
5460 if (line -> type == LINE_SECTION && keymap ) {
55- draw_formatted (view , line -> type , "[%c] %s bindings" ,
56- keymap -> hidden ? '+' : '-' , keymap -> name );
61+ draw_formatted (view , line -> type , "[%c] %s %s" ,
62+ keymap -> hidden ? '+' : '-' , keymap -> name ,
63+ (keymap == & collapse_expand_keymap ) ? "sections" : "bindings" );
5764
5865 } else if (line -> type == LINE_HELP_GROUP || !keymap ) {
5966 draw_text (view , line -> type , help -> data .text );
@@ -200,6 +207,21 @@ help_keys_visitor(void *data, const char *group, struct keymap *keymap,
200207 return true;
201208}
202209
210+ static bool
211+ help_collapse_expand_keys_visitor (void * data , const char * group , struct keymap * keymap ,
212+ enum request request , const char * key ,
213+ const struct request_info * req_info , const struct run_request * run_req )
214+ {
215+ struct help_request_iterator * iterator = data ;
216+
217+ if (iterator -> keymap != keymap ) {
218+ iterator -> keymap = keymap ;
219+ keymap -> hidden = collapse_expand_keymap .hidden ;
220+ }
221+
222+ return true;
223+ }
224+
203225static enum status_code
204226help_open (struct view * view , enum open_flags flags )
205227{
@@ -214,6 +236,9 @@ help_open(struct view *view, enum open_flags flags)
214236 return ERROR_OUT_OF_MEMORY ;
215237 help -> data .text = "Quick reference for tig keybindings:" ;
216238
239+ if (!add_help_line (view , & help , & collapse_expand_keymap , LINE_SECTION ))
240+ return ERROR_OUT_OF_MEMORY ;
241+
217242 if (!add_help_line (view , & help , NULL , LINE_DEFAULT ))
218243 return ERROR_OUT_OF_MEMORY ;
219244 help -> data .text = "" ;
@@ -253,6 +278,13 @@ help_request(struct view *view, enum request request, struct line *line)
253278 struct keymap * keymap = help -> item .keymap ;
254279
255280 keymap -> hidden = !keymap -> hidden ;
281+ if (keymap == & collapse_expand_keymap ) {
282+ struct help_request_iterator iterator = { view };
283+
284+ collapse_expand_keymap .name = collapse_expand_names [keymap -> hidden ];
285+ foreach_key (help_collapse_expand_keys_visitor , & iterator , true);
286+ toggle_menu_keymap .hidden = keymap -> hidden ;
287+ }
256288 refresh_view (view );
257289 }
258290 return REQ_NONE ;
0 commit comments