Adding a typedef for a pointer to a function: functionptrtype.

And starting to use this to make the code a bit cleaner.


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5050 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
Benno Schulenberg 2014-07-02 08:47:09 +00:00
parent e6a4a64619
commit 3933a30c9e
4 changed files with 39 additions and 20 deletions

View File

@ -1,3 +1,9 @@
2014-07-02 Benno Schulenberg <bensberg@justemail.net>
* src/proto.h: Add a typedef for a pointer to a function.
* src/global.c (func_from_key): New wrapper.
* src/prompt.c (get_prompt_string, do_prompt): Use the new
wrapper to make the code a bit cleaner.
2014-07-01 Benno Schulenberg <bensberg@justemail.net> 2014-07-01 Benno Schulenberg <bensberg@justemail.net>
* src/browser.c (do_browser), src/help.c (do_help): Make sure * src/browser.c (do_browser), src/help.c (do_help): Make sure
to always set 'currmenu', so that we can rely on it. to always set 'currmenu', so that we can rely on it.

View File

@ -405,6 +405,17 @@ int sc_seq_or(void (*func)(void), int defaultval)
return defaultval; return defaultval;
} }
/* Return a pointer to the function that is bound to the given key. */
functionptrtype func_from_key(int *kbinput)
{
const sc *s = get_shortcut(kbinput);
if (s)
return s->scfunc;
else
return NULL;
}
/* Assign the info to the shortcut struct. /* Assign the info to the shortcut struct.
* Assumes keystr is already assigned, naturally. */ * Assumes keystr is already assigned, naturally. */
void assign_keyinfo(sc *s) void assign_keyinfo(sc *s)

View File

