linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/3] kconfig: nconf:  rewrite help texts
@ 2013-01-26 19:19 Roland Eggner
  2013-01-26 19:37 ` [PATCH v3 2/3] kconfig: nconf: rewrite labels of function keys line Roland Eggner
  2013-01-26 21:28 ` [PATCH v3 3/3] kconfig: nconf: add vi-style navigation keys Roland Eggner
  0 siblings, 2 replies; 3+ messages in thread
From: Roland Eggner @ 2013-01-26 19:19 UTC (permalink / raw)
  To: Yann E. MORIN, Dmitry Voytik, Michal Marek, Stephen Boyd,
	linux-kernel, linux-kbuild

[-- Attachment #1: Type: text/plain, Size: 20687 bytes --]

>From: Roland Eggner <edvx1@systemanalysen.net>

Rewrite all help texts.  During several years lazy (incomplete) updates have 
left behind a rather thick layer of dust.  Intentions:
(1)  Global help called by <F1> should document all  _currently_  implemented
     keybindings.
(2)  Different help texts called by <F3> resp. <F8><F1> should be consistent
     with (1) and with implementation:
     •  on plain menu entry
     •  in radiolist window
     •  in input windows for text, decimal or hexadecimal values
     •  in filename selection windows <F6> <F7>
     •  SymSearch specific help called by <F8> followed by <F1>
(3)  More reasonable window titles:
     Rename window title            s/README/Global help/
     Rename variable    s/nconf_readme/nconf_global_help/
     Rename window title       s/Instructions/Short help/
(4)  Consider which hints are most useful for first-time-users.

Signed-off-by: Roland Eggner <edvx1@systemanalysen.net>
---
scripts/kconfig/nconf.c |  341 +++++++++++++++++++++++------------------------
1 files changed, 167 insertions(+), 174 deletions(-)

To be applied on vanilla 3.8-rc3

diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c
--- a/scripts/kconfig/nconf.c
+++ b/scripts/kconfig/nconf.c
@@ -12,210 +12,203 @@
 #include "nconf.h"
 #include <ctype.h>
 
-static const char nconf_readme[] = N_(
-"Overview\n"
-"--------\n"
-"This interface let you select features and parameters for the build.\n"
-"Features can either be built-in, modularized, or ignored. Parameters\n"
-"must be entered in as decimal or hexadecimal numbers or text.\n"
+static const char nconf_global_help[] = N_(
+"Help windows\n"
+"------------\n"
+"o  Global help:  Unless in a data entry window, key <F1> will give you\n"
+"   the global help window, which you are just reading.\n"
 "\n"
-"Menu items beginning with following braces represent features that\n"
-"  [ ] can be built in or removed\n"
-"  < > can be built in, modularized or removed\n"
-"  { } can be built in or modularized (selected by other feature)\n"
-"  - - are selected by other feature,\n"
-"  XXX cannot be selected. Use Symbol Info to find out why,\n"
-"while *, M or whitespace inside braces means to build in, build as\n"
-"a module or to exclude the feature respectively.\n"
+"o  A short version of the global help is available by key <F3>.\n"
 "\n"
-"To change any of these features, highlight it with the cursor\n"
-"keys and press <Y> to build it in, <M> to make it a module or\n"
-"<N> to removed it.  You may also press the <Space Bar> to cycle\n"
-"through the available options (ie. Y->N->M->Y).\n"
+"o  Local help:  To get help related to the current menu entry, use any\n"
+"   of <?> <h> keys, or if in a data entry window then use <F1> key.\n"
 "\n"
-"Some additional keyboard hints:\n"
 "\n"
-"Menus\n"
+"Menu entries\n"
+"------------\n"
+"This interface lets you select features and parameters for the kernel\n"
+"build.  Kernel features can either be built-in, modularized, or removed.\n"
+"Parameters must be entered as text or decimal or hexadecimal numbers.\n"
+"\n"
+"Menu entries beginning with following braces represent features that\n"
+"  [ ]  can be built in or removed\n"
+"  < >  can be built in, modularized or removed\n"
+"  { }  can be built in or modularized, are selected by another feature\n"
+"  - -  are selected by another feature\n"
+"  XXX  cannot be selected.  Symbol Info <F2> tells you why.\n"
+"*, M or whitespace inside braces means to build in, build as a module\n"
+"or to exclude the feature respectively.\n"
+"\n"
+"To change any of these features, highlight it with the movement keys\n"
+"listed below and press <y> to build it in, <m> to make it a module or\n"
+"<n> to remove it.  You may press the <Space> key to cycle through the\n"
+"available options.\n"
+"\n"
+"A trailing \"--->\" designates a submenu.\n"
+"\n"
+"\n"
+"Menu navigation keys\n"
+"----------------------------------------------------------------------\n"
+"Linewise up                 <Up>\n"
+"Linewise down               <Down>\n"
+"Pagewise up                 <Page Up>\n"
+"Pagewise down               <Page Down>\n"
+"First entry                 <Home>\n"
+"Last entry                  <End>\n"
+"Enter a submenu             <Right>  <Enter>\n"
+"Go back to parent menu      <Left>   <Esc>  <F5>\n"
+"Close a help window         <Enter>  <Esc>  <F5>\n"
+"Close entry window, apply   <Enter>\n"
+"Close entry window, forget  <Esc>  <F5>\n"
+"Start incremental, case-insensitive search for STRING in menu entries,\n"
+"    no regex support, STRING is displayed in upper left corner\n"
+"                            </>STRING\n"
+"    Remove last character   <Backspace>\n"
+"    Jump to next hit        <Down>\n"
+"    Jump to previous hit    <Up>\n"
+"Exit menu search mode       </>  <Esc>\n"
+"Search for configuration variables with or without leading CONFIG_\n"
+"                            <F8>RegExpr<Enter>\n"
+"Verbose search help         <F8><F1>\n"
+"----------------------------------------------------------------------\n"
+"\n"
+"Unless in a data entry window, key <1> may be used instead of <F1>,\n"
+"<2> instead of <F2>, etc.\n"
+"\n"
+"\n"
+"Radiolist (Choice list)\n"
+"-----------------------\n"
+"Use the movement keys listed above to select the option you wish to set\n"
+"and press <Space>.\n"
+"\n"
+"\n"
+"Data entry\n"
 "----------\n"
-"o  Use the Up/Down arrow keys (cursor keys) to highlight the item\n"
-"   you wish to change use <Enter> or <Space>. Goto submenu by \n"
-"   pressing <Enter> of <right-arrow>. Use <Esc> or <left-arrow> to go back.\n"
-"   Submenus are designated by \"--->\".\n"
+"Enter the requested information and press <Enter>.  Hexadecimal values\n"
+"may be entered without \"0x\" prefix.\n"
 "\n"
-"   Searching: pressing '/' triggers interactive search mode.\n"
-"              nconfig performs a case insensitive search for the string\n"
-"              in the menu prompts (no regex support).\n"
-"              Pressing the up/down keys highlights the previous/next\n"
-"              matching item. Backspace removes one character from the\n"
-"              match string. Pressing either '/' again or ESC exits\n"
-"              search mode. All other keys behave normally.\n"
 "\n"
-"   You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
-"   unseen options into view.\n"
+"Text Box (Help Window)\n"
+"----------------------\n"
+"Use movement keys <Down> <Up> <PageDown> <PageUp> <End> <Home> as listed in\n"
+"table above.\n"
 "\n"
-"o  To exit a menu use the just press <ESC> <F5> <F8> or <left-arrow>.\n"
+"Press any of <Enter> <Esc> <q> <F5> <F9> to exit.\n"
 "\n"
-"o  To get help with an item, press <F1>\n"
-"   Shortcut: Press <h> or <?>.\n"
 "\n"
+"Alternate configuration files\n"
+"-----------------------------\n"
+"nconfig supports switching between different configurations.\n"
+"Use <F6> to save your current configuration.  Use <F7> and enter a\n"
+"file name to load a previously saved configuration.\n"
 "\n"
-"Radiolists  (Choice lists)\n"
-"-----------\n"
-"o  Use the cursor keys to select the option you wish to set and press\n"
-"   <S> or the <SPACE BAR>.\n"
 "\n"
-"   Shortcut: Press the first letter of the option you wish to set then\n"
-"             press <S> or <SPACE BAR>.\n"
+"Terminal configuration\n"
+"----------------------\n"
+"If you use nconfig in a xterm window, make sure your TERM environment\n"
+"variable specifies a terminal configuration which supports at least\n"
+"16 colors.  Otherwise nconfig will look rather bad.\n"
 "\n"
-"o  To see available help for the item, press <F1>\n"
-"   Shortcut: Press <H> or <?>.\n"
+"If the \"stty size\" command reports the current terminalsize correctly,\n"
+"nconfig will adapt to sizes larger than the traditional 80x25 \"standard\"\n"
+"and display longer menus properly.\n"
 "\n"
 "\n"
-"Data Entry\n"
-"-----------\n"
-"o  Enter the requested information and press <ENTER>\n"
-"   If you are entering hexadecimal values, it is not necessary to\n"
-"   add the '0x' prefix to the entry.\n"
-"\n"
-"o  For help, press <F1>.\n"
-"\n"
-"\n"
-"Text Box    (Help Window)\n"
-"--------\n"
-"o  Use the cursor keys to scroll up/down/left/right.  The VI editor\n"
-"   keys h,j,k,l function here as do <u>, <d> and <SPACE BAR> for\n"
-"   those who are familiar with less and lynx.\n"
-"\n"
-"o  Press <Enter>, <F1>, <F5>, <F9>, <q> or <Esc> to exit.\n"
-"\n"
-"\n"
-"Alternate Configuration Files\n"
-"-----------------------------\n"
-"nconfig supports the use of alternate configuration files for\n"
-"those who, for various reasons, find it necessary to switch\n"
-"between different configurations.\n"
-"\n"
-"At the end of the main menu you will find two options.  One is\n"
-"for saving the current configuration to a file of your choosing.\n"
-"The other option is for loading a previously saved alternate\n"
-"configuration.\n"
-"\n"
-"Even if you don't use alternate configuration files, but you\n"
-"find during a nconfig session that you have completely messed\n"
-"up your settings, you may use the \"Load Alternate...\" option to\n"
-"restore your previously saved settings from \".config\" without\n"
-"restarting nconfig.\n"
-"\n"
-"Other information\n"
-"-----------------\n"
-"If you use nconfig in an XTERM window make sure you have your\n"
-"$TERM variable set to point to a xterm definition which supports color.\n"
-"Otherwise, nconfig will look rather bad.  nconfig will not\n"
-"display correctly in a RXVT window because rxvt displays only one\n"
-"intensity of color, bright.\n"
-"\n"
-"nconfig will display larger menus on screens or xterms which are\n"
-"set to display more than the standard 25 row by 80 column geometry.\n"
-"In order for this to work, the \"stty size\" command must be able to\n"
-"display the screen's current row and column geometry.  I STRONGLY\n"
-"RECOMMEND that you make sure you do NOT have the shell variables\n"
-"LINES and COLUMNS exported into your environment.  Some distributions\n"
-"export those variables via /etc/profile.  Some ncurses programs can\n"
-"become confused when those variables (LINES & COLUMNS) don't reflect\n"
-"the true screen size.\n"
-"\n"
-"Optional personality available\n"
-"------------------------------\n"
-"If you prefer to have all of the options listed in a single menu, rather\n"
-"than the default multimenu hierarchy, run the nconfig with NCONFIG_MODE\n"
-"environment variable set to single_menu. Example:\n"
+"Single menu mode\n"
+"----------------\n"
+"If you prefer to have all of the menu entries listed in a single menu,\n"
+"rather than the default multimenu hierarchy, run nconfig with\n"
+"NCONFIG_MODE environment variable set to single_menu.  Example:\n"
 "\n"
 "make NCONFIG_MODE=single_menu nconfig\n"
 "\n"
-"<Enter> will then unroll the appropriate category, or enfold it if it\n"
-"is already unrolled.\n"
+"<Enter> will then unfold the appropriate category, or fold it if it\n"
+"is already unfolded.  Folded menu entries will be designated by a\n"
+"leading \"++>\" and unfolded entries by a leading \"-->\".\n"
 "\n"
-"Note that this mode can eventually be a little more CPU expensive\n"
-"(especially with a larger number of unrolled categories) than the\n"
-"default mode.\n"
+"Note that this mode can eventually be a little more CPU expensive than\n"
+"the default mode, especially with a larger number of unfolded submenus.\n"
 "\n"),
 menu_no_f_instructions[] = N_(
-" You do not have function keys support. Please follow the\n"
-" following instructions:\n"
-" Arrow keys navigate the menu.\n"
-" <Enter> or <right-arrow> selects submenus --->.\n"
-" Capital Letters are hotkeys.\n"
-" Pressing <Y> includes, <N> excludes, <M> modularizes features.\n"
-" Pressing SpaceBar toggles between the above options.\n"
-" Press <Esc> or <left-arrow> to go back one menu,\n"
-" <?> or <h> for Help, </> for Search.\n"
-" <1> is interchangeable with <F1>, <2> with <F2>, etc.\n"
-" Legend: [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
-" <Esc> always leaves the current window.\n"),
+"Legend:  [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
+"Submenus are designated by a trailing \"--->\".\n"
+"\n"
+"Use the following keys to navigate the menus:\n"
+"Move up or down by any of <Up> <Down> keys.\n"
+"To enter a submenu use any of <Enter> <Right> keys.\n"
+"To go back to the parent menu use any of <Esc> <Left> keys.\n"
+"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
+"Pressing <Space> cycles through the available options.\n"
+"To search for menu entries use key </>.\n"
+"<Esc> always leaves the current window.\n"
+"\n"
+"You do not have function keys support.\n"
+"Use key <1> instead of <F1>, <2> instead of <F2>, etc.\n"
+"For verbose global help use key <1>.\n"
+"For help related to the current menu entry use any of <?> <h> keys.\n"),
 menu_instructions[] = N_(
-" Arrow keys navigate the menu.\n"
-" <Enter> or <right-arrow> selects submenus --->.\n"
-" Capital Letters are hotkeys.\n"
-" Pressing <Y> includes, <N> excludes, <M> modularizes features.\n"
-" Pressing SpaceBar toggles between the above options\n"
-" Press <Esc>, <F5> or <left-arrow> to go back one menu,\n"
-" <?>, <F1> or <h> for Help, </> for Search.\n"
-" <1> is interchangeable with <F1>, <2> with <F2>, etc.\n"
-" Legend: [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
-" <Esc> always leaves the current window\n"),
+"Legend:  [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
+"Submenus are designated by a trailing \"--->\".\n"
+"\n"
+"Use the following keys to navigate the menus:\n"
+"Move up or down by any of <Up> <Down> keys.\n"
+"To enter a submenu use any of <Enter> <Right> keys.\n"
+"To go back to the parent menu use any of <Esc> <Left> keys.\n"
+"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
+"Pressing <Space> cycles through the available options.\n"
+"To search for menu entries use key </>.\n"
+"<Esc> always leaves the current window.\n"
+"\n"
+"Key <1> may be used instead of <F1>, <2> instead of <F2>, etc.\n"
+"For verbose global help use key <F1>.\n"
+"For help related to the current menu entry use any of <?> <h> keys.\n"),
 radiolist_instructions[] = N_(
-" Use the arrow keys to navigate this window or\n"
-" press the hotkey of the item you wish to select\n"
-" followed by the <SPACE BAR>.\n"
-" Press <?>, <F1> or <h> for additional information about this option.\n"),
+"Use <Up> <Down> <Home> <End> keys to navigate this\n"
+"radiolist followed by <Space>.\n"
+"For help related to the current entry use any of <?> <h> keys.\n"
+"For global help use key <F1>.\n"),
 inputbox_instructions_int[] = N_(
 "Please enter a decimal value.\n"
 "Fractions will not be accepted.\n"
-"Press <RETURN> to accept, <ESC> to cancel."),
+"Press <Enter> to apply, <Esc> to cancel."),
 inputbox_instructions_hex[] = N_(
 "Please enter a hexadecimal value.\n"
-"Press <RETURN> to accept, <ESC> to cancel."),
+"Press <Enter> to apply, <Esc> to cancel."),
 inputbox_instructions_string[] = N_(
 "Please enter a string value.\n"
-"Press <RETURN> to accept, <ESC> to cancel."),
+"Press <Enter> to apply, <Esc> to cancel."),
 setmod_text[] = N_(
-"This feature depends on another which\n"
-"has been configured as a module.\n"
-"As a result, this feature will be built as a module."),
+"This feature depends on another feature which has been configured as a\n"
+"module.  As a result, the current feature will be built as a module too."),
 load_config_text[] = N_(
 "Enter the name of the configuration file you wish to load.\n"
-"Accept the name shown to restore the configuration you\n"
-"last retrieved.  Leave blank to abort."),
+"Accept the name shown to restore the configuration you retrieved\n"
+"last.  Leave empty to abort."),
 load_config_help[] = N_(
-"\n"
 "For various reasons, one may wish to keep several different\n"
 "configurations available on a single machine.\n"
 "\n"
 "If you have saved a previous configuration in a file other than the\n"
-"default one, entering its name here will allow you to modify that\n"
-"configuration.\n"
+"default one, entering its name here will allow you to load and modify\n"
+"that configuration.\n"
 "\n"
-"If you are uncertain, then you have probably never used alternate\n"
-"configuration files.  You should therefor leave this blank to abort.\n"),
+"Leave empty to abort.\n"),
 save_config_text[] = N_(
 "Enter a filename to which this configuration should be saved\n"
-"as an alternate.  Leave blank to abort."),
+"as an alternate.  Leave empty to abort."),
 save_config_help[] = N_(
-"\n"
-"For various reasons, one may wish to keep different configurations\n"
-"available on a single machine.\n"
+"For various reasons, one may wish to keep several different\n"
+"configurations available on a single machine.\n"
 "\n"
 "Entering a file name here will allow you to later retrieve, modify\n"
 "and use the current configuration as an alternate to whatever\n"
 "configuration options you have selected at that time.\n"
 "\n"
-"If you are uncertain what all this means then you should probably\n"
-"leave this blank.\n"),
+"Leave empty to abort.\n"),
 search_help[] = N_(
-"\n"
-"Search for symbols and display their relations. Regular expressions\n"
-"are allowed.\n"
-"Example: search for \"^FOO\"\n"
+"Search for symbols (configuration variable names CONFIG_*) and display\n"
+"their relations.  Regular expressions are supported.\n"
+"Example:  Search for \"^FOO\".\n"
 "Result:\n"
 "-----------------------------------------------------------------\n"
 "Symbol: FOO [ = m]\n"
@@ -229,26 +222,26 @@ search_help[] = N_(
 "Selects: LIBCRC32\n"
 "Selected by: BAR\n"
 "-----------------------------------------------------------------\n"
-"o The line 'Prompt:' shows the text used in the menu structure for\n"
-"  this symbol\n"
-"o The 'Defined at' line tell at what file / line number the symbol\n"
-"  is defined\n"
-"o The 'Depends on:' line tell what symbols needs to be defined for\n"
-"  this symbol to be visible in the menu (selectable)\n"
-"o The 'Location:' lines tell where in the menu structure this symbol\n"
-"  is located\n"
-"    A location followed by a [ = y] indicate that this is a selectable\n"
-"    menu item - and current value is displayed inside brackets.\n"
-"o The 'Selects:' line tell what symbol will be automatically\n"
-"  selected if this symbol is selected (y or m)\n"
-"o The 'Selected by' line tell what symbol has selected this symbol\n"
+"o  The line 'Prompt:' shows the menu text displayed for this symbol in\n"
+"   the menu hierarchy.\n"
+"o  The 'Defined at' line tells at what file / line number the symbol is\n"
+"   defined.\n"
+"o  The 'Depends on:' line tells, what symbols need to be defined for\n"
+"   this symbol to be visible and selectable in the menu.\n"
+"o  The 'Location:' lines tell, where in the menu structure this symbol\n"
+"   is located.  A location followed by a [ = y] indicates that this is\n"
+"   a selectable menu item, and the current value is displayed inside\n"
+"   brackets.\n"
+"o  The 'Selects:' line tells, what symbol will be automatically selected\n"
+"   if this symbol is selected (y or m).\n"
+"o  The 'Selected by' line tells what symbol has selected this symbol.\n"
 "\n"
 "Only relevant lines are shown.\n"
 "\n\n"
 "Search examples:\n"
-"Examples: USB  => find all symbols containing USB\n"
-"          ^USB => find all symbols starting with USB\n"
-"          USB$ => find all symbols ending with USB\n"
+"USB  => find all symbols containing USB\n"
+"^USB => find all symbols starting with USB\n"
+"USB$ => find all symbols ending with USB\n"
 "\n");
 
 struct mitem {
@@ -392,7 +385,7 @@ static void print_function_line(void)
 static void handle_f1(int *key, struct menu *current_item)
 {
 	show_scroll_win(main_window,
-			_("README"), _(nconf_readme));
+			_("Global help"), _(nconf_global_help));
 	return;
 }
 
@@ -407,7 +400,7 @@ static void handle_f2(int *key, struct m
 static void handle_f3(int *key, struct menu *current_item)
 {
 	show_scroll_win(main_window,
-			_("Instructions"),
+			_("Short help"),
 			_(current_instructions));
 	return;
 }

-- 
Roland Eggner

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v3 2/3] kconfig: nconf:  rewrite labels of function keys line
  2013-01-26 19:19 [PATCH v3 1/3] kconfig: nconf: rewrite help texts Roland Eggner
@ 2013-01-26 19:37 ` Roland Eggner
  2013-01-26 21:28 ` [PATCH v3 3/3] kconfig: nconf: add vi-style navigation keys Roland Eggner
  1 sibling, 0 replies; 3+ messages in thread
From: Roland Eggner @ 2013-01-26 19:37 UTC (permalink / raw)
  To: Yann E. MORIN, Dmitry Voytik, Michal Marek, Stephen Boyd,
	linux-kernel, linux-kbuild

[-- Attachment #1: Type: text/plain, Size: 1207 bytes --]

>From: Roland Eggner <edvx1@systemanalysen.net>

More reasonable labels of function keys line.  Rename labels and keep menu 
width, as required for fitting on COLUMNS=80 terminals:
•  s/Insts/Help 2/
•  s/Config/ShowAll/

Signed-off-by: Roland Eggner <edvx1@systemanalysen.net>
---
scripts/kconfig/nconf.c |  8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)

To be applied on vanilla 3.8-rc3

diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c
--- a/scripts/kconfig/nconf.c
+++ b/scripts/kconfig/nconf.c
@@ -312,19 +312,19 @@ struct function_keys function_keys[] = {
 	},
 	{
 		.key_str = "F2",
-		.func = "Sym Info",
+		.func = "SymInfo",
 		.key = F_SYMBOL,
 		.handler = handle_f2,
 	},
 	{
 		.key_str = "F3",
-		.func = "Insts",
+		.func = "Help 2",
 		.key = F_INSTS,
 		.handler = handle_f3,
 	},
 	{
 		.key_str = "F4",
-		.func = "Config",
+		.func = "ShowAll",
 		.key = F_CONF,
 		.handler = handle_f4,
 	},
@@ -348,7 +348,7 @@ struct function_keys function_keys[] = {
 	},
 	{
 		.key_str = "F8",
-		.func = "Sym Search",
+		.func = "SymSearch",
 		.key = F_SEARCH,
 		.handler = handle_f8,
 	},

-- 
Roland Eggner

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v3 3/3] kconfig: nconf:  add vi-style navigation keys
  2013-01-26 19:19 [PATCH v3 1/3] kconfig: nconf: rewrite help texts Roland Eggner
  2013-01-26 19:37 ` [PATCH v3 2/3] kconfig: nconf: rewrite labels of function keys line Roland Eggner
@ 2013-01-26 21:28 ` Roland Eggner
  1 sibling, 0 replies; 3+ messages in thread
