I have been using this patch from martijn@ and find it really useful. Is it possible to merge this? Thanks!
Regards, Anindya On Tue, Mar 09, 2021 at 07:33:29PM +0100, Martijn van Duren wrote: > I send out an earlier version of this diff to Anindya with some positive > feedback. Instead of claiming another binding, why not make help, order > and view a toggle? I see no reason why this information should disappear > on the next input. > > Seems to work fine in my testing. > > OK? > > martijn@ > > On Thu, 2021-03-04 at 22:47 -0800, Anindya Mukherjee wrote: > > Hi, > > > > I have reworked my proposed interface for sticky displays in systat > > following earlier feedback. Thanks for that! It helped me rethink the > > interface carefully. > > > > In the current version, sticky mode has its own toggle: ^T. From a study > > of the source and the man page it does not seem to be bound to anything > > and, on my system at least, does not conflict with anything else. I > > could add a dedicated command for it as well if that's useful. The > > current version supports a sticky display for the view list, view mode > > plus refresh interval, and available orderings. > > > > I have tried the hotkeys for the various views as documented in the man > > page (as well as some of the undocumented ones) and they seem to work. I > > have also tried to make sure that the sticky displays don't interfere > > with error messages. In future I would like to try to clean up the view > > hotkeys, which conflict each other in some cases, and seem to be > > undocumented. I found them useful; at least the ones that work. Please > > have a look, thanks! > > > > Regards, > > Anindya > > Index: engine.c > =================================================================== > RCS file: /cvs/src/usr.bin/systat/engine.c,v > retrieving revision 1.27 > diff -u -p -r1.27 engine.c > --- engine.c 6 Feb 2021 06:19:28 -0000 1.27 > +++ engine.c 9 Mar 2021 18:32:24 -0000 > @@ -91,6 +91,8 @@ char cmdbuf[MAX_LINE_BUF]; > int cmd_len = -1; > struct command *curr_cmd = NULL; > char *curr_message = NULL; > +enum message_mode message_mode = MESSAGE_NONE; > +int message_cont = 1; > > void print_cmdline(void); > > @@ -1145,14 +1147,26 @@ command_set(struct command *cmd, const c > return prev; > } > > +void > +message_toggle(enum message_mode mode) > +{ > + message_mode = message_mode != mode ? mode : MESSAGE_NONE; > + need_update = 1; > + message_cont = 1; > +} > + > const char * > -message_set(const char *msg) { > - char *prev = curr_message; > - if (msg) > +message_set(const char *msg) > +{ > + free(curr_message); > + > + if (msg) { > curr_message = strdup(msg); > - else > + message_cont = 0; > + } else { > curr_message = NULL; > - free(prev); > + message_cont = 1; > + } > return NULL; > } > > @@ -1361,6 +1375,22 @@ engine_loop(int countmax) > if (!averageonly || > (averageonly && count == countmax - 1)) > disp_update(); > + if (message_cont) { > + switch (message_mode) { > + case MESSAGE_NONE: > + message_set(NULL); > + break; > + case MESSAGE_HELP: > + show_help(); > + break; > + case MESSAGE_VIEW: > + show_view(); > + break; > + case MESSAGE_ORDER: > + show_order(); > + break; > + } > + } > end_page(); > need_update = 0; > if (countmax && ++count >= countmax) > Index: engine.h > =================================================================== > RCS file: /cvs/src/usr.bin/systat/engine.h,v > retrieving revision 1.12 > diff -u -p -r1.12 engine.h > --- engine.h 12 Jan 2020 20:51:08 -0000 1.12 > +++ engine.h 9 Mar 2021 18:32:24 -0000 > @@ -95,6 +95,12 @@ struct command { > void ( *exec)(const char *); > }; > > +enum message_mode { > + MESSAGE_NONE, > + MESSAGE_HELP, > + MESSAGE_VIEW, > + MESSAGE_ORDER > +}; > > void tb_start(void); > > @@ -133,6 +139,9 @@ void prev_view(void); > int foreach_order(void (*callback)(order_type *)); > void set_order(const char *opt); > void next_order(void); > +void show_help(void); > +void show_view(void); > +void show_order(void); > > void setup_term(int maxpr); > int check_termcap(void); > @@ -141,6 +150,7 @@ void engine_initialize(void); > void engine_loop(int countmax); > > struct command *command_set(struct command *cmd, const char *init); > +void message_toggle(enum message_mode); > const char *message_set(const char *msg); > > void foreach_view(void (*callback)(field_view *)); > Index: main.c > =================================================================== > RCS file: /cvs/src/usr.bin/systat/main.c,v > retrieving revision 1.73 > diff -u -p -r1.73 main.c > --- main.c 30 Jan 2021 08:44:42 -0000 1.73 > +++ main.c 9 Mar 2021 18:32:24 -0000 > @@ -284,8 +284,7 @@ cmd_compat(const char *buf) > const char *s; > > if (strcasecmp(buf, "help") == 0) { > - show_help(); > - need_update = 1; > + message_toggle(MESSAGE_HELP); > return; > } > if (strcasecmp(buf, "quit") == 0 || strcasecmp(buf, "q") == 0) { > @@ -304,8 +303,7 @@ cmd_compat(const char *buf) > return; > } > if (strncasecmp(buf, "order", 5) == 0) { > - show_order(); > - need_update = 1; > + message_toggle(MESSAGE_ORDER); > return; > } > if (strncasecmp(buf, "human", 5) == 0) { > @@ -358,12 +356,10 @@ keyboard_callback(int ch) > case '?': > /* FALLTHROUGH */ > case 'h': > - show_help(); > - need_update = 1; > + message_toggle(MESSAGE_HELP); > break; > case CTRL_G: > - show_view(); > - need_update = 1; > + message_toggle(MESSAGE_VIEW); > break; > case 'l': > command_set(&cm_count, NULL); > Index: systat.1 > =================================================================== > RCS file: /cvs/src/usr.bin/systat/systat.1,v > retrieving revision 1.119 > diff -u -p -r1.119 systat.1 > --- systat.1 22 Jun 2020 13:17:54 -0000 1.119 > +++ systat.1 9 Mar 2021 18:32:24 -0000 > @@ -175,6 +175,8 @@ line typed as a command. > While entering a command the > current character erase, word erase, and line kill characters > may be used. > +.It Ic h > +Toggle printing the names of the available views on the command line. > .It Ic o > Select the next ordering which sorts the rows according to a > combination of columns. > @@ -201,7 +203,7 @@ Jump to the end of the current view. > .It Ic ^F | Aq Ic left arrow > Select the next view. > .It Ic ^G > -Print the name of the current > +Toggle printing the name of the current > view being shown and the refresh interval. > .It Ic ^L > Refresh the screen. > @@ -220,11 +222,11 @@ The following commands are interpreted b > command interpreter. > .Bl -tag -width Ds > .It Ic help > -Print the names of the available views on the command line. > +Toggle printing the names of the available views on the command line. > .It Ic human > Toggle human readable mode, where applicable. > .It Ic order > -Print the names of the available orderings on the command line. > +Toggle printing the names of the available orderings on the command line. > .It Ic quit > Quit > .Nm . > >