#include "proto.h"
#ifndef NANO_TINY
sigjmp_buf jump_buf;
bool jump_buf_main = FALSE;
#endif
#ifndef DISABLE_WRAPJUSTIFY
ssize_t fill = 0;
ssize_t wrap_at = -CHARS_FROM_EOL;
#endif
char *last_search = NULL;
char *last_replace = NULL;
long flags = 0;
WINDOW *topwin;
WINDOW *edit;
WINDOW *bottomwin;
int editwinrows = 0;
filestruct *cutbuffer = NULL;
#ifndef DISABLE_JUSTIFY
filestruct *jusbuffer = NULL;
#endif
partition *filepart = NULL;
openfilestruct *openfile = NULL;
#ifndef NANO_TINY
char *matchbrackets = NULL;
#endif
#if !defined(NANO_TINY) && defined(ENABLE_NANORC)
char *whitespace = NULL;
int whitespace_len[2];
#endif
#ifndef DISABLE_JUSTIFY
char *punct = NULL;
char *brackets = NULL;
char *quotestr = NULL;
#ifdef HAVE_REGEX_H
regex_t quotereg;
int quoterc;
char *quoteerr = NULL;
#else
size_t quotelen;
#endif
#endif
char *answer = NULL;
ssize_t tabsize = -1;
#ifndef NANO_TINY
char *backup_dir = NULL;
#endif
#ifndef DISABLE_OPERATINGDIR
char *operating_dir = NULL;
char *full_operating_dir = NULL;
#endif
#ifndef DISABLE_SPELLER
char *alt_speller = NULL;
#endif
shortcut *main_list = NULL;
shortcut *whereis_list = NULL;
shortcut *replace_list = NULL;
shortcut *replace_list_2 = NULL;
shortcut *gotoline_list = NULL;
shortcut *writefile_list = NULL;
shortcut *insertfile_list = NULL;
#ifndef NANO_TINY
shortcut *extcmd_list = NULL;
#endif
#ifndef DISABLE_HELP
shortcut *help_list = NULL;
#endif
#ifndef DISABLE_SPELLER
shortcut *spell_list = NULL;
#endif
#ifndef DISABLE_BROWSER
shortcut *browser_list = NULL;
shortcut *whereis_file_list = NULL;
shortcut *gotodir_list = NULL;
#endif
#ifdef ENABLE_COLOR
syntaxtype *syntaxes = NULL;
char *syntaxstr = NULL;
#endif
const shortcut *currshortcut;
#ifndef NANO_TINY
toggle *toggles = NULL;
#endif
#ifndef NANO_TINY
filestruct *search_history = NULL;
filestruct *searchage = NULL;
filestruct *searchbot = NULL;
filestruct *replace_history = NULL;
filestruct *replaceage = NULL;
filestruct *replacebot = NULL;
#endif
#ifdef HAVE_REGEX_H
regex_t search_regexp;
regmatch_t regmatches[10];
#endif
int reverse_attr = A_REVERSE;
char *homedir = NULL;
size_t length_of_list(const shortcut *s)
{
size_t i = 0;
for (; s != NULL; s = s->next)
i++;
return i;
}
void sc_init_one(shortcut **shortcutage, int ctrlval, const char *desc
#ifndef DISABLE_HELP
, const char *help, bool blank_after
#endif
, int metaval, int funcval, int miscval, bool view,
void (*func)(void))
{
shortcut *s;
if (*shortcutage == NULL) {
*shortcutage = (shortcut *)nmalloc(sizeof(shortcut));
s = *shortcutage;
} else {
for (s = *shortcutage; s->next != NULL; s = s->next)
;
s->next = (shortcut *)nmalloc(sizeof(shortcut));
s = s->next;
}
s->ctrlval = ctrlval;
s->desc = (desc == NULL) ? "" : _(desc);
#ifndef DISABLE_HELP
s->help = (help == NULL) ? "" : _(help);
s->blank_after = blank_after;
#endif
s->metaval = metaval;
s->funcval = funcval;
s->miscval = miscval;
s->viewok = view;
s->func = func;
s->next = NULL;
}
void shortcut_init(bool unjustify)
{
const char *cancel_msg = N_("Cancel");
const char *get_help_msg = N_("Get Help");
const char *exit_msg = N_("Exit");
const char *whereis_msg = N_("Where Is");
const char *prev_page_msg = N_("Prev Page");
const char *next_page_msg = N_("Next Page");
const char *go_to_line_msg = N_("Go To Line");
const char *replace_msg = N_("Replace");
#ifndef NANO_TINY
const char *whereis_next_msg = N_("WhereIs Next");
#endif
const char *first_line_msg = N_("First Line");
const char *last_line_msg = N_("Last Line");
#ifndef DISABLE_JUSTIFY
const char *beg_of_par_msg = N_("Beg of Par");
const char *end_of_par_msg = N_("End of Par");
const char *fulljstify_msg = N_("FullJstify");
#endif
const char *refresh_msg = N_("Refresh");
#ifndef NANO_TINY
const char *case_sens_msg = N_("Case Sens");
const char *backwards_msg = N_("Backwards");
#endif
#ifdef HAVE_REGEX_H
const char *regexp_msg = N_("Regexp");
#endif
#ifndef NANO_TINY
const char *prev_history_msg = N_("PrevHstory");
const char *next_history_msg = N_("NextHstory");
#ifdef ENABLE_MULTIBUFFER
const char *new_buffer_msg = N_("New Buffer");
#endif
#endif
#ifndef DISABLE_BROWSER
const char *to_files_msg = N_("To Files");
const char *first_file_msg = N_("First File");
const char *last_file_msg = N_("Last File");
#endif
#ifndef DISABLE_HELP
const char *nano_cancel_msg = N_("Cancel the current function");
const char *nano_help_msg = N_("Display this help text");
const char *nano_exit_msg =
#ifdef ENABLE_MULTIBUFFER
N_("Close the current file buffer / Exit from nano")
#else
N_("Exit from nano")
#endif
;
const char *nano_writeout_msg =
N_("Write the current file to disk");
const char *nano_justify_msg = N_("Justify the current paragraph");
const char *nano_insert_msg =
N_("Insert another file into the current one");
const char *nano_whereis_msg =
N_("Search for a string or a regular expression");
const char *nano_prevpage_msg = N_("Move to the previous screen");
const char *nano_nextpage_msg = N_("Move to the next screen");
const char *nano_cut_msg =
N_("Cut the current line and store it in the cutbuffer");
const char *nano_uncut_msg =
N_("Uncut from the cutbuffer into the current line");
const char *nano_cursorpos_msg =
N_("Display the position of the cursor");
const char *nano_spell_msg =
N_("Invoke the spell checker, if available");
const char *nano_gotoline_msg = N_("Go to line and column number");
const char *nano_replace_msg =
N_("Replace a string or a regular expression");
#ifndef NANO_TINY
const char *nano_mark_msg = N_("Mark text at the cursor position");
const char *nano_whereis_next_msg = N_("Repeat last search");
const char *nano_copy_msg =
N_("Copy the current line and store it in the cutbuffer");
const char *nano_indent_msg = N_("Indent the current line");
const char *nano_unindent_msg = N_("Unindent the current line");
#endif
const char *nano_forward_msg = N_("Move forward one character");
const char *nano_back_msg = N_("Move back one character");
#ifndef NANO_TINY
const char *nano_nextword_msg = N_("Move forward one word");
const char *nano_prevword_msg = N_("Move back one word");
#endif
const char *nano_prevline_msg = N_("Move to the previous line");
const char *nano_nextline_msg = N_("Move to the next line");
const char *nano_home_msg =
N_("Move to the beginning of the current line");
const char *nano_end_msg =
N_("Move to the end of the current line");
#ifndef DISABLE_JUSTIFY
const char *nano_parabegin_msg =
N_("Move to the beginning of the current paragraph");
const char *nano_paraend_msg =
N_("Move to the end of the current paragraph");
#endif
const char *nano_firstline_msg =
N_("Move to the first line of the file");
const char *nano_lastline_msg =
N_("Move to the last line of the file");
#ifndef NANO_TINY
const char *nano_bracket_msg = N_("Move to the matching bracket");
const char *nano_scrollup_msg =
N_("Scroll up one line without scrolling the cursor");
const char *nano_scrolldown_msg =
N_("Scroll down one line without scrolling the cursor");
#endif
#ifdef ENABLE_MULTIBUFFER
const char *nano_prevfile_msg =
N_("Switch to the previous file buffer");
const char *nano_nextfile_msg =
N_("Switch to the next file buffer");
#endif
const char *nano_verbatim_msg =
N_("Insert the next keystroke verbatim");
const char *nano_tab_msg =
N_("Insert a tab at the cursor position");
const char *nano_enter_msg =
N_("Insert a newline at the cursor position");
const char *nano_delete_msg =
N_("Delete the character under the cursor");
const char *nano_backspace_msg =
N_("Delete the character to the left of the cursor");
#ifndef NANO_TINY
const char *nano_cut_till_end_msg =
N_("Cut from the cursor position to the end of the file");
#endif
#ifndef DISABLE_JUSTIFY
const char *nano_fulljustify_msg = N_("Justify the entire file");
#endif
#ifndef NANO_TINY
const char *nano_wordcount_msg =
N_("Count the number of words, lines, and characters");
#endif
const char *nano_refresh_msg =
N_("Refresh (redraw) the current screen");
#ifndef NANO_TINY
const char *nano_case_msg =
N_("Toggle the case sensitivity of the search");
const char *nano_reverse_msg =
N_("Reverse the direction of the search");
#endif
#ifdef HAVE_REGEX_H
const char *nano_regexp_msg =
N_("Toggle the use of regular expressions");
#endif
#ifndef NANO_TINY
const char *nano_prev_history_msg =
N_("Recall the previous search/replace string");
const char *nano_next_history_msg =
N_("Recall the next search/replace string");
#endif
#ifndef DISABLE_BROWSER
const char *nano_tofiles_msg = N_("Go to file browser");
#endif
#ifndef NANO_TINY
const char *nano_dos_msg = N_("Toggle the use of DOS format");
const char *nano_mac_msg = N_("Toggle the use of Mac format");
#endif
const char *nano_append_msg = N_("Toggle appending");
const char *nano_prepend_msg = N_("Toggle prepending");
#ifndef NANO_TINY
const char *nano_backup_msg =
N_("Toggle backing up of the original file");
const char *nano_execute_msg = N_("Execute external command");
#endif
#if !defined(NANO_TINY) && defined(ENABLE_MULTIBUFFER)
const char *nano_multibuffer_msg =
N_("Toggle the use of a new buffer");
#endif
#ifndef DISABLE_BROWSER
const char *nano_exitbrowser_msg = N_("Exit from the file browser");
const char *nano_firstfile_msg =
N_("Go to the first file in the list");
const char *nano_lastfile_msg =
N_("Go to the last file in the list");
const char *nano_gotodir_msg = N_("Go to directory");
#endif
#endif
#ifndef DISABLE_HELP
#define IFSCHELP(help, blank, nextvar) help, blank, nextvar
#else
#define IFSCHELP(help, blank, nextvar) nextvar
#endif
free_shortcutage(&main_list);
sc_init_one(&main_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&main_list, NANO_EXIT_KEY,
#ifdef ENABLE_MULTIBUFFER
openfile != NULL && openfile != openfile->next ? N_("Close") :
#endif
exit_msg, IFSCHELP(nano_exit_msg, FALSE, NANO_NO_KEY),
NANO_EXIT_FKEY, NANO_NO_KEY, VIEW, do_exit);
sc_init_one(&main_list, NANO_WRITEOUT_KEY, N_("WriteOut"),
IFSCHELP(nano_writeout_msg, FALSE, NANO_NO_KEY),
NANO_WRITEOUT_FKEY, NANO_NO_KEY, NOVIEW, do_writeout_void);
sc_init_one(&main_list, NANO_JUSTIFY_KEY, N_("Justify"),
IFSCHELP(nano_justify_msg, TRUE, NANO_NO_KEY),
NANO_JUSTIFY_FKEY, NANO_NO_KEY, NOVIEW,
#ifndef DISABLE_JUSTIFY
do_justify_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&main_list, NANO_INSERTFILE_KEY, N_("Read File"),
IFSCHELP(nano_insert_msg, FALSE, NANO_NO_KEY),
NANO_INSERTFILE_FKEY, NANO_NO_KEY,
#ifdef ENABLE_MULTIBUFFER
VIEW
#else
NOVIEW
#endif
, !ISSET(RESTRICTED) ? do_insertfile_void : nano_disabled_msg);
sc_init_one(&main_list, NANO_WHEREIS_KEY, whereis_msg,
IFSCHELP(nano_whereis_msg, FALSE, NANO_NO_KEY),
NANO_WHEREIS_FKEY, NANO_NO_KEY, VIEW, do_search);
sc_init_one(&main_list, NANO_PREVPAGE_KEY, prev_page_msg,
IFSCHELP(nano_prevpage_msg, FALSE, NANO_NO_KEY),
NANO_PREVPAGE_FKEY, NANO_NO_KEY, VIEW, do_page_up);
sc_init_one(&main_list, NANO_NEXTPAGE_KEY, next_page_msg,
IFSCHELP(nano_nextpage_msg, TRUE, NANO_NO_KEY),
NANO_NEXTPAGE_FKEY, NANO_NO_KEY, VIEW, do_page_down);
sc_init_one(&main_list, NANO_CUT_KEY, N_("Cut Text"),
IFSCHELP(nano_cut_msg, FALSE, NANO_NO_KEY), NANO_CUT_FKEY,
NANO_NO_KEY, NOVIEW, do_cut_text_void);
if (unjustify)
sc_init_one(&main_list, NANO_UNJUSTIFY_KEY, N_("UnJustify"),
IFSCHELP(NULL, FALSE, NANO_NO_KEY), NANO_UNJUSTIFY_FKEY,
NANO_NO_KEY, NOVIEW, NULL);
else
sc_init_one(&main_list, NANO_UNCUT_KEY, N_("UnCut Text"),
IFSCHELP(nano_uncut_msg, FALSE, NANO_NO_KEY),
NANO_UNCUT_FKEY, NANO_NO_KEY, NOVIEW, do_uncut_text);
sc_init_one(&main_list, NANO_CURSORPOS_KEY, N_("Cur Pos"),
IFSCHELP(nano_cursorpos_msg, FALSE, NANO_NO_KEY),
NANO_CURSORPOS_FKEY, NANO_NO_KEY, VIEW, do_cursorpos_void);
sc_init_one(&main_list, NANO_SPELL_KEY, N_("To Spell"),
IFSCHELP(nano_spell_msg, TRUE, NANO_NO_KEY), NANO_SPELL_FKEY,
NANO_NO_KEY, NOVIEW,
#ifndef DISABLE_SPELLER
!ISSET(RESTRICTED) ? do_spell :
#endif
nano_disabled_msg);
sc_init_one(&main_list, NANO_GOTOLINE_KEY, go_to_line_msg,
IFSCHELP(nano_gotoline_msg, FALSE, NANO_GOTOLINE_METAKEY),
NANO_GOTOLINE_FKEY, NANO_NO_KEY, VIEW,
do_gotolinecolumn_void);
sc_init_one(&main_list, NANO_REPLACE_KEY, replace_msg
#ifndef NANO_TINY
, IFSCHELP(nano_replace_msg, FALSE, NANO_REPLACE_METAKEY)
#else
, IFSCHELP(nano_replace_msg, TRUE, NANO_REPLACE_METAKEY)
#endif
, NANO_REPLACE_FKEY, NANO_NO_KEY, NOVIEW, do_replace);
#ifndef NANO_TINY
sc_init_one(&main_list, NANO_MARK_KEY, N_("Mark Text"),
IFSCHELP(nano_mark_msg, FALSE, NANO_MARK_METAKEY),
NANO_MARK_FKEY, NANO_NO_KEY, VIEW, do_mark);
sc_init_one(&main_list, NANO_NO_KEY, whereis_next_msg,
IFSCHELP(nano_whereis_next_msg, TRUE, NANO_WHEREIS_NEXT_KEY),
NANO_WHEREIS_NEXT_FKEY, NANO_NO_KEY, VIEW, do_research);
sc_init_one(&main_list, NANO_NO_KEY, N_("Copy Text"),
IFSCHELP(nano_copy_msg, FALSE, NANO_COPY_KEY), NANO_NO_KEY,
NANO_COPY_METAKEY, NOVIEW, do_copy_text);
sc_init_one(&main_list, NANO_NO_KEY, N_("Indent Text"),
IFSCHELP(nano_indent_msg, FALSE, NANO_INDENT_KEY), NANO_NO_KEY,
NANO_NO_KEY, NOVIEW, do_indent_void);
sc_init_one(&main_list, NANO_NO_KEY, N_("Unindent Text"),
IFSCHELP(nano_unindent_msg, TRUE, NANO_UNINDENT_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, do_unindent);
#endif
sc_init_one(&main_list, NANO_FORWARD_KEY, N_("Forward"),
IFSCHELP(nano_forward_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, do_right);
sc_init_one(&main_list, NANO_BACK_KEY, N_("Back"),
IFSCHELP(nano_back_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, do_left);
#ifndef NANO_TINY
sc_init_one(&main_list, NANO_NEXTWORD_KEY, N_("Next Word"),
IFSCHELP(nano_nextword_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, do_next_word_void);
sc_init_one(&main_list, NANO_NO_KEY, N_("Prev Word"),
IFSCHELP(nano_prevword_msg, FALSE, NANO_PREVWORD_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, do_prev_word_void);
#endif
sc_init_one(&main_list, NANO_PREVLINE_KEY, N_("Prev Line"),
IFSCHELP(nano_prevline_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, do_up_void);
sc_init_one(&main_list, NANO_NEXTLINE_KEY, N_("Next Line"),
IFSCHELP(nano_nextline_msg, TRUE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, do_down_void);
sc_init_one(&main_list, NANO_HOME_KEY, N_("Home"),
IFSCHELP(nano_home_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, do_home);
sc_init_one(&main_list, NANO_END_KEY, N_("End"),
IFSCHELP(nano_end_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, do_end);
#ifndef DISABLE_JUSTIFY
sc_init_one(&main_list, NANO_NO_KEY, beg_of_par_msg,
IFSCHELP(nano_parabegin_msg, FALSE, NANO_PARABEGIN_METAKEY),
NANO_NO_KEY, NANO_PARABEGIN_METAKEY2, VIEW, do_para_begin_void);
sc_init_one(&main_list, NANO_NO_KEY, end_of_par_msg,
IFSCHELP(nano_paraend_msg, FALSE, NANO_PARAEND_METAKEY),
NANO_NO_KEY, NANO_PARAEND_METAKEY2, VIEW, do_para_end_void);
#endif
sc_init_one(&main_list, NANO_NO_KEY, first_line_msg,
IFSCHELP(nano_firstline_msg, FALSE, NANO_FIRSTLINE_METAKEY),
NANO_NO_KEY, NANO_FIRSTLINE_METAKEY2, VIEW, do_first_line);
sc_init_one(&main_list, NANO_NO_KEY, last_line_msg,
IFSCHELP(nano_lastline_msg, TRUE, NANO_LASTLINE_METAKEY),
NANO_NO_KEY, NANO_LASTLINE_METAKEY2, VIEW, do_last_line);
#ifndef NANO_TINY
sc_init_one(&main_list, NANO_NO_KEY, N_("Find Other Bracket"),
IFSCHELP(nano_bracket_msg, FALSE, NANO_BRACKET_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, do_find_bracket);
sc_init_one(&main_list, NANO_NO_KEY, N_("Scroll Up"),
IFSCHELP(nano_scrollup_msg, FALSE, NANO_SCROLLUP_KEY),
NANO_NO_KEY, NANO_SCROLLUP_METAKEY, VIEW, do_scroll_up);
sc_init_one(&main_list, NANO_NO_KEY, N_("Scroll Down"),
IFSCHELP(nano_scrolldown_msg, TRUE, NANO_SCROLLDOWN_KEY),
NANO_NO_KEY, NANO_SCROLLDOWN_METAKEY, VIEW, do_scroll_down);
#endif
#ifdef ENABLE_MULTIBUFFER
sc_init_one(&main_list, NANO_NO_KEY, N_("Previous File"),
IFSCHELP(nano_prevfile_msg, FALSE, NANO_PREVFILE_KEY),
NANO_NO_KEY, NANO_PREVFILE_METAKEY, VIEW,
switch_to_prev_buffer_void);
sc_init_one(&main_list, NANO_NO_KEY, N_("Next File"),
IFSCHELP(nano_nextfile_msg, TRUE, NANO_NEXTFILE_KEY),
NANO_NO_KEY, NANO_NEXTFILE_METAKEY, VIEW,
switch_to_next_buffer_void);
#endif
sc_init_one(&main_list, NANO_NO_KEY, N_("Verbatim Input"),
IFSCHELP(nano_verbatim_msg, FALSE, NANO_VERBATIM_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, do_verbatim_input);
sc_init_one(&main_list, NANO_TAB_KEY, N_("Tab"),
IFSCHELP(nano_tab_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, NOVIEW, do_tab);
sc_init_one(&main_list, NANO_ENTER_KEY, N_("Enter"),
IFSCHELP(nano_enter_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, NOVIEW, do_enter);
sc_init_one(&main_list, NANO_DELETE_KEY, N_("Delete"),
IFSCHELP(nano_delete_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, NOVIEW, do_delete);
sc_init_one(&main_list, NANO_BACKSPACE_KEY, N_("Backspace")
#ifndef NANO_TINY
, IFSCHELP(nano_backspace_msg, FALSE, NANO_NO_KEY)
#else
, IFSCHELP(nano_backspace_msg, TRUE, NANO_NO_KEY)
#endif
, NANO_NO_KEY, NANO_NO_KEY, NOVIEW, do_backspace);
#ifndef NANO_TINY
sc_init_one(&main_list, NANO_NO_KEY, N_("CutTillEnd"),
IFSCHELP(nano_cut_till_end_msg, TRUE, NANO_CUTTILLEND_METAKEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, do_cut_till_end);
#endif
#ifndef DISABLE_JUSTIFY
sc_init_one(&main_list, NANO_NO_KEY, fulljstify_msg,
IFSCHELP(nano_fulljustify_msg, FALSE, NANO_FULLJUSTIFY_METAKEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, do_full_justify);
#endif
#ifndef NANO_TINY
sc_init_one(&main_list, NANO_NO_KEY, N_("Word Count"),
IFSCHELP(nano_wordcount_msg, FALSE, NANO_WORDCOUNT_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, do_wordlinechar_count);
#endif
sc_init_one(&main_list, NANO_REFRESH_KEY, refresh_msg
#ifndef NANO_TINY
, IFSCHELP(nano_refresh_msg, TRUE, NANO_NO_KEY)
#else
, IFSCHELP(nano_refresh_msg, FALSE, NANO_NO_KEY)
#endif
, NANO_NO_KEY, NANO_NO_KEY, VIEW, total_refresh);
free_shortcutage(&whereis_list);
sc_init_one(&whereis_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&whereis_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&whereis_list, NANO_FIRSTLINE_KEY, first_line_msg,
IFSCHELP(nano_firstline_msg, FALSE, NANO_FIRSTLINE_METAKEY),
NANO_FIRSTLINE_FKEY, NANO_FIRSTLINE_METAKEY2, VIEW,
do_first_line);
sc_init_one(&whereis_list, NANO_LASTLINE_KEY, last_line_msg,
IFSCHELP(nano_lastline_msg, FALSE, NANO_LASTLINE_METAKEY),
NANO_LASTLINE_FKEY, NANO_LASTLINE_METAKEY2, VIEW, do_last_line);
sc_init_one(&whereis_list, NANO_TOOTHERSEARCH_KEY, replace_msg,
IFSCHELP(nano_replace_msg, FALSE, NANO_NO_KEY),
NANO_REPLACE_FKEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&whereis_list, NANO_TOGOTOLINE_KEY, go_to_line_msg,
IFSCHELP(nano_gotoline_msg, FALSE, NANO_NO_KEY),
NANO_GOTOLINE_FKEY, NANO_NO_KEY, VIEW, NULL);
#ifndef DISABLE_JUSTIFY
sc_init_one(&whereis_list, NANO_PARABEGIN_KEY, beg_of_par_msg,
IFSCHELP(nano_parabegin_msg, FALSE, NANO_PARABEGIN_METAKEY),
NANO_NO_KEY, NANO_PARABEGIN_METAKEY2, VIEW, do_para_begin_void);
sc_init_one(&whereis_list, NANO_PARAEND_KEY, end_of_par_msg,
IFSCHELP(nano_paraend_msg, FALSE, NANO_PARAEND_METAKEY),
NANO_NO_KEY, NANO_PARAEND_METAKEY2, VIEW, do_para_end_void);
#endif
#ifndef NANO_TINY
sc_init_one(&whereis_list, NANO_NO_KEY, case_sens_msg,
IFSCHELP(nano_case_msg, FALSE, TOGGLE_CASE_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&whereis_list, NANO_NO_KEY, backwards_msg,
IFSCHELP(nano_reverse_msg, FALSE, TOGGLE_BACKWARDS_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
#endif
#ifdef HAVE_REGEX_H
sc_init_one(&whereis_list, NANO_NO_KEY, regexp_msg,
IFSCHELP(nano_regexp_msg, FALSE, NANO_REGEXP_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
#endif
#ifndef NANO_TINY
sc_init_one(&whereis_list, NANO_PREVLINE_KEY, prev_history_msg,
IFSCHELP(nano_prev_history_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&whereis_list, NANO_NEXTLINE_KEY, next_history_msg,
IFSCHELP(nano_next_history_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
#endif
#ifndef DISABLE_JUSTIFY
sc_init_one(&whereis_list, NANO_FULLJUSTIFY_KEY, fulljstify_msg,
IFSCHELP(nano_fulljustify_msg, FALSE, NANO_FULLJUSTIFY_METAKEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, do_full_justify);
#endif
free_shortcutage(&replace_list);
sc_init_one(&replace_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&replace_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&replace_list, NANO_FIRSTLINE_KEY, first_line_msg,
IFSCHELP(nano_firstline_msg, FALSE, NANO_FIRSTLINE_METAKEY),
NANO_FIRSTLINE_FKEY, NANO_FIRSTLINE_METAKEY2, VIEW,
do_first_line);
sc_init_one(&replace_list, NANO_LASTLINE_KEY, last_line_msg,
IFSCHELP(nano_lastline_msg, FALSE, NANO_LASTLINE_METAKEY),
NANO_LASTLINE_FKEY, NANO_LASTLINE_METAKEY2, VIEW, do_last_line);
sc_init_one(&replace_list, NANO_TOOTHERSEARCH_KEY, N_("No Replace"),
IFSCHELP(nano_whereis_msg, FALSE, NANO_NO_KEY),
NANO_REPLACE_FKEY, NANO_NO_KEY, VIEW, NULL);
#ifndef NANO_TINY
sc_init_one(&replace_list, NANO_NO_KEY, case_sens_msg,
IFSCHELP(nano_case_msg, FALSE, TOGGLE_CASE_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&replace_list, NANO_NO_KEY, backwards_msg,
IFSCHELP(nano_reverse_msg, FALSE, TOGGLE_BACKWARDS_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
#endif
#ifdef HAVE_REGEX_H
sc_init_one(&replace_list, NANO_NO_KEY, regexp_msg,
IFSCHELP(nano_regexp_msg, FALSE, NANO_REGEXP_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
#endif
#ifndef NANO_TINY
sc_init_one(&replace_list, NANO_PREVLINE_KEY, prev_history_msg,
IFSCHELP(nano_prev_history_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&replace_list, NANO_NEXTLINE_KEY, next_history_msg,
IFSCHELP(nano_next_history_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
#endif
free_shortcutage(&replace_list_2);
sc_init_one(&replace_list_2, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&replace_list_2, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&replace_list_2, NANO_FIRSTLINE_KEY, first_line_msg,
IFSCHELP(nano_firstline_msg, FALSE, NANO_FIRSTLINE_METAKEY),
NANO_FIRSTLINE_FKEY, NANO_FIRSTLINE_METAKEY2, VIEW,
do_first_line);
sc_init_one(&replace_list_2, NANO_LASTLINE_KEY, last_line_msg,
IFSCHELP(nano_lastline_msg, FALSE, NANO_LASTLINE_METAKEY),
NANO_LASTLINE_FKEY, NANO_LASTLINE_METAKEY2, VIEW, do_last_line);
#ifndef NANO_TINY
sc_init_one(&replace_list_2, NANO_PREVLINE_KEY, prev_history_msg,
IFSCHELP(nano_prev_history_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&replace_list_2, NANO_NEXTLINE_KEY, next_history_msg,
IFSCHELP(nano_next_history_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
#endif
free_shortcutage(&gotoline_list);
sc_init_one(&gotoline_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&gotoline_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&gotoline_list, NANO_FIRSTLINE_KEY, first_line_msg,
IFSCHELP(nano_firstline_msg, FALSE, NANO_FIRSTLINE_METAKEY),
NANO_FIRSTLINE_FKEY, NANO_FIRSTLINE_METAKEY2, VIEW,
do_first_line);
sc_init_one(&gotoline_list, NANO_LASTLINE_KEY, last_line_msg,
IFSCHELP(nano_lastline_msg, FALSE, NANO_LASTLINE_METAKEY),
NANO_LASTLINE_FKEY, NANO_LASTLINE_METAKEY2, VIEW, do_last_line);
sc_init_one(&gotoline_list, NANO_TOOTHERWHEREIS_KEY,
N_("Go To Text"), IFSCHELP(nano_whereis_msg, FALSE,
NANO_NO_KEY), NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
free_shortcutage(&writefile_list);
sc_init_one(&writefile_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&writefile_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
#ifndef DISABLE_BROWSER
if (!ISSET(RESTRICTED))
sc_init_one(&writefile_list, NANO_TOFILES_KEY, to_files_msg,
IFSCHELP(nano_tofiles_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
#endif
#ifndef NANO_TINY
if (!ISSET(RESTRICTED))
sc_init_one(&writefile_list, NANO_NO_KEY, N_("DOS Format"),
IFSCHELP(nano_dos_msg, FALSE, TOGGLE_DOS_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
if (!ISSET(RESTRICTED))
sc_init_one(&writefile_list, NANO_NO_KEY, N_("Mac Format"),
IFSCHELP(nano_mac_msg, FALSE, TOGGLE_MAC_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
#endif
if (!ISSET(RESTRICTED))
sc_init_one(&writefile_list, NANO_NO_KEY, N_("Append"),
IFSCHELP(nano_append_msg, FALSE, NANO_APPEND_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
if (!ISSET(RESTRICTED))
sc_init_one(&writefile_list, NANO_NO_KEY, N_("Prepend"),
IFSCHELP(nano_prepend_msg, FALSE, NANO_PREPEND_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
#ifndef NANO_TINY
if (!ISSET(RESTRICTED))
sc_init_one(&writefile_list, NANO_NO_KEY, N_("Backup File"),
IFSCHELP(nano_backup_msg, FALSE, TOGGLE_BACKUP_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
#endif
free_shortcutage(&insertfile_list);
sc_init_one(&insertfile_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&insertfile_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
#ifndef DISABLE_BROWSER
if (!ISSET(RESTRICTED))
sc_init_one(&insertfile_list, NANO_TOFILES_KEY, to_files_msg,
IFSCHELP(nano_tofiles_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
#endif
#ifndef NANO_TINY
if (!ISSET(RESTRICTED))
sc_init_one(&insertfile_list, NANO_TOOTHERINSERT_KEY,
N_("Execute Command"), IFSCHELP(nano_execute_msg, FALSE,
NANO_NO_KEY), NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
#ifdef ENABLE_MULTIBUFFER
if (!ISSET(RESTRICTED))
sc_init_one(&insertfile_list, NANO_NO_KEY, new_buffer_msg,
IFSCHELP(nano_multibuffer_msg, FALSE,
TOGGLE_MULTIBUFFER_KEY), NANO_NO_KEY, NANO_NO_KEY,
NOVIEW, NULL);
#endif
#endif
#ifndef NANO_TINY
free_shortcutage(&extcmd_list);
sc_init_one(&extcmd_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&extcmd_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&extcmd_list, NANO_TOOTHERINSERT_KEY, N_("Insert File"),
IFSCHELP(nano_insert_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
#ifdef ENABLE_MULTIBUFFER
sc_init_one(&extcmd_list, NANO_NO_KEY, new_buffer_msg,
IFSCHELP(nano_multibuffer_msg, FALSE, TOGGLE_MULTIBUFFER_KEY),
NANO_NO_KEY, NANO_NO_KEY, NOVIEW, NULL);
#endif
#endif
#ifndef DISABLE_HELP
free_shortcutage(&help_list);
sc_init_one(&help_list, NANO_REFRESH_KEY, refresh_msg,
IFSCHELP(nano_refresh_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&help_list, NANO_EXIT_KEY, exit_msg,
IFSCHELP(nano_exit_msg, FALSE, NANO_NO_KEY), NANO_EXIT_FKEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&help_list, NANO_PREVPAGE_KEY, prev_page_msg,
IFSCHELP(nano_prevpage_msg, FALSE, NANO_NO_KEY),
NANO_PREVPAGE_FKEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&help_list, NANO_NEXTPAGE_KEY, next_page_msg,
IFSCHELP(nano_nextpage_msg, FALSE, NANO_NO_KEY),
NANO_NEXTPAGE_FKEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&help_list, NANO_PREVLINE_KEY, N_("Prev Line"),
IFSCHELP(nano_prevline_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&help_list, NANO_NEXTLINE_KEY, N_("Next Line"),
IFSCHELP(nano_nextline_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&help_list, NANO_NO_KEY, first_line_msg,
IFSCHELP(nano_firstline_msg, FALSE, NANO_FIRSTLINE_METAKEY),
NANO_NO_KEY, NANO_FIRSTLINE_METAKEY2, VIEW, NULL);
sc_init_one(&help_list, NANO_NO_KEY, last_line_msg,
IFSCHELP(nano_lastline_msg, TRUE, NANO_LASTLINE_METAKEY),
NANO_NO_KEY, NANO_LASTLINE_METAKEY2, VIEW, NULL);
#endif
#ifndef DISABLE_SPELLER
free_shortcutage(&spell_list);
sc_init_one(&spell_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_help_void
#else
nano_disabled_msg
#endif
);
sc_init_one(&spell_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
#endif
#ifndef DISABLE_BROWSER
free_shortcutage(&browser_list);
sc_init_one(&browser_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&browser_list, NANO_EXIT_KEY, exit_msg,
IFSCHELP(nano_exitbrowser_msg, FALSE, NANO_NO_KEY),
NANO_EXIT_FKEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&browser_list, NANO_WHEREIS_KEY, whereis_msg,
IFSCHELP(nano_whereis_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&browser_list, NANO_NO_KEY, whereis_next_msg,
IFSCHELP(nano_whereis_next_msg, FALSE, NANO_WHEREIS_NEXT_KEY),
NANO_WHEREIS_NEXT_FKEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&browser_list, NANO_PREVPAGE_KEY, prev_page_msg,
IFSCHELP(nano_prevpage_msg, FALSE, NANO_NO_KEY),
NANO_PREVPAGE_FKEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&browser_list, NANO_NEXTPAGE_KEY, next_page_msg,
IFSCHELP(nano_nextpage_msg, FALSE, NANO_NO_KEY),
NANO_NEXTPAGE_FKEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&browser_list, NANO_NO_KEY, first_file_msg,
IFSCHELP(nano_firstfile_msg, FALSE, NANO_FIRSTFILE_METAKEY),
NANO_NO_KEY, NANO_FIRSTFILE_METAKEY2, VIEW, NULL);
sc_init_one(&browser_list, NANO_NO_KEY, last_file_msg,
IFSCHELP(nano_lastfile_msg, FALSE, NANO_LASTFILE_METAKEY),
NANO_NO_KEY, NANO_LASTFILE_METAKEY2, VIEW, NULL);
sc_init_one(&browser_list, NANO_GOTODIR_KEY, N_("Go To Dir"),
IFSCHELP(nano_gotodir_msg, FALSE, NANO_GOTODIR_METAKEY),
NANO_GOTODIR_FKEY, NANO_NO_KEY, VIEW, NULL);
free_shortcutage(&whereis_file_list);
sc_init_one(&whereis_file_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_browser_help
#else
nano_disabled_msg
#endif
);
sc_init_one(&whereis_file_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&whereis_file_list, NANO_FIRSTFILE_KEY, first_file_msg,
IFSCHELP(nano_firstfile_msg, FALSE, NANO_FIRSTFILE_METAKEY),
NANO_FIRSTFILE_FKEY, NANO_FIRSTFILE_METAKEY2, VIEW,
do_first_file);
sc_init_one(&whereis_file_list, NANO_LASTFILE_KEY, last_file_msg,
IFSCHELP(nano_lastfile_msg, FALSE, NANO_LASTFILE_METAKEY),
NANO_LASTFILE_FKEY, NANO_LASTFILE_METAKEY2, VIEW, do_last_file);
#ifndef NANO_SMALL
sc_init_one(&whereis_file_list, NANO_NO_KEY, case_sens_msg,
IFSCHELP(nano_case_msg, FALSE, TOGGLE_CASE_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
sc_init_one(&whereis_file_list, NANO_NO_KEY, backwards_msg,
IFSCHELP(nano_reverse_msg, FALSE, TOGGLE_BACKWARDS_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
#endif
#ifdef HAVE_REGEX_H
sc_init_one(&whereis_file_list, NANO_NO_KEY, regexp_msg,
IFSCHELP(nano_regexp_msg, FALSE, NANO_REGEXP_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
#endif
#ifndef NANO_SMALL
sc_init_one(&whereis_file_list, NANO_PREVLINE_KEY, prev_history_msg,
IFSCHELP(nano_prev_history_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
sc_init_one(&whereis_file_list, NANO_NEXTLINE_KEY, next_history_msg,
IFSCHELP(nano_next_history_msg, FALSE, NANO_NO_KEY),
NANO_NO_KEY, NANO_NO_KEY, VIEW, NULL);
#endif
free_shortcutage(&gotodir_list);
sc_init_one(&gotodir_list, NANO_HELP_KEY, get_help_msg,
IFSCHELP(nano_help_msg, FALSE, NANO_NO_KEY), NANO_HELP_FKEY,
NANO_NO_KEY, VIEW,
#ifndef DISABLE_HELP
do_browser_help
#else
nano_disabled_msg
#endif
);
sc_init_one(&gotodir_list, NANO_CANCEL_KEY, cancel_msg,
IFSCHELP(nano_cancel_msg, FALSE, NANO_NO_KEY), NANO_NO_KEY,
NANO_NO_KEY, VIEW, NULL);
#endif
currshortcut = main_list;
#ifndef NANO_TINY
toggle_init();
#endif
}
void free_shortcutage(shortcut **shortcutage)
{
assert(shortcutage != NULL);
while (*shortcutage != NULL) {
shortcut *ps = *shortcutage;
*shortcutage = (*shortcutage)->next;
free(ps);
}
}
#ifndef NANO_TINY
void toggle_init_one(int val
#ifndef DISABLE_HELP
, const char *desc, bool blank_after
#endif
, long flag)
{
toggle *u;
if (toggles == NULL) {
toggles = (toggle *)nmalloc(sizeof(toggle));
u = toggles;
} else {
for (u = toggles; u->next != NULL; u = u->next)
;
u->next = (toggle *)nmalloc(sizeof(toggle));
u = u->next;
}
u->val = val;
#ifndef DISABLE_HELP
u->desc = (desc == NULL) ? "" : _(desc);
u->blank_after = blank_after;
#endif
u->flag = flag;
u->next = NULL;
}
void toggle_init(void)
{
if (toggles != NULL)
return;
#ifndef DISABLE_HELP
#define IFTHELP(help, blank, nextvar) help, blank, nextvar
#else
#define IFTHELP(help, blank, nextvar) nextvar
#endif
toggle_init_one(TOGGLE_NOHELP_KEY, IFTHELP(N_("Help mode"), FALSE,
NO_HELP));
toggle_init_one(TOGGLE_CONST_KEY,
IFTHELP(N_("Constant cursor position display"), FALSE,
CONST_UPDATE));
toggle_init_one(TOGGLE_MORESPACE_KEY,
IFTHELP(N_("Use of one more line for editing"), FALSE,
MORE_SPACE));
toggle_init_one(TOGGLE_SMOOTH_KEY,
#ifdef ENABLE_NANORC
IFTHELP(N_("Smooth scrolling"), FALSE, SMOOTH_SCROLL)
#else
IFTHELP(N_("Smooth scrolling"), TRUE, SMOOTH_SCROLL)
#endif
);
#ifdef ENABLE_NANORC
toggle_init_one(TOGGLE_WHITESPACE_KEY,
#ifdef ENABLE_COLOR
IFTHELP(N_("Whitespace display"), FALSE, WHITESPACE_DISPLAY)
#else
IFTHELP(N_("Whitespace display"), TRUE, WHITESPACE_DISPLAY)
#endif
);
#endif
#ifdef ENABLE_COLOR
toggle_init_one(TOGGLE_SYNTAX_KEY,
IFTHELP(N_("Color syntax highlighting"), TRUE, NO_COLOR_SYNTAX));
#endif
toggle_init_one(TOGGLE_SMARTHOME_KEY, IFTHELP(N_("Smart home key"),
FALSE, SMART_HOME));
toggle_init_one(TOGGLE_AUTOINDENT_KEY, IFTHELP(N_("Auto indent"),
FALSE, AUTOINDENT));
toggle_init_one(TOGGLE_CUTTOEND_KEY, IFTHELP(N_("Cut to end"),
FALSE, CUT_TO_END));
#ifndef DISABLE_WRAPPING
toggle_init_one(TOGGLE_WRAP_KEY, IFTHELP(N_("Long line wrapping"),
FALSE, NO_WRAP));
#endif
toggle_init_one(TOGGLE_TABSTOSPACES_KEY,
#ifndef DISABLE_MOUSE
IFTHELP(N_("Conversion of typed tabs to spaces"), TRUE,
TABS_TO_SPACES)
#else
IFTHELP(N_("Conversion of typed tabs to spaces"),
!ISSET(RESTRICTED) ? TRUE : FALSE, TABS_TO_SPACES)
#endif
);
if (!ISSET(RESTRICTED))
toggle_init_one(TOGGLE_BACKUP_KEY, IFTHELP(N_("Backup files"),
FALSE, BACKUP_FILE));
#ifdef ENABLE_MULTIBUFFER
if (!ISSET(RESTRICTED))
toggle_init_one(TOGGLE_MULTIBUFFER_KEY,
IFTHELP(N_("Multiple file buffers"), FALSE,
MULTIBUFFER));
#endif
#ifndef DISABLE_MOUSE
toggle_init_one(TOGGLE_MOUSE_KEY, IFTHELP(N_("Mouse support"),
FALSE, USE_MOUSE));
#endif
if (!ISSET(RESTRICTED))
toggle_init_one(TOGGLE_NOCONVERT_KEY,
IFTHELP(N_("No conversion from DOS/Mac format"), FALSE,
NO_CONVERT));
if (!ISSET(RESTRICTED))
toggle_init_one(TOGGLE_SUSPEND_KEY, IFTHELP(N_("Suspension"),
FALSE, SUSPEND));
}
#endif
#ifdef DEBUG
void thanks_for_all_the_fish(void)
{
delwin(topwin);
delwin(edit);
delwin(bottomwin);
#ifndef DISABLE_JUSTIFY
if (quotestr != NULL)
free(quotestr);
#ifdef HAVE_REGEX_H
regfree("ereg);
if (quoteerr != NULL)
free(quoteerr);
#endif
#endif
#ifndef NANO_TINY
if (backup_dir != NULL)
free(backup_dir);
#endif
#ifndef DISABLE_OPERATINGDIR
if (operating_dir != NULL)
free(operating_dir);
if (full_operating_dir != NULL)
free(full_operating_dir);
#endif
if (last_search != NULL)
free(last_search);
if (last_replace != NULL)
free(last_replace);
#ifndef DISABLE_SPELLER
if (alt_speller != NULL)
free(alt_speller);
#endif
if (answer != NULL)
free(answer);
if (cutbuffer != NULL)
free_filestruct(cutbuffer);
#ifndef DISABLE_JUSTIFY
if (jusbuffer != NULL)
free_filestruct(jusbuffer);
#endif
free_shortcutage(&main_list);
free_shortcutage(&whereis_list);
free_shortcutage(&replace_list);
free_shortcutage(&replace_list_2);
free_shortcutage(&gotoline_list);
free_shortcutage(&writefile_list);
free_shortcutage(&insertfile_list);
#ifndef NANO_TINY
free_shortcutage(&extcmd_list);
#endif
#ifndef DISABLE_HELP
free_shortcutage(&help_list);
#endif
#ifndef DISABLE_SPELLER
free_shortcutage(&spell_list);
#endif
#ifndef DISABLE_BROWSER
free_shortcutage(&browser_list);
free_shortcutage(&gotodir_list);
#endif
#ifndef NANO_TINY
while (toggles != NULL) {
toggle *t = toggles;
toggles = toggles->next;
free(t);
}
#endif
if (openfile != NULL)
free_openfilestruct(openfile);
#ifdef ENABLE_COLOR
if (syntaxstr != NULL)
free(syntaxstr);
while (syntaxes != NULL) {
syntaxtype *bill = syntaxes;
free(syntaxes->desc);
while (syntaxes->extensions != NULL) {
exttype *bob = syntaxes->extensions;
syntaxes->extensions = bob->next;
free(bob->ext_regex);
if (bob->ext != NULL) {
regfree(bob->ext);
free(bob->ext);
}
free(bob);
}
while (syntaxes->color != NULL) {
colortype *bob = syntaxes->color;
syntaxes->color = bob->next;
free(bob->start_regex);
if (bob->start != NULL) {
regfree(bob->start);
free(bob->start);
}
if (bob->end_regex != NULL)
free(bob->end_regex);
if (bob->end != NULL) {
regfree(bob->end);
free(bob->end);
}
free(bob);
}
syntaxes = syntaxes->next;
free(bill);
}
#endif
#ifndef NANO_TINY
if (searchage != NULL)
free_filestruct(searchage);
if (replaceage != NULL)
free_filestruct(replaceage);
#endif
#ifdef ENABLE_NANORC
if (homedir != NULL)
free(homedir);
#endif
}
#endif