From: Roland Eggner @ 2013-01-26 21:28 UTC (permalink / raw)
  To: Yann E. MORIN, Dmitry Voytik, Michal Marek, Stephen Boyd,
	linux-kernel, linux-kbuild

[-- Attachment #1: Type: text/plain, Size: 11741 bytes --]

>From: Roland Eggner <edvx1@systemanalysen.net>

Add vi-style navigation keys, based on initial work by Dmitry Voytik.  Users of 
netbooks, notebooks and other devices with keyboards lacking a dedicated number 
keypad will enjoy.  And advanced users of vim, less, mutt, … having navigation 
by keys hjkl “hardwired” in their fingers will “fly” :)
In global help window called by key <F1> provide a table with all current and 
added keybindings:

| Menu navigation keys        plain style             vi-style           |
| ---------------------------------------------------------------------- |
| Linewise up                 <Up>                    <k>                |
| Linewise down               <Down>                  <j>                |
| Pagewise up                 <Page Up>               <Ctrl-b>  <Ctrl-p> |
| Pagewise down               <Page Down>             <Ctrl-f>  <Ctrl-n> |
| First entry                 <Home>                  <g>                |
| Last entry                  <End>                   <G>                |
| Enter a submenu             <Right>  <Enter>        <l>                |
| Go back to parent menu      <Left>   <Esc>  <F5>    <h>                |
| Close a help window         <Enter>  <Esc>  <F5>                       |
| Close entry window, apply   <Enter>                                    |
| Close entry window, forget  <Esc>  <F5>                                |
| Start incremental, case-insensitive search for STRING in menu entries, |
|     no regex support, STRING is displayed in upper left corner         |
|                             </>STRING                                  |
|     Remove last character   <Backspace>                                |
|     Jump to next hit        <Down>                                     |
|     Jump to previous hit    <Up>                                       |
| Exit menu search mode       </>  <Esc>                                 |
| Search for configuration variables with or without leading CONFIG_     |
|                             <F8>RegExpr<Enter>                         |
| Verbose search help         <F8><F1>                                   |
| ---------------------------------------------------------------------- |