@ -721,7 +721,7 @@ void total_statusbar_refresh(void (*refresh_func)(void))
/* Get a string of input at the statusbar prompt. This should only be /* Get a string of input at the statusbar prompt. This should only be
* called from do_prompt(). */ * called from do_prompt(). */
const sc *get_prompt_string(int *actual, bool allow_tabs, functionptrtype get_prompt_string(int *actual, bool allow_tabs,
#ifndef DISABLE_TABCOMP #ifndef DISABLE_TABCOMP
bool allow_files, bool allow_files,
bool *list, bool *list,
@ -735,7 +735,7 @@ const sc *get_prompt_string(int *actual, bool allow_tabs,
int kbinput = ERR; int kbinput = ERR;
bool ran_func, finished; bool ran_func, finished;
size_t curranswer_len; size_t curranswer_len;
const sc *s; functionptrtype func;
#ifndef DISABLE_TABCOMP #ifndef DISABLE_TABCOMP
bool tabbed = FALSE; bool tabbed = FALSE;
/* Whether we've pressed Tab. */ /* Whether we've pressed Tab. */
@ -796,17 +796,16 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
kbinput = do_statusbar_input(&ran_func, &finished, refresh_func); kbinput = do_statusbar_input(&ran_func, &finished, refresh_func);
assert(statusbar_x <= strlen(answer)); assert(statusbar_x <= strlen(answer));
s = get_shortcut(&kbinput); func = func_from_key(&kbinput);
if (s) if (func == do_cancel || func == do_enter_void)
if (s->scfunc == do_cancel || s->scfunc == do_enter_void)
break; break;
#ifndef DISABLE_TABCOMP #ifndef DISABLE_TABCOMP
if (s && s->scfunc != do_tab) if (func != do_tab)
tabbed = FALSE; tabbed = FALSE;
if (s && s->scfunc == do_tab) { if (func == do_tab) {
#ifndef DISABLE_HISTORIES #ifndef DISABLE_HISTORIES
if (history_list != NULL) { if (history_list != NULL) {
if (last_kbinput != sc_seq_or(do_tab, NANO_CONTROL_I)) if (last_kbinput != sc_seq_or(do_tab, NANO_CONTROL_I))
@ -828,7 +827,7 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
} else } else
#endif /* !DISABLE_TABCOMP */ #endif /* !DISABLE_TABCOMP */
#ifndef DISABLE_HISTORIES #ifndef DISABLE_HISTORIES
if (s && s->scfunc == get_history_older_void) { if (func == get_history_older_void) {
if (history_list != NULL) { if (history_list != NULL) {
/* If we're scrolling up at the bottom of the history list /* If we're scrolling up at the bottom of the history list
* and answer isn't blank, save answer in magichistory. */ * and answer isn't blank, save answer in magichistory. */
@ -850,7 +849,7 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
* we aren't kicked out of the statusbar prompt. */ * we aren't kicked out of the statusbar prompt. */
finished = FALSE; finished = FALSE;
} }
} else if (s && s->scfunc == get_history_newer_void) { } else if (func == get_history_newer_void) {
if (history_list != NULL) { if (history_list != NULL) {
/* Get the newer search from the history list and save it in /* Get the newer search from the history list and save it in
* answer. If there is no newer search, don't do anything. */ * answer. If there is no newer search, don't do anything. */
@ -878,7 +877,7 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
} }
} else } else
#endif /* !DISABLE_HISTORIES */ #endif /* !DISABLE_HISTORIES */
if (s && s->scfunc == do_help_void) { if (func == do_help_void) {
update_statusbar_line(answer, statusbar_x); update_statusbar_line(answer, statusbar_x);
/* This key has a shortcut-list entry when it's used to go to /* This key has a shortcut-list entry when it's used to go to
@ -919,9 +918,8 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
* associated function, so reset statusbar_x and statusbar_pww. If * associated function, so reset statusbar_x and statusbar_pww. If
* we've finished putting in an answer, reset the statusbar cursor * we've finished putting in an answer, reset the statusbar cursor
* position too. */ * position too. */
if (s) { if (func) {
if (s->scfunc == do_cancel || s->scfunc == do_enter_void || if (func == do_cancel || func == do_enter_void || ran_func) {
ran_func) {
statusbar_x = old_statusbar_x; statusbar_x = old_statusbar_x;
statusbar_pww = old_pww; statusbar_pww = old_pww;
@ -935,7 +933,8 @@ fprintf(stderr, "get_prompt_string: answer = \"%s\", statusbar_x = %lu\n", answe
} }
*actual = kbinput; *actual = kbinput;
return s;
return func;
} }
/* Ask a question on the statusbar. The prompt will be stored in the /* Ask a question on the statusbar. The prompt will be stored in the
@ -962,7 +961,7 @@ int do_prompt(bool allow_tabs,
{ {
va_list ap; va_list ap;
int retval; int retval;
const sc *s; functionptrtype func;
#ifndef DISABLE_TABCOMP #ifndef DISABLE_TABCOMP
bool list = FALSE; bool list = FALSE;
#endif #endif
@ -982,7 +981,7 @@ int do_prompt(bool allow_tabs,
va_end(ap); va_end(ap);
null_at(&prompt, actual_x(prompt, COLS - 4)); null_at(&prompt, actual_x(prompt, COLS - 4));
s = get_prompt_string(&retval, allow_tabs, func = get_prompt_string(&retval, allow_tabs,
#ifndef DISABLE_TABCOMP #ifndef DISABLE_TABCOMP
allow_files, allow_files,
&list, &list,
@ -1003,9 +1002,9 @@ int do_prompt(bool allow_tabs,
/* If we left the prompt via Cancel or Enter, set the return value /* If we left the prompt via Cancel or Enter, set the return value
* properly. */ * properly. */
if (s && s->scfunc == do_cancel) if (func == do_cancel)
retval = -1; retval = -1;
else if (s && s->scfunc == do_enter_void) else if (func == do_enter_void)
retval = (*answer == '\0') ? -2 : 0; retval = (*answer == '\0') ? -2 : 0;
blank_statusbar(); blank_statusbar();

View File

@ -139,6 +139,8 @@ extern color_pair interface_color_pair[NUMBER_OF_ELEMENTS];
extern char *homedir; extern char *homedir;
typedef void (*functionptrtype)(void);
/* All functions in browser.c. */ /* All functions in browser.c. */
#ifndef DISABLE_BROWSER #ifndef DISABLE_BROWSER
char *do_browser(char *path, DIR *dir); char *do_browser(char *path, DIR *dir);
@ -352,6 +354,7 @@ size_t length_of_list(int menu);
key_type strtokeytype(const char *str); key_type strtokeytype(const char *str);
const sc *first_sc_for(int menu, void (*func)(void)); const sc *first_sc_for(int menu, void (*func)(void));
int sc_seq_or(void (*func)(void), int defaultval); int sc_seq_or(void (*func)(void), int defaultval);
functionptrtype func_from_key(int *kbinput);
void assign_keyinfo(sc *s); void assign_keyinfo(sc *s);
void print_sclist(void); void print_sclist(void);
void shortcut_init(void); void shortcut_init(void);
@ -522,7 +525,7 @@ void reset_statusbar_cursor(void);
void update_statusbar_line(const char *curranswer, size_t index); void update_statusbar_line(const char *curranswer, size_t index);
bool need_statusbar_horizontal_update(size_t pww_save); bool need_statusbar_horizontal_update(size_t pww_save);
void total_statusbar_refresh(void (*refresh_func)(void)); void total_statusbar_refresh(void (*refresh_func)(void));
const sc *get_prompt_string(int *value, bool allow_tabs, functionptrtype get_prompt_string(int *value, bool allow_tabs,
#ifndef DISABLE_TABCOMP #ifndef DISABLE_TABCOMP
bool allow_files, bool allow_files,
bool *list, bool *list,