Fix BS handling
[smenu.git] / smenu.1
blob2c60755d468001d1d8fc4027361fa01c7c1fb828
1 .\" ###################################################################
2 .\" Copyright 2015, Pierre Gentile (p.gen.progs@gmail.com)
3 .\"
4 .\" This Source Code Form is subject to the terms of the Mozilla Public
5 .\" License, v. 2.0. If a copy of the MPL was not distributed with this
6 .\" file, You can obtain one at https://mozilla.org/MPL/2.0/.
7 .\" ###################################################################
8 .TH smenu 1
9 .SH NAME
10 smenu - filter that allows one to interactively select a word from stdin
11 and outputs the selection to stdout.
12 .SH SYNOPSIS
13 .nf
14   [\fB*-h\fP|\fB-help\fP]
15   [\fB*-H\fP|\fB-long_help\fP]
16   [\fB*-?\fP|\fB-u\fP|\fB-usage\fP]
17   [\fB*-V\fP|\fB-version\fP]
18   [\fB-n\fP|\fB-lines\fP|\fB-height\fP [\fIheight\fP]]
19   [\fB-i\fP|\fB-in\fP|\fB-inc\fP|\fB-incl\fP|\fB-include\fP... \fIregex\fP]
20   [\fB-e\fP|\fB-ex\fP|\fB-exc\fP|\fB-excl\fP|\fB-exclude\fP... \fIregex\fP]
21   [\fB-m\fP|\fB-msg\fP|\fB-message\fP|\fB-title\fP \fImessage\fP]
22   [\fB-!\fP|\fB-int\fP|\fB-int_string\fP [\fIstring\fP]]
23   [\fB-a\fP|\fB-attr\fP|\fB-attributes\fP \fIprefix:attr\fP...]
24   [\fB-1\fP|\fB-l1\fP|\fB-level1\fP \fIregex\fP [\fIattr\fP]]
25   [\fB-2\fP|\fB-l2\fP|\fB-level2\fP \fIregex\fP [\fIattr\fP]]
26   [\fB-3\fP|\fB-l3\fP|\fB-level3\fP \fIregex\fP [\fIattr\fP]]
27   [\fB-4\fP|\fB-l4\fP|\fB-level4\fP \fIregex\fP [\fIattr\fP]]
28   [\fB-5\fP|\fB-l5\fP|\fB-level5\fP \fIregex\fP [\fIattr\fP]]
29   [\fB-6\fP|\fB-l6\fP|\fB-level6\fP \fIregex\fP [\fIattr\fP]]
30   [\fB-7\fP|\fB-l7\fP|\fB-level7\fP \fIregex\fP [\fIattr\fP]]
31   [\fB-8\fP|\fB-l8\fP|\fB-level8\fP \fIregex\fP [\fIattr\fP]]
32   [\fB-9\fP|\fB-l9\fP|\fB-level9\fP \fIregex\fP [\fIattr\fP]]
33   [\fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP [\fIdelim\fP]]
34   [\fB-z\fP|\fB-zap\fP|\fB-zap_glyphs\fP \fIbytes\fP]
35   [\fB-P\fP|\fB-pm\fP|\fB-pin\fP|\fB-pin_mode\fP [\fIdelim\fP]]
36   [\fB-0\fP|\fB-noat\fP|\fB-no_auto_tag\fP]
37   [\fB-p\fP|\fB-at\fP|\fB-auto_tag\fP]
38   [\fB-N\fP|\fB-number\fP... [\fIregex\fP...]]
39   [\fB-U\fP|\fB-unnumber\fP... [\fIregex\fP...]]
40   [\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP]
41   [\fB-D\fP|\fB-data\fP|\fB-options\fP [\fIparameter\fP...]
42   [\fB-b\fP|\fB-blank\fP]
43   [\fB-M\fP|\fB-middle\fP|\fB-center\fP]
44   [\fB-d\fP|\fB-restore\fP|\fB-delete\fP|\fB-clean\fP|\
45 \fB-delete_window\fP|\fB-clean_window\fP]
46   [\fB-c\fP|\fB-col\fP|\fB-col_mode\fP|\fB-column\fP]
47   [\fB-l\fP|\fB-line\fP|\fB-line_mode\fP]
48   [\fB-t\fP|\fB-tab\fP|\fB-tab_mode\fP|\fB-tabulate_mode\fP [\fIcols\fP]]
49   [\fB-w\fP|\fB-wide\fP|\fB-wide_mode\fP]
50   [\fB-C\fP|\fB-cs\fP|\fB-cols\fP|\fB-cols_select\fP... \
51 [\fIdirective\fP][\fIselector\fP...]]
52   [\fB-R\fP|\fB-rs\fP|\fB-rows\fP|\fB-rows_select\fP... \
53 [\fIdirective\fP][\fIselector\fP...]]
54   [\fB-al\fP|\fB-align\fP... [\fIre_selectors\fP...]]
55   [\fB-A\fP|\fB-fc\fP|\fB-first_column\fP \fIregex\fP]
56   [\fB-Z\fP|\fB-lc\fP|\fB-last_column\fP \fIregex\fP]
57   [\fB-g\fP|\fB-gutter\fP [\fIstring\fP]]
58   [\fB-k\fP|\fB-ks\fP|\fB-keep_spaces\fP]
59   [\fB-W\fP|\fB-ws\fP|\fB-wd\fP|\fB-word_delimiters\fP|\
60 \fB-word_separators\fP \
61 \fIbytes\fP]
62   [\fB-L\fP|\fB-ls\fP|\fB-ld\fP|\fB-line-delimiters\fP|\
63 \fB-line_separators\fP \
64 \fIbytes\fP]
65   [\fB-q\fP|\fB-no_bar\fP|\fB-no_scroll_bar\fP]
66   [\fB-no_hbar\fP|\fB-no_hor_scroll_bar\fP]
67   [\fB-hbar\fP|\fB-hor_scroll_bar\fP]
68   [\fB-S\fP|\fB-subst\fP... \fI/regex/repl/opts\fP]
69   [\fB-I\fP|\fB-si\fP|\fB-subst_included\fP... \fI/regex/repl/opts\fP]
70   [\fB-E\fP|\fB-se\fP|\fB-subst_excluded\fP... \fI/regex/repl/opts\fP]
71   [\fB-ES\fP|\fB-early_subst\fP... \fI/regex/repl/opts\fP]
72   [\fB-/\fP|\fB-search_method\fP \fIprefix\fP|\fIsubstring\fP|\fIfuzzy\fP]
73   [\fB-s\fP|\fB-sp\fP|\fB-start\fP|\fB-start_pattern\fP \fIpattern\fP]
74   [\fB-x\fP|\fB-tmout\fP|\fB-timeout\fP \fItype\fP [\fIword\fP] \fIdelay\fP]
75   [\fB-X\fP|\fB-htmout\fP|\fB-hidden_timeout\fP \fItype\fP [\fIword\fP] \
76 \fIdelay\fP]
77   [\fB-r\fP|\fB-auto_validate\fP]
78   [\fB-is\fP|\fB-incremental_search\fP]
79   [\fB-v\fP|\fB-vb\fP|\fB-visual_bell\fP]
80   [\fB-Q\fP|\fB-ignore_quotes\fP]
81   [\fB-lim\fP|\fB-limits\fP \fIlimit:value\fP...]
82   [\fB-f\fP|\fB-forgotten_timeout\fP|\fB-global_timeout\fP \fItimeout\fP]
83   [\fB-nm\fP|\fB-no_mouse\fP]
84   [\fB-br\fP|\fB-buttons\fP|\fB-button_remapping\fP \fInew_button_1\fP \
85 \fInew_button_3\fP]
86   [\fB-dc\fP|\fB-dcd\fP|\fB-double_click\fP|\fB-double_click_delay\fP \
87 \fIdelay_in_ms\fP]
88   [\fB-sb\fP|\fB-sbw\fP|\fB-show_blank_words\fP [\fIblank_char\fP]]
91   selectors    ::= See the \fB-C\fP|\fB-cs\fP|\fB-cols\fP description for \
92 more details.
93   re_selectors ::= \fIRE\fP,...
94   directive    ::= \fIi\fP|\fII\fP|\fIe\fP|\fIE\fP|\
95 \fIl\fP|\fIL\fP|\fIr\fP|\fIR\fP|\fIc\fP|\fIC\fP
96   parameter    ::= [l|r:<char>]|[a:left|right]|[p:included|all|[w:<num>]|
97                 [f:yes|no]|[o:<num>[+]]|[n:<num>]|[i:<num>]|[d:<char>]|
98                 [s:<num>]|[h:trim|cut|keep]
99   attr         ::= [fg][/bg][,style]
100   RE           ::= \fB<char>\fIregex\fB<char>\fR
102   selectors and RE can be freely mixed.
103   style can only contain a maximum of 6 characters.
104   <char> in RE is any non-blank ASCII character except ','.
107 Note that some parameters require that others have been previously
108 entered in the command line to be accepted.
109 .SH DESCRIPTION
110 This small utility acts as a filter when no input file is given
111 (reads from stdin and writes to stdout) or takes its inputs from that file.
113 All words read are presented in a scrolling window on the terminal \fBat
114 the current cursor position\fP, without clearing the screen first.
116 The selection cursor is initially positioned on the first selectable word
117 by default.
119 In this window, words can be displayed next to each other, with a fixed
120 size, or in rows or columns respecting the line ends as input.
121 In column mode, words can also be centred, left aligned or right aligned.
122 See the options \fB-C\fP|\fB-cs\fP|\fB-cols\fP|\fB-cols_select\fP,
123 \fB-R\fP|\fB-rs\fP|\fB-rows\fP|\fB-rows_select\fP and
124 \fB-al\fP|\fB-align\fP for more information.
126 There are options to explicitly or implicitly include/exclude or align words
127 using extended regular expressions.
128 Note that once certain words are explicitly excluded, they cannot be
129 re-included later.
131 Excluded words are skipped when the selection cursor is moved and cannot
132 be searched for.
134 The \fB-W\fP|\fB-ws\fP|\fB-wd\fP|\fB-word_delimiters\fP|\fB-word_separators\fP
135 option can be used to set the characters (or multibyte
136 sequences) which will be used to delimit the input words.
137 The default delimiters are: \fISPACE\fP, \fI\\t\fP and \fI\\n\fP.
140 \fB-L\fP|\fB-ls\fP|\fB-ld\fP|\fB-line-delimiters\fP|\fB-line_separators\fP
141 has a similar meaning for lines.
143 Special character sequences formed by a \fI\\\fP followed by one of the
144 characters \fIa\fP \fIb\fP \fIt\fP \fIn\fP \fIv\fP \fIf\fP \fIr\fP and
145 \fI\\\fP are understood and have their traditional meanings.
147 smenu strives to support UTF-8 encoding, both as input and output.
148 \fBUTF-8\fP sequences introduced by \fI\\u\fP and \fI\\U\fP are also
149 understood.
151 \fBWarning\fP, when used together, it is important to know that all
152 sequences beginning with \fI\\U\fP will be interpreted before the
153 beginning of the interpretation of sequences beginning with \fI\\u\fP.
155 \fI\\u\fP can be followed by 2,4,6 or 8 hexadecimal characters composing
156 an \fBUTF-8\fP bytestring.
157 Here is an example of using \fI\\u\fP to compose a \fBLatin Small Letter E
158 with Acute\fP: \fI\\uc3a9\fP.
160 \fI\\U\fP must be followed by exactly 6 hexadecimal digits, \fBincluding\fP
161 leading zeros, that represent a Unicode codepoint according to ISO
162 10646 UCS-4.
163 The \fBLatin Small Letter E with Acute\fP of the previous example
164 (codepoint \fBU+00E9\fP) can then be represented as \fI\\U0000e9\fP.
166 Note that with most shells, the \fI\\\fP before \fIu\fP and \fIU\fP
167 need to be protected or escaped.
169 Quotations (single and double) in the input stream can be used to ignore
170 the word separators so that a group of words are taken as a single entity.
172 Non printable characters in words that are not delimiters are
173 converted to their traditional form (\fI\\n\fP for end-of-line,
174 \fI\\t\fP for tabulation...) by default.
176 An invalid \fBUTF-8\fP sequence or other non-printable character will be
177 replaced by a dot (\fI.\fP) by default.
179 There is nevertheless a possibility to change this substitution character
180 with another \fBASCII\fP printable one with the help of the command line
181 option \fB-.\fP|\fB-dot\fP|\fB-invalid\fP.
183 \fBWarning\fP, \fBUTF-8\fP encoded codepoints are quietly converted
184 into the substitution character when the user locale is not \fBUTF-8\fP
185 aware like \fBPOSIX\fP or \fBC\fP by example.
187 Words containing only spaces, entered directly or resulting from a
188 substitution, are also rejected unless they are not selectable.
189 This allows special effects like creating blank lines for example.
190 These words are also kept in column mode, selectable or not.
192 smenu has an option to define a set of characters or \fBUTF-8\fP sequences
193 which should be ignored when reading words.
194 This can be very useful when dealing with inputs where the EOL sequence
195 consists in more than one character.
197 A typical example is DOS or Windows files with lines ending with
198 \fICRLF\fP.
199 In such a case one might decide to ignore all \fICR\fP characters from
200 the input.
202 .SS "Keyboard and mouse usage."
203 \fBkeyboard\fP:
204 .RS 2
205 The cursor can be moved in any direction using the arrow keys of the
206 keyboard: \fB\(<-\fP, \fB\(da\fP, \fB\(ua\fP, \fB\(->\fP
207 or the \fIvi\fP direction keys: \fBh\fP, \fBj\fP, \fBk\fP and \fBl\fP.
208 The \fBHOME\fP, \fBEND\fP, \fBPgDn\fP and \fBPgUp\fP keys can also be
209 used when available.
211 The meaning of the movement keys is as follows:
213 tab(@);
214 l l.
215 \fB\(<-\fP, \fBh\fP@Previous word
216 \fBSHIFT\ HOME\fP, \fBCTRL\ \(<-\fP, \fBH\fP@Start of line in column or line mode
217 \fB\(ua\fP, \fBk\fP@Previous line
218 \fBPgUp\fP, \fBK\fP@Previous page
219 \fBHOME\fP@First word of the window
220 \fBCTRL\ HOME\fP, \fBCTRL\ K\fP@First word
221 \fB<\fP@The window's content is shifted to the
222 @left while keeping the cursor visible
224 \fB\(->\fP, \fBl\fP@Next word
225 \fBSHIFT\ END\fP, \fBCTRL\ \(->\fP, \fBL\fP@End of line in column or line mode
226 \fB\(da\fP, \fBj\fP@Next line
227 \fBPgDn\fP, \fBJ\fP@Next page
228 \fBEND\fP@Last word of the window
229 \fBCTRL\ END\fP, \fBCTRL\ J\fP@Last word
230 \fB>\fP@The window's content is shifted to the
231 @right while keeping the cursor visible
234 \fBCTRL\ \(<-\fP/\fBH\fP (resp. \fBCTRL\ \(->\fP/\fBL\fP) places the cursor
235 so that a maximum number of words (selectable or not) are visible to
236 the left (reps. right) side of the window.
238 When the content of the window is shifted to the left or right using
239 \fB<\fP or \fB>\fP or the mouse, the cursor always highlights the same
240 word and remains visible.
241 This can prevent any further shifting operations.
244 \fBMouse:\fP
245 .RS 2
246 With many terminal emulators, it is possible to use the mouse to interact
247 with the screen content.
249 \fBWarning\fP, if groups of extended graphemes are present in the input,
250 mouse-based selection is only accurate if the terminal correctly displays
251 these graphemes.
252 An example of a non-functional terminal is xterm, an example of a
253 functional terminal is wezterm.
255 When the mouse is supported, the cursor can turn into an arrow (but
256 not always) and the mouse can then be used as a point and click device
257 as follows:
259 \fBFirst (usually left) mouse button (note that buttons can be remapped)\fP:
260 .RS 2
261 .IP \(bu 2
262 A click on a word selects it if it is selectable.
263 .IP \(bu 2
264 A click on a word while holding the CTRL key pressed when tagging/pinning
265 is activated marks/unmarks this word.
266 .IP \(bu 2
267 A Click at the ends of the vertical scroll bar (if present) is equivalent
268 to pressing the keyboard's up or down arrow.
270 A click anywhere else on the vertical scroll bar moves the cursor to
271 another word, depending on where you click.
273 The new current word will be positioned at the beginning of a line
274 if possible.
276 A click at the ends of the horizontal scroll bar (if present) is
277 equivalent to pressing the keyboard's left or right arrow.
279 A click anywhere else on the horizontal scroll bar moves the cursor left
280 of right on the line containing the cursor, but does not move it further
281 than the first or last word on that line.
282 .IP \(bu 2
283 A double-click on a word selects it, if selectable, and acts as if the
284 Enter key had been pressed, the double-click delay being configurable.
285 .IP \(bu 2
286 A click on the left or right horizontal arrow of each line (when visible)
287 shifts the content of the window to the left or right, one word at a time.
289 Nothing happens if the cursor risks leaving the window.
291 Note that clicking on a left-facing arrow in an empty line means that
292 not all the words in that line could be displayed because of previous
293 shifts or moves.
294 In this case, smenu will try to display the last word of this line but
295 it is not always possible as the cursor must remain visible.
297 The keyboard commands \fB<\fP and \fB>\fP can be used in such a case
298 because the cursor is already on the current line.
301 \fBThird (usually right) mouse button\fP:
302 .RS 2
303 .IP \(bu 2
304 When tagging or pinning is enabled, a click on a word tags/untags it if
305 it is selectable.
306 .IP \(bu 2
307 When tagging or pinning is enabled, a click on a word while holding the
308 CTRL key pressed has the following actions:
309 .RS 2
310 .IP - 2
311 If the word clicked is selectable and no word is already marked then
312 marks it.
313 .IP - 2
314 If a word is marked and the clicked word is selectable and is not the
315 marked word, then:
316 .RS 2
317 .IP + 2
318 In column mode, if the marked word is in the same column/line as the
319 clicked word, tags all words bounded by those words in that column/line
320 as if \fBZ\fP the keyboard command were used.
321 .IP + 2
322 In line or column mode, if the marked word is in the same line as the
323 clicked word, tags all words bounded by those words in that line.
324 .IP + 2
325 Otherwise, tags all words bounded by the marked word and the
326 clicked one.
327 .IP + 2
328 In all cases, the mark is removed.
333 \fBMouse wheel\fP:
334 .RS 2
335 .IP \(bu 2
336 Rotating the mouse wheel scrolls the contents of the window one line up
337 or down.
338 .IP \(bu 2
339 Rotating the mouse wheel while holding down the \fBCTRL\fP key scrolls
340 the contents of the window one page up or down.
342 This feature may not work depending on the terminal and operating system.
344 Be sure to use the wheel when the mouse pointer is over the smenu
345 window, as some terminal emulators may otherwise zoom the screen in
346 and out instead.
349 Remember that mouse support does not disable the keyboard, so use the
350 keys instead if the mouse is not working properly.
352 Some terminals may not report clicks after the 223rd line or column due
353 to a limitation of the old X11 mouse tracking protocol, one example of
354 such a terminal emulator is screen < 4.7.0.
355 tmux as well as screen >= 4.7.0 are fine.
357 Keyboard and mouse can be used at the same time.
358 .TP 2
359 \fBRemark 1.\fP
360 Some X-Window terminal emulators may not support the
361 enable/disable bracketed pastes escape sequence, in such a case if
362 may be necessary to explicitly clear the content of the paste buffer
363 before running smenu so that the mouse buttons (especially for pasting)
364 do their job correctly.
366 This action can easily be performed using the command \f(CRxsel -c\fP
367 for example.
368 .TP 2
369 \fBRemark 2.\fP
370 Some X-Windows terminal emulators intercept mouse input
371 when some modifiers are used, a typical example is xterm which displays
372 popup menus in these cases.
374 For xterm (Patch #361 - 2020/10/14 or later) a working workaround
375 is to use the X resource \f(CRXTerm*omitTranslation:popup-menu\fP
376 either by adding it in your \f(CR.Xresources\fP file and register
377 it with \f(CRxrdb\fP or by launching xterm using the
378 \f(CR-xrm 'XTerm*omitTranslation:popup-menu'\fP command line option.
379 .TP 2
380 \fBRemark 3 for BSD systems.\fP
381 In order for the mouse to work properly under (virtualised?) FreeBSD
382 and perhaps other BSD variants, it may be necessary add the following
383 two lines to the file \fB~/.Xmodmap\fP:
386 \f(CR! Disable button 8 and 9.
387 pointer = 1 2 3 4 5 6 7 0 0 10 11 12\fP
390 And run the command: \f(CRxmodmap ~/.Xmodmap\fP
391 (ignore any warnings issued by this command).
393 This can also be done non-permanently by running the command:
395 \f(CRxmodmap -e "pointer = 1 2 3 4 5 6 7 0 0 10 11 12"\fP
398 If this is not enough, try to disable buttons 8 to 12.
402 \fBDirect access:\fP
403 .RS 2
404 If \fB-N\fP|\fB-number\fP, \fB-U\fP|\fB-unnumber\fP or
405 \fB-F\fP|\fB-en\fP|\fB-embedded_number\fP are used, then it becomes
406 possible to directly access a word by entering its number.
407 The numbering created using these option is done \fBbefore\fP any words
408 substitution done using \fB-S\fP|\fB-subst\fP \fI/regex/repl/opts\fP,
409 \fB-I\fP|\fB-si\fP|\fB-subst_included\fP or
410 \fB-E\fP|\fB-se\fP|\fB-subst_excluded\fP.
412 Using a combination of these options, it is easy to control which words
413 will be numbered by adding a special symbol in it before using smenu and
414 removing it (substituted by nothing) afterward using
415 \fB-I\fP|\fB-si\fP|\fB-subst_included\fP by example.
417 \fB-E\fP|\fB-se\fP|\fB-subst_excluded\fP gives another way to do that,
418 see below or more.
420 .SS "Changing input words"
421 smenu offers the possibility to modify the input words in a sed-like way.
422 Words can be modified at two points: just after they have been read
423 and after other operations have been applied, such as enabling,
424 disabling or coloring.
426 The related options are \fB-ES\fP|\fB-subst\fP,
427 \fB-S\fP|\fB-subst\fP, \fB-I\fP|\fB-si\fP|\fB-subst_included\fP and
428 \fB-E\fP|\fB-se\fP|\fB-subst_excluded\fP their descriptions can be found
429 in the \fBOPTIONS\fP section.
430 .SS "Searching for words"
431 A word can be searched using different algorithms: \fIprefix\fP,
432 \fIsubstring\fP of \fIfuzzy\fP.
434 \fIprefix\fP (keys \fB^\fP or \fB=\fP):
435 The sequence of characters entered must match the beginning of a word.
437 \fIsubstring\fP (keys \fB"\fP or \fB'\fP):
438 The sequence of characters entered must match a substring in a word.
440 \fIfuzzy\fP (keys \fB~\fP or \fB*\fP):
441 All the characters in the entered sequence must appear in the same order
442 in a word, but need not be consecutive.
444 The case is also ignored.
446 Note that spaces and tabs at the beginning and end of words are ignored
447 when searching for substrings or fuzzy strings.
449 The cursor is placed, if possible, on the first matching word having the
450 minimum number of gaps between the first and last matching character,
451 see the difference between the actions of the \fBs\fP/\fBS\fP and
452 \fBn\fP/\fBN\fP keys below.
454 This method also tolerates intermediate symbols not appearing in the
455 words which will be ignored.
456 If this is the case, the attributes of the approximately matching
457 words are changed into an error versions of them to warn the user to
458 this situation.
460 The erroneous symbols will \fInot\fP be inserted in the search buffer.
462 For example: if the word \fBabcdef\fP is present in the standard input,
463 then entering \f(CBabxcdye\fP puts \fBabcdef\fP in the search buffer
464 and the word is added to the list of matching words and displayed with
465 an error attribute (in red by default).
467 This special state will persist until all the symbols following the first
468 erroneous one are deleted (using backspace) or if \fBESC\fP is pressed
469 to cancel the search session and clear the search buffer.
471 Note that, when searching in \fIprefix\fP or \fIsubstring\fP mode, you
472 can use the \fBTAB\fP key or the \fBCTRL\ I\fP key sequence to try to
473 auto-complete the search pattern, as in bash or ksh.
475 During a search session, the cursor changes and each character entered is
476 added in (or removed from) the search buffer.
477 The display is refreshed after each change in this buffer.
479 A 10 seconds timeout (by default) automatically ends the current
480 search session as if the \fBEnter\fP key had been pressed.
481 This timeout is reset each time a new key is hit in search mode.
482 This delay can be configured using the \fBsearch\fP entry in the
483 \fBtimers\fP section of the configuration file as shown in the example
484 in the configuration subsection.
486 The slash key (\fB/\fP) can also be used instead of any of these keys.
487 By default it is is programmed to do a \fIfuzzy\fP search but this can
488 be changed by using the command line option
489 (\fB-/\fP|\fB-search_method\fP) or by tuning a configuration file,
490 see below.
492 All the words matching the current search buffer are enhanced:
493 The characters present in the current search buffer are highlighted in
494 one way and the other characters in another way.
495 Both of these highlighting methods are configurable.
497 If the user has entered the search sequence: \fBo\fP, \fBs\fP, then the
498 matching word "words" will be displayed as \fBw\fP\fIo\fP\fBrd\fP\fIs\fP
499 when the \fIfuzzy\fP algorithm is in use depending of the display
500 attributes configured.
502 \fBENTER\fP and all cursor moves terminate the search session but do
503 not clear the list of the matching words and the search buffer.
505 The user can then use the \fBn\fP/\fBs\fP/\fBSPACE\fP keys (forward) and
506 the \fBN\fP/\fBS\fP keys (Backspace) to navigate in the list of matching
507 words,
509 When a \fIfuzzy\fP search has been performed, the \fBs\fP/\fBS\fP keys
510 attempts to move the cursor to the next/previous word whose matching part
511 forms a substring of consecutive glyphs.
513 If no such matches exist, \fBs\fP/\fBS\fP and \fBn\fP/\fBN\fP are equivalent.
515 \fBs\fP means next \fPs\fPubstring match in this context while \fBn\fP
516 just means \fBn\fPext match.
518 If the user hits the \fBHOME\fP or \fBEND\fP key during a search session
519 then the list of matching words is reduced to the words starting
520 (respectively) ending with the current search pattern and the window
521 is refreshed.
522 For those who consider \fBHOME\fP and \fBEND\fP as non-intuitive,
523 the \fBCTRL\ A\fP and \fBCTRL\ Z\fP keys are also available in search mode
524 as an alternative.
525 This behavior is persistent until the user hit the \fBESC\fP or
526 \fBENTER\fP key.
528 For example, if the search pattern in substring mode is \f(CBsh\fP and
529 the user hits \fBEND\fP, then only the words \fIending\fP with \f(CBsh\fP
530 will be added in the searched word list and enhanced.
532 Note that when a matching word is selected, its enhanced characters only
533 show one of the multiple matching possibilities.
535 When not in a search session \fBESC\fP can be also used to clear the
536 list of matching words and to reset the search buffer.
538 Note that the search buffer is persistent as long as the same search
539 algorithm is used and \fBESC\fP has not been pressed.
540 .SS "Selection and Exit"
541 Pressing \fBq\fP gives the possibility to exit without selecting anything.
543 \fBCTRL\ C\fP (Abort) also exits the program immediately with a return
544 code equal to 128+SINGINT (by default) without selecting anything.
545 See the \fB-!\fP|\fB-int\fP|\fB-int_string\fP option for more information
546 about the customization of the \fBCTRL\ C\fP behavior.
548 By default, \fBENTER\fP or a double click with the first mouse button if
549 applicable writes the selected word to stdout when not in
550 search mode otherwise it exits from this mode and does nothing more.
551 If you want to be able to select a word \fIeven\fP when in search mode,
552 use the \fB-r\fP|\fB-auto_validate\fP option to change this behavior.
553 .SS "Tagging (multiple selections)"
554 When the tagging is activated by using the command line
555 \fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP
556 or \fB-P\fP|\fB-pm\fP|\fB-pin\fP|\fB-pin_mode\fP option, then the
557 keys \fBt\fP, \fBu\fP, \fBINS\fP, \fBDEL\fP \fBc\fP, \fBr\fP,
558 \fBm\fP, \fBM\fP, \fBT\fP, \fBC\fP, \fBR\fP and \fBU\fP, can be
559 used to tag/untag some words.
560 These tagged words will then be sent to the standard output when
561 \fBENTER\fP is pressed.
563 Their meanings is as follows:
565 \fBt\fP
566 Tags/untags or Pin/unpin the word under the cursor (toggle).
568 \fBu\fP
569 Untags or unpins the word under the cursor.
571 \fBINS\fP
572 Tags or pins the word under the cursor.
574 \fBDEL\fP
575 Untags or unpins the word under the cursor.
577 \fBc\fP
578 Tags or pins all the selectable words in the current \fBcolumn\fP when
579 no word is marked, otherwise acts like \fBC\fP.
581 \fBr\fP
582 Tags or pins all the selectable words in the current \fBrow/line\fP
583 when no word is marked, otherwise acts like \fBR\fP.
585 \fBm\fP
586 Marks the current word, the cursor aspect will change until the word
587 is unmarked.
589 \fBM\fP or \fBESC\fP
590 Unmarks the current word, other actions will also automatically unmark
591 the word, see below.
593 \fBT\fP
594 If no word are marked and the result of a search is still displayed then
595 tags all words found in this search.
597 If no word has been searched and no word is marked, then the current
598 word is marked, just as if \fBm\fP has been used instead.
599 Otherwise all words between the marked word and the
600 current word are tagged.
602 The marked word will no longer be marked after tagging is complete.
604 \fBZ\fP
605 Like \fBT\fP when not in search mode and when the marked words is not
606 on the same column or line as the cursor in column mode.
608 When in column mode and if the marked word is in the same column or line
609 as the cursor, tags only the words in the same column (respectively line)
610 bounded by the marked word and the cursor.
612 \fBC\fP
613 As for \fBT\fP, \fBC\fP marks the current word if no word is currently
614 marked, just as if \fBm\fP had been used instead.
616 If a word is already marked, \fBC\fP tags/pins the words between the
617 current and the marked words if they are the \fBsame column\fP.
619 The marked word will no longer be marked after tagging is complete.
621 \fBR\fP
622 As for \fBT\fP, \fBR\fP marks the current word if no word is currently
623 marked, just as if \fBm\fP has been used instead.
625 If a word is already marked, \fBR\fP tags/pins the words between the
626 current and the marked words if they are the \fBsame row/line\fP.
628 The marked word will no longer be marked after tagging is complete.
630 Note that when you use \fBT\fP, \fBC\fP or \fBR\fP with pinning enabled,
631 the order of word selection depends on whether the marked word is before
632 or after the current word.
634 When a word is marked, the pinning order using \fBc\fP and \fBr\fP
635 increases from the marked word to the current word.
637 When no words are marked, the pinning order when using \fBc\fP and \fBr\fP
638 always increases from top to bottom and from left to right respectively.
640 \fBU\fP
641 Untags or unpins the last tagging action.
643 \fBCTRL T\fP
644 Untags all the previously tagged/pinned words.
646 The marked word, if any, will no longer be marked after this action.
648 Also note that using some of these keys may be more easily achieved by
649 using the third mouse button (usually the right one) when the mouse
650 is available.
652 See how to use the right mouse buttons in the "Keyboard and mouse
653 usage." at the beginning of this manual.
654 .SS Help
655 A small help message can be displayed when hitting the \fB?\fP key.
656 This message will last for 30s or until another key or \fBESC\fP is
657 pressed.
659 If the help content is longer than the window, it can be scrolled up or
660 down using the vertical arrow keys or the vi direction keys (\fBj\fP
661 and \fBk\fP).
662 .SS "Scroll bars"
663 The vertical scroll bar is displayed at the right of the scrolling window.
664 Its appearance is meant to be classical but it has some particularities:
665 .IP \(bu 2
666 The vertical scroll bar is not displayed if all the input words fit on
667 only one line.
668 .IP \(bu 2
669 Otherwise, the vertical scroll bar is always displayed except when
670 the \fB-q\fP option is set.
671 This option completely disables the scroll display of all scroll bars.
672 .IP \(bu 2
673 When the scrolling window has only one line, the vertical scroll bar
674 has only 3 states:
675 .RS 2
676 .IP - 2
677 \fBv\fP when on all but the last line, indicating that you can go down
678 to see more.
679 .IP - 2
680 \fB^\fP when on the last line.
681 .IP - 2
682 \fB|\fP otherwise.
684 .IP \(bu 2
685 When there is more than one line to display, \fB/\fP means that the window
686 displays the first line, \fB\\\fP the last line.
687 \fB|\fP is used to fill the gap, see below the different possible
688 configurations.
690 tab(@);
691 l l l l l
692 l l l l l
693 l l l l .
694 \\@\\@^@^@\\ @Do not remove this trailing space!
695 |@|@|@|@/
696 /@v@/@v
699 A \fB+\fP can also appear in the scroll bar in lieu of the vertical bar,
700 giving the relative position of the cursor line in the bunch of input
701 words.
703 The horizontal scroll bar is only displayed below the window when the
704 current line is truncated in line of column mode.
706 If its appearance scrolls up the windows in the screen, the new position
707 of the window will unchanged even it this scroll bar is no more displayed
708 as the line containing the cursor is no more truncated.
709 .SS "Terminal resizing (also see BUGS/LIMITATIONS)"
710 The windows is redrawn if the terminal is resized.
711 The redrawing is actually done only 1s after the end of the resizing to
712 avoid artifacts on screen.
713 The cursor will remain on the current selected word but may be displayed
714 at another place in the window.
715 .SS "Unicode support"
716 This utility is Unicode aware and should be able to display correctly
717 any Unicode character (even double-width ones) as long as the current
718 encoding is \fBUTF-8\fP (\fBUTF-8\fP in the output of the \fIlocale\fP
719 command).
721 Note that smenu will not attempt to normalize words containing UTF-8 glyphs.
722 Thus \fI\\u61\\ucc88\fP (\fIä\fP) will not be considered equal to
723 \fI\\uc3a4\fP (canonical normalization of Â \fIä\fP).
724 It is nevertheless possible to use an external tool such as uconv from the
725 ICU project (https://icu.unicode.org) to do this work before using smenu.
727 For example: uconv can be used as a filter as in:
729 \f(CBcat ... | uconv -x any-nfc | smenu\fP
730 .SS "Optional configuration file"
731 If a file with adequate permissions and the same name as the executable
732 but prefixed with a dot is present in the current directory
733 or in the user's home directory, then it will be parsed as a
734 \fI.ini\fP file.
735 The values read from the file in the home directory will be overridden by
736 the ones read from the local directory (if it is present).
738 Missing and bad keywords are silently skipped.
740 The values read, if valid, override the default hard-coded ones.
742 If a value is invalid an error message is shown and the program terminates.
744 The values of the timers must be given in units of \fB1/10\fP of a second.
746 Here is an example giving the syntax and the names of the keywords
747 allowed:
750 \f(CR--8<------------------------------------------------------------------
751 [colors]
752   ; The terminal must have at least 8 colors and/or have attributes
753   : like bold and reverse for this to be useful
754   ; if not the following settings will be ignored.
756   method=ansi             ; classic | ansi (default)
758   cursor=0/2              ; cursor attributes
759   cursor_on_tag=0/2,u     ; cursor on tag attributes
760   shift=6,b               ; shift symbol attributes
761   message=0/3             ; message (title) attributes
762   bar = 7/4,b             ; scroll bars attributes
763   search_field = 0/6      ; search field attributes
764   search_text = 7,bu      ; search text attributes
765   match_field = 1,b       ; matching words field attributes
766   match_text = 7,bu       ; matching words text attributes
767   search_err_field = 1    ; approximate search field attributes
768   search_err_text = 1,r   ; approximate search text attributes
769   ; match_err_field = 3   ; approximate matching words field attributes
770   match_err_text = 1      ; approximate matching words text attributes
771   ; include = b           ; selectable color attributes
772   exclude = 4/0,u         ; non-selectable color attributes
773   tag = 0/5               ; tagged (selected) attributes
774   daccess = 3,b           ; direct access tag attributes
776   special1 = 7/4,b        ; attributes for the special level 1
777   special2 = bu           ; attributes for the special level 2
778   special3 = /3,b         ; attributes for the special level 3
779   special4 = 7/4          ; attributes for the special level 4
780   special5 = 7/2,b        ; attributes for the special level 5
781   special9 = 2,rb         ; attributes for the special level 9
783 [window]
784   lines = 7               ; default number of lines of the window
786 [limits]
787   word_length = 1024      ; arbitrary max length of input words (int)
788   words = 32767           ; arbitrary max number of allowed input
789                           ; words (int)
790   columns = 128           ; arbitrary max number of columns (int)
792 [timers]
793   search = 100            ; search timeout in 1/10 s
794   help = 150              ; duration of the help message in 1/10 s
795   window = 7              ; delay before redrawing if the size of the
796                           ; terminal's window change in 1/10 s
797   direct_access = 6       ; duration allowed to add a new digit to
798                           ; the direct word access number in 1/10 s
799   forgotten = 9000        ; An explicit delay (in 1/10 s) before smenu
800                           ; is forced to stop as if "q" had been pressed.
801                           ; Useful when one forgot to make a selection.
803 [misc]
804   default_search_method = substring
806 [mouse]
807   double_click_delay= 200 ; delay in milliseconds
808 --8<------------------------------------------------------------------
811 .IP \(bu 2
812 The \fBmethod\fP keyword can take the two possible values displayed
813 above and determines if you want to use the native method (limited to 8
814 colors) of the \fBansi\fP method (ISO 8613-6) if your terminal supports
815 more than 8 colors.
817 The default value corresponds to \fBansi\fP.
819 The attributes syntax is [fg][/bg][[,.+]toggles] where \fBfg\fP and
820 \fBbg\fP are numbers representing the foreground and background color
821 and \fBtoggles\fP is a strings which can contain the characters \fIb\fP,
822 \fId\fP, \fIr\fP, \fIs\fP, \fIu\fP, \fIi\fP, \fIn\fP and \fIl\fP
823 representing respectively \fIb\fPold, \fId\fPim, \fIr\fPeverse,
824 \fIs\fPtandout, \fIu\fPnderline, \fIi\fPtalic, i\fIn\fPvisible
825 and b\fIl\fPink.
826 .IP \(bu 2
827 Spaces are allowed anywhere in the lines and between them, even around
828 the \fB=\fP.
829 .IP \(bu 2
830 Everything following a \fB;\fP is ignored.
831 .IP \(bu 2
832 When undefined, the default limits are:
834 tab(@);
835 l l .
836 words@32767
837 word_length@512
838 columns@256
840 .SH OPTIONS
842 Not all options may be available, depending on the current context.
844 When smenu is called and before the first option is evaluated, it is in
845 the \fBMain\fP context.
846 Each option can switch to another context in which only a subset of the
847 options is usable.
849 For each parameter described below, the contexts in which the associated
850 option is defined as well as the context to which it leads, if any,
851 are given.
853 An option not defined in a context will force the end of the current
854 context and will be recursively evaluated in the previous contexts until
855 found (or not).
856 If not found, an error message is displayed and smenu is terminated.
858 The contexts defined in smenu are:
859 .IP \fBMain\fP 2
860 The default context
861 .IP \fBColumns\fP 2
862 After the \fB-c\fP|\fB-col\fP|\fB-col_mode\fP|\fB-column\fP parameter.
863 .IP \fBLines\fP 2
864 After the \fB-l\fP|\fB-line\fP|\fB-line_mode\fP parameter.
865 .IP \fBTabulations 2
866 After the \fB-t\fP|\fB-tab\fP|\fB-tab_mode\fP|\fB-tabulate_mode\fP parameter.
867 .IP \fBTagging\fP 2
868 After the \fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP or
869 \fB-P\fP|\fB-pm\fP|\fB-pin\fP|\fB-pin_mode\fP parameter.
871 .IP \fBWARNING\fP 2
872 Here is a situation that may seem confusing at first glance.
874 Imagine the only parameter command line parameter is \fB-cols_select\fP.
876 Since this is a parameter of an option which is not valid when not in
877 the \fBColumns\fP context, it should have raised an error but it still
878 seems to be accepted.
880 The trick is: when not in column mode \fB-cols_select\fP is indeed not
881 accepted but its prefix (\fB-col\fP) is valid.
882 The options are thus understood as: \fB-col\fP \fB-s_select\fP.
883 The same mechanism occurs again as \fB-s\fP is also valid in column
884 mode so the final understanding of the command line is: \fB-col\fP
885 \fB-s\fP \fB_select\fP.
887 Another example that illustrates the fact that long parameters have
888 priority over short parameter combinations: \fB-is\fP will not select
889 only words containing a "\fBs\fP", but will act in the same way as its
890 alternative name (\fB-incremental_search\fP).
892 If you really want to select only words containing a "\fBs\fP", simply
893 add a space after the \fBi\fP as in \fB-i s\fP or use one of the other
894 \fB-i\fP names such as \fB-inc\fP for example.
896 In such cases, the user may set the \fBCTXOPT_DEBUG\fP environment
897 variable which any non-empty content.
899 If we reconsider the \fB-cols_select\fP example with \fBCTXOPT_DEBUG\fP set
900 the output is now:
903 CTXOPT_DEBUG: Parameter: -cols_select. Evaluation context: Main.
904 CTXOPT_DEBUG: Found a valid parameter as a prefix of -cols_select: -col.
905 CTXOPT_DEBUG: Parameter: -col. Evaluation context: Main.
906 CTXOPT_DEBUG: Switch to context Columns.
907 CTXOPT_DEBUG: Parameter: -s_select. Evaluation context: Columns.
908 CTXOPT_DEBUG: Found a valid parameter as a prefix of -s_select: -s.
909 CTXOPT_DEBUG: Parameter: -s. Evaluation context: Columns.
910 CTXOPT_DEBUG: Argument: _select.
913 In this case, adding a space in the command line: \fB-col\fP
914 \fB-cols_select\fP \fB1\fP also solves the issue and indicates that only
915 the first column should be selectable.
917 Note, however, that at least one argument for \fB-cols_select\fP is
918 now required:
921 CTXOPT_DEBUG: Parameter: -col. Evaluation context: Main.
922 CTXOPT_DEBUG: Switch to context Columns.
923 CTXOPT_DEBUG: Parameter: -cols_select. Evaluation context: Columns.
924 CTXOPT_DEBUG: Argument: 1.
927 The \fB-h\fP|\fB-help\fP and \fB-?\fP|\fB-u\fP|\fB-usage\fP options now
928 display the help and synopsis of the available options in the current
929 context.
930 .IP Example: 2
931 \f(CBsmenu -col -u\fP will only show the usage in the \fBColumns\fP
932 context
934 The contexts contain all the non-context-changing options so, in practice,
935 the usage should be intuitive.
936 You may nevertheless have to adjust some scripts using the old smenu
937 releases as I did in the lvm_menu example.
939 Some of the advantages of this new system of options are:
940 .IP \(bu 2
941 Long parameter names are allowed
942 One dash is enough, but two are also allowed for compatibility reasons.
943 .IP \(bu 2
944 An option can be referenced by any number of parameters with short or
945 long names.
946 .IP \(bu 2
947 Auto checking of missing mandatory options, duplicated option,...
948 .IP \(bu 2
949 Only options usable in the current context are allowed.
951 This option management system is explained in more detail at
952 https://github.com/p-gen/ctxopt.
954 The description of each command line parameter is as follows:
955 .IP "\fB-h\fP|\fB-help\fP"
956 (Allowed in all contexts.)
958 Display a context specific help messages and exits.
959 .IP "\fB-H\fP|\fB-long_help\fP"
960 (Allowed in the "Main" context.)
962 Display a long (non context specific) help messages and exits.
963 .IP "\fB-?\fP|\fB-u\fP|\fB-usage\fP"
964 (Allowed in all contexts.)
966 Displays a short help message and exits.
967 .IP "\fB-V\fP|\fB-version\fP"
968 (Allowed in the "Main" context.)
970 The \fB.smenu\fP files in the user's home directory and in the current
971 directory, if present, will be ignored when this option is used.
972 .IP "\fB-n\fP|\fB-lines\fP|\fB-height\fP [\fIheight\fP]"
973 (Allowed in all contexts.)
975 Gives the maximum number of lines in the scrolling selection window.
977 If \fB-n\fP|\fB-lines\fP|\fB-height\fP is not present the number of
978 lines will be set to \fI5\fP.
980 If \fB-n\fP|\fB-lines\fP|\fB-height\fP is present without argument, then
981 the height of the terminal will be used to determine the number of lines.
982 This remains true even if the terminal is resized.
984 If \fB-n\fP|\fB-lines\fP|\fB-height\fP is present with a numerical
985 argument, this value will be used to determine the number of lines.
986 .IP "\fB-i\fP|\fB-in\fP|\fB-inc\fP|\fB-incl\fP|\fB-include\fP... \fIregex\fP"
987 (Allowed in all contexts.)
989 Sets the \fBi\fPnclude filter to match the selectable words.
990 All the other words will become implicitly non-selectable (excluded)
992 \fB-i\fP|\fB-in\fP|\fB-inc\fP|\fB-incl\fP|\fB-include\fP can be used more
993 than once with cumulative effect.
995 \fI\\u\fP and \fI\\U\fP sequences can also be used in the regexp.
996 .IP "\fB-e\fP|\fB-ex\fP|\fB-exc\fP|\fB-excl\fP|\fB-exclude\fP... \fIregex\fP"
997 (Allowed in all contexts.)
999 Sets the \fBe\fPxclude filter to match the non-selectable words.
1000 All the other selectable words will become implicitly selectable (included)
1002 \fB-e\fP|\fB-ex\fP|\fB-exc\fP|\fB-excl\fP|\fB-exclude\fP can be used more
1003 than once with cumulative effect.
1004 This filter has a higher priority than the include filter.
1006 The \fIregex\fP selections made using
1007 \fB-i\fP|\fB-in\fP|\fB-inc\fP|\fB-incl\fP|\fB-include\fP and/or
1008 \fB-e\fP|\fB-ex\fP|\fB-exc\fP|\fB-excl\fP|\fB-exclude\fP are done before
1009 the possible words alterations made
1010 by \fB-I\fP|\fB-si\fP|\fB-subst_included\fP or
1011 \fB-E\fP|\fB-se\fP|\fB-subst_excluded\fP (see below).
1013 \fI\\u\fP and \fI\\U\fP sequences can also be used in the regexp.
1014 .IP "\fB-m\fP|\fB-msg\fP|\fB-message\fP|\fB-title\fP \fImessage\fP"
1015 (Allowed in all contexts.)
1017 Displays a message (title) above the window.
1018 If the current locale is not \fBUTF-8\fP, then all \fBUTF-8\fP characters
1019 will be replaced by the substitution character.
1021 \fI\\u\fP and \fI\\U\fP sequences can be used in the message.
1023 Note that the message will be truncated if it does not fit on a terminal
1024 line.
1025 .IP "\fB-!\fP|\fB-int\fP|\fB-int_string\fP [\fIstring\fP]"
1026 (Allowed in all contexts.)
1028 The optional \fIstring\fP argument, when present,
1029 defines the string to be used as the selection string when
1030 the \fBCTRL\ C\fP sequence is entered.
1032 If \fIstring\fP is missing then nothing will be selected.
1034 In all cases, when \fB-!\fP|\fB-int\fP|\fB-int_string\fP is present in
1035 the command line, the return code of the program will be \fB0\fP.
1037 This gives the user the choice to make the behavior of \fBCTRL\ C\fP
1038 similar to that of \fBq\fP and \fBQ\fP or to that of the Unix shell
1039 leaving the shell with a return code greater than 128.
1040 .IP "\fB-a\fP|\fB-attr\fP|\fB-attributes\fP \fIprefix:attr\fP..."
1041 (Allowed in all contexts.)
1043 Sets the display attributes of the elements displayed and the cursor.
1045 At least one attribute prefixed attribute must be given.
1047 \fIprefix\fP can take the following values:
1049 .PD 0
1050 .IP \fIi\fP
1051 included words.
1052 .IP \fIe\fP
1053 excluded words.
1054 .IP \fIc\fP
1055 cursor.
1056 .IP \fIb\fP
1057 scroll bar.
1058 .IP \fIs\fP
1059 shift indicator.
1060 .IP \fIm\fP
1061 message (title).
1062 .IP \fIt\fP
1063 tagged words.
1064 .IP \fIct\fP
1065 cursor on tagged words.
1066 .IP \fIsf\fP
1067 search field.
1068 .IP \fIst\fP
1069 search text.
1070 .IP \fIsfe\fP
1071 approximate search field with error.
1072 .IP \fIste\fP
1073 approximate search text with error.
1074 .IP \fImf\fP
1075 matching words field.
1076 .IP \fImt\fP
1077 matching words text.
1078 .IP \fImfe\fP
1079 matching words field with error.
1080 .IP \fImte\fP
1081 matching words text with error.
1082 .IP \fIda\fP
1083 direct access tag.
1087 If more than one attribute is given, they must be separated by spaces.
1089 Example: \f(CB-attr i:/5 e:4,br b:7/3,rb c:7/2,b\fP
1091 See the the \fB-1\fP|\fB-l1\fP|\fB-level1\fP option below for the
1092 description of the attributes syntax after the colon and an example.
1093 .IP "\fB-1\fP|\fB-l1\fP|\fB-level1\fP \fIregex\fP [\fIattr\fP]"
1094 .IP "\fB-2\fP|\fB-l2\fP|\fB-level2\fP \fIregex\fP [\fIattr\fP]"
1095 .IP "\fB-3\fP|\fB-l3\fP|\fB-level3\fP \fIregex\fP [\fIattr\fP]"
1096 .IP "\fB-4\fP|\fB-l4\fP|\fB-level4\fP \fIregex\fP [\fIattr\fP]"
1097 .IP "\fB-5\fP|\fB-l5\fP|\fB-level5\fP \fIregex\fP [\fIattr\fP]"
1098 .IP "\fB-6\fP|\fB-l6\fP|\fB-level6\fP \fIregex\fP [\fIattr\fP]"
1099 .IP "\fB-7\fP|\fB-l7\fP|\fB-level7\fP \fIregex\fP [\fIattr\fP]"
1100 .IP "\fB-8\fP|\fB-l8\fP|\fB-level8\fP \fIregex\fP [\fIattr\fP]"
1101 .IP "\fB-9\fP|\fB-l9\fP|\fB-level9\fP \fIregex\fP [\fIattr\fP]"
1102 (Allowed in all contexts.)
1104 Allows one to give a special display color to up to 5 classes of words
1105 specified by regular expressions.
1106 They are called \fBspecial levels\fP.
1107 Only selectable words will be considered.
1109 By default, the first 5 special levels have their foreground color set
1110 to red, green, brown/yellow, purple and cyan and the remaining 4 levels
1111 are set to white.
1112 All these colors also can be set or modified permanently in the
1113 configuration files.
1114 See the example file above for an example.
1116 The optional second argument (\fIattr\fP) can be used to override the
1117 default or configured attributes of each class.
1118 Its syntax is the same as the one used in the configuration file:
1120 [\fIfg\fP][/\fIbg\fP]\
1121 [,{\fIb\fP|\fId\fP|\fIr\fP|\fIs\fP|\fIu\fP|\fIi\fP|\fIn\fP|\fIl\fP}] \
1122 | [{\fIb\fP|\fId\fP|\fIr\fP|\fIs\fP|\fIu\fP|\fIi\fP|\fIn\fP|\fIl\fP}]
1125 Examples of possible attributes are:
1127   \f(CB2/0,bu \fPgreen on black bold underline
1128   \f(CB/2     \fPgreen background
1129   \f(CB5      \fPtext in purple
1130   \f(CBrb     \fPreverse bold
1133 \fI\\u\fP and \fI\\U\fP sequences can be used in the pattern.
1134 .IP "\fB-z\fP|\fB-zap\fP|\fB-zap_glyphs\fP \fIbytes\fP"
1135 (Allowed in all contexts.)
1137 Initializes a set of \fBUTF-8\fP characters to be ignored when reading
1138 words from stdin or a file.
1140 Example: The argument \f(CR'\\u0d\\ue282ac,'\fP means: ignore all commas,
1141 Euro signs and carriage return characters when reading from stdin or
1142 a file.
1144 As shown above \fI\\u\fP and \fI\\U\fP sequences can be used in the
1145 bytes set.
1146 .IP "\fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP [\fIdelim\fP]"
1147 (Allowed in the following contexts: "Main", "Columns", "Lines", and
1148 "Tabulations", switches to the "Tagging" context.)
1150 Allows multiple selections and switches to \fBtag\fP mode.
1151 In this mode, several selectable words can be selected without leaving
1152 the program.
1154 Tagged words are highlighted (underlined by default).
1156 The current word can be automatically tagged when the \fBENTER\fP key
1157 is pressed to complete the selection process if the
1158 \fB-p\fP|\fB-at\fP|\fB-auto_tag\fP option is
1159 also set or if no word has been tagged.
1161 Note that nothing is selected when no word is tagged and when the
1162 \fB-0\fP|\fB-noat\fP|\fB-no_auto_tag\fP option is also set.
1164 All tagged words (and possibly the world under the cursor) will be sent
1165 to the standard output separated by the optional argument given after
1166 the option \fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP.
1168 Note that the \fIdelim\fP argument can contain more than one character,
1169 can contain \fBUTF-8\fP characters (in native or \fI\\u\fP or \fI\\U\fP
1170 form) and can even contain control character as in \f(CB$'\\n'\fP.
1172 A single space character is used as the default separator if none
1173 is given.
1175 \fBCaution\fP: To get exactly the same behavior as in version 0.9.11
1176 and earlier, you must also use the \fB-p\fP|\fB-at\fP|\fB-auto_tag\fP
1177 option.
1178 .IP "\fB-P\fP|\fB-pm\fP|\fB-pin\fP|\fB-pin_mode\fP [\fIdelim\fP]"
1179 (Allowed in the following contexts: "Main", "Columns", "Lines", and
1180 "Tabulations", switches to the "Tagging" context.)
1182 Works like \fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP but, unlike
1183 \fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP, the output depends on
1184 the order in which the words were tagged.
1185 In other words, the first tagged word comes first in the output, the
1186 second tagged word comes next, and so on.
1187 .IP "\fB-p\fP|\fB-at\fP|\fB-auto_tag\fP"
1188 (Allowed in the "Tagging" context.)
1190 This option modifies the default behavior of the
1191 \fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP
1192 and \fB-P\fP|\fB-pm\fP|\fB-pin\fP|\fB-pin_mode\fP options.
1194 An untagged word under the cursor will be automatically tagged when
1195 \fBENTER\fP is pressed.
1196 .IP "\fB-0\fP|\fB-noat\fP|\fB-no_auto_tag\fP"
1197 (Allowed in the "Tagging" context.)
1199 This option modifies the default behavior of the
1200 \fB-T\fP|\fB-tm\fP|\fB-tag\fP|\fB-tag_mode\fP
1201 and \fB-P\fP|\fB-pm\fP|\fB-pin\fP|\fB-pin_mode\fP options.
1203 An untagged word under the cursor will \fBnot\fP be automatically tagged
1204 when \fBENTER\fP is pressed \fBand\fP no other words are tagged.
1205 This is true even when the option \fB-p\fP|\fB-at\fP|\fB-auto_tag\fP is
1206 also set.
1208 It is ignored if at least one other word is tagged at that time.
1209 .IP "\fB-N\fP|\fB-number\fP>da_ctx... [\fIregex\fP]"
1210 (Allowed in the following contexts: "Main", "Columns", "Lines" and
1211 "Tabulation".)
1213 This option allows you to number selectable words that match a specific
1214 regular expression.
1215 These numbers are numbered from 1 and allow direct access to the words.
1217 To use this functionality, the user must enter the number which
1218 corresponds to the desired entry digit per digit.
1220 Each new digit must be added in a time frame of 1/2 seconds (per default)
1221 otherwise the number is considered complete and a newly entered digit
1222 will start a new number.
1223 If the number does not exists, then the cursor is restored to it's
1224 initial position.
1226 The sub-options of the \fB-D\fP|\fB-data\fP|\fB-options\fP option
1227 described below can change the way \fB-N\fP|\fB-number\fP sets and
1228 formats the numbers.
1230 This option accepts more than one argument and can be used multiple
1231 times with cumulative effects.
1233 \fB-N\fP|\fB-number\fP, \fB-U\fP|\fB-unnumber\fP and
1234 \fB-F\fP|\fB-en\fP|\fB-embedded_number\fP can be mixed.
1235 .IP "\fB-U\fP|\fB-unnumber\fP>da_ctx... [\fIregex\fP]"
1236 (Allowed in the following contexts: "Main", "Columns", "Lines" and
1237 "Tabulation".)
1239 This option allows one to unnumber words.
1240 If placed after a previous \fB-N\fP|\fB-number\fP, it can be used to
1241 remove the numbering of selected words.
1242 If placed before, the word which doesn't match its regular expression
1243 will be numbered by default.
1245 This mechanism is similar to to the inclusion/exclusion of words by
1246 \fB-i\fP|\fB-in\fP|\fB-inc\fP|\fB-incl\fP|\fB-include\fP and
1247 \fB-e\fP|\fB-ex\fP|\fB-exc\fP|\fB-excl\fP|\fB-exclude\fP.
1249 This option accepts more than one argument and can be used multiple
1250 times with cumulative effects.
1252 \fB-U\fP|\fB-unnumber\fP, \fB-N\fP|\fB-number\fP and
1253 \fB-F\fP|\fB-en\fP|\fB-embedded_number\fP can be mixed.
1254 .IP "\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP"
1255 (Allowed in the following contexts: "Main", "Columns", "Lines" and
1256 "Tabulation".)
1258 This option is similar to \fB-N\fP|\fB-number\fP but does not generate
1259 a continuous flow of numbers but extracts them from the word itself.
1261 With this option you can take full control of the numbering of the
1262 displayed word.
1263 Note that the numbering does not need to be ordered.
1265 The resulting word after the extraction of the number must be non empty.
1267 Some sub-option are required, see the \fB-D\fP|\fB-data\fP|\fB-options\fP
1268 option described below.
1270 \fBNotice\fP that for this option to work correctly, all the embedded
1271 numbers must have the same number of digits.
1272 To get that, a preprocessing may be necessary on the words before using
1273 this program.
1275 \fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \fB-N\fP|\fB-number\fP and
1276 \fB-U\fP|\fB-unnumber\fP can be mixed.
1277 .IP "\fB-D\fP|\fB-data\fP|\fB-options\fP [\fIparameter\fP...]"
1278 (Allowed in the Following contexts: "Main", "Columns", "Lines" and
1279 "Tabulations".)
1281 This option allows one to change the default behavior of
1282 the \fB-N\fP|\fB-number\fP, \fB-U\fP|\fB-unnumber\fP and
1283 \fB-F\fP|\fB-en\fP|\fB-embedded_number\fP options.
1285 Its optional parameters are called sub-options and must respect the
1286 format \fBx\fP:\fBy\fP where \fBx\fP can be:
1289 \f(CBl\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \
1290 \fB-N\fP|\fB-number\fP and \fB-U\fP|\fB-unnumber\fP options)
1291 Here \fBy\fP is the \fBUTF-8\fP character (in native or \fI\\u\fP or
1292 \fI\\U\fP form) to print before the number.
1293 The default is a single space.
1295 Example:
1297 \f(CRecho test | smenu -N -D l:\\(\fP
1299 Will display: '\f(CB(1)\f(CR test\fR'
1302 \f(CBr\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \
1303 \fB-N\fP|\fB-number\fP and \fB-U\fP|\fB-unnumber\fP options)
1304 Here \fBy\fP is the \fBUTF-8\fP character (in native or \fI\\u\fP or
1305 \fI\\U\fP form) to print after the number.
1306 The default is \f(CB)\fP.
1308 Example:
1310 \f(CRecho test | smenu -N -D r:\\>\fP
1312 Will display: ' \f(CB1>\f(CR test\fR'
1315 \f(CBa\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \
1316 \fB-N\fP|\fB-number\fP and \fB-U\fP|\fB-unnumber\fP options)
1317 Here \fBy\fP is '\f(CBleft\fP' (or one of its prefixes) if the number
1318 must be \fIleft\fP aligned, or '\f(CBright\fP' (or one of its prefixes)
1319 if it must be \fIright\fP aligned.
1320 The default is \f(CBright\fP.
1322 Example:
1324 \f(CRecho test | smenu -N -D a:right w:3\fP
1326 Will display: '   \f(CB1)\f(CR test\fR'
1328 \f(CRecho test | smenu -N -D a:left w:3\fP
1330 Will display: ' \f(CB1  )\f(CR test\fR'
1333 \f(CBp\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \
1334 \fB-N\fP|\fB-number\fP and \fB-U\fP|\fB-unnumber\fP options)
1335 Here \fBy\fP is '\f(CBincluded\fP' or '\f(CBall\fP' for the initial
1336 \fIp\fPadding of the non numbered words.
1337 The keyword '\f(CBincluded\fP' means that only \fIincluded\fP word will
1338 be padded while '\f(CBall\fP' means pad \fIall\fP words.
1340 This sub-option may improve compactness when there is a lot of
1341 non-selectable words.
1343 The default is \f(CBall\fP. These keywords can be abbreviated.
1345 \fBWARNING\fP: in column/line/tab mode this sub-option is ignored and
1346 non numbered words are always padded.
1348 Example:
1350 \f(CRecho a b c | smenu -eb -N -D l:\\( p:a\fP
1352 Will display:
1353 \f(CB(1)\f(CR a     b \f(CB(2) c\fR
1356 \f(CRecho a b c | smenu -eb -N -D l:\\( p:i\fP
1358 Will display:
1359 \f(CB(1)\f(CR a b \f(CB(2) c\fR
1362 \f(CBw\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \
1363 \fB-N\fP|\fB-number\fP and \fB-U\fP|\fB-unnumber\fP options)
1364 Here \fBy\fP is the \fIw\fPidth of the number between 1 and 5 included.
1366 For an example, refer to the sub-option \fBa\fP above.
1369 \f(CBf\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \
1370 \fB-N\fP|\fB-number\fP and \fB-U\fP|\fB-unnumber\fP options)
1371 Here \fBy\fP controls if the numbering must \fIf\fPollow the last
1372 extracted number (defaults to \f(CByes\fP) or if it must remain
1373 independent.
1375 The possible values are \f(CByes\fP and \f(CBno\fP but can be abbreviated.
1377 Example:
1379 \f(CRecho 2a b c | smenu -F -D l:\\( f:n n:1 -N\fP
1381 Will display:
1382 \f(CB(2)\f(CR a \f(CB(1)\f(CR b \f(CB(2)\f(CR c\fR
1385 \f(CRecho 2a b c | smenu -F -D l:\\( f:y n:1 -N\fP
1387 Will display:
1388 \f(CB(2)\f(CR a \f(CB(3)\f(CR b \f(CB(4)\f(CR c\fR
1391 \f(CBm\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP option)
1392 Here \fBy\fP controls if the numbering of word with missing embedded numbers
1393 must be done or not (defaults to \f(CByes\fP).
1395 When this sub-option is set to \f(CBno\fP, the \f(CBs\fP and \f(CBf\fP
1396 sub-options are ignored.
1398 The possible values are \f(CByes\fP and \f(CBno\fP but can be abbreviated.
1400 Example:
1402 \f(CRecho 2a b c | smenu -F -D l:\\( n:1 m:n -N\fP
1404 Will display:
1405 \f(CB(2)\f(CR a     b     c\fR
1407 \f(CRecho 2a b c | smenu -F -D l:\\( n:1 m:y -N\fP
1409 Will display:
1410 \f(CB(2)\f(CR a \f(CB(3)\f(CR b \f(CB(4)\f(CR c\fR
1412 \f(CBh\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP option)
1413 Tells what to do with the characters present before the embedded number if
1414 any.
1416 The allowed directives are: '\f(CBtrim\fP' which discards them if they
1417 form an empty word (only made of spaces and tabulations), '\f(CBcut\fP'
1418 which unconditionally discards them and '\f(CBkeep\fP' which places them
1419 at the beginning of the resulting word.
1421 The default value for this directive is '\f(CBkeep\fP', these keywords
1422 can be abbreviated.
1424 Example:
1426 \f(CBecho \\" 2x\\" | smenu -F -D l:\\( o:1 n:1\fR
1428 Will display:
1430 \f(CB(2)\f(CR  x\fR
1431 \f(CR    ^^\fR
1432 \f(CB    \fRSelection cursor
1434 \f(CBecho \\" 2x\\" | smenu -F -D l:\\( o:1 n:1 h:t\fR
1436 Will display:
1438 \f(CB(2)\f(CR x\fR
1439 \f(CR    ^\fR
1440 \f(CB    \fRSelection cursor
1442 \f(CBecho \\"x2y\\" | smenu -F -D l:\\( o:1 n:1 h:c\fR
1444 Will display:
1446 \f(CB(2)\f(CR y\fR
1449 \f(CBo\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP option)
1450 Here \fBy\fP is the \fIo\fPffset of the first multibyte character of
1451 the number to extract from the word (defaults to \f(CB0\fP).
1453 If this offset if immediately followed by the character '\f(CB+\fP',
1454 then the parser will look for the first number (if any) after the given
1455 offset instead of using its absolute value to extract the number.
1457 Note that when the '\f(CB+\fP' is used, it is necessary that the length
1458 of all the numbers to extract have the same size as the algorithm looks
1459 for a digit to identify the beginning of the number to extract.
1460 Hence, for example, \fB1\fP should appear as \fB01\fP in the input is
1461 \f(CBn\fP is set to \f(CB2\fP.
1463 Example:
1465 \f(CBecho x2y xx3y | smenu -F -D l:\\( o:1+ n:1\fR
1467 will display:
1469 \f(CB(2)\f(CR xy \f(CB(3)\f(CR xxy\fR
1471 \f(CBecho x2y xx3y | smenu -F -D l:\\( o:1 n:1\fR
1473 will display (note the absence of the '\f(CB+\fP' character):
1475 \f(CB(2)\f(CR xy     xx3y\fR
1478 \f(CBn\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP option)
1479 Here \fBy\fP is the \fIn\fPumber of multibyte characters to extract
1480 from the word starting at the offset given by the \f(CBo\fP sub-option.
1482 Example: \f(CRn:2\fP will extract and use the first 2 digits of each
1483 words from the input stream to number them.
1486 \f(CBi\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP option)
1487 Here \fBy\fP is number of multibyte characters to \fIi\fPgnore after
1488 the extracted number
1491 \f(CBd\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \
1492 \fB-N\fP|\fB-number\fP and \fB-U\fP|\fB-unnumber\fP options)
1493 Here \fBy\fP is a multibyte separator.
1494 When present, this directive instructs smenu to output the selected
1495 numbered word(s) \fIprefixed\fP by its(their) direct access number(s)
1496 and the given separator.
1498 Only the numbered word(s) will be prefixed.
1500 \f(CBd\fP stands for \fBd\fPecorate.
1502 This directive can be useful when you want to post-process the output
1503 according to its direct access number.
1505 Example:
1507 \f(CBR=$(echo a b c | smenu -N -D d:-)\fR
1509 will display:
1511 \f(CB1)\f(CR a  \f(CB2)\f(CR b  \f(CB3)\f(CR c\fR
1513 The variable \f(CBR\fP will then contain the string \f(CB2-b\fP if
1514 \f(CBb\fP is selected.
1517 \f(CBs\fP (\fB-F\fP|\fB-en\fP|\fB-embedded_number\fP, \
1518 \fB-N\fP|\fB-number\fP and \fB-U\fP|\fB-unnumber\fP options)
1519 Here \fBy\fP is the direct access number that will be set for the first
1520 numbered word.
1521 Its value is \fB1\fP by default, a value of \fB0\fP is possible.
1523 Example:
1525 \f(CBecho a b c | smenu -N -D s:1000\fR
1527 will display:
1529 \f(CB1000)\f(CR a  \f(CB1001)\f(CR b  \f(CB1002) c\fR
1531 To number all words with the default parameters, use the
1532 syntax: "\f(CR-N\fP" which is a shortcut for:
1533 "\f(CR-N -D l:' ' r:')' a:r p:a\fP"
1535 When the \f(CBw\fP sub-option is not given, the width of the numbers is
1536 determined automatically but if \fB-F\fP|\fB-en\fP|\fB-embedded_number\fP
1537 is set and the value of the \f(CBn\fP sub-option is given then this
1538 value is used.
1540 .IP "\fB-b\fP|\fB-blank\fP"
1541 (Allowed in all contexts.)
1543 Replaces all non-printable characters by a blank.
1544 If this results in a blank word, it will be potentially deleted.
1545 .IP "\fB-.\fP|\fB-dot\fP|\fB-invalid\fP"
1546 (Allowed in all contexts.)
1548 Sets the substitution character for non-printable characters.
1549 When this parameter is not used, the default substitution character is
1550 a single dot.
1551 .IP "\fB-M\fP|\fB-middle\fP|\fB-center\fP"
1552 (Allowed in all contexts.)
1554 Centers the display if possible.
1555 .IP "\fB-d\fP|\fB-restore\fP|\fB-delete\fP|\fB-clean\fP|\fB-delete_window\fP|\
1556 \fB-clean_window\fP"
1557 (Allowed in all contexts.)
1559 Tells the program to clean up the display before quitting by removing
1560 the selection window after use as if it was never displayed.
1561 .IP "\fB-c\fP|\fB-col\fP|\fB-col_mode\fP|\fB-column\fP"
1562 (Allowed in the "Main" and "Tagging" contexts, switches to the "Columns"
1563 context.)
1565 Sets the column mode.
1566 In this mode the lines of words do not wrap when the right border of
1567 the terminal is reached but only when a special character is read.
1568 Some words will not be displayed without an horizontal scrolling.
1570 If such a scrolling is needed, some indications may appear on the left
1571 and right edge of the window to help the user to reach the unseen words.
1573 In this mode, the width of each column is minimal to keep the maximum
1574 information visible on the terminal.
1575 .IP "\fB-l\fP|\fB-line\fP|\fB-line_mode\fP"
1576 (Allowed in the "Main" and "Tagging" contexts, switches to the "Lines"
1577 context.)
1579 Sets the line mode.
1580 This mode is the same as column mode but without any column alignment.
1581 .IP "\fB-t\fP|\fB-tab\fP|\fB-tab_mode\fP|\fB-tabulate_mode\fP [\fIcols\fP]"
1582 (Allowed in the "Main" and "Tagging" contexts, switches to the
1583 "Tabulations" context.)
1585 This option sets the tabulation mode and, if a number is specified,
1586 attempts to set the number of displayed columns to that number.
1588 In this mode, embedded line separators are ignored if not explicitly set
1589 with \fB-L\fP|\fB-ls\fP|\fB-ld\fP|\fB-line-delimiters\fP|\fB-line_separators\fP.
1590 The options \fB-A\fP|\fB-fc\fP|\fB-first_column\fP and
1591 \fB-Z\fP|\fB-lc\fP|\fB-last_column\fP can nevertheless be used to
1592 force words to appear in the first (respectively last) position of the
1593 displayed line.
1596 Note that the number of requested columns will be automatically reduced
1597 if a word does not fit in the calculated column size.
1599 In this mode each column has the same width.
1601 .IP "\fB-w\fP|\fB-wide\fP|\fB-wide_mode\fP"
1602 (Allowed in the "Columns" and "Tabulations" contexts.)
1604 When \fB-t\fP|\fB-tab\fP|\fB-tab_mode\fP|\fB-tabulate_mode\fP is followed
1605 by a number of columns, the default is to compact the columns so that they
1606 use the less terminal width as possible.
1607 This option enlarges the columns in order to use the whole terminal width.
1609 When in column mode, \fB-w\fP|\fB-wide\fP|\fB-wide_mode\fP can be used
1610 to force all the columns to have the same size (the largest one).
1611 See option \fB-c\fP|\fB-col\fP|\fB-col_mode\fP|\fB-column\fP below.
1614 Note that the column's size is only calculated once when the words are
1615 displayed for the first time.
1616 A terminal resize will not update this value.
1617 This choice enables a faster display.
1620 .IP "\fB-C\fP|\fB-cs\fP|\fB-cols\fP|\fB-cols_select\fP... \
1621 [\fIi\fP|\fII\fP|\fIe\fP|\fIE\fP|\
1622 \fIl\fP|\fIL\fP|\fIr\fP|\fIR\fP|\fIc\fP|\fIC\fP|\
1623 \fIa\fP|\fIA\fP]\
1624 [\fIselectors\fP]..."
1625 (Allowed in the "Columns" context.)
1627 In column mode, this option is useful for performing specific actions
1628 on a set of columns.
1630 These actions varies according to the directive given:
1632 - You can include (directive \fIi\fP or \fII\fP) or exclude (\fIe\fP or
1633 \fIE\fP) a set of selectable columns.
1635 - You can specified the kind of alignment (left, right or center) of the
1636 set of columns with the directives \fIl\fP, \fIL\fP, \fIr\fP, \fIR\fP,
1637 \fIc\fP or \fIC\fP.
1639 - You can also specified the attributes (colors...) of the set of columns
1640 with the directives \fIa\fP or \fIA\fP.
1642 When the directive is missing, the "include" directive is assumed
1643 (\fIi\fP).
1645 Note that it is best to use the lower case version of these directives,
1646 as their upper case alternative may have other meanings in the future.
1648 In selectors, columns can be designated by their number (starting with
1649 1) or by regular expressions surrounded by delimiters consisting of
1650 any printable ASCII character, except spaces and unprotected commas;
1651 commas can be protected by backslashes ('\fCD\\\fP')).
1653 Column ranges are defined  by separating their numbers with a dash. Open
1654 interval to the left or right are allowed, so these interval descriptions
1655 may be preceded or followed by a dash (e.g. \f(CB5-7\fP, \f(CB-2\fP
1656 or \f(CB8-\fP are allowed).
1658 \fBWARNING\fP: ranges of regular expressions are not yest supported.
1660 When using the \fIa\fP|\fIA\fP directive, an attribute \fBmust\fP be
1661 appended prefixed by a colon (':') as in \f(CB-C a1-2:6+b\fP per example.
1662 Refer to the attribute option (\fB-a\fP|\fB-attr\fP|\fB-attributes\fP)
1663 for more details.
1665 Multiple selectors can be regrouped in one argument using commas to
1666 separate them.
1668 This option also accepts multiple arguments, each of them being a
1669 selector.
1671 A selection by regular expressions means that a column containing a word
1672 matching any of these expressions will be included or excluded depending
1673 on the letter given after the option or before the selector if there is
1674 more than one argument.
1676 Regular expressions and column numbers can be freely mixed.
1678 This option also sets the default alignment of column contents when no
1679 arguments are provided.
1680 For example: \f(CB-Cr -Cl1\fP sets the default alignment to the right
1681 and the alignment of the contents of column 1 to the left.
1682 At the beginning, no default alignment of the column contents is set.
1684 Regular expression in \fB-C\fP|\fB-cs\fP|\fB-cols\fP|\fB-cols_select\fP and
1685 \fB-R\fP|\fB-rs\fP|\fB-rows\fP|\fB-rows_select\fP can contain \fBUTF-8\fP
1686 characters either directly or by using the \fI\\u\fP or \fI\\U\fP notation.
1688 Example of columns selection: \f(CB-Ci2,3,/X./,5-7\fP forces the cursor
1689 to only navigate in columns \fB2\fP,\fB3\fP,\fB5\fP,\fB6\fP and \fB7\fP
1690 and those containing a two characters word starting with '\fBX\fP'.
1691 If \fIe\fP was used in place of \fIi\fP, all the columns would have been
1692 selected \fBexcept\fP the columns \fB2\fP,\fB3\fP,\fB5\fP,\fB6\fP,\fB7\fP
1693 and those matching the extended regular expression '\f(CBX.\fP'.
1695 Example of defining the attributes of a column set:
1696 \f(CB-C a2-6:7/4+b\fP forces the columns from 2 to 6 to be bold and have
1697 a foreground color equal to 7 and a background color equal to 4.
1699 Example of mixing alignment and inclusion/exclusion directives:
1700 \f(CB-Ci1-5 -Ce/a+/ -Cr7,/b+/\fP makes columns 1 to 5 selectable, makes
1701 columns whose content starts with "a" non selectable and aligns the
1702 content of the column 7 to the left.
1704 Spaces are allowed in the selection string if they are protected.
1706 When an alignment directive is used and without any column selection,
1707 then the specified alignment becomes the default one, E.g: \f(CB-Cr\fP
1708 sets alignment the default one to the right.
1710 Other example where multiple selectors are used as multiple arguments:
1711 \f(CBps | smenu -col -cols e/TTY/ e/CMD/ e3\fP
1713 \fBWarning\fP, if this option appears on the command line before any
1714 \fB-R\fP|\fB-rs\fP|\fB-rows\fP|\fB-rows_select\fP option, the specified
1715 column alignments will be protected from any future row alignment
1716 directives.
1717 Otherwise row alignment directives will take precedence. For example:
1719 \f(CBecho "a b c\\\\naa bb cc\\\\naaaa bbbb cccc"
1720 | smenu -c -g\\| -C c2 -R r2\fP
1723 Gives:
1724 \f(CRa   | b  |c\fP
1725 \f(CR  aa| bb |  cc <-- \fPCol. 2 remains centered as \f(CB-C\fP was used first.
1726 \f(CRaaaa|bbbb|cccc\fP
1730 \f(CBecho "a b c\\\\naa bb cc\\\\naaaa bbbb cccc"
1731 | smenu -c -g\\| -R r2 -C c2\fP
1734 Gives:
1735 \f(CRa   | b  |c\fP
1736 \f(CR  aa|  bb|  cc <-- -R\fP takes precedence as it was used first.
1737 \f(CRaaaa|bbbb|cccc\fP
1739 .IP "\fB-R\fP|\fB-rs\fP|\fB-rows\fP|\fB-rows_select\fP... \fIselectors\fP..."
1740 (Allowed in the "Columns" and "Lines" contexts.)
1742 Similar to \fB-C\fP|\fB-cs\fP|\fB-cols\fP|\fB-cols_select\fP but for
1743 the rows.
1745 \fBWarning\fP, the directives \fIl\fP, \fIL\fP, \fIr\fP, \fIR\fP, \fIc\fP
1746 and \fIC\fP are only allowed in column mode.
1748 \fB-C\fP|\fB-cs\fP|\fB-cols\fP|\fB-cols_select\fP and
1749 \fB-R\fP|\fB-rs\fP|\fB-rows\fP|\fB-rows_select\fP can be used more than
1750 once in a cumulative manner:
1752 The selection mode (selection or de-selection) is given by the first
1753 occurrence of the options, the other occurrences will only update the
1754 selected or de-selected ranges.
1756 Once a column or a row has been excluded, it cannot be re-included.
1757 .IP "\fB-al\fP|\fBalign\fP... \fIregex_selectors\fP..."
1758 (Allowed in the "Columns" context.)
1760 This option is similar to
1761 \fB-C\fP|\fB-cs\fP|\fB-cols\fP|\fB-cols_select\fP and
1762 \fB-R\fP|\fB-rs\fP|\fB-rows\fP|\fB-rows_select\fP but allows to
1763 align all words matched by on of the regular expression defined in
1764 \fIregex_selectors\fP
1766 This option only accepts a list of regular expressions.
1768 E.g.: \f(CB-al c/a+/,/b+/\fP
1770 \fB-al\fP|\fBalign\fP,
1771 \fB-C\fP|\fB-cs\fP|\fB-cols\fP|\fB-cols_select\fP and
1772 \fB-R\fP|\fB-rs\fP|\fB-rows\fP|\fB-rows_select\fP can be used more than
1773 once in a cumulative manner.
1775 Word alignments with this option take precedence over row and column
1776 alignments.
1777 .IP "\fB-A\fP|\fB-fc\fP|\fB-first_column\fP \fIregex\fP"
1778 (Allowed in the following contexts: "Columns", "Lines" and "Tabulations".)
1780 In column mode, forces all words matching the given regular expression
1781 to be the first one in the displayed line.
1782 If you want to only rely on this method to build the lines, just specify
1783 an empty \fBregex\fP to set the end-of-line separator with
1784 \fB-L\fP|\fB-ls\fP|\fB-ld\fP|\fB-line-delimiters\fP|\fB-line_separators\fP '')
1787 \fI\\u\fP and \fI\\U\fP sequences can also be used in the regexp after
1788 \fB-A\fP|\fB-fc\fP|\fB-first_column\fP.
1790 .IP "\fB-Z\fP|\fB-lc\fP|\fB-last_column\fP \fIregex\fP"
1791 (Allowed in the following contexts: "Columns", "Lines" and "Tabulations".)
1793 Similar to \fB-A\fP|\fB-fc\fP|\fB-first_column\fP but forces the word
1794 to be the latest of its line.
1795 The same trick with
1796 \fB-L\fP|\fB-ls\fP|\fB-ld\fP|\fB-line-delimiters\fP|\fB-line_separators\fP
1797 can also be used.
1800 \fI\\u\fP and \fI\\U\fP sequences can also be used in the regexp after
1801 \fB-Z\fP|\fB-lc\fP|\fB-last_column\fP.
1803 .IP "\fB-g\fP|\fB-gutter\fP [\fIstring\fP]"
1804 (Allowed in the "Columns" and "Tabulations" contexts.)
1806 Replaces the blank after each words in column or tabular mode by a column
1807 separator.
1809 This separator is extracted from the \fIstring\fP argument and each
1810 of its (multibyte) character is used one after the other to fill
1811 the gutter.
1813 If there are more columns that gutter characters then the last character
1814 is used for the remaining columns.
1816 When not given, the separator defaults to a vertical bar \fI|\fP (or a
1817 full height vertical bar if the locale is set to \fBUTF-8\fP).
1819 Each character can be given in normal or \fI\\u\fP or \fI\\U\fP form in
1820 the \fIstring\fP argument.
1822 Example: "\f(CB|- \fP" will allow one to separate the first two columns
1823 with '\f(CB|\fP', then '\f(CB-\fP' will be used and '\f(CB \fP' will
1824 separate the remaining columns if any.
1825 .IP "\fB-k\fP|\fB-ks\fP|\fB-keep_spaces\fP"
1826 (Allowed in all contexts.)
1828 By default, the spaces surrounding the output string will be deleted.
1829 This option forces them to be retained.
1830 .IP "\fB-W\fP|\fB-ws\fP|\fB-wd\fP|\fB-word_delimiters\fP|\
1831 \fB-word_separators\fP \fIbytes\fP"
1832 (Allowed in all contexts.)
1834 This option can be used to specify the characters (or multibyte
1835 sequences) which will be used to delimit the input words.
1837 Each character or multibyte sequence in the given argument will be
1838 understood as a word delimiter.
1840 Multibyte sequences (\fBUTF-8\fP) can be natives of using the same ASCII
1841 representation used in words (a leading \fI\\u\fP or \fI\\U\fP following
1842 by up to 8 hexadecimal characters for the former and 6 hexadecimal
1843 characters for the latter).
1845 Non-printable characters in arguments should be given using the standard
1846 \fI$''\fP representation.
1847 \fI$'\\t'\fP stands for the tabulation character for example.
1849 The default delimiters are: \fISPACE\fP, \fI$'\\t'\fP and \fI$'\\n'\fP.
1850 .IP "\fB-L\fP|\fB-ls\fP|\fB-ld\fP|\fB-line-delimiters\fP|\
1851 \fB-line_separators\fP \fIbytes\fP"
1852 (Allowed in all contexts.)
1854 This option can be used to specify the characters (or multibyte
1855 sequences) which will be used to delimit the lines in the input stream.
1857 Each character or multibyte sequence in the given argument will be
1858 understood as a line delimiter.
1860 Multibyte sequences (\fBUTF-8\fP) can be natives of using the same ASCII
1861 representation used in words (a leading \fI\\u\fP or \fI\\U\fP following
1862 by up to 8 hexadecimal characters for the former and 6 hexadecimal
1863 characters for the latter).
1865 Non-printable characters in arguments should be given using the standard
1866 $'' representation.
1867 $'\\n' stands for the newline character for example.
1869 The default delimiter is: \fI$'\\n'\fP.
1871 This option is only useful when the
1872 \fB-c\fP|\fB-col\fP|\fB-col_mode\fP|\fB-column\fP or \fB-l\fP option is
1873 also set.
1875 The characters (or multibyte sequences) passed to
1876 \fB-L\fP|\fB-ls\fP|\fB-ld\fP|\fB-line-delimiters\fP|\fB-line_separators\fP are
1877 automatically added to the list of word delimiters as if
1878 \fB-W\fP|\fB-ws\fP|\fB-wd\fP|\fB-word_delimiters\fP|\fB-word_separators\fP was
1879 also used.
1881 \fI\\u\fP and \fI\\U\fP sequences can also be used here.
1883 .IP "\fB-q\fP|\fB-no_bar\fP|\fB-no_scroll_bar\fP"
1884 (Allowed in all contexts.)
1886 Prevents the display of the lateral scroll bar.
1887 This also prevents the display of the horizontal scroll bar.
1888 .IP "\fB-no_hbar\fP|\fB-no_hor_scroll_bar\fP"
1889 (Allowed in the "Columns" and "Lines" contexts.)
1891 Prevents the display of the horizontal scroll bar.
1892 .IP "\fB-hbar\fP|\fB-hor_scroll_bar\fP"
1893 (Allowed in the "Columns" and "Lines" contexts.)
1895 Forces the display of the horizontal scroll when at least one line will be
1896 truncated.
1897 This is the case even if the current line or lines being currently
1898 displayed are not truncated.
1900 When the \fB-no_hbar\fP|\fB-no_hor_scroll_bar\fP or
1901 \fB-q\fP|\fB-no_bar\fP|\fB-no_scroll_bar\fP are also present then this
1902 option is ignored.
1903 .IP "\fB-S\fP|\fB-subst\fP... \
1904 /\fIregex\fP/\fIrepl\fP/[\fIg\fP][\fIv\fP][\fIs\fP]"
1905 (Allowed in all contexts.)
1907 Post-processes the words by applying a regular expression based
1908 substitution.
1909 The argument must be formatted as in the \fBsed\fP editor.
1911 As in \fBsed\fP, matching groups and references to these groups
1912 (from \f(CB\\0\fP to \f(CB\\9\fP in \fIrepl\fP) are supported.
1913 These groups must be surrounded by \f(CB(\fP and \f(CB)\fP in \fIregex\fP.
1914 \f(CB\\0\fP and \f(CB&\fP are equivalent in \fIrepl\fP as in the GNU
1915 version of \fBsed\fP.
1917 Back reference example:
1920 \f(CBR=$(echo "[A] [B] [C]" | ./smenu -S '/([^][]+)/:\\1:/')\fP
1921 will display \f(CR"[:A:] [:B:] [:C:]"\fP
1924 This option can be used more than once.
1925 Each substitution will be applied in sequence on each word.
1926 This sequence can be stopped if a \fBstop\fP flag is encountered.
1929 \fBflags:\fP
1930 .IP \(bu 2
1931 The optional trailing \fBg\fP (for \fIg\fPlobal) means that all matching
1932 occurrences shall be replaced and not only the first one.
1933 .IP \(bu 2
1934 The optional trailing \fBv\fP (for \fIv\fPisual) means that the altered
1935 words will only be used for display and search.
1936 The modifications will \fInot\fP be reflected in the returned word.
1937 .IP \(bu 2
1938 The optional trailing \fBs\fP (for \fIs\fPtop) means that no
1939 more substitution will be allowed on this word even if another
1940 \fB-S\fP|\fB-subst\fP is used.
1941 .IP \(bu 2
1942 The optional trailing \fBi\fP (for \fIi\fPgnore case) means that the
1943 string search operation should ignore the case for this pattern.
1945 Small examples to explain the meaning of \fIv\fP:
1948 \f(CBR=$(echo a b c | smenu -S /b/B/)\fP
1950 will display \f(CR"a B c"\fP and \f(CBR\fP will contain \fIB\fP
1951 when \fIB\fP is selected meanwhile
1954 \f(CBR=$(echo a b c | smenu -S /b/B/\fBv\fP)\fR
1956 will display the same as above but \f(CBR\fP will contain the original
1957 word \fIb\fP when \fIB\fP is selected.
1959 In both cases, only the word \fIB\fP will be searchable and not \fIb\fP.
1961 .IP "\fB-I\fP|\fB-si\fP|\fB-subst_included\fP... \
1962 /\fIregex\fP/\fIrepl\fP/[\fIg\fP][\fIv\fP][\fIs\fP]"
1963 (Allowed in all contexts.)
1965 Post-processes the \fBselectable\fP words by applying a regular
1966 expression based substitution (see \fB-S\fP|\fB-subst\fP for details).
1967 .IP "\fB-E\fP|\fB-se\fP|\fB-subst_excluded\fP... \
1968 /\fIregex\fP/\fIrepl\fP/[\fIg\fP][\fIv\fP][\fIs\fP]"
1969 (Allowed in all contexts.)
1971 Post-processes the \fBexcluded\fP (or \fBnon-selectable\fP)
1972 words by applying a regular expression based substitution (see
1973 \fB-S\fP|\fB-subst\fP for details).
1976 The \fB/\fP separator that \fB-I\fP|\fB-si\fP|\fB-subst_included\fP and
1977 \fB-E\fP|\fB-se\fP|\fB-subst_excluded\fP are using above can be
1978 substituted by any other character except \fISPACE\fP, \fI\\t\fP,
1979 \fI\\f\fP, \fI\\n\fP, \fI\\r\fP and \fI\\v\fP.
1981 In the three previous options, \fIregex\fP is a \fBPOSIX\fP
1982 \fBE\fPxtended \fBR\fPegular \fBE\fPxpression.
1983 For details, please refer to the \fBregex(7)\fP manual page.
1985 Additionally \fI\\u\fP and \fI\\U\fP sequences can also be used in
1986 the regexp.
1989 If a post-processing action
1990 (\fB-S\fP|\fB-subst\fP, \fB-I\fP|\fB-si\fP|\fB-subst_included\fP, \
1991 \fB-E\fP|\fB-se\fP|\fB-subst_excluded\fP) results in an empty (length = 0)
1992 word, then we have two cases:
1994 .IP "in column mode:"
1995 Substitutions involving empty words can lead to misalignments, so it is
1996 necessary to prohibit them and terminate the program.
1997 These substitutions have to be made with other tools before using this
1998 utility.
1999 .IP "otherwise:"
2000 The word is simply removed.
2002 .IP "\fB-ES\fP|\fB-subst\fP... \
2003 /\fIregex\fP/\fIrepl\fP/[\fIg\fP][\fIv\fP][\fIs\fP]"
2004 (Allowed in all contexts.)
2006 Pre-processes words by applying a substitution based on a regular expression.
2007 The argument must be formatted as in the \fBsed\fP editor.
2009 The substitutions are made, as the name of the option indicates, before
2010 any other selection or coloring actions are made.
2012 This option can be used more than once.
2013 Each substitution will be applied in sequence on each word.
2014 This sequence can be stopped if a \fBstop\fP flag is encountered.
2016 In summary, this option is similar to the \fB-S\fP|\fB-subst\fP option
2017 previously described, except that the substitutions are made earlier and
2018 certain flags like \fBvisual\fP are ignored.
2020 Note that this option can be used in conjunction with the other
2021 substitution options mentioned above.
2022 .IP "\fB-/\fP|\fB-search_method\fP \fIsearch_method\fP"
2023 (Allowed in all contexts.)
2025 Affects the '\fB/\fP' key to a search method.
2026 By default '\fB/\fP' is affected to '\fIfuzzy\fP' but the argument can
2027 be any prefix of '\fIprefix\fP', '\fIsubstring\fP' or '\fIfuzzy\fP'.
2028 .IP "\fB-s\fP|\fB-sp\fP|\fB-start\fP|\fB-start_pattern\fP \fIpattern\fP"
2029 (Allowed in all contexts.)
2031 Place the cursor on the first word corresponding to the specified pattern.
2033 Note that although only the first matching word is highlighted,  all
2034 matching words (if any) can be accessed using \fBn\fP/\fBs\fP/\fBSPACE\fP
2035 and \fBN\fP/\fBS\fP keys as if they were the result of one of the
2036 search actions.
2038 These matching words can also be tagged at once if the tagging/pinning
2039 function is activated.  See the "Tagging" section for more information.
2041 \fBESC\fP can be used to disable navigation among matching words.
2043 \fIpattern\fP can be:
2045 .IP \(bu 2
2046 A \fB#\fP immediately followed by a \fBnumber\fP giving the initial
2047 position of the cursor (counting from 0).
2049 If the word at this position is excluded, then the first previous non
2050 excluded word is selected if it exists, otherwise the first non excluded
2051 word is selected.
2053 If this number if greater than the number of words, the cursor will be
2054 placed on the latest selectable position.
2055 .IP \(bu 2
2056 A single \fB#\fP or the string \fB#last\fP to set the initial
2057 cursor position on the latest selectable word position.
2058 .IP \(bu 2
2059 A string starting with a \fB/\fP indicating that we want the cursor
2060 to be placed on the first word matching the given regular expression.
2061 .IP \(bu 2
2062 A string starting with a \fB=\fP indicating than we want the cursor
2063 to be placed on that exact word.
2064 .IP \(bu 2
2065 A normal string. In this case the cursor will be placed on the
2066 first word starting with that string (\fBCa\fP will match \fBCancel\fP
2067 by example).
2069 \fBWarning\fP, when searching for a prefix or a regular expression, smenu
2070 only looks for them after an eventual modification, so for example,
2071 the command:
2072 \f(CBsmenu -I/c/x/ -s/c <<< "a b c d"\fP won't find c and put the cursor
2073 on \fBa\fP but \f(CBsmenu -I/c/x/v -s/c <<< "a b c d"\fP will find it and
2074 put the cursor on the \fBx\fP substituting the \fBc\fP on screen only
2076 \fI\\u\fP and \fI\\U\fP sequences can be used in the pattern.
2078 .IP "\fB-x\fP|\fB-tmout\fP|\fB-timeout\fP \fItype\fP [\fIword\fP] \fIdelay\fP"
2079 .IP "\fB-X\fP|\fB-htmout\fP|\fB-hidden_timeout\fP \fItype\fP [\fIword\fP]\
2080  \fIdelay\fP"
2081 (Allowed in all contexts.)
2083 Sets a timeout.
2084 Three types of timeout are possible:
2086 .TP 10
2087 current:
2088 At the timeout, the word under the cursor and/or the tagged words are
2089 sent to the standard output if the \fBENTER\fP key has been pressed
2090 .TP 10
2091 quit:
2092 At the timeout, nothing is selected as if the \fBq\fP key has been pressed
2093 .TP 10
2094 word:
2095 At the timeout, the word given after the type is selected.
2096 Note that this word doesn't need to be part of the words coming from
2097 the standard input.
2099 Each type can be be shortened as a prefix of its full name ("cur" for
2100 "current" of "q" for "quit" per example).
2102 The delay must be set in seconds and cannot be greater than 99999 seconds.
2104 The remaining time (in seconds) is added at the end of the message
2105 displayed above the selection window and is updated in real time each
2106 second.
2108 Any key except \fBENTER\fP, \fBq\fP, \fBQ\fP and \fBCTRL\ C\fP resets
2109 the timer to its initial value.
2111 The \fB-X\fP|\fB-htmout\fP|\fB-hidden_timeout\fP version works like
2112 \fB-x\fP|\fB-tmout\fP|\fB-timeout\fP but no periodic remaining messages
2113 is displayed above the selection window.
2115 .IP "\fB-r\fP|\fB-auto_validate\fP"
2116 (Allowed in all contexts.)
2118 Enables \fBENTER\fP to validate the selection even in search mode.
2119 .IP "\fB-is\fP|\fB-incremental_search\fP"
2120 (Allowed in all contexts.)
2122 By default, when a new search session is initiated, the current search
2123 buffer is reset.
2124 When this parameter is set, the next search will start where the last
2125 search ended, except if \fBESC\fP was hit before.
2127 This option instructs not to clean the previous search buffer each time
2128 a new search session is started.
2129 .IP "\fB-v\fP|\fB-vb\fP|\fB-visual_bell\fP"
2130 (Allowed in all contexts.)
2132 By default, when searching, an alarm is produced by the terminal when
2133 the user enters a character or makes a move which lead to no result or
2134 to an error condition.
2135 This argument make this beep visual by briefly showing the cursor.
2136 .IP "\fB-Q\fP|\fB-ignore_quotes\fP"
2137 (Allowed in all contexts.)
2139 Using this option will remove the word grouping feature from single and
2140 double quotes which will be considered normal characters.
2141 For example: \f(CB"a b"\fP will be considered by smenu as two words
2142 \fB"a\fP and \fBb"\fP and no more as a single word: \fBa b\fP.
2143 .IP "\fB-lim\fP|\fB-limits\fP \fIlimit:value\fP..."
2144 (Allowed in all contexts.)
2146 This option gives the possibility to modify the default maximum number
2147 of words or columns and the maximum permitted word length.
2149 The specified values overload the default settings and/or the settings
2150 given in the configuration files.
2153 In order to do that, three sub-options can be used:
2154 .IP \fBl\fP:value 2
2155 to set the maximum word length allowed.
2156 .IP \fBw\fP:value 2
2157 to set the maximum number of words allowed.
2158 .IP \fBc\fP:value 2
2159 to set the maximum number of columns allowed.
2161 Several sub-options, separated by spaces, can be given after this option.
2164 .IP "\fB-f\fP|\fB-forgotten_timeout\fP|\fB-global_timeout\fP \fItimeout\fP"
2165 (Allowed in all contexts.)
2167 This option defines a global timeout in seconds.
2168 The program will end without error after this period of inactivity.
2170 This timer is reset to its initial value each time a key is pressed.
2172 Its default value is "unlimited", but it can be changed by assigning a
2173 number (in tenths of seconds) to the "forgotten" entry in the [timers]
2174 section of the optional configuration file.
2175 See the example in the configuration sub-section.
2177 A \fItimeout\fP value equals to \fB0\fP explicitly disables this timer.
2178 .IP "\fB-nm\fP|\fB-no_mouse\fP"
2179 (Allowed in all contexts.)
2181 This option allows you to disable the mouse even if smenu can use it.
2182 .IP "\fB-br\fP|\fB-buttons\fP|\fB-button_remapping\fP \fInew_button_1\fP \
2183 \fInew_button_3\fP"
2184 (Allowed in all contexts.)
2186 This option allows one to remap the mouse buttons.  The buttons are numbered
2187 from 1 to 3 but as smenu only uses buttons 1 and 3, only two arguments
2188 are required.
2190 By example, the syntax \f(CR-br 3 1\fP will reverse the first (left)
2191 and third (right?) buttons.
2193 The default mapping is \f(CR1 3\fP.
2194 .IP "\fB-dc\fP|\fB-dcd\fP|\fB-double_click\fP|\fB-double_click_delay\fP \
2195 \fIdelay_in_ms\fP"
2196 (Allowed in all contexts.)
2198 This option allows one to set the double-click delay in the range of 100 ms
2199 (1/10 second) to 500 ms (1/2 second).
2200 The default delay of 150 ms (1/6.66 second) will be used if the given
2201 value is out of range or invalid.
2203 The double-click capability can also be disabled by setting
2204 \fIdelay_in_ms\fP to \fB0\fP.
2206 This setting is also configurable in a configuration file, see the
2207 [mouse] section in the example in the configuration sub-section.
2208 .IP "\fB-sb\fP|\fB-sbw\fP|\fB-show_blank_words\fP [\fIblank_char\fP]"
2209 (Allowed in all contexts.)
2211 Normally, blank words (words containing only space:.!fmt
2212 s) are only kept in column mode.
2213 When this option is present, these words are converted into a sequence
2214 of \fIblank_char\fP (or underscore if the optional parameter is absent)
2215 so that they are visible and not ignored when not in column mode.
2217 \fIblank_char\fP must be printable but not a space nor a multibyte
2218 character.
2220 Note: These blank words remain blank even if they are now made
2221 visible. They can still be excluded using \f(CB-e '\ '\fP
2222 or \f(CB-e '[ ]'\fP per example.
2223 .SH NOTES
2224 If tabulators (\fI\\t\fP) are embedded in the input, there is no way
2225 to replace them with the original number of spaces.
2226 In this case use another filter (like \fIexpand\fR) to pre-process
2227 the data.
2228 .SH EXAMPLES
2229 .SS 1
2230 Simple Yes/No/Cancel request with "No" as default choice:
2233 \f(CRIn \fBbash\fP:
2234   \f(CBread R <<< $(echo "Yes No Cancel" \\
2235                | smenu  -d -m "Please choose:" -s /N)\fP
2238   \f(CBR=$(echo "Yes No Cancel" \\
2239       | smenu -d -m "Please choose:" -s /N)\fP
2241 In \fBksh\fP:
2242   \f(CBprint "Yes No Cancel"                \\
2243   | smenu -d -m "Please choose:" -s /N \\
2244   | read R\fP
2247 .SS 2
2248 Get a 3 columns report about VM statistics for the current process in
2249 \fBbash\fP/\fBksh\fP on Linux:
2252 \f(CBR=$(grep Vm /proc/$$/status | expand | smenu -b -W$'\\n' -t3 -g -d)\fB
2256 .SS 3
2257 Create a one column selection window containing the list of the first
2258 20 LVM physical volumes.
2259 At the end, the selection window will be erased.
2260 This example is written in \fBksh\fP).
2263 \f(CB
2264 pvs -a -o pv_name --noheadings                 \\
2265 | smenu -m "PV list" -n20 -t1 -d -s //dev/root \\
2266 | read R
2270 The display will have a look similar to the following with the cursor
2271 set on the word \fI/dev/root\fP:
2274 \f(CRPV list
2275 /dev/md126           \\
2276 /dev/md127           |
2277 /dev/root            | <- cursor here.
2278 /dev/sda2            |
2279 /dev/sdb2            |
2280 /dev/sdc1            |
2281 /dev/sdc2            |
2282 /dev/system/homevol  /
2285 .SS "4 (advanced)"
2286 Imagine a file named \fBsample.mnu\fP with the following content:
2289 \f(CR--8<---------------------------------
2290 "1 First Entry" "3 Third entry"
2291 "2 Second entry" "4 Fourth entry"
2292 @@@ "5 Fifth entry"
2294 "0 Exit menu"
2295 --8<---------------------------------
2299 Then this quite esoteric command will render it (centered on the screen) as:
2302 \f(CR+----------------------------------+
2303 |            Test menu             |
2304 |                                  |
2305 | 1) First Entry   3) Third entry  |
2306 | 2) Second entry  4) Fourth entry |
2307 |                  5) Fifth entry  |
2308 |                                  |
2309 | 0) Exit menu                     |
2310 +----------------------------------+
2314 with the cursor on \fIQuit\fP and only the numbers and "Quit" selectable.
2316 \f(CBR=$(smenu -q -d -s/Exit -M -n 30 -c        \\
2317           -e "@+" -E '/@+/ /'              \\
2318           -F -D n:1 i:1                    \\
2319           -m "Test menu" < sample.mnu)
2321 The selected entry will be available in \f(CBR\fP
2323 Try to understand it as an exercise.
2324 .SH ENVIRONMENT
2326 tab(@);
2327 l l.
2328 \fINO_COLOR\fP@force a monochrome terminal when set.
2329 \fICTXOPT_DEBUG\fP@put the option parser in debug mode.
2331 .SH BUGS/LIMITATIONS
2332 Some terminal emulators, those notably based on VTE version later than
2333 0.35 (see https://github.com/GNOME/vte/commit/01380d), have a new feature
2334 that gives them the possibility to wrap/unwrap already displayed lines
2335 when resizing the window.
2337 As far as I known, there is no terminfo entry to disable that.
2339 On these types of terminals, the automatic re-display of the output of
2340 smenu will be disturbed and some artifacts may appear on the screen if
2341 the terminal window is resized.
2342 .SH AUTHORS
2343 \(co 2015-present, Pierre Gentile (p.gen.progs@gmail.com)