Provided by: smenu_0.9.17-1_amd64 bug

NAME

       smenu  -  filter that allows one to interactively select a word from stdin and outputs the
       selection to stdout.

SYNOPSIS

         [*-h|-help]
         [*-H|-long_help]
         [*-?|-u|-usage]
         [*-V|-version]
         [-n|-lines|-height [height]]
         [-i|-in|-inc|-incl|-include... regex]
         [-e|-ex|-exc|-excl|-exclude... regex]
         [-m|-msg|-message|-title message]
         [-!|-int|-int_string [string]]
         [-a|-attr|-attributes prefix:attr...]
         [-1|-l1|-level1 regex [attr]]
         [-2|-l2|-level2 regex [attr]]
         [-3|-l3|-level3 regex [attr]]
         [-4|-l4|-level4 regex [attr]]
         [-5|-l5|-level5 regex [attr]]
         [-T|-tm|-tag|-tag_mode [delim]]
         [-z|-zap|-zap_glyphs bytes]
         [-P|-pm|-pin|-pin_mode [delim]]
         [-p|-at|-auto_tag]
         [-N|-number... [regex...]]
         [-U|-unnumber... [regex...]]
         [-F|-en|-embedded_number]
         [-D|-data|-options [parameter...]
         [-b|-blank]
         [-M|-middle|-center]
         [-d|-restore|-delete|-clean|-delete_window|-clean_window]
         [-c|-col|-col_mode|-column]
         [-l|-line|-line_mode]
         [-t|-tab|-tab_mode|-tabulate_mode [cols]]
         [-w|-wide|-wide_mode]
         [-C|-cs|-cols|-cols_select... selector...]
         [-R|-rs|-rows|-rows_select... selector...]
         [-A|-fc|-first_column regex]
         [-Z|-lc|-last_column regex]
         [-g|-gutter [string]]
         [-k|-ks|-keep_spaces]
         [-W|-ws|-wd|-word_delimiters|-word_separators bytes]
         [-L|-ls|-ld|-line-delimiters|-line_separators bytes]
         [-q|-no_bar|-no-scroll_bar]
         [-S|-subst... /regex/repl/opts]
         [-I|-si|-subst_included... /regex/repl/opts]
         [-E|-se|-subst_excluded... /regex/repl/opts]
         [-/|-search_method prefix|substring|fuzzy]
         [-s|-sp|-start|-start_pattern pattern]
         [-x|-tmout|-timeout type [word] delay]
         [-X|-htmout|-hidden_timeout type [word] delay]
         [-r|-auto_validate]
         [-v|-vb|-visual_bell]
         [-Q|-ignore_quotes]

         selectors ::= col1[-col2],...|row1[-row2],...|RE,...
         parameter ::= [l|r:<char>]|[a:left|right]|[p:included|all|[w:<num>]|
                       [f:yes|no]|[o:<num>[+]]|[n:<num>]|[i:<num>]|[d:<char>]|
                       [s:<num>]|[h:trim|cut|keep]
         attr      ::= [fg][/bg][,style]
         RE        ::= <char>regex<char>

         selectors and RE can be freely mixed.
         <char> in RE is any non-blank ASCII character except ','.

       Note that some parameters require that others have been previously entered in the  command
       line to be accepted.

DESCRIPTION

       This  small  utility  acts  as  a filter when no input file is given (reads from stdin and
       writes to stdout) or takes its inputs from that file.

       All the words read are presented in a scrolling window on  the  terminal  at  the  current
       cursor position without having previously cleared the screen.

       The selection cursor is initially positioned on the first selectable word by default.

       There  are  options  to  explicitly  or implicitly include or exclude words using extended
       regular expressions.  Note that when some words are explicitly excluded they can no longer
       be re-included after.

       Excluded words are skipped when the selection cursor is moved and cannot be searched for.

       The  -W|-ws|-wd|-word_delimiters|-word_separators option can be used to set the characters
       (or multibyte sequences) which will be used to  delimit  the  input  words.   The  default
       delimiters are: SPACE, \t and \n.

       The -L|-ls|-ld|-line-delimiters|-line_separators has a similar meaning for lines.

       Special  character sequences formed by a \ followed by one of the characters a b t n v f r
       and \ are understood and have their traditional meanings.

       UTF-8 sequences introduced by \u and \U are also understood.

       Warning, when used together, it is important to know that all sequences starting  with  \U
       will be interpreted before the start of interpretation of sequences starting with \u.

       \u  can  be  followed  by 2,4,6 or 8 hexadecimal characters composing an UTF-8 bytestring.
       Here is an example of using \u to compose a lowercase latin e with acute accent: \uc3a9.

       \U must be followed by  exactly  6  hexadecimal  digits,  including  leading  zeros,  that
       represent  a  unicode  codepoint according to ISO 10646 UCS-4.  The lowercase latin e with
       acute of the previous example  (codepoint  U+00E9)  can  then  be  represented  using  the
       notation: \U0000e9.

       Note that with most shells, the \ before u and U need to be protected or escaped.

       Quotations  (single  and  double)  in  the  input  stream  can  be used to ignore the word
       separators so that a group of words are taken as a single entity.

       Non printable characters  in  words  that  are  not  delimiters  are  converted  to  their
       traditional form (\n for end-of-line, \t for tabulation...) by default.

       An  invalid  UTF-8 sequence or other non-printable character will be replaced by a dot (.)
       by default.

       There is nevertheless a possibility to change this  substitution  character  with  another
       ASCII printable one with the help of the command line option -.|-dot|-invalid.

       Warning,  UTF-8  encoded  codepoints are quietly converted into the substitution character
       when the user locale is not UTF-8 aware like POSIX or C by example.

       Words containing only spaces, entered directly or resulting from a substitution, are  also
       rejected  unless they are not selectable.  This allows special effects like creating blank
       lines for example.  These words are also kept in column mode, selectable or not.

       smenu has an option to define a set of characters  or  UTF-8  sequences  which  should  be
       ignored  when  reading  words.  This can be very useful when dealing with inputs where the
       EOL sequence consists in more than one character.

       A typical example is DOS or Windows files with lines ending with CRLF.  In such a case one
       might decide to ignore all CR characters from the input.

   Moving among words
       The  cursor  can be moved in every direction by using the keyboard arrow keys (,,,) or
       the vi direction keys (h, j, k and l).  HOME, END, PgDn and PgUp  can  also  be  used,  if
       available, and have the following meanings:

       , h                            Previous word
       CTRL , H                       Start of line
       , k                            Previous line
       PgUp, K                         Previous page
       HOME                            First word of the window
       CTRL HOME, SHIFT HOME, CTRL K   First word

       , l                            Next word
       CTRL , L                       End of line
       , j                            Next line
       PgDn, J                         Next page
       END                             Last word of the window
       CTRL END, SHIFT END, CTRL J     Last word

       CTRL /H  (resp. CTRL /L) places the cursor so that a maximum number of words (selectable
       or not) are visible to the left (reps. right) side of the window.

       If -N|-number, -U|-unnumber or -F|-en|-embedded_number are used, then it becomes  possible
       to  directly  access  a  word  by  entering its number.  The numbering created using these
       option is done before  any  words  substitution  done  using  -S|-subst  /regex/repl/opts,
       -I|-si|-subst_included or -E|-se|-subst_excluded.

       Using  a  combination of these options, it is easy to control which words will be numbered
       by adding a special symbol in it before  using  smenu  and  removing  it  (substituted  by
       nothing) afterward using -I|-si|-subst_included by example.

       -E|-se|-subst_excluded gives another way to do that, see below or more.

   Searching for words
       A word can be searched using different algorithms: prefix, substring of fuzzy.

       prefix (keys ^ or =):
              The sequence of characters entered must match the beginning of a word.

       substring (keys " or '):
              The sequence of characters entered must match a substring in a word.

       fuzzy (keys ~ or *):
              All the characters in the entered sequence must appear in the same order in a word,
              but need not be consecutive.

              The case is also ignored.

              Note that spaces and tabs at the beginning  and  end  of  words  are  ignored  when
              searching for substrings or fuzzy strings.

              The  cursor  is  placed, if possible, on the first matching word having the minimum
              number of gaps between the first and last matching character,  see  the  difference
              between the actions of the s/S and n/N keys below.

              This  method  also  tolerates intermediate symbols not appearing in the words which
              will be ignored.  If this is  the  case,  the  attributes  of  the  approximatively
              matching  words are changed into an error versions of them to warn the user to this
              situation.

              The erroneous symbols will not be inserted in the search buffer.

              For example: if the word abcdef is present in the  standard  input,  then  entering
              abxcdye  puts  abcdef  in  the  search  buffer and the word is added to the list of
              matching words and displayed with an error attribute (in red by default).

              This special state will persist until all the symbols following the first erroneous
              one are deleted (using backspace) or if ESC is pressed to cancel the search session
              and clear the search buffer.

       During a search session, the cursor changes and each character entered  is  added  in  (or
       removed  from)  the  search  buffer.   The  display is refreshed after each change in this
       buffer.

       A 10 seconds timeout (by default) automatically ends the current search session as if  the
       Enter  key  had  been pressed.  This timeout is reset each time a new key is hit in search
       mode.  This delay can be configured using the search entry in the timers  section  of  the
       configuration file as shown in the example in the configuration subsection.

       The  slash  key  (/)  can  also be used instead of any of these keys.  By default it is is
       programmed to do a fuzzy search but this can be changed by using the command  line  option
       (-/|-search_method) or by tuning a configuration file, see below.

       All  the  words matching the current search buffer are enhanced: The characters present in
       the current search buffer are highlighted in one way and the other characters  in  another
       way.  Both of these highlighting methods are configurable.

       If  the user has entered the search sequence: o, s, then the matching word "words" will be
       displayed as words when the fuzzy algorithm is in use depending of the display  attributes
       configured.

       ENTER  and  all cursor moves terminate the search session but do not clear the list of the
       matching words and the search buffer.

       The user can then use the n/s/SPACE keys (forward) and the N/S keys (backward) to navigate
       in the list of matching words,

       In  fuzzy  search  mode, the s/S keys attempt to move the cursor to the next/previous word
       whose matching part forms a substring of this word.  If no such matches exist, s/S and n/N
       do  the  same  things.   To  move  the  cursor  to  the next/previous fuzzy match, use the
       n/N/SPACE keys.  s means next substring match in this context  while  n  just  means  next
       match.

       If  the  user  hits  the HOME or END key during a search session then the list of matching
       words is reduced to the words starting  (respectively)  ending  with  the  current  search
       pattern  and  the  window  is  refreshed.   For  those  who  consider HOME and END as non-
       intuitive, the CTRL A and CTRL Z keys are also available in search mode as an alternative.
       This behaviour is persistent until the user hit the ESC or ENTER key.

       For  example,  if  the  search pattern in substring mode is sh and the user hits END, then
       only the words ending with sh will be added in the searched word list and enhanced.

       Note that when a matching word is selected, its enhanced characters only show one  of  the
       multiple matching possibilities.

       When  not in a search session ESC can be also used to clear the list of matching words and
       to reset the search buffer.

       In summary, here is the meaning of the special keys in search mode:

       Keys which clear the list of matching words.
       Key                             Meaning                    Closes
                                                                  the
                                                                  search

                                                                  session
       ───────────────────────────────────────────────────────────────────
       Esc                             Cancel search                Yes
       ───────────────────────────────────────────────────────────────────

       Keys which keep or update the list of matching words.
       Key                             Meaning                    Closes
                                                                  the
                                                                  search
                                                                  session
       ───────────────────────────────────────────────────────────────────
                                      Previous word                Yes
                                      Previous line                Yes
       CTRL                           Start of line                Yes
       PgUp                            Previous page                Yes
       CTRL HOME, SHIFT HOME, CTRL K   First word                   Yes

                                      Next word                    Yes
                                      Next line                    Yes
       CTRL                           END of line                  Yes
       PgDn                            Next pages                   Yes
       CTRL END, SHIFT END, CTRL J     Last word                    Yes

       HOME, CTRL A                    Only  keep   the   words     No
                                       starting with the search
                                       pattern
       END, CTRL Z                     Only  keep   the   words     No
                                       ending  with  the search
                                       pattern

       INS                             Tag word                     No
       DEL                             Untag word                   No
       ───────────────────────────────────────────────────────────────────

       Note that the search buffer is persistent as long as the same search algorithm is used and
       ESC has not been pressed.

   Selection and Exit
       Pressing q gives the possibility to exit without selecting anything.

       CTRL C (Abort) also allows you to exit the program immediately with a return code equal to
       128+SINGINT (by default) without selecting anything.  See the  -!|-int|-int_string  option
       for more information about the customization of the CTRL C behaviour.

       By  default, ENTER writes the selected word to stdout when not in search mode otherwise it
       exits from this mode and does nothing more.  If you want to be able to select a word  even
       when in search mode, use the -r|-auto_validate option to change this behavior.

   Tagging (multiple selections)
       When  the  tagging  is  activated  by  using  the  command  line  -T|-tm|-tag|-tag_mode or
       -P|-pm|-pin|-pin_mode option, then the keys t, T, INS and DEL can  be  used  to  tag/untag
       some  words.   These tagged words will then be output on the standard output when ENTER is
       pressed.

       t      Tag/untag or Pin/unpin the word under the cursor (toggle).

       T      Tag or pin the matching words if any.

       U      Untag or unpin the matching words if any.

       INS    Tag or pin the word under the cursor.

       DEL    Untag or unpin the word under the cursor.

   Help
       A small help message can be displayed when hitting ?.  This display will last for  10s  or
       until a valid key or ESC is pressed.

   Scroll bar
       A  scroll  bar is displayed at the right of the scrolling window.  Its appearance is meant
       to be classical but it has some particularities:

       * The scroll bar is not displayed if all the input words fit on only one line.

       * Otherwise, the scroll bar is always displayed except when the -q option  is  set.   This
         option completely disables the scroll bar display.

       * When the scrolling window has only one line, the scroll bar has only 3 states:

         - v when on all but the last line, indicating that you can go down to see more.

         - ^ when on the last line.

         - | otherwise.

       * When  there is more than one line to display, / means that the window displays the first
         line, \ the last line.  | is used to fill the gap,  see  below  the  different  possible
         configurations.

         \   \   ^   ^   \
         |   |   |   |   /
         /   v   /   v

       A  +  can  also  appear in the scroll bar in lieu of the vertical bar, giving the relative
       position of the cursor line in the bunch of input words.

   Terminal resizing (also see BUGS/LIMITATIONS)
       The windows is redrawn if the terminal is resized.  The redrawing is actually done only 1s
       after the end of the resizing to avoid artefacts on screen.  The cursor will remain on the
       current selected word but may be displayed at another place in the window.

   Unicode support
       This utility is Unicode aware  and  should  be  able  to  display  correctly  any  Unicode
       character  (even double-width ones) as long as the current encoding is UTF-8 (UTF-8 in the
       output of the locale command).

   Configuration
       If a file with adequate permissions and the same name as the executable but prefixed  with
       a dot is present in the current directory or in the user's home directory, then it will be
       parsed as a ini file.  The values read from  the  file  in  the  home  directory  will  be
       overridden by the ones read from the local directory (if it is present).

       Missing and bad keywords are silently skipped.

       The values read, if valid, override the default hard-coded ones.

       If a value is invalid an error message is shown and the program terminates.

       The values of the timers must be given in units of 1/10 of a second.

       Here is an example giving the syntax and the names of the keywords allowed:

       --8<------------------------------------------------------------------
       [colors]
         ; The terminal must have at least 8 colors and/or have attributes like bold
         ; and reverse for this to be useful
         ; if not the following settings will be ignored.

         method=ansi             ; classic | ansi (default)

         cursor=0/2              ; cursor attributes
         cursor_on_tag=0/2,u     ; cursor on tag attributes
         shift=6,b               ; shift symbol attributes
         message=0/3             ; message (title) attributes
         bar = 7/4,b             ; scroll bar attributes
         search_field = 0/6      ; search field attributes
         search_text = 7,bu      ; search text attributes
         match_field = 1,b       ; matching words field attributes
         match_text = 7,bu       ; matching words text attributes
         search_err_field = 1    ; approximate search field attributes
         search_err_text = 1,r   ; approximate search text attributes
         ; match_err_field = 3   ; approximate matching words field attributes
         match_err_text = 1      ; approximate matching words text attributes
         ; include = b           ; selectable color attributes
         exclude = 4/0,u         ; non-selectable color attributes
         tag = 0/5               ; tagged (selected) attributes
         daccess = 3,b           ; direct access tag attributes

         special1 = 7/4,b        ; attributes for the special level 1
         special2 = bu           ; attributes for the special level 2
         special3 = /3,b         ; attributes for the special level 3
         special4 = 7/4          ; attributes for the special level 4
         special5 = 7/2,b        ; attributes for the special level 5

       [window]
         lines = 7               ; default number of lines of the window

       [limits]
         word_length = 1024      ; arbitrary max length of input words (int)
         words = 32767           ; arbitrary max number of allowed input
                                 ; words (int)
         columns = 128           ; arbitrary max number of columns (int)

       [timers]
         search = 100            ; search timeout in 1/10 s
         help = 150              ; duration of the help message in 1/10 s
         window = 7              ; delay before redrawing if the size of the
                                 ; terminal's window change in 1/10 s
         direct_access = 6       ; duration allowed to add a new digit to
                                 ; the direct word access number in 1/10 s

       [misc]
         default_search_method = substring
       --8<------------------------------------------------------------------

       * The  method  keyword  can take the two possible values displayed above and determines if
         you want to use the native method (limited to 8 colors) of the ansi method (ISO  8613-6)
         if your terminal supports more than 8 colors.

         The default value corresponds to ansi.

         The  attributes  syntax  is [fg][/bg][,toggles] where fg and bg are numbers representing
         the foreground and background color and toggles is  a  strings  which  can  contain  the
         characters b, d, r, s, u and i  standing for bold, dim, reverse, standout, underline and
         italic.

       * Spaces are allowed anywhere in the lines and between them, even around the =.

       * Everything following a ; is ignored.

       * When undefined, the default limits are:

         words         32767
         word_length   512
         columns       256

OPTIONS

       Not all options may be available, depending on the current context.

       When smenu is called and before the first option is evaluated, it is in the Main  context.
       Each option can switch to another context in which only a subset of the options is usable.

       For each parameter described below, the contexts in which the associated option is defined
       as well as the context to which it leads, if any, are given.

       An option not defined in a context will force the end of the current context and  will  be
       recursively  evaluated  in  the  previous contexts until found (or not).  If not found, an
       error message is displayed and smenu is terminated.

       The contexts defined in smenu are:

       Main
         The default context

       Columns
         After the -c|-col|-col_mode|-column parameter.

       Lines
         After the -l|-line|-line_mode parameter.

       Tabulations
         After the -t|-tab|-tab_mode|-tabulate_mode parameter.

       Tagging
         After the -T|-tm|-tag|-tag_mode or -P|-pm|-pin|-pin_mode parameter.

       WARNING
         Here is a situation that may seem confusing at first glance.

         Imagine the only parameter command line parameter is -cols_select.

         Since this is a parameter of an option which is  not  valid  when  not  in  the  Columns
         context, it should have raised an error but it still seems to be accepted.

         The trick is: when not in column mode -cols_select is indeed not accepted but its prefix
         (-col) is valid.  The  options  are  thus  understood  as:  -col  -s_select.   The  same
         mechanism  occurs again as -s is also valid in column mode so the final understanding of
         the command line is: -col -s _select.

         In such a case, the user can set the environment variable CTXOPT_DEBUG  which  any  non-
         empty content.  When run again the following output will appear on the standard error:

       CTXOPT_DEBUG: Parameter: -cols_select. Evaluation context: Main.
       CTXOPT_DEBUG: Found a valid parameter as a prefix of -cols_select: -col.
       CTXOPT_DEBUG: Parameter: -col. Evaluation context: Main.
       CTXOPT_DEBUG: Switch to context Columns.
       CTXOPT_DEBUG: Parameter: -s_select. Evaluation context: Columns.
       CTXOPT_DEBUG: Found a valid parameter as a prefix of -s_select: -s.
       CTXOPT_DEBUG: Parameter: -s. Evaluation context: Columns.
       CTXOPT_DEBUG: Argument: _select.

       The  command  line:  -col  -cols_select 1 solves the issue in this case and indicates that
       only the first column should be selectable.  Note, however, that at least one argument for
       -cols_select is now required:

       CTXOPT_DEBUG: Parameter: -col. Evaluation context: Main.
       CTXOPT_DEBUG: Switch to context Columns.
       CTXOPT_DEBUG: Parameter: -cols_select. Evaluation context: Columns.
       CTXOPT_DEBUG: Argument: 1.

       The  -h|-help  and -?|-u|-usage options now display the help and synopsis of the available
       options in the current context.

       Example:
         smenu -col -u will only show the usage in the Columns context

       The contexts contain all the non-context-changing  options  so,  in  practice,  the  usage
       should be intuitive.  You may nevertheless have to adjust some scripts using the old smenu
       releases as I did in the lvm_menu example.

       Some of the advantages of this new system of options are:

       * Long parameter names are allowed One dash is  enough,  but  two  are  also  allowed  for
         compatibility reasons.

       * An option can be referenced by any number of parameters with short or long names.

       * Auto checking of missing mandatory options, duplicated option,...

       * Only options usable in the current context are allowed.

       This  option  management  system  is  explained  in  more  detail at https://github.com/p-
       gen/ctxopt.

       The description of each command line parameter is as follows:

       -h|-help
              (Allowed in all contexts.)

              Display a context specific help messages and exits.

       -H|-long_help
              (Allowed in the "Main" context.)

              Display a long (non context specific) help messages and exits.

       -?|-u|-usage
              (Allowed in all contexts.)

              Displays a short help message and exits.

       -V|-version
              (Allowed in the "Main" context.)

              The .smenu files in the user's home directory and  in  the  current  directory,  if
              present, will be ignored when this option is used.

       -n|-lines|-height [height]
              (Allowed in all contexts.)

              Gives the maximum number of lines in the scrolling selection window.

              If -n|-lines|-height is not present the number of lines will be set to 5.

              If  -n|-lines|-height  is present without argument, then the height of the terminal
              will be used to determine the number of lines.   This  remains  true  even  if  the
              terminal is resized.

              If  -n|-lines|-height is present with a numerical argument, this value will be used
              to determine the number of lines.

       -i|-in|-inc|-incl|-include... regex
              (Allowed in all contexts.)

              Sets the include filter to match the selectable words.  All the  other  words  will
              become implicitly non-selectable (excluded)

              -i|-in|-inc|-incl|-include can be used more than once with cumulative effect.

              \u and \U sequences can also be used in the regexp.

       -e|-ex|-exc|-excl|-exclude... regex
              (Allowed in all contexts.)

              Sets  the  exclude  filter  to  match  the  non-selectable  words.   All  the other
              selectable words will become implicitly selectable (included)

              -e|-ex|-exc|-excl|-exclude can be used more than once with cumulative effect.  This
              filter has a higher priority than the include filter.

              The    regex    selections    made    using    -i|-in|-inc|-incl|-include    and/or
              -e|-ex|-exc|-excl|-exclude are done before the possible words alterations  made  by
              -I|-si|-subst_included or -E|-se|-subst_excluded (see below).

              \u and \U sequences can also be used in the regexp.

       -m|-msg|-message|-title message
              (Allowed in all contexts.)

              Displays  a  message (title) above the window.  If the current locale is not UTF-8,
              then all UTF-8 characters will be replaced by the substitution character.

              \u and \U sequences can be used in the message.

              Note that the message will be truncated if it does not fit on a terminal line.

       -!|-int|-int_string [string]
              (Allowed in all contexts.)

              The optional string argument, when present, defines the string to be  used  as  the
              selection string when the CTRL C sequence is entered.

              If string is missing then nothing will be selected.

              In  all  cases, when -!|-int|-int_string is present in the command line, the return
              code of the program will be 0.

              This gives the user the choice to make the behaviour of CTRL C similar to that of q
              and  Q  or  to  that of the Unix shell leaving the shell with a return code greater
              than 128.

       -a|-attr|-attributes prefix:attr...
              (Allowed in all contexts.)

              Sets the display attributes of the elements displayed and the cursor.

              At least one attribute prefixed attribute must be given.

              prefix can take the following values:

              i      included words.

              e      excluded words.

              c      cursor.

              b      scroll bar.

              s      shift indicator.

              m      message (title).

              t      tagged words.

              ct     cursor on tagged words.

              sf     search field.

              st     search text.

              sfe    approximate search field with error.

              ste    approximate search text with error.

              mf     matching words field.

              mt     matching words text.

              mfe    matching words field with error.

              mte    matching words text with error.

              da     direct access tag.

              If more than one attribute is given, they must be separated by spaces.

              Example: -attr i:/5 e:4,br b:7/3,rb c:7/2,b

              See the the -1|-l1|-level1 option below  for  the  description  of  the  attributes
              syntax after the colon and an example.

       -1|-l1|-level1 regex [attr]

       -2|-l2|-level2 regex [attr]

       -3|-l3|-level3 regex [attr]

       -4|-l4|-level4 regex [attr]

       -5|-l5|-level5 regex [attr]
              (Allowed in all contexts.)

              Allows one to give a special display color to up to 5 classes of words specified by
              regular expressions.  They are called special levels.  Only selectable  words  will
              be considered.

              By  default,  the  5  special levels have their foreground color set to red, green,
              brown/yellow, purple and cyan.  All these  colors  also  can  be  set  or  modified
              permanently in the configuration files.  See the example file above for an example.

              The  optional  second  argument  (attr)  can  be  used  to  override the default or
              configured attributes of each class.  Its syntax is the same as the one used in the
              configuration file:
              [fg][/bg][,{b|d|r|s|u|i}] | [{b|d|r|s|u|i}]

              Examples of possible attributes are:
                2/0,bu green on black bold underline
                /2     green background
                5      text in purple
                rb     reverse bold

              \u and \U sequences can be used in the pattern.

       -z|-zap|-zap_glyphs bytes
              (Allowed in all contexts.)

              Initializes  a  set of UTF-8 characters to be ignored when reading words from stdin
              or a file.

              Example: The argument '\u0d\ue282ac,' means: ignore  all  commas,  Euro  signs  and
              carriage return characters when reading from stdin or a file.

              As shown above \u and \U sequences can be used in the bytes set.

       -T|-tm|-tag|-tag_mode [delim]
              (Allowed  in the following contexts: "Main", "Columns", "Lines", and "Tabulations",
              switches to the "Tagging" context.)

              Enables multiple selections or tag mode.  In this mode,  several  selectable  words
              can be selected without leaving the program.

              The  current  word  can  be  automatically  tagged when the ENTER key is pressed to
              complete the selection process if the -p|-at|-auto_tag option is also set or if  no
              word has been tagged.

              All  the  tagged  words  (and  possibly the world under the cursor) will be sent to
              stdout   separated   by   the   optional   argument   given   after   the    option
              -T|-tm|-tag|-tag_mode.

              Note than this separator can have more than one character, contain UTF-8 characters
              (in native or \u or \U form) and can even contain control character as in $'\n'.

              A space is used as the default separator if none is given.

              Caution: To get exactly the same behavior as in version  0.9.11  and  earlier,  you
              must also use the -p|-at|-auto_tag option.

       -P|-pm|-pin|-pin_mode [delim]
              (Allowed  in the following contexts: "Main", "Columns", "Lines", and "Tabulations",
              switches to the "Tagging" context.)

              Works like -T|-tm|-tag|-tag_mode  but,  unlike  -T|-tm|-tag|-tag_mode,  the  output
              depends  on  the  order  in which the words were tagged.  In other words, the first
              tagged word comes first in the output, the second tagged word comes  next,  and  so
              on.

       -p|-at|-auto_tag
              (Allowed in the "Tagging" context.)

              This  option  modifies  the  default  behavior  of  the  -T|-tm|-tag|-tag_mode  and
              -P|-pm|-pin|-pin_mode  options.   An  untagged  word  under  the  cursor  will   be
              automatically tagged when ENTER is pressed.

       -N|-number>da_ctx... [regex]
              (Allowed in the following contexts: "Main", "Columns", "Lines" and "Tabulation".)

              This  option  allows  you  to number selectable words that match a specific regular
              expression.  These numbers are numbered from 1  and  allow  direct  access  to  the
              words.

              To  use this functionality, the user must enter the number which corresponds to the
              desired entry digit per digit.

              Each new digit must be added in a time frame of 1/2 seconds (per default) otherwise
              the  number  is  considered  complete  and  a  newly entered digit will start a new
              number.  If the number does not exists, then the cursor is restored to it's initial
              position.

              The  sub-options of the -D|-data|-options option described below can change the way
              -N|-number sets and formats the numbers.

              This option accepts more than one argument and can  be  used  multiple  times  with
              cumulative effects.

              -N|-number, -U|-unnumber and -F|-en|-embedded_number can be mixed.

       -U|-unnumber>da_ctx... [regex]
              (Allowed in the following contexts: "Main", "Columns", "Lines" and "Tabulation".)

              This  option  allows one to unnumber words.  If placed after a previous -N|-number,
              it can be used to remove the numbering of selected words.  If  placed  before,  the
              word which doesn't match its regular expression will be numbered by default.

              This   mechanism   is   similar   to   to   the  inclusion/exclusion  of  words  by
              -i|-in|-inc|-incl|-include and -e|-ex|-exc|-excl|-exclude.

              This option accepts more than one argument and can  be  used  multiple  times  with
              cumulative effects.

              -U|-unnumber, -N|-number and -F|-en|-embedded_number can be mixed.

       -F|-en|-embedded_number
              (Allowed in the following contexts: "Main", "Columns", "Lines" and "Tabulation".)

              This  option  is  similar  to -N|-number but does not generate a continuous flow of
              numbers but extracts them from the word itself.

              With this option you can take full control of the numbering of the displayed  word.
              Note that the numbering does not need to be ordered.

              The resulting word after the extraction of the number must be non empty.

              Some sub-option are required, see the -D|-data|-options option described below.

              Notice  that  for this option to work correctly, all the embedded numbers must have
              the same number of digits.  To get that, a preprocessing may be  necessary  on  the
              words before using this program.

              -F|-en|-embedded_number, -N|-number and -U|-unnumber can be mixed.

       -D|-data|-options [parameter...]
              (Allowed in the Following contexts: "Main", "Columns", "Lines" and "Tabulations".)

              This  option  allows  one  to  change  the  default  behaviour  of  the -N|-number,
              -U|-unnumber and -F|-en|-embedded_number options.

              Its optional parameters are called sub-options and  must  respect  the  format  x:y
              where x can be:

              l (-F|-en|-embedded_number, -N|-number and -U|-unnumber options)
                     Here  y  is the UTF-8 character (in native or \u or \U form) to print before
                     the number.  The default is a single space.

              r (-F|-en|-embedded_number, -N|-number and -U|-unnumber options)
                     Here y is the UTF-8 character (in native or \u or \U form)  to  print  after
                     the number.  The default is ).

              a (-F|-en|-embedded_number, -N|-number and -U|-unnumber options)
                     Here  y  is  'left'  (or  one  of  its  prefixes) if the number must be left
                     aligned, or 'right' (or one of its prefixes) if it must  be  right  aligned.
                     The default is right.

              p (-F|-en|-embedded_number, -N|-number and -U|-unnumber options)
                     Here  y  is  'included' or 'all' for the initial padding of the non numbered
                     words.  The keyword 'included' means that only included word will be  padded
                     while 'all' means pad all words.

                     The default is all. These keywords can be abbreviated.

              w (-F|-en|-embedded_number, -N|-number and -U|-unnumber options)
                     Here y is the width of the number between 1 and 5 included.

              f (-F|-en|-embedded_number, -N|-number and -U|-unnumber options)
                     Here  y  controls  if  the  numbering  must follow the last extracted number
                     (defaults to yes) or if it must remain independent.

                     The possible values are yes and no but can be abbreviated.

              m (-F|-en|-embedded_number option)
                     Here y controls if the numbering of word with missing embedded numbers  must
                     be done or not (defaults to yes).

                     When this sub-option is set to no, the s and f sub-options are ignored.

                     The possible values are yes and no but can be abbreviated.

              h (-F|-en|-embedded_number option)
                     Tells  what  to do with the characters present before the embedded number if
                     any.

                     The allowed directives are: 'trim' which discads them if they form an  empty
                     word  (only  made  of  spaces  and tabulations), 'cut' which unconditionally
                     discards them and 'keep' which places them at the beginning of the resulting
                     word.

                     The  default  value  for  this  directive  is  'keep', these keywords can be
                     abbeviated.

              o (-F|-en|-embedded_number option)
                     Here y is the offset of the first  multibyte  character  of  the  number  to
                     extract from the word (defaults to 0).

                     If this offset if immediately followed by the character '+', then the parser
                     will look for the first number (if any) after the given  offset  instead  of
                     using its absolute value to extract the number.

                     Note  that  when the '+' is used, it is necessary that the length of all the
                     numbers to extract have the same size as the algorithm looks for a digit  to
                     identify  the  beginning  of  the  number to extract.  Hence, for example, 1
                     should appear as 01 in the input is n is set to 2.

              n (-F|-en|-embedded_number option)
                     Here y is the number of  multibyte  characters  to  extract  from  the  word
                     starting at the offset given by the o sub-option.

                     Example:  n:2 will extract and use the first 2 digits of each words from the
                     input stream to number them.

              i (-F|-en|-embedded_number option)
                     Here y is number of multibyte  characters  to  ignore  after  the  extracted
                     number

              d (-F|-en|-embedded_number, -N|-number and -U|-unnumber options)
                     Here  y  is  a  multibyte separator.  When present, this directive instructs
                     smenu to output the selected numbered word(s) prefixed by its(their)  direct
                     access number(s) and the given separator.

                     Only the numbered word(s) will be prefixed.

                     d stands for decorate.

                     This  directive  can  be  useful  when  you  want to post-process the output
                     according to its direct access number.

              s (-F|-en|-embedded_number, -N|-number and -U|-unnumber options)
                     Here y is the direct access number that will be set for the  first  numbered
                     word.  Its value is 1 by default, a value of 0 is possible.

              Example: -data r:\> l:\< a:l d:_

              To  number all words with the default parameters, use the syntax: "-N ." which is a
              shortcut for: "-N . -D l:' ' r:')' a:r p:a"

              The padding sub-option specifies whether spaces must also  be  added  in  front  of
              excluded words or not to improve compactness.

              When  the  w  sub-option  is  not  given  the  width  of  the numbers is determined
              automatically but if -F|-en|-embedded_number is set and the value  of  the  n  sub-
              option is given then this value is used.

       -b|-blank
              (Allowed in all contexts.)

              Replaces all non-printable characters by a blank.  If this results in a blank word,
              it will be potentially deleted.

       -.|-dot|-invalid
              (Allowed in all contexts.)

              Sets the substitution character for non-printable characters.  When this  parameter
              is not used, the default substitution character is a single dot.

       -M|-middle|-center
              (Allowed in all contexts.)

              Centers the display if possible.

       -d|-restore|-delete|-clean|-delete_window|-clean_window
              (Allowed in all contexts.)

              Tells the program to clean up the display before quitting by removing the selection
              window after use as if it was never displayed.

       -c|-col|-col_mode|-column
              (Allowed in the "Main" and "Tagging" contexts, switches to the "Columns" context.)

              Sets the column mode.  In this mode the lines of words do not wrap when  the  right
              border  of the terminal is reached but only when a special character is read.  Some
              words will not be displayed without an horizontal scrolling.

              If such a scrolling is needed, some indications may appear on the  left  and  right
              edge of the window to help the user to reach the unseen words.

              In  this  mode, the width of each column is minimal to keep the maximum information
              visible on the terminal.

       -l|-line|-line_mode
              (Allowed in the "Main" and "Tagging" contexts, switches to the "Lines" context.)

              Sets the line mode.  This mode is the same as column mode but  without  any  column
              alignment.

       -t|-tab|-tab_mode|-tabulate_mode [cols]
              (Allowed  in  the  "Main"  and  "Tagging"  contexts,  switches to the "Tabulations"
              context.)

              This option sets the tabulation mode and, if a number is specified, attempts to set
              the number of displayed columns to that number.

              In  this  mode,  embedded  line  separators  are ignored if not explicitly set with
              -L|-ls|-ld|-line-delimiters|-line_separators.  The options -A|-fc|-first_column and
              -Z|-lc|-last_column  can nevertheless be used to force words to appear in the first
              (respectively last) position of the displayed line.

              Note that the number of requested columns will be automatically reduced if  a  word
              does not fit in the calculated column size.

              In this mode each column has the same width.

       -w|-wide|-wide_mode
              (Allowed in the "Columns" and "Tabulations" contexts.)

              When  -t|-tab|-tab_mode|-tabulate_mode  is  followed  by  a  number of columns, the
              default is to compact the columns so that they  use  the  less  terminal  width  as
              possible.   This  option  enlarges  the  columns in order to use the whole terminal
              width.

              When in column mode, -w|-wide|-wide_mode can be used to force all  the  columns  to
              have the same size (the largest one).  See option -c|-col|-col_mode|-column below.

              Note  that  the  column's size is only calculated once when the words are displayed
              for the first time.  A terminal resize will not update  this  value.   This  choice
              enables a faster display.

       -C|-cs|-cols|-cols_select... [i|e]selectors...
              (Allowed in the "Columns" context.)

              I and E have the same meaning as i and e.

              In column mode, this option is useful to restrict the selections to a subset of all
              columns.  Either by including (nothing or i) or by excluding (e) them.

              Columns can be designated by their number (1 based)  or  by  a  regular  expression
              enclosed in delimiter made from any non-blank ASCII character excluding the comma.

              Range of columns (number or RE) can be given by separated then with a dash.

              Multiple  selectors can be regrouped in one argument using commas to separate them.
              This option also accepts multiple arguments, each of them being a selector.

              A selection by regular expressions means that a column containing a  word  matching
              any of these expressions will be included or excluded depending on the letter given
              after the option or before the selector if there is more than one argument.

              Regular expressions and column numbers can be freely mixed.

              Regular expression in -C|-cs|-cols|-cols_select and  -R|-rs|-rows|-rows_select  can
              contain UTF-8 characters either directly or by using the \u or \U notation.

              Example of columns selection: -Ci2,3,/X./,5-7 forces the cursor to only navigate in
              columns 2,3,5,6 and 7 and those containing a two characters word starting with 'X'.
              If  e  was  used in place of i, all the columns would have been selected except the
              columns 2,3,5,6,7 and those matching the extended regular expression 'X.'.

              Spaces are allowed in the selection string if they are protected.

              Other example where multiple selectors are used as multiple arguments: ps  |  smenu
              -col -cols e/TTY/ e/CMD/ e3

       -R|-rs|-rows|-rows_select... selectors...
              (Allowed in the "Columns" and "Lines" contexts.)

              Similar to -C|-cs|-cols|-cols_select but for the rows.

              -C|-cs|-cols|-cols_select  and -R|-rs|-rows|-rows_select can be used more than once
              in a cumulative manner:

              The selection mode (selection or de-selection) is given by the first occurrence  of
              the  options,  the  other  occurrences will only update the selected or de-selected
              ranges.

              Once a column or a row has been excluded, it cannot be re-included.

       -A|-fc|-first_column regex
              (Allowed in the following contexts: "Columns", "Lines" and "Tabulations".)

              In column mode, forces all words matching the given regular expression  to  be  the
              first  one in the displayed line.  If you want to only rely on this method to build
              the lines, just specify an empty  regex  to  set  the  end-of-line  separator  with
              -L|-ls|-ld|-line-delimiters|-line_separators '')

              \u and \U sequences can also be used in the regexp after -A|-fc|-first_column.

       -Z|-lc|-last_column regex
              (Allowed in the following contexts: "Columns", "Lines" and "Tabulations".)

              Similar  to  -A|-fc|-first_column but forces the word to be the latest of its line.
              The same trick with -L|-ls|-ld|-line-delimiters|-line_separators can also be used.

              \u and \U sequences can also be used in the regexp after -Z|-lc|-last_column.

       -g|-gutter [string]
              (Allowed in the "Columns" and "Tabulations" contexts.)

              Replaces the blank after  each  words  in  column  or  tabular  mode  by  a  column
              separator.

              This  separator  is  extracted from the string argument and each of its (multibyte)
              character is used one after the other to fill the gutter.

              If there are more columns that gutter characters then the last  character  is  used
              for the remaining columns.

              When  not  given,  the  separator  defaults  to  a vertical bar | (or a full height
              vertical bar if the locale is set to UTF-8).

              Each character can be given in normal or \u or \U form in the string argument.

              Example: "|- " will allow one to separate the first two columns with '|', then  '-'
              will be used and ' ' will separate the remaining columns if any.

       -k|-ks|-keep_spaces
              (Allowed in all contexts.)

              By  default, the spaces surrounding the output string will be deleted.  This option
              forces them to be retained.

       -W|-ws|-wd|-word_delimiters|-word_separators bytes
              (Allowed in all contexts.)

              This option can be used to specify the characters (or  multibyte  sequences)  which
              will be used to delimit the input words.

              Multibyte  sequences  (UTF-8) can be natives of using the same ASCII representation
              used in words (a leading \u or \U following by up to 8 hexadecimal  characters  for
              the former and 6 hexadecimal characters for the latter).

              Non-printable  characters  in  arguments  should  be  given  using the standard $''
              representation.  $'\t' stands for the tabulation character for example.

              The default delimiters are: SPACE, $'\t' and $'\n'.

       -L|-ls|-ld|-line-delimiters|-line_separators bytes
              (Allowed in all contexts.)

              This option can be used to specify the characters (or  multibyte  sequences)  which
              will be used to delimit the lines in the input stream.

              Multibyte  sequences  (UTF-8) can be natives of using the same ASCII representation
              used in words (a leading \u or \U following by up to 8 hexadecimal  characters  for
              the former and 6 hexadecimal characters for the latter).

              Non-printable  characters  in  arguments  should  be  given  using the standard $''
              representation.  $'\n' stands for the newline character for example.

              The default delimiter is: $'\n'.

              This option is only useful when the -c|-col|-col_mode|-column or -l option is  also
              set.

              The    characters    (or   multibyte   sequences)   passed   to   -L|-ls|-ld|-line-
              delimiters|-line_separators are automatically added to the list of word  delimiters
              as if -W|-ws|-wd|-word_delimiters|-word_separators was also used.

              \u and \U sequences can also be used here.

       -q|-no_bar|-no-scroll_bar
              (Allowed in all contexts.)

              Prevents the display of the scroll bar.

       -S|-subst... /regex/repl/[g][v][s]
              (Allowed in all contexts.)

              Post-processes  the words by applying a regular expression based substitution.  The
              argument must be formatted as in the sed editor.

              This option can be used more than once.   Each  substitution  will  be  applied  in
              sequence on each word.  This sequence can be stopped if a stop flag is encountered.

              flags:

              * The optional trailing g (for global) means that all matching occurrences shall be
                replaced and not only the first one.

              * The optional trailing v (for visual) means that the altered words  will  only  be
                used  for  display  and  search.   The modifications will not be reflected in the
                returned word.

              * The optional trailing s (for stop)  means  that  no  more  substitution  will  be
                allowed on this word even if another -S|-subst is used.

              * The  optional trailing i (for ignore case) means that the string search operation
                should ignore the case for this pattern.

                Small example: R=$(echo a b c | smenu -S /b/B/) will display "a B c" and  R  will
                contain  B  if  B  is  selected  meanwhile R=$(echo a b c | smenu -S /b/B/v) will
                display the same as above but R  will  contain  the  original  word  b  if  B  is
                selected.  In both cases, only the word B will be searchable and not b.

       -I|-si|-subst_included... /regex/repl/[g][v][s]
              (Allowed in all contexts.)

              Post-processes  the  selectable  words  by  applying  a  regular  expression  based
              substitution (see -S|-subst for details).

       -E|-se|-subst_excluded... /regex/repl/[g][v][s]
              (Allowed in all contexts.)

              Post-processes the  excluded  (or  non-selectable)  words  by  applying  a  regular
              expression based substitution (see -S|-subst for details).

              The  /  separator  that -I|-si|-subst_included and -E|-se|-subst_excluded are using
              above can be substituted by any other character except SPACE, \t, \f,  \n,  \r  and
              \v.

              In  the  three previous options, regex is a POSIX Extended Regular Expression.  For
              details, please refer to the regex manual page.

              Additionally \u and \U sequences can also be used in the regexp.

       If a post-processing action  (-S|-subst,  -I|-si|-subst_included,  -E|-se|-subst_excluded)
       results in an empty (length 0) word, then we have two cases:

              in column mode:
                     Substitutions  involving  empty  words  can  lead to misalignments, so it is
                     necessary to prohibit them and terminate the program.   These  substitutions
                     have to be made with other tools before using this utility.

              otherwise:
                     The word is simply removed.

       -/|-search_method search_method
              (Allowed in all contexts.)

              Affects  the '/' key to a search method.  By default '/' is affected to 'fuzzy' but
              the argument can be any prefix of 'prefix', 'substring' or 'fuzzy'.

       -s|-sp|-start|-start_pattern pattern
              (Allowed in all contexts.)

              Place the cursor on the first word corresponding to the specified pattern.

              pattern can be:

              * A # immediately followed by a number giving the initial position  of  the  cursor
                (counting from 0).

                If  the  word  at this position is excluded, then the first previous non excluded
                word is selected if it exists, otherwise the first non excluded word is selected.

                If this number if greater than the number of words, the cursor will be set on the
                latest selectable position.

              * A  single  # or the string #last to set the initial cursor position to the latest
                selectable word position.

              * A string starting with a / indicating that we want the cursor to be  set  to  the
                first word matching the given regular expression.

              * A  prefix  string  indicating that we want the cursor to be set on the first word
                matching the string given (a will match Cancel by example).

              Warning, when searching for a prefix or a regular expression, smenu only looks  for
              them  after  an  eventual  modification, so for example, the command: smenu -I/c/x/
              -s/c <<< "a b c d" won't find c and put the cursor on a but smenu -I/c/x/v -s/c <<<
              "a  b  c  d"  will find it and put the cursor on the x substituting the c on screen
              only

              \u and \U sequences can be used in the pattern.

       -x|-tmout|-timeout type [word] delay

       -X|-htmout|-hidden_timeout type [word] delay
              (Allowed in all contexts.)

              Sets a timeout.  Three types of timeout are possible:

              current:  At the timeout, the word under the cursor and/or  the  tagged  words  are
                        sent to the standard output if the ENTER key has been pressed

              quit:     At the timeout, nothing is selected as if the q key has been pressed

              word:     At  the  timeout,  the  word given after the type is selected.  Note that
                        this word doesn't need to be part of the words coming from  the  standard
                        input.

              Each  type can be be shortened as a prefix of its full name ("cur" for "current" of
              "q" for "quit" per example).

              The delay must be set in seconds and cannot be above 99999 seconds.

              The remaining time (in seconds) is added at the end of the message displayed  above
              the selection window and is updated in real time each second.

              Any key except ENTER, q, Q and CTRL C resets the timer to its initial value.

              The   -X|-htmout|-hidden_timeout  version  works  like  -x|-tmout|-timeout  but  no
              periodic remaining messages is displayed above the selection window.

       -r|-auto_validate
              (Allowed in all contexts.)

              Enables ENTER to validate the selection even in search mode.

       -v|-vb|-visual_bell
              (Allowed in all contexts.)

              By default, when searching, an alarm is produced by  the  terminal  when  the  user
              enters  a  character  or  makes  a  move  which  lead  to  no result or to an error
              condition.  This argument make this beep visual by briefly showing the cursor.

       -Q|-ignore_quotes
              (Allowed in all contexts.)

              Using this option will remove the word grouping  feature  from  single  and  double
              quotes  which  will  be  considered  normal characters.  For example: "a b" will be
              considered by smenu as two words "a and b" and no more as a single word: a b.

NOTES

       If tabulators (\t) are embedded in the input, there is no way to  replace  them  with  the
       original  number  of spaces.  In this case use another filter (like expand) to pre-process
       the data.

EXAMPLES

   1
       Simple Yes/No/Cancel request with "No" as default choice:

       In bash:
         read R <<< $(echo "Yes No Cancel" \
                      | smenu  -d -m "Please choose:" -s /N)

       or
         R=$(echo "Yes No Cancel" \
             | smenu -d -m "Please choose:" -s /N)

       In ksh:
         print "Yes No Cancel"                \
         | smenu -d -m "Please choose:" -s /N \
         | read R

   2
       Get a 3 columns report about VM statistics for the current process in bash/ksh on Linux:

       R=$(grep Vm /proc/$$/status | expand | smenu -b -W$'\n' -t3 -g -d)

   3
       Create a one column selection window containing the list of  the  first  20  LVM  physical
       volumes.   At  the  end,  the selection window will be erased.  This example is written in
       ksh).

       pvs -a -o pv_name --noheadings                 \
       | smenu -m "PV list" -n20 -t1 -d -s //dev/root \
       | read R

       The display will have a look similar to the following with the  cursor  set  on  the  word
       /dev/root:

       PV list
       /dev/md126           \
       /dev/md127           |
       /dev/root            | <- cursor here.
       /dev/sda2            |
       /dev/sdb2            |
       /dev/sdc1            |
       /dev/sdc2            |
       /dev/system/homevol  /

   4 (advanced)
       Imagine a file named sample.mnu with the following content:

       --8<---------------------------------
       "1 First Entry" "3 Third entry"
       "2 Second entry" "4 Fourth entry"
       @@@ "5 Fifth entry"
       @@@
       "0 Exit menu"
       --8<---------------------------------

       Then this quite esoteric command will render it (centered on the screen) as:

       +----------------------------------+
       |            Test menu             |
       |                                  |
       | 1) First Entry   3) Third entry  |
       | 2) Second entry  4) Fourth entry |
       |                  5) Fifth entry  |
       |                                  |
       | 0) Exit menu                     |
       +----------------------------------+

       with the cursor on Quit and only the numbers and "Quit" selectable.

       R=$(smenu -q -d -s/Exit -M -n 30 -c        \
                 -e "@+" -E '/@+/ /'              \
                 -F -D n:1 i:1                    \
                 -m "Test menu" < sample.mnu)

       The selected entry will be available in R

       Try to understand it as an exercise.

ENVIRONMENT

       NO_COLOR       force a monochrome terminal when set.
       CTXOPT_DEBUG   put the option parser in debug mode.

BUGS/LIMITATIONS

       Some  terminal  emulators,  those  notably  based  on  VTE  version  later  than 0.35 (see
       https://github.com/GNOME/vte/commit/01380d), have  a  new  feature  that  gives  them  the
       possibility to wrap/unwrap already displayed lines when resizing the window.

       As far as I known, there is no terminfo entry to disable that.

       On  these  types  of  terminals,  the  automatic re-display of the output of smenu will be
       disturbed and some artifacts may appear on the screen if the terminal window is resized.

AUTHORS

       © 2015-present, Pierre Gentile (p.gen.progs@gmail.com)

                                                                                         smenu(1)