blob: e3f455b6705c8fad13840e5dbb428ed75310e216 [file] [log] [blame]
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001/* $Id$
2*/
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00003/**************************************************************************
4 * global.c *
5 * *
David Lawrence Ramseyd8a1d372007-10-11 05:01:32 +00006 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 *
7 * Free Software Foundation, Inc. *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00008 * This program is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU General Public License as published by *
David Lawrence Ramseyd0035b42007-08-11 05:17:36 +000010 * the Free Software Foundation; either version 3, or (at your option) *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000011 * any later version. *
12 * *
David Lawrence Ramsey6e925cf2005-05-15 19:57:17 +000013 * This program is distributed in the hope that it will be useful, but *
14 * WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16 * General Public License for more details. *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000017 * *
18 * You should have received a copy of the GNU General Public License *
19 * along with this program; if not, write to the Free Software *
David Lawrence Ramsey6e925cf2005-05-15 19:57:17 +000020 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
21 * 02110-1301, USA. *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000022 * *
23 **************************************************************************/
24
Chris Allegretta79a33bb2008-03-05 07:34:01 +000025#include <ctype.h>
26#include <strings.h>
27#include "assert.h"
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000028#include "proto.h"
29
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +000030/* Global variables. */
31#ifndef NANO_TINY
David Lawrence Ramsey1c5af642006-05-10 15:15:06 +000032sigjmp_buf jump_buf;
David Lawrence Ramseyb6fb6882006-11-27 07:28:52 +000033 /* Used to return to either main() or the unjustify routine in
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +000034 * do_justify() after a SIGWINCH. */
David Lawrence Ramsey1c5af642006-05-10 15:15:06 +000035bool jump_buf_main = FALSE;
36 /* Have we set jump_buf so that we return to main() after a
37 * SIGWINCH? */
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +000038#endif
39
David Lawrence Ramseyf5b256b2003-10-03 20:26:25 +000040#ifndef DISABLE_WRAPJUSTIFY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000041ssize_t fill = 0;
42 /* The column where we will wrap lines. */
David Lawrence Ramsey691698a2005-07-24 19:57:51 +000043ssize_t wrap_at = -CHARS_FROM_EOL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000044 /* The position where we will wrap lines. fill is equal to this
45 * if it's greater than zero, and equal to (COLS + this) if it
46 * isn't. */
David Lawrence Ramseyf5b256b2003-10-03 20:26:25 +000047#endif
48
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000049char *last_search = NULL;
50 /* The last string we searched for. */
51char *last_replace = NULL;
52 /* The last replacement string we searched for. */
Chris Allegretta6df90f52002-07-19 01:08:59 +000053
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000054long flags = 0;
55 /* Our flag containing the states of all global options. */
56WINDOW *topwin;
57 /* The top portion of the window, where we display the version
58 * number of nano, the name of the current file, and whether the
59 * current file has been modified. */
60WINDOW *edit;
David Lawrence Ramseyb159f942006-07-28 17:06:27 +000061 /* The middle portion of the window, i.e. the edit window, where
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000062 * we display the current file we're editing. */
63WINDOW *bottomwin;
64 /* The bottom portion of the window, where we display statusbar
65 * messages, the statusbar prompt, and a list of shortcuts. */
66int editwinrows = 0;
67 /* How many rows does the edit window take up? */
David Lawrence Ramsey5db0cdc2002-06-28 22:45:14 +000068
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000069filestruct *cutbuffer = NULL;
70 /* The buffer where we store cut text. */
David Lawrence Ramsey93c84052004-11-23 04:08:28 +000071#ifndef DISABLE_JUSTIFY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000072filestruct *jusbuffer = NULL;
73 /* The buffer where we store unjustified text. */
David Lawrence Ramsey93c84052004-11-23 04:08:28 +000074#endif
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000075partition *filepart = NULL;
76 /* The partition where we store a portion of the current
77 * file. */
David Lawrence Ramsey64661ac2005-07-08 19:57:25 +000078openfilestruct *openfile = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000079 /* The list of all open file buffers. */
Chris Allegretta2d7893d2001-07-11 02:08:33 +000080
David Lawrence Ramseyd89617f2006-01-06 21:51:10 +000081#ifndef NANO_TINY
82char *matchbrackets = NULL;
83 /* The opening and closing brackets that can be found by bracket
84 * searches. */
85#endif
86
David Lawrence Ramseyebe34252005-11-15 03:17:35 +000087#if !defined(NANO_TINY) && defined(ENABLE_NANORC)
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000088char *whitespace = NULL;
89 /* The characters used when displaying the first characters of
90 * tabs and spaces. */
91int whitespace_len[2];
92 /* The length of these characters. */
David Lawrence Ramsey89bb9372004-05-29 16:47:52 +000093#endif
94
Chris Allegrettae4f940d2002-03-03 22:36:36 +000095#ifndef DISABLE_JUSTIFY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000096char *punct = NULL;
97 /* The closing punctuation that can end sentences. */
98char *brackets = NULL;
99 /* The closing brackets that can follow closing punctuation and
100 * can end sentences. */
101char *quotestr = NULL;
102 /* The quoting string. The default value is set in main(). */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000103#ifdef HAVE_REGEX_H
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000104regex_t quotereg;
105 /* The compiled regular expression from the quoting string. */
106int quoterc;
David Lawrence Ramsey88165642006-05-22 18:30:09 +0000107 /* Whether it was compiled successfully. */
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000108char *quoteerr = NULL;
109 /* The error message, if it didn't. */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000110#else
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000111size_t quotelen;
112 /* The length of the quoting string in bytes. */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000113#endif
Chris Allegretta6df90f52002-07-19 01:08:59 +0000114#endif
Chris Allegrettae4f940d2002-03-03 22:36:36 +0000115
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000116char *answer = NULL;
David Lawrence Ramsey6335fb52007-01-01 05:15:32 +0000117 /* The answer string used by the statusbar prompt. */
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000118
119ssize_t tabsize = -1;
120 /* The width of a tab in spaces. The default value is set in
121 * main(). */
122
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000123#ifndef NANO_TINY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000124char *backup_dir = NULL;
125 /* The directory where we store backup files. */
David Lawrence Ramsey04e42a62004-02-28 16:24:31 +0000126#endif
Chris Allegrettae1f14522001-09-19 03:19:43 +0000127#ifndef DISABLE_OPERATINGDIR
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000128char *operating_dir = NULL;
129 /* The relative path to the operating directory, which we can't
130 * move outside of. */
131char *full_operating_dir = NULL;
132 /* The full path to it. */
Chris Allegrettae1f14522001-09-19 03:19:43 +0000133#endif
134
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000135#ifndef DISABLE_SPELLER
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000136char *alt_speller = NULL;
137 /* The command to use for the alternate spell checker. */
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000138#endif
139
Chris Allegretta8ce24132001-04-30 11:28:46 +0000140#ifdef ENABLE_COLOR
David Lawrence Ramsey9b13ff32002-12-22 16:30:00 +0000141syntaxtype *syntaxes = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000142 /* The global list of color syntaxes. */
David Lawrence Ramsey9b13ff32002-12-22 16:30:00 +0000143char *syntaxstr = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000144 /* The color syntax name specified on the command line. */
Chris Allegretta8ce24132001-04-30 11:28:46 +0000145#endif
146
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000147const shortcut *currshortcut;
148 /* The current shortcut list we're using. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000149int currmenu;
150 /* The currently loaded menu */
151
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000152#ifndef NANO_TINY
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000153toggle *toggles = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000154 /* The global toggle list. */
Chris Allegrettaf0b26df2001-01-20 22:18:18 +0000155#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000156
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000157sc *sclist = NULL;
158 /* New shortcut key struct */
159subnfunc *allfuncs = NULL;
160 /* New struct for the function list */
161
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000162#ifndef NANO_TINY
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000163filestruct *search_history = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000164 /* The search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000165filestruct *searchage = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000166 /* The top of the search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000167filestruct *searchbot = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000168 /* The bottom of the search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000169filestruct *replace_history = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000170 /* The replace string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000171filestruct *replaceage = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000172 /* The top of the replace string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000173filestruct *replacebot = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000174 /* The bottom of the replace string history list. */
Chris Allegretta5beed502003-01-05 20:41:21 +0000175#endif
176
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +0000177/* Regular expressions. */
Chris Allegretta805c26d2000-09-06 13:39:17 +0000178#ifdef HAVE_REGEX_H
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000179regex_t search_regexp;
180 /* The compiled regular expression to use in searches. */
181regmatch_t regmatches[10];
182 /* The match positions for parenthetical subexpressions, 10
183 * maximum, used in regular expression searches. */
Chris Allegretta6df90f52002-07-19 01:08:59 +0000184#endif
Chris Allegretta3533a342002-03-24 23:19:32 +0000185
David Lawrence Ramsey4d72de72006-04-12 15:27:40 +0000186int reverse_attr = A_REVERSE;
187 /* The curses attribute we use for reverse video. */
Chris Allegrettaa0d89972003-02-03 03:32:08 +0000188
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000189char *homedir = NULL;
David Lawrence Ramseyc1c818e2006-05-14 18:22:01 +0000190 /* The user's home directory, from $HOME or /etc/passwd. */
David Lawrence Ramseya27bd652004-08-17 05:23:38 +0000191
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000192/* Return the number of entries in the shortcut list s for a given menu. */
193size_t length_of_list(int menu)
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000194{
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000195 subnfunc *f;
David Lawrence Ramseyebd0d7c2004-07-01 18:59:52 +0000196 size_t i = 0;
David Lawrence Ramseye21adfa2002-09-13 18:14:04 +0000197
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000198 for (f = allfuncs; f != NULL; f = f->next)
199 if ((f->menus & menu) != 0) {
200 i++;
201 }
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000202 return i;
203}
204
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000205/* Set type of function based on the string */
206function_type strtokeytype(char *str)
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000207{
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000208 if (str[0] == 'M' || str[0] == 'm') {
209 return META;
210 } else if (str[0] == '^') {
211 return CONTROL;
212 } else if (str[0] == 'M' || str[0] == 'm') {
213 return FKEY;
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000214 } else {
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000215 return RAW;
216 }
217}
218
219/* Add a string to the new function list strict.
220 Does not allow updates, yet anyway */
221void add_to_funcs(void *func, int menus, const char *desc, const char *help,
222 bool blank_after, bool viewok)
223{
224 subnfunc *f;
225
226 if (allfuncs == NULL) {
227 allfuncs = nmalloc(sizeof(subnfunc));
228 f = allfuncs;
229 } else {
230 for (f = allfuncs; f->next != NULL; f = f->next)
231 ;
232 f->next = (subnfunc *)nmalloc(sizeof(subnfunc));
233 f = f->next;
234 }
235 f->next = NULL;
236 f->scfunc = func;
237 f->menus = menus;
238 f->desc = desc;
239 f->viewok = viewok;
240#ifndef NANO_TINY
241 f->help = help;
242 f->blank_after = blank_after;
243#endif
244
245#ifdef DEBUG
246 fprintf(stderr, "Added func \"%s\"", f->desc);
247#endif
248}
249
250const sc *first_sc_for(int menu, void *func) {
251 const sc *s;
252
253 for (s = sclist; s != NULL; s = s->next) {
254 if ((s->menu & menu) && s->scfunc == func) {
255 return s;
256 }
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000257 }
258
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000259#ifdef DEBUG
260 fprintf(stderr, "Whoops, returning null given func %ld\n", (long) func);
David Lawrence Ramseybd28ee42006-07-25 21:13:30 +0000261#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000262 /* Otherwise... */
263 return NULL;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000264}
265
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000266
267/* Add a string to the new shortcut list implementation
268 Allows updates to existing entries in the list */
269void add_to_sclist(int menu, char *scstring, void *func, int toggle, int execute)
270{
271 sc *s;
272
273 if (sclist == NULL) {
274 sclist = nmalloc(sizeof(sc));
275 s = sclist;
276 s->next = NULL;
277 } else {
278 for (s = sclist; s->next != NULL; s = s->next)
279 if (s->menu == menu && s->keystr == scstring)
280 break;
281
282 if (s->menu != menu || s->keystr != scstring) { /* i.e. this is not a replace... */
283#ifdef DEBUG
284 fprintf(stderr, "No match found...\n");
285#endif
286 s->next = (sc *)nmalloc(sizeof(sc));
287 s = s->next;
288 s->next = NULL;
289 }
290 }
291
292 s->type = strtokeytype(scstring);
293 s->menu = menu;
294 s->toggle = toggle;
295 s->keystr = scstring;
296 s->scfunc = func;
297 s->execute = execute;
298 assign_keyinfo(s);
299
300#ifdef DEBUG
301 fprintf(stderr, "list val = %d\n", (int) s->menu);
302 fprintf(stderr, "Hey, set sequence to %d for shortcut \"%s\"\n", s->seq, scstring);
303#endif
304}
305
306/* Assign the info to the shortcut struct
307 Assumes keystr is already assigned, naturally */
308void assign_keyinfo(sc *s)
309{
310 if (s->type == CONTROL) {
311 assert(strlen(s->keystr) > 1);
312 s->seq = s->keystr[1] - 64;
313 } else if (s->type == META) {
314 assert(strlen(s->keystr) > 2);
315 s->seq = tolower((int) s->keystr[2]);
316 } else if (s->type == FKEY) {
317 assert(strlen(s->keystr) > 1);
318 s->seq = KEY_F0 + atoi(&s->keystr[1]);
319 } else /* raw */
320 s->seq = (int) s->keystr[0];
Chris Allegretta9b422202008-03-05 17:15:33 +0000321
322 /* Override some keys which don't bind as nicely as we'd like */
323 if (s->type == CONTROL && (!strcasecmp(&s->keystr[1], "space")))
324 s->seq = 0;
325 else if (s->type == META && (!strcasecmp(&s->keystr[2], "space")))
326 s->seq = (int) ' ';
327
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000328}
329
330#ifdef DEBUG
331
332void print_sclist(void)
333{
334 sc *s;
335 const subnfunc *f;
336
337 for (s = sclist; s->next != NULL; s = s->next) {
338 f = sctofunc(s);
339 if (f)
340 fprintf(stderr, "Shortcut \"%s\", function: %s\n", s->keystr, f->desc);
341 else
342 fprintf(stderr, "Hmm, didnt find a func for \"%s\"\n", s->keystr);
343 }
344
345}
346#endif
347
348
349/* Stuff we need to make at least static here so we can access it below */
350const char *cancel_msg = N_("Cancel");
351
352#ifndef NANO_TINY
353const char *case_sens_msg = N_("Case Sens");
354const char *backwards_msg = N_("Backwards");
355#endif
356
357#ifdef HAVE_REGEX_H
358const char *regexp_msg = N_("Regexp");
359#endif
360
361/* Stuff we want to just stun out if we're in TINY mode */
362#ifdef NANO_TINY
363const char *nano_cancel_msg = "";
364const char *nano_exit_msg = "";
365const char *nano_writeout_msg = "";
366const char *nano_insert_msg = "";
367const char *nano_whereis_msg = "";
368const char *nano_prevpage_msg = "";
369const char *nano_nextpage_msg = "";
370const char *nano_cut_msg = "";
371const char *nano_uncut_msg = "";
372const char *nano_cursorpos_msg = "";
373const char *nano_lastline_msg = "";
374const char *nano_gotoline_msg = "";
375const char *nano_replace_msg = "";
376const char *nano_forward_msg = "";
377const char *nano_back_msg = "";
378const char *nano_prevline_msg = "";
379const char *nano_nextline_msg = "";
380const char *nano_home_msg = "";
381const char *nano_end_msg = "";
382const char *nano_verbatim_msg = "";
383const char *nano_tab_msg = "";
384const char *nano_enter_msg = "";
385const char *nano_delete_msg = "";
386const char *nano_backspace_msg = "";
387const char *nano_regexp_msg = "";
388const char *gototext_msg = "";
389const char *do_para_begin_void = "";
390const char *do_para_end_void = "";
391const char *case_sens_msg = "";
392const char *backwards_msg = "";
393const char *do_cut_till_end = "";
394const char *dos_format_msg = "";
395const char *mac_format_msg = "";
396const char *append_msg = "";
397const char *prepend_msg = "";
398const char *backup_file_msg = "";
399const char *to_files_msg = "";
400#else /* NANO_TINY */
401const char *prev_history_msg = N_("PrevHstory");
402/* TRANSLATORS: Try to keep this and previous strings at most 10
403 * characters. */
404const char *next_history_msg = N_("NextHstory");
405const char *replace_msg = N_("Replace");
406const char *no_replace_msg = N_("No Replace");
407const char *go_to_line_msg = N_("Go To Line");
408const char *gototext_msg = N_("Go To Text");
409#ifndef DISABLE_BROWSER
410/* TRANSLATORS: Try to keep this at most 16 characters. */
411const char *to_files_msg = N_("To Files");
412/* TRANSLATORS: Try to keep this at most 12 characters. */
413const char *first_file_msg = N_("First File");
414/* TRANSLATORS: Try to keep this at most 12 characters. */
415const char *last_file_msg = N_("Last File");
416#endif
417/* TRANSLATORS: Try to keep this at most 16 characters. */
418const char *dos_format_msg = N_("DOS Format");
419/* TRANSLATORS: Try to keep this at most 16 characters. */
420const char *mac_format_msg = N_("Mac Format");
421/* TRANSLATORS: Try to keep this at most 16 characters. */
422const char *append_msg = N_("Append");
423/* TRANSLATORS: Try to keep this at most 16 characters. */
424const char *prepend_msg = N_("Prepend");
425/* TRANSLATORS: Try to keep this at most 16 characters. */
426const char *backup_file_msg = N_("Backup File");
427
428#ifdef ENABLE_MULTIBUFFER
429/* TRANSLATORS: Try to keep this at most 16 characters. */
430const char *new_buffer_msg = N_("New Buffer");
431#endif
432
433#endif
434
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000435/* Initialize all shortcut lists. If unjustify is TRUE, replace the
436 * Uncut shortcut in the main shortcut list with UnJustify. */
David Lawrence Ramsey1f1ebb82004-11-11 21:50:01 +0000437void shortcut_init(bool unjustify)
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000438{
David Lawrence Ramseyed467e52006-07-03 18:40:53 +0000439 /* TRANSLATORS: Try to keep this and following strings at most 10
440 * characters. */
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000441 const char *get_help_msg = N_("Get Help");
442 const char *exit_msg = N_("Exit");
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000443 const char *whereis_msg = N_("Where Is");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000444 const char *prev_page_msg = N_("Prev Page");
445 const char *next_page_msg = N_("Next Page");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000446 /* TRANSLATORS: Try to keep this string at most 10 characters. */
447
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000448#ifndef NANO_TINY
David Lawrence Ramsey0ec909c2006-05-06 15:07:26 +0000449 /* TRANSLATORS: Try to keep this at most 12 characters. */
450 const char *whereis_next_msg = N_("WhereIs Next");
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000451#endif
David Lawrence Ramseyed467e52006-07-03 18:40:53 +0000452 /* TRANSLATORS: Try to keep this and following strings at most 10
453 * characters. */
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000454 const char *first_line_msg = N_("First Line");
455 const char *last_line_msg = N_("Last Line");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000456#ifndef DISABLE_JUSTIFY
457 const char *beg_of_par_msg = N_("Beg of Par");
458 const char *end_of_par_msg = N_("End of Par");
459 const char *fulljstify_msg = N_("FullJstify");
460#endif
David Lawrence Ramsey81378762006-04-24 20:53:43 +0000461 const char *refresh_msg = N_("Refresh");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000462 const char *insert_file_msg = N_("Insert File");
463 const char *goto_dir_msg = N_("Go To Dir");
464 const char *ext_cmd_msg = N_("Execute Command");
465
Chris Allegrettadab017e2002-04-23 10:56:06 +0000466#ifndef DISABLE_HELP
David Lawrence Ramsey804e1072006-03-29 19:43:32 +0000467 const char *nano_cancel_msg = N_("Cancel the current function");
David Lawrence Ramsey57c9afb2006-04-14 20:21:45 +0000468 const char *nano_help_msg = N_("Display this help text");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000469 const char *nano_exit_msg =
Chris Allegretta7162e3d2002-04-06 05:02:14 +0000470#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000471 N_("Close the current file buffer / Exit from nano")
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000472#else
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000473 N_("Exit from nano")
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000474#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000475 ;
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000476 const char *nano_writeout_msg =
477 N_("Write the current file to disk");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000478 const char *nano_justify_msg = N_("Justify the current paragraph");
479 const char *nano_insert_msg =
480 N_("Insert another file into the current one");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000481 const char *nano_whereis_msg =
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000482 N_("Search for a string or a regular expression");
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000483 const char *nano_prevpage_msg = N_("Go to previous screen");
484 const char *nano_nextpage_msg = N_("Go to next screen");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000485 const char *nano_cut_msg =
486 N_("Cut the current line and store it in the cutbuffer");
487 const char *nano_uncut_msg =
488 N_("Uncut from the cutbuffer into the current line");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000489 const char *nano_cursorpos_msg =
David Lawrence Ramseyf50bd4b2006-04-14 20:15:44 +0000490 N_("Display the position of the cursor");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000491 const char *nano_spell_msg =
492 N_("Invoke the spell checker, if available");
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000493 const char *nano_replace_msg =
494 N_("Replace a string or a regular expression");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000495 const char *nano_gotoline_msg = N_("Go to line and column number");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000496#ifndef NANO_TINY
David Lawrence Ramsey8381fdd2004-11-01 22:40:02 +0000497 const char *nano_mark_msg = N_("Mark text at the cursor position");
498 const char *nano_whereis_next_msg = N_("Repeat last search");
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000499 const char *nano_copy_msg =
500 N_("Copy the current line and store it in the cutbuffer");
David Lawrence Ramseyaee00d42006-07-05 18:42:22 +0000501 const char *nano_indent_msg = N_("Indent the current line");
502 const char *nano_unindent_msg = N_("Unindent the current line");
David Lawrence Ramsey4b4b6082004-11-01 22:54:40 +0000503#endif
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000504 const char *nano_forward_msg = N_("Go forward one character");
505 const char *nano_back_msg = N_("Go back one character");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000506#ifndef NANO_TINY
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000507 const char *nano_nextword_msg = N_("Go forward one word");
508 const char *nano_prevword_msg = N_("Go back one word");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000509#endif
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000510 const char *nano_prevline_msg = N_("Go to previous line");
511 const char *nano_nextline_msg = N_("Go to next line");
512 const char *nano_home_msg = N_("Go to beginning of current line");
513 const char *nano_end_msg = N_("Go to end of current line");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000514#ifndef DISABLE_JUSTIFY
515 const char *nano_parabegin_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000516 N_("Go to beginning of paragraph; then of previous paragraph");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000517 const char *nano_paraend_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000518 N_("Go just beyond end of paragraph; then of next paragraph");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000519#endif
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000520 const char *nano_firstline_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000521 N_("Go to the first line of the file");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000522 const char *nano_lastline_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000523 N_("Go to the last line of the file");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000524#ifndef NANO_TINY
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000525 const char *nano_bracket_msg = N_("Go to the matching bracket");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000526 const char *nano_scrollup_msg =
527 N_("Scroll up one line without scrolling the cursor");
528 const char *nano_scrolldown_msg =
529 N_("Scroll down one line without scrolling the cursor");
530#endif
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000531#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +0000532 const char *nano_prevfile_msg =
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000533 N_("Switch to the previous file buffer");
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +0000534 const char *nano_nextfile_msg =
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000535 N_("Switch to the next file buffer");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000536#endif
David Lawrence Ramsey40e05722006-04-23 19:21:12 +0000537 const char *nano_verbatim_msg =
David Lawrence Ramsey939d4232006-04-24 21:00:17 +0000538 N_("Insert the next keystroke verbatim");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000539 const char *nano_tab_msg =
David Lawrence Ramseybf784202006-04-29 13:59:04 +0000540 N_("Insert a tab at the cursor position");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000541 const char *nano_enter_msg =
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000542 N_("Insert a newline at the cursor position");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000543 const char *nano_delete_msg =
544 N_("Delete the character under the cursor");
545 const char *nano_backspace_msg =
546 N_("Delete the character to the left of the cursor");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000547#ifndef NANO_TINY
David Lawrence Ramsey295d1722005-01-01 07:43:32 +0000548 const char *nano_cut_till_end_msg =
549 N_("Cut from the cursor position to the end of the file");
550#endif
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000551#ifndef DISABLE_JUSTIFY
552 const char *nano_fulljustify_msg = N_("Justify the entire file");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000553#endif
David Lawrence Ramseyc5c52302005-11-15 23:45:29 +0000554#ifndef NANO_TINY
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000555 const char *nano_wordcount_msg =
556 N_("Count the number of words, lines, and characters");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000557#endif
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000558 const char *nano_refresh_msg =
559 N_("Refresh (redraw) the current screen");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000560#ifndef NANO_TINY
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000561 const char *nano_case_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000562 N_("Toggle the case sensitivity of the search");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000563 const char *nano_reverse_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000564 N_("Reverse the direction of the search");
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000565#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000566#ifdef HAVE_REGEX_H
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000567 const char *nano_regexp_msg =
568 N_("Toggle the use of regular expressions");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000569#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000570#ifndef NANO_TINY
David Lawrence Ramsey305d8892006-05-24 19:48:03 +0000571 const char *nano_prev_history_msg =
David Lawrence Ramsey7b0531a2006-07-31 01:30:31 +0000572 N_("Recall the previous search/replace string");
David Lawrence Ramsey305d8892006-05-24 19:48:03 +0000573 const char *nano_next_history_msg =
David Lawrence Ramsey7b0531a2006-07-31 01:30:31 +0000574 N_("Recall the next search/replace string");
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000575#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000576#ifndef DISABLE_BROWSER
577 const char *nano_tofiles_msg = N_("Go to file browser");
578#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000579#ifndef NANO_TINY
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000580 const char *nano_dos_msg = N_("Toggle the use of DOS format");
581 const char *nano_mac_msg = N_("Toggle the use of Mac format");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000582#endif
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000583 const char *nano_append_msg = N_("Toggle appending");
584 const char *nano_prepend_msg = N_("Toggle prepending");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000585#ifndef NANO_TINY
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000586 const char *nano_backup_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000587 N_("Toggle backing up of the original file");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000588 const char *nano_execute_msg = N_("Execute external command");
589#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000590#if !defined(NANO_TINY) && defined(ENABLE_MULTIBUFFER)
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000591 const char *nano_multibuffer_msg =
592 N_("Toggle the use of a new buffer");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000593#endif
594#ifndef DISABLE_BROWSER
David Lawrence Ramseyc41d4282004-07-23 12:51:40 +0000595 const char *nano_exitbrowser_msg = N_("Exit from the file browser");
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000596 const char *nano_firstfile_msg =
597 N_("Go to the first file in the list");
598 const char *nano_lastfile_msg =
599 N_("Go to the last file in the list");
David Lawrence Ramseyc41d4282004-07-23 12:51:40 +0000600 const char *nano_gotodir_msg = N_("Go to directory");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000601
Chris Allegretta2bef1822001-09-28 19:53:11 +0000602#endif
Chris Allegrettadab017e2002-04-23 10:56:06 +0000603#endif /* !DISABLE_HELP */
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000604
David Lawrence Ramseyea43a1d2004-03-02 22:52:57 +0000605#ifndef DISABLE_HELP
David Lawrence Ramseybd28ee42006-07-25 21:13:30 +0000606#define IFSCHELP(help, blank, nextvar) help, blank, nextvar
David Lawrence Ramseyea43a1d2004-03-02 22:52:57 +0000607#else
David Lawrence Ramseybd28ee42006-07-25 21:13:30 +0000608#define IFSCHELP(help, blank, nextvar) nextvar
Chris Allegrettadab017e2002-04-23 10:56:06 +0000609#endif
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000610
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000611 while (allfuncs != NULL) {
612 subnfunc *f = allfuncs;
613 allfuncs = (allfuncs)->next;
614 free(f);
615 }
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000616
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000617#ifndef DISABLE_HELP
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000618 add_to_funcs(do_help_void, MALL, get_help_msg, nano_help_msg,
619 FALSE, VIEW);
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000620#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000621
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000622 add_to_funcs((void *) cancel_msg,
623 (MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MWHEREISFILE|MGOTODIR),
624 cancel_msg, nano_cancel_msg, FALSE, VIEW);
625
626 add_to_funcs(do_exit, MMAIN,
Chris Allegretta355fbe52001-07-14 19:32:47 +0000627#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000628 /* TRANSLATORS: Try to keep this at most 10 characters. */
David Lawrence Ramsey017dde22006-03-24 05:28:03 +0000629 openfile != NULL && openfile != openfile->next ? N_("Close") :
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000630#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000631 exit_msg, nano_exit_msg, FALSE, VIEW);
632
633 add_to_funcs(do_exit, MBROWSER|MHELP, exit_msg, nano_exit_msg, FALSE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000634
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000635 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000636 add_to_funcs(do_writeout_void, MMAIN, N_("WriteOut"),
637 nano_writeout_msg, FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000638
David Lawrence Ramseya539fce2004-06-29 00:43:56 +0000639#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000640 /* TRANSLATORS: Try to keep this at most 10 characters. */
641 add_to_funcs(do_justify_void, MMAIN, N_("Justify"),
642 nano_justify_msg, TRUE, NOVIEW);
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000643#endif
Chris Allegretta32da4562002-01-02 15:12:21 +0000644
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000645 /* We allow inserting files in view mode if multibuffers are
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000646 * available, so that we can view multiple files. If we're using
647 * restricted mode, inserting files is disabled, since it allows
648 * reading from or writing to files not specified on the command
649 * line. */
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000650 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000651 add_to_funcs(!ISSET(RESTRICTED) ? do_insertfile_void : nano_disabled_msg,
652 MMAIN, N_("Read File"), nano_insert_msg, FALSE,
Chris Allegretta32da4562002-01-02 15:12:21 +0000653#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000654 VIEW);
Chris Allegretta32da4562002-01-02 15:12:21 +0000655#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000656 NOVIEW);
Chris Allegretta32da4562002-01-02 15:12:21 +0000657#endif
Chris Allegrettaaf6414a2001-02-11 19:05:05 +0000658
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000659 add_to_funcs(do_search, MMAIN, whereis_msg,
660 nano_whereis_msg, FALSE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000661
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000662 add_to_funcs(do_page_up, (MMAIN|MHELP|MBROWSER),
663 prev_page_msg, nano_prevpage_msg, FALSE, VIEW);
664 add_to_funcs(do_page_down, (MMAIN|MHELP|MBROWSER),
665 next_page_msg, nano_nextpage_msg, TRUE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000666
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000667 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000668 add_to_funcs(do_cut_text_void, MMAIN, N_("Cut Text"), nano_cut_msg,
669 FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000670
Chris Allegretta07798352000-11-27 22:58:23 +0000671 if (unjustify)
David Lawrence Ramseyed467e52006-07-03 18:40:53 +0000672 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000673 add_to_funcs(do_uncut_text, MMAIN, N_("UnJustify"), "",
674 FALSE, NOVIEW);
675
Chris Allegretta07798352000-11-27 22:58:23 +0000676 else
David Lawrence Ramseyed467e52006-07-03 18:40:53 +0000677 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000678 add_to_funcs(do_uncut_text, MMAIN, N_("UnCut Text"), nano_uncut_msg,
679 FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000680
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000681 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000682 add_to_funcs(do_cursorpos_void, MMAIN, N_("Cur Pos"), nano_cursorpos_msg,
683 FALSE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000684
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000685 /* If we're using restricted mode, spell checking is disabled
686 * because it allows reading from or writing to files not specified
687 * on the command line. */
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000688 /* TRANSLATORS: Try to keep this at most 10 characters. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000689#ifndef DISABLE_SPELLER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000690 if (!ISSET(RESTRICTED))
691 add_to_funcs(do_spell, MMAIN, N_("To Spell"), nano_spell_msg,
692 TRUE, NOVIEW);
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000693#endif
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000694
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000695 add_to_funcs(do_first_line,
696 (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP),
697 first_line_msg, first_line_msg, FALSE, VIEW);
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000698
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000699 add_to_funcs(do_last_line,
700 (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP),
701 last_line_msg, nano_lastline_msg, TRUE, VIEW);
702
703
704 add_to_funcs(do_gotolinecolumn_void, (MMAIN|MWHEREIS),
705 go_to_line_msg, nano_gotoline_msg, FALSE, VIEW);
706
707 add_to_funcs(do_replace, (MMAIN|MWHEREIS), replace_msg, nano_replace_msg,
708
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000709#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000710 FALSE,
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000711#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000712 TRUE,
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000713#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000714 NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000715
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000716#ifndef NANO_TINY
David Lawrence Ramseyefb4b0a2006-04-19 14:09:01 +0000717
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000718 add_to_funcs(do_mark, MMAIN, N_("Mark Text"),
719 nano_mark_msg, FALSE, VIEW);
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000720
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000721 add_to_funcs(do_research, (MMAIN|MBROWSER), whereis_next_msg,
722 nano_whereis_next_msg, TRUE, VIEW);
David Lawrence Ramseyf85001a2006-04-28 13:19:56 +0000723
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000724 add_to_funcs(do_copy_text, MMAIN, N_("Copy Text"),
725 nano_copy_msg, FALSE, NOVIEW);
David Lawrence Ramseyf85001a2006-04-28 13:19:56 +0000726
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000727 add_to_funcs(do_indent_void, MMAIN, N_("Indent Text"),
728 nano_indent_msg, FALSE, NOVIEW);
729
730 add_to_funcs(do_unindent, MMAIN, N_("Unindent Text"),
731 nano_unindent_msg, TRUE, NOVIEW);
732
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000733#endif
734
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000735
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000736 add_to_funcs(do_right, MMAIN, N_("Forward"), nano_forward_msg,
737 FALSE, VIEW);
738
739 add_to_funcs(do_left, MMAIN, N_("Back"), nano_back_msg,
740 FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000741
742#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000743 add_to_funcs(do_next_word_void, MMAIN, N_("Next Word"),
744 nano_nextword_msg, FALSE, VIEW);
David Lawrence Ramseyc5967552002-06-21 03:20:06 +0000745
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000746 add_to_funcs(do_prev_word_void, MMAIN, N_("Prev Word"),
747 nano_prevword_msg, FALSE, VIEW);
Chris Allegretta8d990b52001-09-22 22:14:25 +0000748#endif
David Lawrence Ramseye0497062003-08-23 21:11:06 +0000749
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000750 add_to_funcs(do_up_void, (MMAIN|MHELP), N_("Prev Line"),
751 nano_prevline_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000752
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000753 add_to_funcs(do_down_void, (MMAIN|MHELP), N_("Next Line"),
754 nano_nextline_msg, TRUE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000755
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000756 add_to_funcs(do_home, MMAIN, N_("Home"), nano_home_msg,
757 FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000758
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000759 add_to_funcs(do_end, MMAIN, N_("End"), nano_end_msg,
760 FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000761
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000762#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000763 add_to_funcs(do_para_begin_void, (MMAIN|MWHEREIS), beg_of_par_msg,
764 nano_parabegin_msg, FALSE, VIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000765
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000766 add_to_funcs(do_para_end_void, (MMAIN|MWHEREIS), end_of_par_msg,
767 nano_paraend_msg, FALSE, VIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000768#endif
David Lawrence Ramseye0497062003-08-23 21:11:06 +0000769
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000770#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000771 add_to_funcs(do_find_bracket, MMAIN, _("Find Other Bracket"),
772 nano_bracket_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000773
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000774 add_to_funcs(do_scroll_up, MMAIN, N_("Scroll Up"),
775 nano_scrollup_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000776
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000777 add_to_funcs(do_scroll_down, MMAIN, N_("Scroll Down"),
778 nano_scrolldown_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000779#endif
David Lawrence Ramseydf453652006-04-21 02:05:09 +0000780
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000781#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000782 add_to_funcs(switch_to_prev_buffer_void, MMAIN, _("Previous File"),
783 nano_prevfile_msg, FALSE, VIEW);
784 add_to_funcs(switch_to_next_buffer_void, MMAIN, N_("Next File"),
785 nano_nextfile_msg, TRUE, VIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000786#endif
Chris Allegrettab3655b42001-10-22 03:15:31 +0000787
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000788 add_to_funcs(do_verbatim_input, MMAIN, N_("Verbatim Input"),
789 nano_verbatim_msg, FALSE, NOVIEW);
790 add_to_funcs(do_tab, MMAIN, N_("Tab"), nano_tab_msg,
791 FALSE, NOVIEW);
792 add_to_funcs(do_enter, MMAIN, N_("Enter"), nano_enter_msg,
793 FALSE, NOVIEW);
794 add_to_funcs(do_delete, MMAIN, N_("Delete"), nano_delete_msg,
795 FALSE, NOVIEW);
796 add_to_funcs(do_backspace, MMAIN, N_("Backspace"), nano_backspace_msg,
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000797#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000798 FALSE,
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000799#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000800 TRUE,
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000801#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000802 VIEW);
David Lawrence Ramsey295d1722005-01-01 07:43:32 +0000803
David Lawrence Ramsey2ca23562006-04-23 19:15:15 +0000804#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000805 add_to_funcs(do_cut_till_end, MMAIN, N_("CutTillEnd"),
806 nano_cut_till_end_msg, TRUE, NOVIEW);
David Lawrence Ramsey2ca23562006-04-23 19:15:15 +0000807#endif
808
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000809 add_to_funcs(xon_complaint, MMAIN, "", "", FALSE, VIEW);
810 add_to_funcs(xoff_complaint, MMAIN, "", "", FALSE, VIEW);
811
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000812#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000813 add_to_funcs(do_full_justify, (MMAIN|MWHEREIS), fulljstify_msg,
814 nano_fulljustify_msg, FALSE, NOVIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000815#endif
816
David Lawrence Ramseyc5c52302005-11-15 23:45:29 +0000817#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000818 add_to_funcs(do_wordlinechar_count, MMAIN, N_("Word Count"),
819 nano_wordcount_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000820#endif
David Lawrence Ramseyefb4b0a2006-04-19 14:09:01 +0000821
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000822 add_to_funcs(total_refresh, (MMAIN|MHELP), refresh_msg, refresh_msg,
David Lawrence Ramsey03252d42006-04-22 20:00:23 +0000823#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000824 TRUE,
David Lawrence Ramsey03252d42006-04-22 20:00:23 +0000825#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000826 FALSE,
David Lawrence Ramsey03252d42006-04-22 20:00:23 +0000827#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000828 VIEW);
David Lawrence Ramsey8faf3052003-09-04 20:25:29 +0000829
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000830#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000831 add_to_funcs((void *) case_sens_msg,
832 (MWHEREIS|MREPLACE|MWHEREISFILE),
833 case_sens_msg, nano_case_msg, FALSE, VIEW);
Chris Allegretta658399a2001-06-14 02:54:22 +0000834
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000835 add_to_funcs((void *) backwards_msg,
836 (MWHEREIS|MREPLACE|MWHEREISFILE),
837 backwards_msg, nano_reverse_msg, FALSE, VIEW);
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000838#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000839
Chris Allegretta658399a2001-06-14 02:54:22 +0000840#ifdef HAVE_REGEX_H
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000841 add_to_funcs((void *) regexp_msg,
842 (MWHEREIS|MREPLACE|MWHEREISFILE),
843 regexp_msg, nano_regexp_msg, FALSE, VIEW);
Chris Allegretta658399a2001-06-14 02:54:22 +0000844#endif
Chris Allegretta5beed502003-01-05 20:41:21 +0000845
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000846#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000847 add_to_funcs((void *) prev_history_msg,
848 (MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE),
849 prev_history_msg, nano_prev_history_msg, FALSE, VIEW);
David Lawrence Ramsey305d8892006-05-24 19:48:03 +0000850
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000851 add_to_funcs((void *) next_history_msg,
852 (MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE),
853 next_history_msg, nano_next_history_msg, FALSE, VIEW);
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000854#endif
David Lawrence Ramsey02085d72004-11-07 16:04:18 +0000855
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000856 add_to_funcs((void *) no_replace_msg, MREPLACE,
857 no_replace_msg, nano_whereis_msg, FALSE, VIEW);
Chris Allegretta5f36c372001-07-16 00:48:53 +0000858
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000859 add_to_funcs((void *) gototext_msg, MGOTOLINE,
860 gototext_msg, nano_whereis_msg, FALSE, VIEW);
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000861
Rocco Corsiaf5c3022001-01-12 07:51:05 +0000862#ifndef DISABLE_BROWSER
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000863 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000864 add_to_funcs((void *) to_files_msg,
865 (MGOTOLINE|MINSERTFILE),
866 to_files_msg, nano_tofiles_msg, FALSE, VIEW);
Chris Allegrettaf4b96012001-01-03 07:11:47 +0000867#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000868
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000869#ifndef NANO_TINY
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000870 /* If we're using restricted mode, the DOS format, Mac format,
871 * append, prepend, and backup toggles are disabled. The first and
872 * second are useless since inserting files is disabled, the third
873 * and fourth are disabled because they allow writing to files not
874 * specified on the command line, and the fifth is useless since
875 * backups are disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000876 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000877 add_to_funcs((void *) dos_format_msg, MWRITEFILE,
878 dos_format_msg, nano_dos_msg, FALSE, NOVIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000879
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000880 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000881 add_to_funcs((void *) mac_format_msg, MWRITEFILE,
882 mac_format_msg, nano_mac_msg, FALSE, NOVIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000883
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000884 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000885 add_to_funcs((void *) append_msg, MWRITEFILE,
886 append_msg, nano_append_msg, FALSE, NOVIEW);
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000887
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000888 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000889 add_to_funcs((void *) prepend_msg, MWRITEFILE,
890 prepend_msg, nano_prepend_msg, FALSE, NOVIEW);
Chris Allegretta0e9b7aa2002-04-16 03:15:47 +0000891
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000892 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000893 add_to_funcs((void *) backup_file_msg, MWRITEFILE,
894 backup_file_msg, nano_backup_msg, FALSE, NOVIEW);
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000895#endif
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000896
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000897#ifndef NANO_TINY
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000898 /* If we're using restricted mode, command execution is disabled.
899 * It's useless since inserting files is disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000900 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000901 add_to_funcs((void *) ext_cmd_msg, MINSERTFILE,
902 ext_cmd_msg, nano_execute_msg, FALSE, NOVIEW);
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000903
Chris Allegrettaf7c68112002-09-03 22:58:40 +0000904#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000905 /* If we're using restricted mode, the multibuffer toggle is
906 * disabled. It's useless since inserting files is disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000907 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000908 add_to_funcs((void *) new_buffer_msg, MWRITEFILE,
909 new_buffer_msg, nano_multibuffer_msg, FALSE, NOVIEW);
David Lawrence Ramseye21adfa2002-09-13 18:14:04 +0000910#endif
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000911
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000912 add_to_funcs((void *) insert_file_msg, MEXTCMD,
913 insert_file_msg, nano_insert_msg, FALSE, VIEW);
David Lawrence Ramseye5d8f322004-09-30 22:07:21 +0000914
David Lawrence Ramsey47e82b12004-09-28 22:21:46 +0000915#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000916 add_to_funcs((void *) new_buffer_msg, MEXTCMD,
917 new_buffer_msg, nano_multibuffer_msg, FALSE, NOVIEW);
Chris Allegretta52c5a6e2002-03-21 05:07:28 +0000918#endif
David Lawrence Ramsey47e82b12004-09-28 22:21:46 +0000919#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000920
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000921#ifndef DISABLE_HELP
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000922 add_to_funcs((void *) refresh_msg, MHELP,
923 refresh_msg, nano_refresh_msg, FALSE, VIEW);
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000924#endif
925
Rocco Corsiaf5c3022001-01-12 07:51:05 +0000926#ifndef DISABLE_BROWSER
Chris Allegrettaf5de33a2002-02-27 04:14:16 +0000927
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000928 add_to_funcs((void *) first_file_msg,
929 (MBROWSER|MWHEREISFILE),
930 first_file_msg, nano_firstfile_msg, FALSE, VIEW);
Chris Allegrettab3655b42001-10-22 03:15:31 +0000931
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000932 add_to_funcs((void *) last_file_msg,
933 (MBROWSER|MWHEREISFILE),
934 last_file_msg, nano_lastfile_msg, FALSE, VIEW);
Chris Allegrettab3655b42001-10-22 03:15:31 +0000935
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000936 add_to_funcs((void *) goto_dir_msg, MBROWSER,
937 goto_dir_msg, nano_gotodir_msg, FALSE, VIEW);
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000938#endif
939
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000940 currmenu = MMAIN;
David Lawrence Ramsey35e97132005-01-08 06:04:19 +0000941
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000942#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000943 add_to_sclist(MALL, "^G", do_help_void, 0, TRUE);
944 add_to_sclist(MALL, "F1", do_help_void, 0, TRUE);
Chris Allegrettaf5de33a2002-02-27 04:14:16 +0000945#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000946 add_to_sclist(MMAIN, "^X", do_exit, 0, TRUE);
947 add_to_sclist(MMAIN, "F2", do_exit, 0, TRUE);
948 add_to_sclist(MHELP, "^X", do_exit, 0, TRUE);
949 add_to_sclist(MHELP, "F2", do_exit, 0, TRUE);
950 add_to_sclist(MMAIN, "^_", do_gotolinecolumn_void, 0, TRUE);
951 add_to_sclist(MMAIN, "F13", do_gotolinecolumn_void, 0, TRUE);
952 add_to_sclist(MMAIN, "^O", do_writeout_void, 0, TRUE);
953 add_to_sclist(MMAIN, "F3", do_writeout_void, 0, TRUE);
954#ifndef NANO_TINY
955 add_to_sclist(MMAIN, "^J", do_justify_void, 0, TRUE);
956 add_to_sclist(MMAIN, "F4", do_justify_void, 0, TRUE);
957#endif
958 add_to_sclist(MMAIN, "^R", do_insertfile_void, 0, TRUE);
959 add_to_sclist(MMAIN, "F5", do_insertfile_void, 0, TRUE);
960 add_to_sclist(MMAIN, "^W", do_search, 0, TRUE);
961 add_to_sclist(MMAIN, "F6", do_search, 0, TRUE);
962 add_to_sclist(MMAIN, "^Y", do_page_up, 0, TRUE);
963 add_to_sclist(MMAIN, "F7", do_page_up, 0, TRUE);
964 add_to_sclist(MMAIN, "^V", do_page_down, 0, TRUE);
965 add_to_sclist(MMAIN, "F8", do_page_down, 0, TRUE);
966 add_to_sclist(MMAIN, "^K", do_cut_text_void, 0, TRUE);
967 add_to_sclist(MMAIN, "F9", do_cut_text_void, 0, TRUE);
968 add_to_sclist(MMAIN, "^U", do_uncut_text, 0, TRUE);
969 add_to_sclist(MMAIN, "F10", do_uncut_text, 0, TRUE);
970 add_to_sclist(MMAIN, "^C", do_cursorpos_void, 0, TRUE);
971 add_to_sclist(MMAIN, "F11", do_cursorpos_void, 0, TRUE);
972#ifndef NANO_TINY
973 add_to_sclist(MMAIN, "^T", do_spell, 0, TRUE);
974 add_to_sclist(MMAIN, "F12", do_spell, 0, TRUE);
975#endif
976 add_to_sclist(MMAIN, "^_", do_gotolinecolumn_void, 0, TRUE);
977 add_to_sclist(MMAIN, "F13", do_gotolinecolumn_void, 0, TRUE);
978 add_to_sclist(MMAIN, "M-G", do_gotolinecolumn_void, 0, TRUE);
979 add_to_sclist(MMAIN, "^\\", do_replace, 0, TRUE);
980 add_to_sclist(MMAIN, "F14", do_replace, 0, TRUE);
981 add_to_sclist(MMAIN, "M-R", do_replace, 0, TRUE);
982 add_to_sclist(MWHEREIS, "^R", do_replace, 0, FALSE);
983 add_to_sclist(MREPLACE, "^R", (void *) no_replace_msg, 0, FALSE);
984 add_to_sclist(MWHEREIS, "^T", do_gotolinecolumn_void, 0, TRUE);
985#ifndef NANO_TINY
986 add_to_sclist(MMAIN, "^^", do_mark, 0, TRUE);
987 add_to_sclist(MMAIN, "F15", do_mark, 0, TRUE);
988 add_to_sclist(MMAIN, "M-A", do_mark, 0, TRUE);
989 add_to_sclist(MALL, "F16", do_research, 0, TRUE);
990 add_to_sclist(MALL, "M-W", do_research, 0, TRUE);
991 add_to_sclist(MMAIN, "M-^", do_copy_text, 0, TRUE);
992 add_to_sclist(MMAIN, "M-6", do_copy_text, 0, TRUE);
993 add_to_sclist(MMAIN, "M-}", do_indent_void, 0, TRUE);
994 add_to_sclist(MMAIN, "M-{", do_unindent, 0, TRUE);
995 add_to_sclist(MMAIN|MBROWSER|MHELP, "^F", do_right, 0, TRUE);
996 add_to_sclist(MMAIN|MBROWSER|MHELP, "^B", do_left, 0, TRUE);
997 add_to_sclist(MMAIN, "^Space", do_next_word_void, 0, TRUE);
998 add_to_sclist(MMAIN, "M-Space", do_prev_word_void, 0, TRUE);
999#endif
1000 add_to_sclist(MALL, "^Q", xon_complaint, 0, TRUE);
1001 add_to_sclist(MALL, "^X", xoff_complaint, 0, TRUE);
1002 add_to_sclist(MALL, "^P", do_up_void, 0, TRUE);
1003 add_to_sclist(MALL, "^N", do_down_void, 0, TRUE);
1004 add_to_sclist(MALL, "^A", do_home, 0, TRUE);
1005 add_to_sclist(MALL, "^E", do_end, 0, TRUE);
1006 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1007 "^W", do_para_begin_void, 0, TRUE);
1008 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1009 "^O", do_para_end_void, 0, TRUE);
1010 add_to_sclist(MALL, "M-(", do_para_begin_void, 0, TRUE);
1011 add_to_sclist(MALL, "M-9", do_para_begin_void, 0, TRUE);
1012 add_to_sclist(MALL, "M-)", do_para_end_void, 0, TRUE);
1013 add_to_sclist(MALL, "M-0", do_para_end_void, 0, TRUE);
1014 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1015 "^Y", do_first_line, 0, TRUE);
1016 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1017 "^V", do_last_line, 0, TRUE);
1018
1019 add_to_sclist(MWHEREIS,
1020 "M-C", (void *) case_sens_msg, 0, FALSE);
1021 add_to_sclist(MREPLACE,
1022 "M-C", (void *) case_sens_msg, 0, FALSE);
1023 add_to_sclist(MREPLACE2,
1024 "M-C", (void *) case_sens_msg, 0, FALSE);
1025 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1026 "M-B", (void *) backwards_msg, 0, FALSE);
1027 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1028 "M-R", (void *) regexp_msg, 0, FALSE);
1029
1030 add_to_sclist(MMAIN, "M-\\", do_first_line, 0, TRUE);
1031 add_to_sclist(MMAIN, "M-|", do_first_line, 0, TRUE);
1032 add_to_sclist(MMAIN, "M-/", do_last_line, 0, TRUE);
1033 add_to_sclist(MMAIN, "M-?", do_last_line, 0, TRUE);
1034#ifndef NANO_TINY
1035 add_to_sclist(MMAIN, "M-[", do_find_bracket, 0, TRUE);
1036 add_to_sclist(MMAIN, "M--", do_scroll_up, 0, TRUE);
1037 add_to_sclist(MMAIN, "M-_", do_scroll_up, 0, TRUE);
1038 add_to_sclist(MMAIN, "M-+", do_scroll_down, 0, TRUE);
1039 add_to_sclist(MMAIN, "M-=", do_scroll_down, 0, TRUE);
1040#endif
1041
1042#ifdef ENABLE_MULTIBUFFER
1043 add_to_sclist(MMAIN, "M-<", switch_to_prev_buffer_void, 0, TRUE);
1044 add_to_sclist(MMAIN, "M-,", switch_to_prev_buffer_void, 0, TRUE);
1045 add_to_sclist(MMAIN, "M->", switch_to_next_buffer_void, 0, TRUE);
1046 add_to_sclist(MMAIN, "M-.", switch_to_next_buffer_void, 0, TRUE);
1047#endif
1048 add_to_sclist(MMAIN, "M-V", do_verbatim_input, 0, TRUE);
1049 add_to_sclist(MALL, "^I", do_tab, 0, TRUE);
1050 add_to_sclist(MALL, "^M", do_enter, 0, TRUE);
1051 add_to_sclist(MALL, "^D", do_delete, 0, TRUE);
1052 add_to_sclist(MALL, "^H", do_backspace, 0, TRUE);
1053 add_to_sclist(MALL, "M-T", do_cut_till_end, 0, TRUE);
1054#ifndef NANO_TINY
1055 add_to_sclist(MALL, "M-J", do_full_justify, 0, TRUE);
1056 add_to_sclist(MALL, "M-D", do_wordlinechar_count, 0, TRUE);
1057 add_to_sclist(MMAIN, "M-X", do_toggle, NO_HELP, TRUE);
1058 add_to_sclist(MMAIN, "M-C", do_toggle, CONST_UPDATE, TRUE);
1059 add_to_sclist(MMAIN, "M-O", do_toggle, MORE_SPACE, TRUE);
1060 add_to_sclist(MMAIN, "M-S", do_toggle, SMOOTH_SCROLL, TRUE);
1061 add_to_sclist(MMAIN, "M-P", do_toggle, WHITESPACE_DISPLAY, TRUE);
1062 add_to_sclist(MMAIN, "M-Y", do_toggle, NO_COLOR_SYNTAX, TRUE);
1063 add_to_sclist(MMAIN, "M-H", do_toggle, SMART_HOME, TRUE);
1064 add_to_sclist(MMAIN, "M-I", do_toggle, AUTOINDENT, TRUE);
1065 add_to_sclist(MMAIN, "M-K", do_toggle, CUT_TO_END, TRUE);
1066 add_to_sclist(MMAIN, "M-L", do_toggle, NO_WRAP, TRUE);
1067 add_to_sclist(MMAIN, "M-Q", do_toggle, TABS_TO_SPACES, TRUE);
1068 add_to_sclist(MMAIN, "M-B", do_toggle, BACKUP_FILE, TRUE);
1069 add_to_sclist(MMAIN, "M-F", do_toggle, MULTIBUFFER, TRUE);
1070 add_to_sclist(MMAIN, "M-M", do_toggle, USE_MOUSE, TRUE);
1071 add_to_sclist(MMAIN, "M-N", do_toggle, NO_CONVERT, TRUE);
1072 add_to_sclist(MMAIN, "M-Z", do_toggle, SUSPEND, TRUE);
1073#endif
1074 add_to_sclist((MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MWHEREISFILE|MGOTODIR),
1075 "^C", (void *) cancel_msg, 0, FALSE);
1076 add_to_sclist(MHELP, "^Y", do_page_up, 0, TRUE);
1077 add_to_sclist(MHELP, "F7", do_page_up, 0, TRUE);
1078 add_to_sclist(MHELP, "^V", do_page_down, 0, TRUE);
1079 add_to_sclist(MHELP, "F8", do_page_down, 0, TRUE);
1080 add_to_sclist(MHELP, "^X", do_exit, 0, TRUE);
1081 add_to_sclist(MHELP, "F2", do_exit, 0, TRUE);
1082 add_to_sclist(MWRITEFILE, "M-D", (void *) dos_format_msg, 0, FALSE);
1083 add_to_sclist(MWRITEFILE, "M-M", (void *) mac_format_msg, 0, FALSE);
1084 add_to_sclist(MWRITEFILE, "M-A", (void *) append_msg, 0, FALSE);
1085 add_to_sclist(MWRITEFILE, "M-P", (void *) prepend_msg, 0, FALSE);
1086 add_to_sclist(MWRITEFILE, "M-B", (void *) backup_file_msg, 0, FALSE);
1087 add_to_sclist(MWRITEFILE, "^T", (void *) to_files_msg, 0, FALSE);
1088 add_to_sclist(MINSERTFILE, "^T", (void *) to_files_msg, 0, FALSE);
1089 add_to_sclist(MINSERTFILE, "^X", (void *) ext_cmd_msg, 0, FALSE);
1090 add_to_sclist(MMAIN, "^L", total_refresh, 0, TRUE);
1091
1092#ifdef DEBUG
1093 print_sclist();
1094#endif
1095
Chris Allegrettadab017e2002-04-23 10:56:06 +00001096}
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001097
David Lawrence Ramseye6757b92006-04-19 13:36:56 +00001098/* Free the given shortcut. */
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001099void free_shortcutage(shortcut **shortcutage)
1100{
1101 assert(shortcutage != NULL);
David Lawrence Ramsey193b0e52005-06-06 18:41:17 +00001102
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001103 while (*shortcutage != NULL) {
1104 shortcut *ps = *shortcutage;
1105 *shortcutage = (*shortcutage)->next;
1106 free(ps);
1107 }
1108}
1109
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001110const subnfunc *sctofunc(sc *s)
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001111{
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001112 subnfunc *f;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001113
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001114 for (f = allfuncs; f != NULL && s->scfunc != f->scfunc; f = f->next)
1115 ;
1116
1117 return f;
1118}
1119
1120#ifndef NANO_TINY
1121/* Now lets come up with a single (hopefully)
1122 function to get a string for each flag */
1123char *flagtostr(int flag)
1124{
1125 switch (flag) {
1126 case NO_HELP:
1127 return N_("Help mode");
1128 case CONST_UPDATE:
1129 return N_("Constant cursor position display");
1130 case MORE_SPACE:
1131 return N_("Use of one more line for editing");
1132 case SMOOTH_SCROLL:
1133 return N_("Smooth scrolling");
1134 case WHITESPACE_DISPLAY:
1135 return N_("Whitespace display");
1136 case NO_COLOR_SYNTAX:
1137 return N_("Color syntax highlighting");
1138 case SMART_HOME:
1139 return N_("Smart home key");
1140 case AUTOINDENT:
1141 return N_("Auto indent");
1142 case CUT_TO_END:
1143 return N_("Cut to end");
1144 case NO_WRAP:
1145 return N_("Long line wrapping");
1146 case TABS_TO_SPACES:
1147 return N_("Conversion of typed tabs to spaces");
1148 case BACKUP_FILE:
1149 return N_("Backup files");
1150 case MULTIBUFFER:
1151 return N_("Multiple file buffers");
1152 case USE_MOUSE:
1153 return N_("Mouse support");
1154 case NO_CONVERT:
1155 return N_("No conversion from DOS/Mac format");
1156 case SUSPEND:
1157 return N_("Suspension");
1158 default:
1159 return "?????";
1160 }
1161}
1162
1163/* Interpret the string given by the rc file and return a
1164 shortcut struct, complete with proper value for execute */
1165sc *strtosc(int menu, char *input)
1166{
1167 sc *s;
1168
1169 s = (sc *)nmalloc(sizeof(sc));
1170 s->execute = TRUE; /* overridden as needed below */
1171
1172 if (!strcasecmp(input, "help"))
1173 s->scfunc = do_help_void;
1174 else if (!strcasecmp(input, "cancel")) {
1175 s->scfunc = (void *) cancel_msg;
1176 s->execute = FALSE;
1177 } else if (!strcasecmp(input, "exit"))
1178 s->scfunc = do_exit;
1179 else if (!strcasecmp(input, "writeout"))
1180 s->scfunc = do_writeout_void;
1181 else if (!strcasecmp(input, "justify"))
1182 s->scfunc = do_justify_void;
1183 else if (!strcasecmp(input, "insert"))
1184 s->scfunc = do_insertfile_void;
1185 else if (!strcasecmp(input, "whereis"))
1186 s->scfunc = do_search;
1187 else if (!strcasecmp(input, "up"))
1188 s->scfunc = do_page_up;
1189 else if (!strcasecmp(input, "down"))
1190 s->scfunc = do_page_down;
1191 else if (!strcasecmp(input, "cut"))
1192 s->scfunc = do_cut_text_void;
1193 else if (!strcasecmp(input, "uncut"))
1194 s->scfunc = do_uncut_text;
1195 else if (!strcasecmp(input, "curpos") ||
1196 !strcasecmp(input, "cursorpos"))
1197 s->scfunc = do_cursorpos_void;
1198 else if (!strcasecmp(input, "firstline"))
1199 s->scfunc = do_first_line;
1200 else if (!strcasecmp(input, "lastline"))
1201 s->scfunc = do_last_line;
1202 else if (!strcasecmp(input, "gotoline"))
1203 s->scfunc = do_gotolinecolumn_void;
1204 else if (!strcasecmp(input, "replace"))
1205 s->scfunc = do_replace;
1206 else if (!strcasecmp(input, "mark"))
1207 s->scfunc = do_mark;
1208 else if (!strcasecmp(input, "searchagain") ||
1209 !strcasecmp(input, "research"))
1210 s->scfunc = do_research;
1211 else if (!strcasecmp(input, "copytext"))
1212 s->scfunc = do_copy_text;
1213 else if (!strcasecmp(input, "indent"))
1214 s->scfunc = do_indent_void;
1215 else if (!strcasecmp(input, "unindent"))
1216 s->scfunc = do_unindent;
1217 else if (!strcasecmp(input, "right") ||
1218 !strcasecmp(input, "forward"))
1219 s->scfunc = do_right;
1220 else if (!strcasecmp(input, "left") ||
1221 !strcasecmp(input, "back"))
1222 s->scfunc = do_left;
1223 else if (!strcasecmp(input, "nextword"))
1224 s->scfunc = do_next_word_void;
1225 else if (!strcasecmp(input, "prevword"))
1226 s->scfunc = do_prev_word_void;
1227 else if (!strcasecmp(input, "up") ||
1228 !strcasecmp(input, "prevline"))
1229 s->scfunc = do_up_void;
1230 else if (!strcasecmp(input, "down") ||
1231 !strcasecmp(input, "nextline"))
1232 s->scfunc = do_down_void;
1233 else if (!strcasecmp(input, "home"))
1234 s->scfunc = do_home;
1235 else if (!strcasecmp(input, "end"))
1236 s->scfunc = do_end;
1237 else if (!strcasecmp(input, "beginpara"))
1238 s->scfunc = do_para_begin_void;
1239 else if (!strcasecmp(input, "endpara"))
1240 s->scfunc = do_para_end_void;
1241 else if (!strcasecmp(input, "findbracket"))
1242 s->scfunc = do_find_bracket;
1243 else if (!strcasecmp(input, "scrollup"))
1244 s->scfunc = do_scroll_up;
1245 else if (!strcasecmp(input, "scrolldown"))
1246 s->scfunc = do_scroll_down;
1247#ifdef ENABLE_MULTIBUFFER
1248 else if (!strcasecmp(input, "prevbuf"))
1249 s->scfunc = switch_to_prev_buffer_void;
1250 else if (!strcasecmp(input, "nextbuf"))
1251 s->scfunc = switch_to_next_buffer_void;
1252#endif
1253 else if (!strcasecmp(input, "verbatim"))
1254 s->scfunc = do_verbatim_input;
1255 else if (!strcasecmp(input, "tab"))
1256 s->scfunc = do_tab;
1257 else if (!strcasecmp(input, "enter"))
1258 s->scfunc = do_enter;
1259 else if (!strcasecmp(input, "delete"))
1260 s->scfunc = do_delete;
1261 else if (!strcasecmp(input, "fulljustify"))
1262 s->scfunc = do_full_justify;
1263 else if (!strcasecmp(input, "wordcount"))
1264 s->scfunc = do_wordlinechar_count;
1265 else if (!strcasecmp(input, "refresh"))
1266 s->scfunc = total_refresh;
1267 else if (!strcasecmp(input, "casesens")) {
1268 s->scfunc = (void *) case_sens_msg;
1269 s->execute = FALSE;
1270 } else if (!strcasecmp(input, "regexp") ||
1271 !strcasecmp(input, "regex")) {
1272 s->scfunc = (void *) regexp_msg;
1273 s->execute = FALSE;
1274 } else if (!strcasecmp(input, "prevhistory")) {
1275 s->scfunc = (void *) prev_history_msg;
1276 s->execute = FALSE;
1277 } else if (!strcasecmp(input, "nexthistory")) {
1278 s->scfunc = (void *) next_history_msg;
1279 s->execute = FALSE;
1280 } else if (!strcasecmp(input, "dontreplace")) {
1281 s->scfunc = (void *) no_replace_msg;
1282 s->execute = FALSE;
1283 } else if (!strcasecmp(input, "gototext")) {
1284 s->scfunc = (void *) gototext_msg;
1285 s->execute = FALSE;
1286 } else if (!strcasecmp(input, "browser") ||
1287 !strcasecmp(input, "tofiles")) {
1288 s->scfunc = (void *) to_files_msg;
1289 s->execute = FALSE;
1290 } else if (!strcasecmp(input, "dosformat")) {
1291 s->scfunc = (void *) dos_format_msg;
1292 s->execute = FALSE;
1293 } else if (!strcasecmp(input, "macformat")) {
1294 s->scfunc = (void *) mac_format_msg;
1295 s->execute = FALSE;
1296 } else if (!strcasecmp(input, "append")) {
1297 s->scfunc = (void *) append_msg;
1298 s->execute = FALSE;
1299 } else if (!strcasecmp(input, "prepend")) {
1300 s->scfunc = (void *) prepend_msg;
1301 s->execute = FALSE;
1302 } else if (!strcasecmp(input, "backup")) {
1303 s->scfunc = (void *) backup_file_msg;
1304 s->execute = FALSE;
1305#ifdef ENABLE_MULTIBUFFER
1306 } else if (!strcasecmp(input, "newbuffer")) {
1307 s->scfunc = (void *) new_buffer_msg;
1308 s->execute = FALSE;
1309#endif
1310 } else if (!strcasecmp(input, "firstfile")) {
1311 s->scfunc = (void *) first_file_msg;
1312 s->execute = FALSE;
1313 } else if (!strcasecmp(input, "lastfile")) {
1314 s->scfunc = (void *) last_file_msg;
1315 s->execute = FALSE;
1316 } else if (!strcasecmp(input, "nohelp") ||
1317 !strcasecmp(input, "nohelp")) {
1318 s->scfunc = (void *) do_toggle;
1319 s->execute = FALSE;
1320 s->toggle = NO_HELP;
1321 } else if (!strcasecmp(input, "constupdate")) {
1322 s->scfunc = (void *) do_toggle;
1323 s->execute = FALSE;
1324 s->toggle = CONST_UPDATE;
1325 } else if (!strcasecmp(input, "morespace")) {
1326 s->scfunc = (void *) do_toggle;
1327 s->execute = FALSE;
1328 s->toggle = MORE_SPACE;
1329 } else if (!strcasecmp(input, "smoothscroll")) {
1330 s->scfunc = (void *) do_toggle;
1331 s->execute = FALSE;
1332 s->toggle = SMOOTH_SCROLL;
1333 } else if (!strcasecmp(input, "whitesplacedisplay")) {
1334 s->scfunc = (void *) do_toggle;
1335 s->execute = FALSE;
1336 s->toggle = WHITESPACE_DISPLAY;
1337 } else if (!strcasecmp(input, "nosyntax")) {
1338 s->scfunc = (void *) do_toggle;
1339 s->execute = FALSE;
1340 s->toggle = NO_COLOR_SYNTAX;
1341 } else if (!strcasecmp(input, "smarthome")) {
1342 s->scfunc = (void *) do_toggle;
1343 s->execute = FALSE;
1344 s->toggle = SMART_HOME;
1345 } else if (!strcasecmp(input, "autoindent")) {
1346 s->scfunc = (void *) do_toggle;
1347 s->execute = FALSE;
1348 s->toggle = AUTOINDENT;
1349 } else if (!strcasecmp(input, "cuttoend")) {
1350 s->scfunc = (void *) do_toggle;
1351 s->execute = FALSE;
1352 s->toggle = CUT_TO_END;
1353 } else if (!strcasecmp(input, "nowrap")) {
1354 s->scfunc = (void *) do_toggle;
1355 s->execute = FALSE;
1356 s->toggle = NO_WRAP;
1357 } else if (!strcasecmp(input, "tabstospaces")) {
1358 s->scfunc = (void *) do_toggle;
1359 s->execute = FALSE;
1360 s->toggle = TABS_TO_SPACES;
1361 } else if (!strcasecmp(input, "backupfile")) {
1362 s->scfunc = (void *) do_toggle;
1363 s->execute = FALSE;
1364 s->toggle = BACKUP_FILE;
1365 } else if (!strcasecmp(input, "mutlibuffer")) {
1366 s->scfunc = (void *) do_toggle;
1367 s->execute = FALSE;
1368 s->toggle = MULTIBUFFER;
1369 } else if (!strcasecmp(input, "mouse")) {
1370 s->scfunc = (void *) do_toggle;
1371 s->execute = FALSE;
1372 s->toggle = USE_MOUSE;
1373 } else if (!strcasecmp(input, "noconvert")) {
1374 s->scfunc = (void *) do_toggle;
1375 s->execute = FALSE;
1376 s->toggle = NO_CONVERT;
1377 } else if (!strcasecmp(input, "suspend")) {
1378 s->scfunc = (void *) do_toggle;
1379 s->execute = FALSE;
1380 s->toggle = SUSPEND;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001381 } else {
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001382 free(s);
1383 return NULL;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001384 }
1385
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001386 return s;
1387
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001388}
1389
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001390/* Same thing as abnove but for the menu */
1391int strtomenu(char *input)
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001392{
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001393 if (!strcasecmp(input, "all"))
1394 return MALL;
1395 else if (!strcasecmp(input, "main"))
1396 return MMAIN;
1397 else if (!strcasecmp(input, "search"))
1398 return MWHEREIS;
1399 else if (!strcasecmp(input, "replace"))
1400 return MREPLACE;
1401 else if (!strcasecmp(input, "replace2") ||
1402 !strcasecmp(input, "replacewith"))
1403 return MREPLACE2;
1404 else if (!strcasecmp(input, "gotoline"))
1405 return MGOTOLINE;
1406 else if (!strcasecmp(input, "writeout"))
1407 return MWRITEFILE;
1408 else if (!strcasecmp(input, "insert"))
1409 return MINSERTFILE;
1410 else if (!strcasecmp(input, "externalcmd") ||
1411 !strcasecmp(input, "extcmd"))
1412 return MEXTCMD;
1413 else if (!strcasecmp(input, "help"))
1414 return MHELP;
1415 else if (!strcasecmp(input, "spell"))
1416 return MSPELL;
1417 else if (!strcasecmp(input, "browser"))
1418 return MBROWSER;
1419 else if (!strcasecmp(input, "whereisfile"))
1420 return MWHEREISFILE;
1421 else if (!strcasecmp(input, "gotodir"))
1422 return MGOTODIR;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001423
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001424 return -1;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001425}
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001426
1427
1428#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001429
David Lawrence Ramseye6757b92006-04-19 13:36:56 +00001430#ifdef DEBUG
1431/* This function is used to gracefully return all the memory we've used.
1432 * It should be called just before calling exit(). Practically, the
Chris Allegretta6232d662002-05-12 19:52:15 +00001433 * only effect is to cause a segmentation fault if the various data
1434 * structures got bolloxed earlier. Thus, we don't bother having this
Chris Allegretta6df90f52002-07-19 01:08:59 +00001435 * function unless debugging is turned on. */
Chris Allegretta6df90f52002-07-19 01:08:59 +00001436void thanks_for_all_the_fish(void)
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001437{
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001438 delwin(topwin);
1439 delwin(edit);
1440 delwin(bottomwin);
1441
Chris Allegretta7662c862003-01-13 01:35:15 +00001442#ifndef DISABLE_JUSTIFY
1443 if (quotestr != NULL)
1444 free(quotestr);
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +00001445#ifdef HAVE_REGEX_H
1446 regfree(&quotereg);
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001447 if (quoteerr != NULL)
1448 free(quoteerr);
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +00001449#endif
Chris Allegretta7662c862003-01-13 01:35:15 +00001450#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001451#ifndef NANO_TINY
David Lawrence Ramsey04e42a62004-02-28 16:24:31 +00001452 if (backup_dir != NULL)
1453 free(backup_dir);
1454#endif
Chris Allegretta2598c662002-03-28 01:59:34 +00001455#ifndef DISABLE_OPERATINGDIR
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001456 if (operating_dir != NULL)
1457 free(operating_dir);
1458 if (full_operating_dir != NULL)
1459 free(full_operating_dir);
1460#endif
1461 if (last_search != NULL)
1462 free(last_search);
1463 if (last_replace != NULL)
1464 free(last_replace);
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001465#ifndef DISABLE_SPELLER
1466 if (alt_speller != NULL)
1467 free(alt_speller);
1468#endif
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001469 if (answer != NULL)
1470 free(answer);
1471 if (cutbuffer != NULL)
Chris Allegretta7662c862003-01-13 01:35:15 +00001472 free_filestruct(cutbuffer);
David Lawrence Ramsey93c84052004-11-23 04:08:28 +00001473#ifndef DISABLE_JUSTIFY
1474 if (jusbuffer != NULL)
1475 free_filestruct(jusbuffer);
1476#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001477#ifndef NANO_TINY
David Lawrence Ramsey40e4acf2005-05-26 06:09:07 +00001478 /* Free the memory associated with each toggle. */
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001479 while (toggles != NULL) {
1480 toggle *t = toggles;
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001481
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001482 toggles = toggles->next;
1483 free(t);
1484 }
1485#endif
David Lawrence Ramsey5d8d0b12005-05-26 05:53:29 +00001486 /* Free the memory associated with each open file buffer. */
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +00001487 if (openfile != NULL)
David Lawrence Ramsey64661ac2005-07-08 19:57:25 +00001488 free_openfilestruct(openfile);
Chris Allegretta6df90f52002-07-19 01:08:59 +00001489#ifdef ENABLE_COLOR
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001490 if (syntaxstr != NULL)
1491 free(syntaxstr);
Chris Allegretta6df90f52002-07-19 01:08:59 +00001492 while (syntaxes != NULL) {
1493 syntaxtype *bill = syntaxes;
1494
1495 free(syntaxes->desc);
1496 while (syntaxes->extensions != NULL) {
1497 exttype *bob = syntaxes->extensions;
1498
1499 syntaxes->extensions = bob->next;
David Lawrence Ramsey2385c1a2005-07-29 21:42:08 +00001500 free(bob->ext_regex);
David Lawrence Ramsey7fc0ada2005-08-29 18:52:06 +00001501 if (bob->ext != NULL) {
1502 regfree(bob->ext);
1503 free(bob->ext);
1504 }
Chris Allegretta6df90f52002-07-19 01:08:59 +00001505 free(bob);
1506 }
1507 while (syntaxes->color != NULL) {
1508 colortype *bob = syntaxes->color;
1509
1510 syntaxes->color = bob->next;
David Lawrence Ramsey2385c1a2005-07-29 21:42:08 +00001511 free(bob->start_regex);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001512 if (bob->start != NULL) {
1513 regfree(bob->start);
1514 free(bob->start);
1515 }
David Lawrence Ramseyd2361f02005-07-14 18:33:51 +00001516 if (bob->end_regex != NULL)
1517 free(bob->end_regex);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001518 if (bob->end != NULL) {
Chris Allegrettace452fb2003-02-03 02:56:44 +00001519 regfree(bob->end);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001520 free(bob->end);
1521 }
Chris Allegretta6df90f52002-07-19 01:08:59 +00001522 free(bob);
1523 }
1524 syntaxes = syntaxes->next;
1525 free(bill);
1526 }
1527#endif /* ENABLE_COLOR */
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001528#ifndef NANO_TINY
David Lawrence Ramsey40e4acf2005-05-26 06:09:07 +00001529 /* Free the search and replace history lists. */
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001530 if (searchage != NULL)
1531 free_filestruct(searchage);
1532 if (replaceage != NULL)
1533 free_filestruct(replaceage);
Chris Allegretta5beed502003-01-05 20:41:21 +00001534#endif
David Lawrence Ramseya27bd652004-08-17 05:23:38 +00001535#ifdef ENABLE_NANORC
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001536 if (homedir != NULL)
1537 free(homedir);
David Lawrence Ramseya27bd652004-08-17 05:23:38 +00001538#endif
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001539}
Chris Allegretta6232d662002-05-12 19:52:15 +00001540#endif /* DEBUG */
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001541