1 /*-------------------------------------------------------------------------
2  *
3  * menu.c
4  *	 holds menu related code
5  *
6  * Portions Copyright (c) 2017-2021 Pavel Stehule
7  *
8  * IDENTIFICATION
9  *	  src/menu.c
10  *
11  *-------------------------------------------------------------------------
12  */
13 
14 #include <stdbool.h>
15 
16 #include "pspg.h"
17 #include "st_menu.h"
18 #include "commands.h"
19 
20 #define MENU_ITEM_THEME				10
21 #define MENU_ITEM_OPTIONS			11
22 #define MENU_ITEM_COPY				12
23 
24 ST_CMDBAR_ITEM _bottombar[] = {
25 	{"Save", false, 2, cmd_SaveData, 0},
26 	{"Mark", false, 3, cmd_Mark, 0},
27 	{"Search", false, 7, cmd_ForwardSearch, 0},
28 	{"Menu", false, 9, cmd_ShowMenu, 0},
29 	{"Quit", false, 10, cmd_Quit, 0},
30 	{NULL, false, 0, 0, 0}
31 };
32 
33 ST_CMDBAR_ITEM _bottombar_alt1[] = {
34 	{"Save", false, 2, cmd_SaveData, 0},
35 	{"Quit", false, 3, cmd_Quit, 0},
36 	{"Copy", false, 5, 0, 0},
37 	{"Search", false, 7, cmd_ForwardSearch, 0},
38 	{"Menu", false, 9, cmd_ShowMenu, 0},
39 	{"Quit", false, 10, cmd_Quit, 0},
40 	{NULL, false, 0, 0, 0}
41 };
42 
43 ST_MENU_ITEM _copy[] = {
44 	{"~C~opy", cmd_Copy, "Ins", 0, 0, 0, NULL},
45 	{"--", 0, NULL, 0, 0, 0, NULL},
46 	{"Copy ~l~ine", cmd_CopyLine, NULL, 0, 0, 0, NULL},
47 	{"Copy line e~x~tended", cmd_CopyLineExtended, NULL, 0, 0, 0, NULL},
48 	{"Copy col~u~mn", cmd_CopyColumn, NULL, 0, 0, 0, NULL},
49 	{"Copy ~s~elected", cmd_CopySelected, NULL, 0, 0, 0, NULL},
50 	{"--", 0, NULL, 0, 0, 0, NULL},
51 	{"Copy ~a~ll", cmd_CopyAllLines, NULL, 0, 0, 0, NULL},
52 	{"Copy ~t~op lines", cmd_CopyTopLines, NULL, 0, 0, 0, NULL},
53 	{"Copy ~b~ottom lines", cmd_CopyBottomLines, NULL, 0, 0, 0, NULL},
54 	{"Copy book~m~arked lines", cmd_CopyMarkedLines, NULL, 0, 0, 0, NULL},
55 	{"Copy sea~r~ched lines", cmd_CopySearchedLines, NULL, 0, 0, 0, NULL},
56 	{"--", 0, NULL, 0, 0, 0, NULL},
57 	{"Copy to ~f~ile", cmd_SetCopyFile, NULL, 0, 0, 0, NULL},
58 	{"Copy to cli~p~board", cmd_SetCopyClipboard, NULL, 0, 0, 0, NULL},
59 	{"--", 0, NULL, 0, 0, 0, NULL},
60 	{"Empty string is NULL", cmd_TogleEmptyStringIsNULL, NULL, 0, 0, 0, NULL},
61 	{"Set own ~N~ULL string", cmd_SetOwnNULLString, NULL, 0, 0, 0, NULL},
62 	{"--", 0, NULL, 0, 0, 0, NULL},
63 	{"_0_Use CSV format", cmd_UseClipboard_CSV, NULL, 0, 0, 0, NULL},
64 	{"_1_Use LibreOffice TSVC format", cmd_UseClipboard_TSVC, NULL, 0, 0, 0, NULL},
65 	{"_2_Use formatted text", cmd_UseClipboard_text, NULL, 0, 0, 0, NULL},
66 	{"_3_Use INSERT format", cmd_UseClipboard_INSERT, NULL, 0, 0, 0, NULL},
67 	{"_4_Use commented INSERT format", cmd_UseClipboard_INSERT_with_comments, NULL, 0, 0, 0, NULL},
68 	{"_5_Use SQL Values format", cmd_UseClipboard_SQL_values, NULL, 0, 0, 0, NULL},
69 	{"_6_Use pipe separated text", cmd_UseClipboard_pipe_separated, NULL, 0, 0, 0, NULL},
70 	{NULL, 0, NULL, 0, 0, 0, NULL}
71 };
72 
73 ST_MENU_ITEM _file[] = {
74 	{"~C~opy to", 0, NULL, 0, 0, 0, _copy},
75 	{"--", 0, NULL, 0, 0, 0, NULL},
76 	{"~S~ave", cmd_SaveData, "s", 0, 0, 0, NULL},
77 	{"Sa~v~e as CSV", cmd_SaveAsCSV, NULL, 0, 0, 0, NULL},
78 	{"--", 0, NULL, 0, 0, 0, NULL},
79 	{"~R~aw output quit", cmd_RawOutputQuit, "M-q", 0, 0, 0, NULL},
80 	{"E~x~it", cmd_Quit, "q, F10", 0, 0, 0, NULL},
81 	{NULL, 0, NULL, 0, 0, 0, NULL}
82 };
83 
84 /*
85  * This content must be permanent for all menu life cycle. State variable
86  * menu references on this content.
87  */
88 ST_MENU_ITEM _search[] = {
89 	{"~S~earch", cmd_ForwardSearch, "/", 0, 0, 0, NULL},
90 	{"Search ~b~ackward", cmd_BackwardSearch, "?", 0, 0, 0, NULL},
91 	{"Search ~a~gain", cmd_SearchNext, "n", 0, 0, 0, NULL},
92 	{"Search p~r~evious", cmd_SearchPrev, "N", 0, 0, 0, NULL},
93 	{"--", 0, NULL, 0, 0, 0, NULL},
94 	{"Search in selection", cmd_ForwardSearchInSelection, "M-/", 0, 0, 0, NULL},
95 	{"Search back in selection", cmd_BackwardSearchInSelection, "M-?", 0, 0, 0, NULL},
96 	{"--", 0, NULL, 0, 0, 0, NULL},
97 	{"Search ~c~olumn", cmd_SearchColumn, "c", 0, 0, 0, NULL},
98 	{"--", 0, NULL, 0, 0, 0, NULL},
99 	{"~T~oggle bookmark", cmd_ToggleBookmark, "M-k", 0, 0, 0, NULL},
100 	{"~P~rev bookmark", cmd_PrevBookmark, "M-i", 0, 0, 0, NULL},
101 	{"~N~ext bookmark", cmd_NextBookmark, "M-j", 0, 0, 0, NULL},
102 	{"~F~lush bookmarks", cmd_FlushBookmarks, "M-o", 0, 0, 0, NULL},
103 	{NULL, 0, NULL, 0, 0, 0, NULL}
104 };
105 
106 ST_MENU_ITEM _command[] = {
107 	{"_0_Release fixed columns", cmd_ReleaseCols, "0", 0, 0, 0, NULL},
108 	{"_1_Freeze one column", cmd_FreezeOneCol, "1", 0, 0, 0, NULL},
109 	{"_2_Freeze two columns", cmd_FreezeTwoCols, "2", 0, 0, 0, NULL},
110 	{"_3_Freeze three columns", cmd_FreezeThreeCols, "3", 0, 0, 0, NULL},
111 	{"_4_Freeze four columns", cmd_FreezeFourCols, "4", 0, 0, 0, NULL},
112 	{"--", 0, NULL, 0, 0, 0, NULL},
113 	{"~P~rev row", cmd_CursorUp, "k, Key up", 0, 0, 0, NULL},
114 	{"~N~ext row", cmd_CursorDown, "j, Key down", 0, 0, 0, NULL},
115 	{"Move to l~e~ft", cmd_MoveLeft, "h, Key left", 0, 0, 0, NULL},
116 	{"Move to ~r~ight", cmd_MoveRight, "l, Key right", 0, 0, 0, NULL},
117 	{"--", 0, NULL, 0, 0, 0, NULL},
118 	{"Go to ~f~irst row", cmd_CursorFirstRow, "g, C-Home", 0, 0, 0, NULL},
119 	{"Go to l~a~st row", cmd_CursorLastRow, "G, C-End", 0, 0, 0, NULL},
120 	{"Go to ~l~ine", cmd_GotoLine, "M-l", 0, 0, 0, NULL},
121 	{"--", 0, NULL, 0, 0, 0, NULL},
122 	{"~S~how first column", cmd_ShowFirstCol, "^, Home", 0, 0, 0, NULL},
123 	{"Sho~w~ last column", cmd_ShowLastCol, "$, End", 0, 0, 0, NULL},
124 	{"--", 0, NULL, 0, 0, 0, NULL},
125 	{"Page up", cmd_PageUp, "C-b, Prev page", 0, 0, 0, NULL},
126 	{"Page down", cmd_PageDown, "C-f, space, Next page", 0, 0, 0, NULL},
127 	{"--", 0, NULL, 0, 0, 0, NULL},
128 	{"As~c~ending order", cmd_SortAsc, "a", 0, 0, 0, NULL},
129 	{"~D~escending order", cmd_SortDesc, "d", 0, 0, 0, NULL},
130 	{"~O~riginal order", cmd_OriginalSort, "u", 0, 0, 0, NULL},
131 	{"--", 0, NULL, 0, 0, 0, NULL},
132 	{"To~g~gle mark", cmd_Mark, "F3", 0, 0, 0, NULL},
133 	{"~M~ark column", cmd_MarkColumn, "F13", 0, 0, 0, NULL},
134 	{"Mark all", cmd_MarkAll, NULL, 0, 0, 0, NULL},
135 	{"Unmar~k~", cmd_Unmark, NULL, 0, 0, 0, NULL},
136 	{"--", 0, NULL, 0, 0, 0, NULL},
137 	{"Refres~h~ screen", cmd_Refresh, "R, C-l", 0, 0, 0, NULL},
138 	{"Show primar~y~ screen", cmd_ShowPrimaryScreen, "C-o", 0, 0, 0, NULL},
139 	{NULL, 0, NULL, 0, 0, 0, NULL}
140 };
141 
142 ST_MENU_ITEM _theme[] = {
143 	{"_0_Midnight black", cmd_SetTheme_MidnightBlack, NULL, 0, 0, 0, NULL},
144 	{"_1_Midnight theme", cmd_SetTheme_Midnight, NULL, 0, 0, 0, NULL},
145 	{"_2_FoxPro like", cmd_SetTheme_Foxpro, NULL, 0, 0, 0, NULL},
146 	{"_3_Pdmenu like", cmd_SetTheme_Pdmenu, NULL, 0, 0, 0, NULL},
147 	{"_4_White theme", cmd_SetTheme_White, NULL, 0, 0, 0, NULL},
148 	{"_5_Mutt theme", cmd_SetTheme_Mutt, NULL, 0, 0, 0, NULL},
149 	{"_6_PC Fand like", cmd_SetTheme_Pcfand, NULL, 0, 0, 0, NULL},
150 	{"_7_Green theme", cmd_SetTheme_Green, NULL, 0, 0, 0, NULL},
151 	{"_8_Blue theme", cmd_SetTheme_Blue, NULL, 0, 0, 0, NULL},
152 	{"_9_Word perfect theme", cmd_SetTheme_WP, NULL, 0, 0, 0, NULL},
153 	{"_l_Low contrast blue theme", cmd_SetTheme_Lowcontrast, NULL, 0, 0, 0, NULL},
154 	{"_c_Dark cyan theme", cmd_SetTheme_Darkcyan, NULL, 0, 0, 0, NULL},
155 	{"_p_Paradox like", cmd_SetTheme_Paradox, NULL, 0, 0, 0, NULL},
156 	{"_d_DbaseIV retro", cmd_SetTheme_DBase, NULL, 0, 0, 0, NULL},
157 	{"_e_DbaseIV retro (Magenta)", cmd_SetTheme_DBasemagenta, NULL, 0, 0, 0, NULL},
158 	{"_r_Red white theme", cmd_SetTheme_Red, NULL, 0, 0, 0, NULL},
159 	{"_s_Simple theme", cmd_SetTheme_Simple, NULL, 0, 0, 0, NULL},
160 	{"_o_Solar Dark theme", cmd_SetTheme_SolarDark, NULL, 0, 0, 0, NULL},
161 	{"_g_Solar Light theme", cmd_SetTheme_SolarLight, NULL, 0, 0, 0, NULL},
162 	{"_u_Gruvbox Light theme", cmd_SetTheme_GruvboxLight, NULL, 0, 0, 0, NULL},
163 	{"_t_Tao Light theme", cmd_SetTheme_TaoLight, NULL, 0, 0, 0, NULL},
164 	{"_f_Flatwhite theme", cmd_SetTheme_Flatwhite, NULL, 0, 0, 0, NULL},
165 	{"_a_Relational Pipes theme", cmd_SetTheme_RelationalPipes, NULL, 0, 0, 0, NULL},
166 	{"_h_PaperColor theme", cmd_SetTheme_PaperColor, NULL, 0, 0, 0, NULL},
167 	{NULL},
168 };
169 
170 ST_MENU_ITEM _options[] = {
171 	{"~C~ase sensitive search", cmd_CSSearchSet, NULL, 0, 0, 0, NULL},
172 	{"Case ~i~nsensitive search", cmd_CISearchSet, NULL, 0, 0, 0, NULL},
173 	{"~U~pper case sensitive search", cmd_USSearchSet, NULL, 0, 0, 0, NULL},
174 	{"--", 0, NULL, 0, 0, 0, NULL},
175 	{"Highlight searched ~l~ines", cmd_HighlightLines, NULL, 0, 0, 0, NULL},
176 	{"Highlight searched ~v~alues", cmd_HighlightValues, NULL, 0, 0, 0, NULL},
177 	{"~W~ithout highlighting", cmd_NoHighlight, NULL, 0, 0, 0, NULL},
178 	{"--", 0, NULL, 0, 0, 0, NULL},
179 	{"Show cursor", cmd_ShowCursor, "M-c", 0, 0, 0, NULL},
180 	{"Show vertical cursor", cmd_ShowVerticalCursor, "M-v", 0, 0, 0, NULL},
181 	{"Show line ~n~umbers", cmd_RowNumToggle, "M-n", 0, 0, 0, NULL},
182 	{"Show top bar", cmd_ShowTopBar, NULL, 0, 0, 0, NULL},
183 	{"Show bottom bar", cmd_ShowBottomBar, NULL, 0, 0, 0, NULL},
184 	{"Show scrollbar", cmd_ShowScrollbar, NULL, 0, 0, 0, NULL},
185 	{"--", 0, NULL, 0, 0, 0, NULL},
186 	{"~M~ouse support", cmd_MouseToggle, "M-m", 0, 0, 0, NULL},
187 	{"~Q~uiet mode", cmd_SoundToggle, NULL, 0, 0, 0, NULL},
188 	{"--", 0, NULL, 0, 0, 0, NULL},
189 	{"Force unicode ~b~orders", cmd_UtfArtToggle, NULL, 0, 0, 0, NULL},
190 	{"Force ~a~scii menu", cmd_MenuAsciiArtToggle, NULL, 0, 0, 0, NULL},
191 	{"Bold labels", cmd_BoldLabelsToggle, "M-b", 0, 0, 0, NULL},
192 	{"Bold cursor", cmd_BoldCursorToggle, NULL, 0, 0, 0, NULL},
193 	{"~T~heme", MENU_ITEM_THEME, NULL, 0, 0,  0, _theme},
194 	{"--", 0, NULL, 0, 0, 0, NULL},
195 	{"~S~ave setup", cmd_SaveSetup, NULL, 0, 0, 0, NULL},
196 	{NULL},
197 };
198 
199 ST_MENU_ITEM menubar[] = {
200   {"~F~ile", 0, NULL, 0, 0, 0, _file},
201   {"~S~earch", 0, NULL, 0, 0, 0, _search},
202   {"~C~ommand", 0, NULL, 0, 0, 0, _command},
203   {"~O~ptions", MENU_ITEM_OPTIONS, NULL, 0, 0, 0, _options},
204   {NULL}
205 };
206 
207 ST_MENU_CONFIG		menu_config;
208 ST_MENU_CONFIG		menu_config2;
209 int menu_theme = -1;
210 
211 /*
212  * Returns menu style joined to main theme
213  */
214 static int
get_menu_style(int main_theme)215 get_menu_style(int main_theme)
216 {
217 	switch (main_theme)
218 	{
219 		case 0:
220 			return ST_MENU_STYLE_MCB;
221 		case 1:
222 			return ST_MENU_STYLE_MC;
223 		case 2:
224 			return ST_MENU_STYLE_FOXPRO;
225 		case 3:
226 			return ST_MENU_STYLE_DOS;
227 		case 4:
228 			return ST_MENU_STYLE_FAND_1;
229 		case 5:
230 			return ST_MENU_STYLE_NOCOLOR;
231 		case 6:
232 			return ST_MENU_STYLE_FAND_1;
233 		case 7:
234 			return ST_MENU_STYLE_ONECOLOR;
235 		case 8:
236 			return ST_MENU_STYLE_DOS;
237 		case 9:
238 			return ST_MENU_STYLE_PERFECT;
239 		case 10:
240 			return ST_MENU_STYLE_XGOLD_BLACK;
241 		case 11:
242 			return ST_MENU_STYLE_OLD_TURBO;
243 		case 12:
244 			return ST_MENU_STYLE_VISION;
245 		case 13:
246 			return ST_MENU_STYLE_DBASE;
247 		case 14:
248 			return ST_MENU_STYLE_OLD_TURBO;
249 		case 15:
250 			return ST_MENU_STYLE_PERFECT;
251 		case 16:
252 			return ST_MENU_STYLE_ONECOLOR;
253 		case 20:
254 			return ST_MENU_STYLE_TAO;
255 		case 21:
256 			return ST_MENU_STYLE_FLATWHITE;
257 		case 22:
258 			return ST_MENU_STYLE_DBASE;
259 		case 23:
260 			return ST_MENU_STYLE_PERFECT;
261 		default:
262 			return ST_MENU_STYLE_VISION;
263 	}
264 }
265 
266 /*
267  * Prepare configuration for st_menu
268  */
269 void
init_menu_config(Options * opts)270 init_menu_config(Options *opts)
271 {
272 	int start_from_rgb = 220;
273 
274 	menu_theme = get_menu_style(opts->theme);
275 
276 	if (menu_theme == ST_MENU_STYLE_FREE_DOS)
277 	{
278 		int		fcp;
279 
280 		fcp = st_menu_load_style(&menu_config,
281 								 menu_theme,
282 								 40,
283 								 !use_utf8,
284 								 opts->force_ascii_art);
285 
286 		st_menu_load_style(&menu_config2,
287 						   ST_MENU_STYLE_FREE_DOS_P,
288 						   fcp,
289 						   !use_utf8,
290 						   opts->force_ascii_art);
291 	}
292 	else
293 		st_menu_load_style_rgb(&menu_config,
294 							   menu_theme,
295 							   menu_theme == ST_MENU_STYLE_ONECOLOR ? 3 : 40,
296 							   &start_from_rgb,
297 							   !use_utf8,
298 							   opts->force_ascii_art);
299 
300 	/* extra pspg menu theme customization */
301 	if (opts->theme == 1)
302 		menu_config.shadow_width = 2;
303 	else if (opts->theme == 4)
304 		menu_config.text_space = 4;
305 }
306 
307 /*
308  * Prepare configuration and initialize menu
309  */
310 struct ST_MENU *
init_menu(struct ST_MENU * current_menu,Options * opts)311 init_menu(struct ST_MENU *current_menu, Options *opts)
312 {
313 	struct ST_MENU		*menu = NULL;
314 
315 	if (menu_theme == ST_MENU_STYLE_FREE_DOS)
316 		menu = st_menu_new_menubar2(&menu_config, &menu_config2, menubar);
317 	else
318 		menu = st_menu_new_menubar(&menu_config, menubar);
319 
320 	if (current_menu)
321 	{
322 		int		positions[1024];
323 		int		*refvals[1024];
324 
325 		/* Save state of old menu, and load it to new menu */
326 		st_menu_save(current_menu, positions, refvals, 1023);
327 		st_menu_load(menu, positions, refvals);
328 		st_menu_free(current_menu);
329 		log_row("releasing menu");
330 	}
331 
332 	if (opts->quit_on_f3)
333 		st_menu_set_shortcut(menu, cmd_Mark, NULL);
334 
335 	return menu;
336 }
337 
338 struct ST_CMDBAR *
init_cmdbar(struct ST_CMDBAR * current_cmdbar,Options * opts)339 init_cmdbar(struct ST_CMDBAR *current_cmdbar, Options *opts)
340 {
341 	struct ST_CMDBAR	   *cmdbar = NULL;
342 
343 	if (opts->quit_on_f3)
344 		cmdbar = st_cmdbar_new(&menu_config, _bottombar_alt1);
345 	else
346 		cmdbar = st_cmdbar_new(&menu_config, _bottombar);
347 
348 	/*
349 	 * It looks obscure - it uses same pattern like init_menu
350 	 * although the cmdbar has not state, so old cmdbar can
351 	 * be released fully before creating new cmdbar.
352 	 */
353 	if (current_cmdbar)
354 	{
355 		st_cmdbar_unpost(current_cmdbar);
356 		st_cmdbar_free(current_cmdbar);
357 		log_row("releasing cmd bar");
358 	}
359 
360 	return cmdbar;
361 }
362 
363 void
post_menu(Options * opts,struct ST_MENU * menu)364 post_menu(Options *opts, struct ST_MENU *menu)
365 {
366 	st_menu_set_option(menu, cmd_ReleaseCols, ST_MENU_OPTION_MARKED, opts->freezed_cols == 0);
367 	st_menu_set_option(menu, cmd_FreezeOneCol, ST_MENU_OPTION_MARKED,
368 									  (opts->freezed_cols == 1 || opts->freezed_cols == -1));
369 	st_menu_set_option(menu, cmd_FreezeTwoCols, ST_MENU_OPTION_MARKED, opts->freezed_cols == 2);
370 	st_menu_set_option(menu, cmd_FreezeThreeCols, ST_MENU_OPTION_MARKED, opts->freezed_cols == 3);
371 	st_menu_set_option(menu, cmd_FreezeFourCols, ST_MENU_OPTION_MARKED, opts->freezed_cols == 4);
372 
373 	st_menu_set_option(menu, cmd_SoundToggle, ST_MENU_OPTION_MARKED, quiet_mode);
374 	st_menu_set_option(menu, cmd_UtfArtToggle, ST_MENU_OPTION_MARKED, opts->force_uniborder);
375 	st_menu_set_option(menu, cmd_MenuAsciiArtToggle, ST_MENU_OPTION_MARKED, opts->force_ascii_art);
376 	st_menu_set_option(menu, cmd_MouseToggle, ST_MENU_OPTION_MARKED, !opts->no_mouse);
377 
378 	st_menu_set_option(menu, cmd_NoHighlight, ST_MENU_OPTION_MARKED, opts->no_highlight_search);
379 	st_menu_set_option(menu, cmd_HighlightValues, ST_MENU_OPTION_MARKED, opts->no_highlight_lines);
380 	st_menu_set_option(menu, cmd_HighlightLines, ST_MENU_OPTION_MARKED,
381 									  !(opts->no_highlight_search || opts->no_highlight_lines));
382 
383 	st_menu_set_option(menu, cmd_CSSearchSet, ST_MENU_OPTION_MARKED,
384 									  !(opts->ignore_case || opts->ignore_lower_case));
385 	st_menu_set_option(menu, cmd_CISearchSet, ST_MENU_OPTION_MARKED, opts->ignore_case);
386 	st_menu_set_option(menu, cmd_USSearchSet, ST_MENU_OPTION_MARKED, opts->ignore_lower_case);
387 
388 	st_menu_set_option(menu, cmd_ShowTopBar, ST_MENU_OPTION_MARKED, !opts->no_topbar);
389 	st_menu_set_option(menu, cmd_ShowBottomBar, ST_MENU_OPTION_MARKED, !opts->no_commandbar);
390 
391 	st_menu_set_option(menu, cmd_RowNumToggle, ST_MENU_OPTION_MARKED, opts->show_rownum);
392 	st_menu_set_option(menu, cmd_ShowCursor, ST_MENU_OPTION_MARKED, !opts->no_cursor);
393 	st_menu_set_option(menu, cmd_ShowVerticalCursor, ST_MENU_OPTION_MARKED, opts->vertical_cursor);
394 
395 	st_menu_set_option(menu, cmd_BoldLabelsToggle, ST_MENU_OPTION_MARKED, opts->bold_labels);
396 	st_menu_set_option(menu, cmd_BoldCursorToggle, ST_MENU_OPTION_MARKED, opts->bold_cursor);
397 
398 	st_menu_set_option(menu, cmd_ShowScrollbar, ST_MENU_OPTION_MARKED, opts->show_scrollbar);
399 
400 	st_menu_reset_all_submenu_options(menu, MENU_ITEM_THEME, ST_MENU_OPTION_MARKED);
401 	st_menu_enable_option(menu, theme_get_cmd(opts->theme), ST_MENU_OPTION_MARKED);
402 
403 	refresh_copy_target_options(opts, menu);
404 	refresh_clipboard_options(opts, menu);
405 
406 	st_menu_set_option(menu, cmd_TogleEmptyStringIsNULL, ST_MENU_OPTION_MARKED, opts->empty_string_is_null);
407 
408 	st_menu_set_option(menu, cmd_SetOwnNULLString, ST_MENU_OPTION_MARKED,
409 			  !opts->empty_string_is_null && opts->nullstr && *opts->nullstr);
410 }
411 
412 void
refresh_clipboard_options(Options * opts,struct ST_MENU * menu)413 refresh_clipboard_options(Options *opts, struct ST_MENU *menu)
414 {
415 	st_menu_set_option(menu, cmd_UseClipboard_CSV, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_CSV);
416 	st_menu_set_option(menu, cmd_UseClipboard_TSVC, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_TSVC);
417 	st_menu_set_option(menu, cmd_UseClipboard_text, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_TEXT);
418 	st_menu_set_option(menu, cmd_UseClipboard_INSERT, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_INSERT);
419 	st_menu_set_option(menu, cmd_UseClipboard_INSERT_with_comments, ST_MENU_OPTION_MARKED,
420 					   opts->clipboard_format == CLIPBOARD_FORMAT_INSERT_WITH_COMMENTS);
421 
422 	st_menu_set_option(menu, cmd_UseClipboard_SQL_values, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_SQL_VALUES);
423 	st_menu_set_option(menu, cmd_UseClipboard_pipe_separated, ST_MENU_OPTION_MARKED, opts->clipboard_format == CLIPBOARD_FORMAT_PIPE_SEPARATED);
424 }
425 
426 void
refresh_copy_target_options(Options * opts,struct ST_MENU * menu)427 refresh_copy_target_options(Options *opts, struct ST_MENU *menu)
428 {
429 	st_menu_set_option(menu, cmd_SetCopyFile, ST_MENU_OPTION_MARKED, opts->copy_target == COPY_TARGET_FILE);
430 	st_menu_set_option(menu, cmd_SetCopyClipboard, ST_MENU_OPTION_MARKED, opts->copy_target == COPY_TARGET_CLIPBOARD);
431 }
432