1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
|
/* ################################################################### */
/* Copyright 2015, Pierre Gentile (p.gen.progs@gmail.com) */
/* */
/* This Source Code Form is subject to the terms of the Mozilla Public */
/* License, v. 2.0. If a copy of the MPL was not distributed with this */
/* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
/* ################################################################### */
/* **************** */
/* Usage functions. */
/* **************** */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "usage.h"
#include "ctxopt.h"
static void
common_help(void);
/* ======================= */
/* Usage display and exit. */
/* ======================= */
static void
common_help(void)
{
printf("-h|-help\n");
printf(" displays this help.\n");
printf("-u|-usage\n");
printf(" displays the synopsis of the current context.\n");
printf("-i|-in|-inc|-incl|-include\n");
printf(" sets the regex input filter to match the selectable words.\n");
printf("-e|-ex|-exc|-excl|-exclude\n");
printf(" sets the regex input filter to match the non-selectable "
"words.\n");
printf("-m|-msg|-message|-title\n");
printf(" displays a one-line message/title above the window.\n");
printf("-!|-int|-int_string\n");
printf(" outputs an optional string when ^C is typed.\n");
printf("-a|-attr|-attributes\n");
printf(" sets the attributes for the various displayed elements.\n");
printf("-1|-l1|-level1,-2|-l2|-level2,...,-9|-l9|-level9\n");
printf(" gives specific colors to up to 9 classes of "
"selectable words.\n");
printf("-z|-zap|-zap_glyphs bytes\n");
printf(" defines a set of glyphs that should be ignored in the input "
"stream.\n");
printf("-n|-lines|-height\n");
printf(" sets the maximum number of lines in the selection window.\n");
printf(" This number is autodetected when no number is given.\n");
printf("-b|-blank\n");
printf(" displays non printable characters as space.\n");
printf("-.|-dot|-invalid\n");
printf(" defines the substitution character for a non-printable "
"character.\n");
printf("-M|-middle|-center\n");
printf(" centers the display if possible.\n");
printf("-d|-restore|-delete|-clean|-delete_window|-clean_window\n");
printf(" clears the lines used by the selection window on exit.\n");
printf("-k|-ks|-keep_spaces\n");
printf(" does not trim spaces surrounding the output string if any.\n");
printf("-W|-ws|-wd|-word_delimiters|-word_separators\n");
printf(" defines word separators in the input stream.\n");
printf("-L|-ls|-ld|-line-delimiters|-line_separators\n");
printf(" defines line separators in the input stream.\n");
printf("-q|-no_bar|-no-scroll_bar\n");
printf(" prevents the scroll bar from being displayed.\n");
printf("-S|-subst\n");
printf(" defines the post-substitution action to apply to all words.\n");
printf("-I|-si|-subst_included\n");
printf(" defines the post-substitution action to apply to selectable "
"words only.\n");
printf("-E|-se|-subst_excluded\n");
printf(" defines the post-substitution action to apply to non-selectable "
"words only.\n");
printf("-ES|-early_subst\n");
printf(" defines the early substitution action to apply to all words.\n");
printf("-/|-search_method\n");
printf(" changes the affectation of the / key (default: fuzzy search).\n");
printf("-s|-sp|-start|-start_pattern\n");
printf(" sets the initial cursor position (refer to the manual for "
"more details).\n");
printf("-x|-tmout|-timeout/-X|-htmout|-hidden_timeout\n");
printf(" defines a timeout and specifies what to do when it expires.\n");
printf("-r|-auto_validate\n");
printf(" enables ENTER to validate the selection even in search mode.\n");
printf("-is|-incremental_search\n");
printf(" prevents the search buffer from being reset when starting a new "
"search\n");
printf(" session.\n");
printf("-v|-vb|-visual_bell\n");
printf(" makes the bell visual (fuzzy search with error).\n");
printf("-Q|-ignore_quotes\n");
printf(" treats single and double quotes as normal characters.\n");
printf("-lim|-limits\n");
printf(" overload the words number/max. word length/max columns limits.\n");
printf("-f|-forgotten_timeout|-global_timeout\n");
printf(" defines a global inactivity timeout, defaults to 15 min.\n");
printf("-nm|-no_mouse\n");
printf(" disable a possibly auto-detected mouse tracking support.\n");
printf("-br|-buttons|-button_remapping\n");
printf(" Remaps the left and right mouse buttons, default is 1 and 3.\n");
printf("-dc|-dcd|-double_click|-double_click_delay\n");
printf(" Change the mouse double-click delay which is 150 ms by default.\n");
}
void
main_help(void)
{
ctxopt_ctx_disp_usage("Main", continue_after);
printf("\n----------------------------------------");
printf("----------------------------------------\n");
printf("\nThis is a filter that gets words from stdin or from a file and ");
printf("outputs\n");
printf("the selected words (or nothing) on stdout in a nice selection ");
printf("window\n\n");
printf("The selection window appears on /dev/tty ");
printf("just below the current line\n");
printf("(no clear screen!).\n\n");
printf("Short description of allowed parameters:\n\n");
common_help();
printf("-V|-version\n");
printf(" displays the current version and quits.\n");
printf("-H|-long_help\n");
printf(" displays a full help and the options available in all "
"contexts.\n");
printf("-N|-number/-U|-unnumber\n");
printf(" creates or deletes direct access entries for words matching "
"(or not) a\n");
printf(" specific regex.\n");
printf("-F|-en|-embedded_number\n");
printf(" creates direct access entries by extracting the numbers from the "
"input words.\n");
printf("-c|-col|-col_mode|-column\n");
printf(" is like -tab without argument but respects end of lines.\n");
printf("-l|-line|-line_mode\n");
printf(" is like -col without column alignments.\n");
printf("-t|-tab|-tab_mode|-tabulate_mode\n");
printf(" tabulates the items. The number of columns can be limited "
"with\n");
printf(" an optional number.\n");
printf("-T|-tm|-tag|-tag_mode/-P|-pm|-pin|-pin_mode\n");
printf(" enables the tagging mode (multi-selections). ");
printf("An optional parameter\n");
printf(" defines the separator string between the selected words ");
printf("on the output.\n");
printf(" A single space is the default separator.\n");
printf("\nNavigation keys are:\n");
printf(" - Left/Down/Up/Right arrows or h/j/k/l, H/J/K/L.\n");
printf(" - Home/End, SHIFT|CTRL+Home/End CTRK+J/CTRL+K.\n");
printf(" - Numbers if some words are numbered (-N/-U/-F).\n");
printf(" - SPACE to search for the next match of a previously\n");
printf(" entered search prefix if any, see below.\n\n");
printf("Other useful keys are:\n");
printf(" - Help key (temporary display of a short help line): "
"?\n");
printf(" - Exit key without output (do nothing) : "
"q\n");
printf(" - Tagging keys: Select/Deselect/Toggle : "
"INS/DEL/t\n");
printf(" - Selection key : "
"ENTER\n");
printf(" - Cancel key : "
"ESC\n");
printf(" - Search key : "
"/ or CTRL-F\n\n");
printf("The search key activates a timed search mode in which\n");
printf("you can enter the first letters of the searched word.\n");
printf("When entering this mode you have 10s to start typing\n");
printf("and each entered letter restarts this timer.\n");
printf("After this time, the normal navigation mode is restored.\n\n");
printf("Notes:\n");
printf("- the search timer can be cancelled by pressing ESC.\n");
printf("- a bad search letter can be removed with ");
printf("CTRL-H or Backspace.\n\n");
printf("(C) Pierre Gentile.\n\n");
exit(EXIT_FAILURE);
}
void
columns_help(void)
{
ctxopt_ctx_disp_usage("Columns", continue_after);
printf("\n----------------------------------------");
printf("----------------------------------------\n");
printf("Short description of allowed parameters:\n\n");
common_help();
printf("-C|-cs|-cols|-cols_select\n");
printf(" sets columns restrictions for selections.\n");
printf("-R|-rs|-rows|-rows_select\n");
printf(" sets rows restrictions for selections.\n");
printf("-w|-wide|-wide_mode\n");
printf(" uses all the terminal width for the columns if their numbers "
"is given.\n");
printf("-g|-gutter\n");
printf(" separates columns with a character in column or tabulate "
"mode.\n");
printf("-N|-number/-U|-unnumber\n");
printf(" numbers/un-numbers and provides a direct access to words "
"matching\n");
printf(" (or not) a specific regex.\n");
printf("-F|-en|-embedded_number\n");
printf(" numbers and provides a direct access to words by extracting the "
"number\n");
printf("-T|-tm|-tag|-tag_mode/-P|-pm|-pin|-pin_mode\n");
printf(" enables the tagging (multi-selections) mode. ");
printf("An optional parameter\n");
printf(" sets the separator string between the selected words ");
printf("on the output.\n");
printf(" A single space is the default separator.\n");
printf("-A|-fc|-first_column\n");
printf(" forces the specified word pattern to start a line.\n");
printf("-Z|-lc|-last_column\n");
printf(" forces the specified word pattern to end a line.\n");
}
void
lines_help(void)
{
ctxopt_ctx_disp_usage("Lines", continue_after);
printf("\n----------------------------------------");
printf("----------------------------------------\n");
printf("Short description of allowed parameters:\n\n");
common_help();
printf("-R|-rs|-rows|-row_select\n");
printf(" sets rows restrictions for selections.\n");
printf("-N|-number/-U|-unnumber\n");
printf(" numbers/un-numbers and provides a direct access to words "
"matching\n");
printf(" (or not) a specific regex.\n");
printf("-F|-en|-embedded_number\n");
printf(" numbers and provides a direct access to words by extracting the "
"number\n");
printf("-T|-tm|-tag|-tag_mode/-P|-pm|-pin|-pin_mode\n");
printf(" enables the tagging (multi-selections) mode. ");
printf("An optional parameter\n");
printf(" sets the separator string between the selected words ");
printf("on the output.\n");
printf(" A single space is the default separator.\n");
printf("-A|-fc|-first_column\n");
printf(" forces the specified word pattern to start a line.\n");
printf("-Z|-lc|-last_column\n");
printf(" forces the specified word pattern to end a line.\n");
}
void
tabulations_help(void)
{
ctxopt_ctx_disp_usage("Tabulations", continue_after);
printf("\n----------------------------------------");
printf("----------------------------------------\n");
printf("Short description of allowed parameters:\n\n");
common_help();
printf("-w|-wide|-wide_mode\n");
printf(" uses all the terminal width for the columns if their numbers "
"is given.\n");
printf("-g|-gutter\n");
printf(" separates columns with a character in column or tabulate "
"mode.\n");
printf("-N|-number/-U|-unnumber\n");
printf(" numbers/un-numbers and provides a direct access to words "
"matching\n"
|