summaryrefslogtreecommitdiffstats
path: root/smenu.c
diff options
context:
space:
mode:
authorpgen <p.gen.progs@gmail.com>2023-03-31 22:14:50 +0200
committerpgen <p.gen.progs@gmail.com>2023-03-31 22:14:50 +0200
commit1af7193a0dcf8f00a458b924993d86bd19e199e0 (patch)
tree803e5df6245081611b50438b386e6387293adbc8 /smenu.c
parent137b0625b0ac175582963bae7c50accdde6e510d (diff)
Add an optional argument to the -sb option
This argument allow to change the character used to make blank words visible.
Diffstat (limited to 'smenu.c')
-rw-r--r--smenu.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/smenu.c b/smenu.c
index 676a5bb..a31e842 100644
--- a/smenu.c
+++ b/smenu.c
@@ -2964,7 +2964,7 @@ expand(char * src, char * dest, langinfo_t * langinfo, toggle_t * toggles,
/* by underscores so that it can be seen. */
/* """""""""""""""""""""""""""""""""""""""""""""" */
if (toggles->show_blank_words && all_spaces)
- memset(dest, '_', len);
+ memset(dest, misc->blank_char_substitute, len);
*ptr = '\0'; /* Ensure that dest has a nul terminator. */
@@ -5603,8 +5603,10 @@ init_main_ds(attrib_t * init_attr, win_t * win, limit_t * limits,
/* Misc default values. */
/* """""""""""""""""""" */
- misc->default_search_method = NONE;
- misc->ignore_quotes = 0;
+ misc->default_search_method = NONE;
+ misc->ignore_quotes = 0;
+ misc->invalid_char_substitute = '.';
+ misc->blank_char_substitute = '_';
/* Mouse values. */
/* """"""""""""" */
@@ -5870,8 +5872,6 @@ toggle_action(char * ctx_name, char * opt_name, char * param, int nb_values,
toggles->incremental_search = 1;
else if (strcmp(opt_name, "no_mouse") == 0)
toggles->no_mouse = 1;
- else if (strcmp(opt_name, "show_blank_words") == 0)
- toggles->show_blank_words = 1;
}
void
@@ -5890,6 +5890,29 @@ invalid_char_action(char * ctx_name, char * opt_name, char * param,
}
void
+show_blank_action(char * ctx_name, char * opt_name, char * param, int nb_values,
+ char ** values, int nb_opt_data, void ** opt_data,
+ int nb_ctx_data, void ** ctx_data)
+{
+ toggle_t * toggles = opt_data[0];
+ misc_t * misc = opt_data[1];
+
+ unsigned char bc;
+
+ toggles->show_blank_words = 1;
+
+ if (nb_values == 1)
+ {
+ bc = (unsigned char)*values[0];
+
+ if (isprint(bc))
+ misc->blank_char_substitute = bc;
+ else
+ misc->blank_char_substitute = '_';
+ }
+}
+
+void
gutter_action(char * ctx_name, char * opt_name, char * param, int nb_values,
char ** values, int nb_opt_data, void ** opt_data,
int nb_ctx_data, void ** ctx_data)
@@ -7702,10 +7725,6 @@ main(int argc, char * argv[])
close(old_fd0);
close(old_fd1);
- /* Default substitution character on invalid input. */
- /* """""""""""""""""""""""""""""""""""""""""""""""" */
- misc.invalid_char_substitute = '.';
-
/* Build the full path of the .ini file. */
/* """"""""""""""""""""""""""""""""""""" */
home_ini_file = make_ini_path(argv[0], "HOME");
@@ -7772,7 +7791,8 @@ main(int argc, char * argv[])
"[double_click_delay #delay] "
"[button_remapping #mapping...] "
"[no_mouse] "
- "[show_blank_words] "; /* don't remove this space! */
+ "[show_blank_words [#blank_char]] "; /* <- don't remove *
+ | this space! */
main_spec_options = "[*copyright] "
"[*version] "
@@ -8104,8 +8124,8 @@ main(int argc, char * argv[])
&mouse, &disable_double_click, (char *)0);
ctxopt_add_opt_settings(actions, "no_mouse", toggle_action, &toggles,
(char *)0);
- ctxopt_add_opt_settings(actions, "show_blank_words", toggle_action, &toggles,
- (char *)0);
+ ctxopt_add_opt_settings(actions, "show_blank_words", show_blank_action,
+ &toggles, &misc, (char *)0);
/* ctxopt constraints. */
/* """"""""""""""""""" */