Intention is an easy to memorize set of keybindings resembling user interfaces 
of other frequently used software, not a strict clone of the historic vi user 
interface.  In contrast to historic vi, <Ctrl-f> <Ctrl-b> is used for 
characterwise right and left movement by libreadline (bash, xfsprogs, bc, gdb, 
python, ruby, hunspell, mysql, sqlite, gnupg, xine-ui, parted …).  Thus pagewise 
movement by <Ctrl-f> <Ctrl-b> would be weird for my fingers, so I have added 
<Ctrl-n> <Ctrl-p>, resembling e.g. thread-wise navigation in mutt message lists.

To call help related to the current menu entry, currently any of the keys <?> 
<h> may be used.  To solve the conflict with new navigation key <h>, this is 
changed to keys <?> <H>.  Lesser experienced users will not note, they use <?>.  
And advanced users will consider, how much faster they can work, when all 
frequently used keys are in the middle of the keyboard.

Signed-off-by: Dmitry Voytik <dvv.kernel@gmail.com>
Signed-off-by: Roland Eggner <edvx1@systemanalysen.net>
---
scripts/kconfig/nconf.c |  81 ++++++++++++++++++++++++++++++------------------
1 files changed, 51 insertions(+), 30 deletions(-)

To be applied on vanilla 3.8-rc3

diff --git a/scripts/kconfig/nconf.c b/scripts/kconfig/nconf.c
--- a/scripts/kconfig/nconf.c
+++ b/scripts/kconfig/nconf.c
@@ -12,6 +12,8 @@
 #include "nconf.h"
 #include <ctype.h>
 
+#define KEY_CONTROL(k) ((k) & 0x1f)
+
 static const char nconf_global_help[] = N_(
 "Help windows\n"
 "------------\n"
@@ -21,7 +23,7 @@ static const char nconf_global_help[] = 
 "o  A short version of the global help is available by key <F3>.\n"
 "\n"
 "o  Local help:  To get help related to the current menu entry, use any\n"
-"   of <?> <h> keys, or if in a data entry window then use <F1> key.\n"
+"   of <?> <H> keys, or if in a data entry window then use <F1> key.\n"
 "\n"
 "\n"
 "Menu entries\n"
@@ -47,16 +49,16 @@ static const char nconf_global_help[] = 
 "A trailing \"--->\" designates a submenu.\n"
 "\n"
 "\n"
-"Menu navigation keys\n"
+"Menu navigation keys        plain style             vi-style\n"
 "----------------------------------------------------------------------\n"
-"Linewise up                 <Up>\n"
-"Linewise down               <Down>\n"
-"Pagewise up                 <Page Up>\n"
-"Pagewise down               <Page Down>\n"
-"First entry                 <Home>\n"
-"Last entry                  <End>\n"
-"Enter a submenu             <Right>  <Enter>\n"
-"Go back to parent menu      <Left>   <Esc>  <F5>\n"
+"Linewise up                 <Up>                    <k>\n"
+"Linewise down               <Down>                  <j>\n"
+"Pagewise up                 <Page Up>               <Ctrl-b>  <Ctrl-p>\n"
+"Pagewise down               <Page Down>             <Ctrl-f>  <Ctrl-n>\n"
+"First entry                 <Home>                  <g>\n"
+"Last entry                  <End>                   <G>\n"
+"Enter a submenu             <Right>  <Enter>        <l>\n"
+"Go back to parent menu      <Left>   <Esc>  <F5>    <h>\n"
 "Close a help window         <Enter>  <Esc>  <F5>\n"
 "Close entry window, apply   <Enter>\n"
 "Close entry window, forget  <Esc>  <F5>\n"
@@ -90,8 +92,8 @@ static const char nconf_global_help[] = 
 "\n"
 "Text Box (Help Window)\n"
 "----------------------\n"
-"Use movement keys <Down> <Up> <PageDown> <PageUp> <End> <Home> as listed in\n"
-"table above.\n"
+"Use movement keys <Down> <Up> <j> <k> <PageDown> <PageUp> <End> <Home>\n"
+"as listed in table above.\n"
 "\n"
 "Press any of <Enter> <Esc> <q> <F5> <F9> to exit.\n"
 "\n"
@@ -134,9 +136,9 @@ menu_no_f_instructions[] = N_(
 "Submenus are designated by a trailing \"--->\".\n"
 "\n"
 "Use the following keys to navigate the menus:\n"
-"Move up or down by any of <Up> <Down> keys.\n"
-"To enter a submenu use any of <Enter> <Right> keys.\n"
-"To go back to the parent menu use any of <Esc> <Left> keys.\n"
+"Move up or down by any of <Up> <Down> <k> <j> keys.\n"
+"To enter a submenu use any of <Enter> <Right> <l> keys.\n"
+"To go back to the parent menu use any of <Esc> <Left> <h> keys.\n"
 "Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
 "Pressing <Space> cycles through the available options.\n"
 "To search for menu entries use key </>.\n"
@@ -145,15 +147,15 @@ menu_no_f_instructions[] = N_(
 "You do not have function keys support.\n"
 "Use key <1> instead of <F1>, <2> instead of <F2>, etc.\n"
 "For verbose global help use key <1>.\n"
-"For help related to the current menu entry use any of <?> <h> keys.\n"),
+"For help related to the current menu entry use any of <?> <H> keys.\n"),
 menu_instructions[] = N_(
 "Legend:  [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
 "Submenus are designated by a trailing \"--->\".\n"
 "\n"
 "Use the following keys to navigate the menus:\n"
-"Move up or down by any of <Up> <Down> keys.\n"
-"To enter a submenu use any of <Enter> <Right> keys.\n"
-"To go back to the parent menu use any of <Esc> <Left> keys.\n"
+"Move up or down by any of <Up> <Down> <k> <j> keys.\n"
+"To enter a submenu use any of <Enter> <Right> <l> keys.\n"
+"To go back to the parent menu use any of <Esc> <Left> <h> keys.\n"
 "Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
 "Pressing <Space> cycles through the available options.\n"
 "To search for menu entries use key </>.\n"
@@ -161,11 +163,11 @@ menu_instructions[] = N_(
 "\n"
 "Key <1> may be used instead of <F1>, <2> instead of <F2>, etc.\n"
 "For verbose global help use key <F1>.\n"
-"For help related to the current menu entry use any of <?> <h> keys.\n"),
+"For help related to the current menu entry use any of <?> <H> keys.\n"),
 radiolist_instructions[] = N_(
-"Use <Up> <Down> <Home> <End> keys to navigate this\n"
+"Use <Up> <Down> <Home> <End> <k> <j> <g> <G> keys to navigate this\n"
 "radiolist followed by <Space>.\n"
-"For help related to the current entry use any of <?> <h> keys.\n"
+"For help related to the current entry use any of <?> <H> keys.\n"
 "For global help use key <F1>.\n"),
 inputbox_instructions_int[] = N_(
 "Please enter a decimal value.\n"
@@ -1101,24 +1103,32 @@ static void conf(struct menu *menu)
 				break;
 			switch (res) {
 			case KEY_DOWN:
+			case 'j':
 				menu_driver(curses_menu, REQ_DOWN_ITEM);
 				break;
 			case KEY_UP:
+			case 'k':
 				menu_driver(curses_menu, REQ_UP_ITEM);
 				break;
 			case KEY_NPAGE:
+			case KEY_CONTROL('f'):
+			case KEY_CONTROL('n'):
 				menu_driver(curses_menu, REQ_SCR_DPAGE);
 				break;
 			case KEY_PPAGE:
+			case KEY_CONTROL('b'):
+			case KEY_CONTROL('p'):
 				menu_driver(curses_menu, REQ_SCR_UPAGE);
 				break;
 			case KEY_HOME:
+			case 'g':
 				menu_driver(curses_menu, REQ_FIRST_ITEM);
 				break;
 			case KEY_END:
+			case 'G':
 				menu_driver(curses_menu, REQ_LAST_ITEM);
 				break;
-			case 'h':
+			case 'H':
 			case '?':
 				show_help((struct menu *) item_data());
 				break;
@@ -1126,14 +1136,15 @@ static void conf(struct menu *menu)
 			if (res == 10 || res == 27 ||
 				res == 32 || res == 'n' || res == 'y' ||
 				res == KEY_LEFT || res == KEY_RIGHT ||
-				res == 'm')
+				res == 'h' || res == 'l' || res == 'm')
 				break;
 			refresh_all_windows(main_window);
 		}
 
 		refresh_all_windows(main_window);
 		/* if ESC or left*/
-		if (res == 27 || (menu != &rootmenu && res == KEY_LEFT))
+		if (res == 27 || (menu != &rootmenu
+			&& (res == 'h' || res == KEY_LEFT)))
 			break;
 
 		/* remember location in the menu */
@@ -1155,6 +1166,7 @@ static void conf(struct menu *menu)
 			else if (item_is_tag('m'))
 				conf(submenu);
 			break;
+		case 'l':
 		case KEY_RIGHT:
 		case 10: /* ENTER WAS PRESSED */
 			switch (item_tag()) {
@@ -1286,36 +1298,44 @@ static void conf_choice(struct menu *men
 				break;
 			switch (res) {
 			case KEY_DOWN:
+			case 'j':
 				menu_driver(curses_menu, REQ_DOWN_ITEM);
 				break;
 			case KEY_UP:
+			case 'k':
 				menu_driver(curses_menu, REQ_UP_ITEM);
 				break;
 			case KEY_NPAGE:
+			case KEY_CONTROL('f'):
+			case KEY_CONTROL('n'):
 				menu_driver(curses_menu, REQ_SCR_DPAGE);
 				break;
 			case KEY_PPAGE:
+			case KEY_CONTROL('b'):
+			case KEY_CONTROL('p'):
 				menu_driver(curses_menu, REQ_SCR_UPAGE);
 				break;
 			case KEY_HOME:
+			case 'g':
 				menu_driver(curses_menu, REQ_FIRST_ITEM);
 				break;
 			case KEY_END:
+			case 'G':
 				menu_driver(curses_menu, REQ_LAST_ITEM);
 				break;
-			case 'h':
+			case 'H':
 			case '?':
 				show_help((struct menu *) item_data());
 				break;
 			}
-			if (res == 10 || res == 27 || res == ' ' ||
-					res == KEY_LEFT){
+			if (res == 10 || res == 27 || res == ' '
+				|| res == 'h' || res == KEY_LEFT){
 				break;
 			}
 			refresh_all_windows(main_window);
 		}
 		/* if ESC or left */
-		if (res == 27 || res == KEY_LEFT)
+		if (res == 27 || res == 'h' || res == KEY_LEFT)
 			break;
 
 		child = item_data();
@@ -1324,10 +1344,11 @@ static void conf_choice(struct menu *men
 		switch (res) {
 		case ' ':
 		case  10:
+		case 'l':
 		case KEY_RIGHT:
 			sym_set_tristate_value(child->sym, yes);
 			return;
-		case 'h':
+		case 'H':
 		case '?':
 			show_help(child);
 			active = child->sym;


-- 
Roland Eggner

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-01-26 21:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-26 19:19 [PATCH v3 1/3] kconfig: nconf: rewrite help texts Roland Eggner
2013-01-26 19:37 ` [PATCH v3 2/3] kconfig: nconf: rewrite labels of function keys line Roland Eggner
2013-01-26 21:28 ` [PATCH v3 3/3] kconfig: nconf: add vi-style navigation keys Roland Eggner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).