blob: 49633589748bc67ea977c752c28a393a35f05175 [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>
Chris Allegrettaeb643142008-03-12 04:44:14 +000026#include <string.h>
Chris Allegretta79a33bb2008-03-05 07:34:01 +000027#include <strings.h>
28#include "assert.h"
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000029#include "proto.h"
30
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +000031/* Global variables. */
32#ifndef NANO_TINY
David Lawrence Ramsey1c5af642006-05-10 15:15:06 +000033sigjmp_buf jump_buf;
David Lawrence Ramseyb6fb6882006-11-27 07:28:52 +000034 /* Used to return to either main() or the unjustify routine in
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +000035 * do_justify() after a SIGWINCH. */
David Lawrence Ramsey1c5af642006-05-10 15:15:06 +000036bool jump_buf_main = FALSE;
37 /* Have we set jump_buf so that we return to main() after a
38 * SIGWINCH? */
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +000039#endif
40
David Lawrence Ramseyf5b256b2003-10-03 20:26:25 +000041#ifndef DISABLE_WRAPJUSTIFY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000042ssize_t fill = 0;
43 /* The column where we will wrap lines. */
David Lawrence Ramsey691698a2005-07-24 19:57:51 +000044ssize_t wrap_at = -CHARS_FROM_EOL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000045 /* The position where we will wrap lines. fill is equal to this
46 * if it's greater than zero, and equal to (COLS + this) if it
47 * isn't. */
David Lawrence Ramseyf5b256b2003-10-03 20:26:25 +000048#endif
49
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000050char *last_search = NULL;
51 /* The last string we searched for. */
52char *last_replace = NULL;
53 /* The last replacement string we searched for. */
Chris Allegretta6df90f52002-07-19 01:08:59 +000054
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000055long flags = 0;
56 /* Our flag containing the states of all global options. */
57WINDOW *topwin;
58 /* The top portion of the window, where we display the version
59 * number of nano, the name of the current file, and whether the
60 * current file has been modified. */
61WINDOW *edit;
David Lawrence Ramseyb159f942006-07-28 17:06:27 +000062 /* The middle portion of the window, i.e. the edit window, where
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000063 * we display the current file we're editing. */
64WINDOW *bottomwin;
65 /* The bottom portion of the window, where we display statusbar
66 * messages, the statusbar prompt, and a list of shortcuts. */
67int editwinrows = 0;
68 /* How many rows does the edit window take up? */
David Lawrence Ramsey5db0cdc2002-06-28 22:45:14 +000069
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000070filestruct *cutbuffer = NULL;
71 /* The buffer where we store cut text. */
David Lawrence Ramsey93c84052004-11-23 04:08:28 +000072#ifndef DISABLE_JUSTIFY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000073filestruct *jusbuffer = NULL;
74 /* The buffer where we store unjustified text. */
David Lawrence Ramsey93c84052004-11-23 04:08:28 +000075#endif
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000076partition *filepart = NULL;
77 /* The partition where we store a portion of the current
78 * file. */
David Lawrence Ramsey64661ac2005-07-08 19:57:25 +000079openfilestruct *openfile = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000080 /* The list of all open file buffers. */
Chris Allegretta2d7893d2001-07-11 02:08:33 +000081
David Lawrence Ramseyd89617f2006-01-06 21:51:10 +000082#ifndef NANO_TINY
83char *matchbrackets = NULL;
84 /* The opening and closing brackets that can be found by bracket
85 * searches. */
86#endif
87
David Lawrence Ramseyebe34252005-11-15 03:17:35 +000088#if !defined(NANO_TINY) && defined(ENABLE_NANORC)
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000089char *whitespace = NULL;
90 /* The characters used when displaying the first characters of
91 * tabs and spaces. */
92int whitespace_len[2];
93 /* The length of these characters. */
David Lawrence Ramsey89bb9372004-05-29 16:47:52 +000094#endif
95
Chris Allegrettae4f940d2002-03-03 22:36:36 +000096#ifndef DISABLE_JUSTIFY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000097char *punct = NULL;
98 /* The closing punctuation that can end sentences. */
99char *brackets = NULL;
100 /* The closing brackets that can follow closing punctuation and
101 * can end sentences. */
102char *quotestr = NULL;
103 /* The quoting string. The default value is set in main(). */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000104#ifdef HAVE_REGEX_H
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000105regex_t quotereg;
106 /* The compiled regular expression from the quoting string. */
107int quoterc;
David Lawrence Ramsey88165642006-05-22 18:30:09 +0000108 /* Whether it was compiled successfully. */
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000109char *quoteerr = NULL;
110 /* The error message, if it didn't. */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000111#else
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000112size_t quotelen;
113 /* The length of the quoting string in bytes. */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000114#endif
Chris Allegretta6df90f52002-07-19 01:08:59 +0000115#endif
Chris Allegrettae4f940d2002-03-03 22:36:36 +0000116
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000117char *answer = NULL;
David Lawrence Ramsey6335fb52007-01-01 05:15:32 +0000118 /* The answer string used by the statusbar prompt. */
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000119
120ssize_t tabsize = -1;
121 /* The width of a tab in spaces. The default value is set in
122 * main(). */
123
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000124#ifndef NANO_TINY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000125char *backup_dir = NULL;
126 /* The directory where we store backup files. */
David Lawrence Ramsey04e42a62004-02-28 16:24:31 +0000127#endif
Chris Allegrettae1f14522001-09-19 03:19:43 +0000128#ifndef DISABLE_OPERATINGDIR
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000129char *operating_dir = NULL;
130 /* The relative path to the operating directory, which we can't
131 * move outside of. */
132char *full_operating_dir = NULL;
133 /* The full path to it. */
Chris Allegrettae1f14522001-09-19 03:19:43 +0000134#endif
135
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000136#ifndef DISABLE_SPELLER
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000137char *alt_speller = NULL;
138 /* The command to use for the alternate spell checker. */
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000139#endif
140
Chris Allegretta8ce24132001-04-30 11:28:46 +0000141#ifdef ENABLE_COLOR
David Lawrence Ramsey9b13ff32002-12-22 16:30:00 +0000142syntaxtype *syntaxes = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000143 /* The global list of color syntaxes. */
David Lawrence Ramsey9b13ff32002-12-22 16:30:00 +0000144char *syntaxstr = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000145 /* The color syntax name specified on the command line. */
Chris Allegretta8ce24132001-04-30 11:28:46 +0000146#endif
147
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000148const shortcut *currshortcut;
149 /* The current shortcut list we're using. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000150int currmenu;
151 /* The currently loaded menu */
152
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000153#ifndef NANO_TINY
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000154toggle *toggles = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000155 /* The global toggle list. */
Chris Allegrettaf0b26df2001-01-20 22:18:18 +0000156#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000157
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000158sc *sclist = NULL;
159 /* New shortcut key struct */
160subnfunc *allfuncs = NULL;
161 /* New struct for the function list */
162
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000163#ifndef NANO_TINY
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000164filestruct *search_history = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000165 /* The search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000166filestruct *searchage = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000167 /* The top of the search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000168filestruct *searchbot = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000169 /* The bottom of the search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000170filestruct *replace_history = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000171 /* The replace string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000172filestruct *replaceage = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000173 /* The top of the replace string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000174filestruct *replacebot = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000175 /* The bottom of the replace string history list. */
Chris Allegretta5beed502003-01-05 20:41:21 +0000176#endif
177
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +0000178/* Regular expressions. */
Chris Allegretta805c26d2000-09-06 13:39:17 +0000179#ifdef HAVE_REGEX_H
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000180regex_t search_regexp;
181 /* The compiled regular expression to use in searches. */
182regmatch_t regmatches[10];
183 /* The match positions for parenthetical subexpressions, 10
184 * maximum, used in regular expression searches. */
Chris Allegretta6df90f52002-07-19 01:08:59 +0000185#endif
Chris Allegretta3533a342002-03-24 23:19:32 +0000186
David Lawrence Ramsey4d72de72006-04-12 15:27:40 +0000187int reverse_attr = A_REVERSE;
188 /* The curses attribute we use for reverse video. */
Chris Allegrettaa0d89972003-02-03 03:32:08 +0000189
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000190char *homedir = NULL;
David Lawrence Ramseyc1c818e2006-05-14 18:22:01 +0000191 /* The user's home directory, from $HOME or /etc/passwd. */
David Lawrence Ramseya27bd652004-08-17 05:23:38 +0000192
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000193/* Return the number of entries in the shortcut list s for a given menu. */
194size_t length_of_list(int menu)
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000195{
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000196 subnfunc *f;
David Lawrence Ramseyebd0d7c2004-07-01 18:59:52 +0000197 size_t i = 0;
David Lawrence Ramseye21adfa2002-09-13 18:14:04 +0000198
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000199 for (f = allfuncs; f != NULL; f = f->next)
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000200 if ((f->menus & menu) != 0
201#ifndef DISABLE_HELP
202 && strlen(f->help) > 0
203#endif
204 ) {
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000205 i++;
206 }
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000207 return i;
208}
209
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000210/* Set type of function based on the string */
211function_type strtokeytype(char *str)
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000212{
Chris Allegretta17436ce2008-03-11 03:03:53 +0000213 if (str[0] == 'M' || str[0] == 'm')
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000214 return META;
Chris Allegretta17436ce2008-03-11 03:03:53 +0000215 else if (str[0] == '^')
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000216 return CONTROL;
Chris Allegretta17436ce2008-03-11 03:03:53 +0000217 else if (str[0] == 'F' || str[0] == 'F')
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000218 return FKEY;
Chris Allegretta17436ce2008-03-11 03:03:53 +0000219 else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000220 return RAW;
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000221}
222
223/* Add a string to the new function list strict.
224 Does not allow updates, yet anyway */
225void add_to_funcs(void *func, int menus, const char *desc, const char *help,
226 bool blank_after, bool viewok)
227{
228 subnfunc *f;
229
230 if (allfuncs == NULL) {
231 allfuncs = nmalloc(sizeof(subnfunc));
232 f = allfuncs;
233 } else {
234 for (f = allfuncs; f->next != NULL; f = f->next)
235 ;
236 f->next = (subnfunc *)nmalloc(sizeof(subnfunc));
237 f = f->next;
238 }
239 f->next = NULL;
240 f->scfunc = func;
241 f->menus = menus;
242 f->desc = desc;
243 f->viewok = viewok;
244#ifndef NANO_TINY
245 f->help = help;
246 f->blank_after = blank_after;
247#endif
248
249#ifdef DEBUG
250 fprintf(stderr, "Added func \"%s\"", f->desc);
251#endif
252}
253
254const sc *first_sc_for(int menu, void *func) {
255 const sc *s;
Chris Allegrettab775c072008-03-09 05:07:37 +0000256 const sc *metasc = NULL;
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000257
258 for (s = sclist; s != NULL; s = s->next) {
259 if ((s->menu & menu) && s->scfunc == func) {
Chris Allegrettab775c072008-03-09 05:07:37 +0000260 /* try to use a meta sequence as a last resort. Otherwise
261 we will run into problems when we try and handle things like
262 the arrow keys, home, etc, if for some reason the user bound
263 them to a meta sequence first *shrug* */
264 if (s->type == META) {
265 metasc = s;
266 continue;
267 } /* otherwise it was something else, use it */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000268 return s;
269 }
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000270 }
271
Chris Allegrettab775c072008-03-09 05:07:37 +0000272 /* If we're here we may have found only meta sequences, if so use one */
273 if (metasc)
Chris Allegretta17436ce2008-03-11 03:03:53 +0000274 return metasc;
Chris Allegrettab775c072008-03-09 05:07:37 +0000275
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000276#ifdef DEBUG
Chris Allegrettae347efb2008-03-09 02:52:40 +0000277 fprintf(stderr, "Whoops, returning null given func %ld in menu %d\n", (long) func, menu);
David Lawrence Ramseybd28ee42006-07-25 21:13:30 +0000278#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000279 /* Otherwise... */
280 return NULL;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000281}
282
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000283
284/* Add a string to the new shortcut list implementation
285 Allows updates to existing entries in the list */
286void add_to_sclist(int menu, char *scstring, void *func, int toggle, int execute)
287{
288 sc *s;
289
290 if (sclist == NULL) {
291 sclist = nmalloc(sizeof(sc));
292 s = sclist;
293 s->next = NULL;
294 } else {
295 for (s = sclist; s->next != NULL; s = s->next)
296 if (s->menu == menu && s->keystr == scstring)
297 break;
298
299 if (s->menu != menu || s->keystr != scstring) { /* i.e. this is not a replace... */
300#ifdef DEBUG
301 fprintf(stderr, "No match found...\n");
302#endif
303 s->next = (sc *)nmalloc(sizeof(sc));
304 s = s->next;
305 s->next = NULL;
306 }
307 }
308
309 s->type = strtokeytype(scstring);
310 s->menu = menu;
311 s->toggle = toggle;
312 s->keystr = scstring;
313 s->scfunc = func;
314 s->execute = execute;
315 assign_keyinfo(s);
316
317#ifdef DEBUG
318 fprintf(stderr, "list val = %d\n", (int) s->menu);
319 fprintf(stderr, "Hey, set sequence to %d for shortcut \"%s\"\n", s->seq, scstring);
320#endif
321}
322
Chris Allegrettae347efb2008-03-09 02:52:40 +0000323/* Return the given menu's first shortcut sequence, or the default value
324 (2nd arg). Assumes currmenu for the menu to check*/
325int sc_seq_or (void *func, int defaultval)
326{
327 const sc *s = first_sc_for(currmenu, func);
328
329 if (s)
330 return s->seq;
331 /* else */
332 return defaultval;
333
334}
335
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000336/* Assign the info to the shortcut struct
337 Assumes keystr is already assigned, naturally */
338void assign_keyinfo(sc *s)
339{
340 if (s->type == CONTROL) {
341 assert(strlen(s->keystr) > 1);
342 s->seq = s->keystr[1] - 64;
343 } else if (s->type == META) {
344 assert(strlen(s->keystr) > 2);
345 s->seq = tolower((int) s->keystr[2]);
346 } else if (s->type == FKEY) {
347 assert(strlen(s->keystr) > 1);
348 s->seq = KEY_F0 + atoi(&s->keystr[1]);
349 } else /* raw */
350 s->seq = (int) s->keystr[0];
Chris Allegretta9b422202008-03-05 17:15:33 +0000351
352 /* Override some keys which don't bind as nicely as we'd like */
353 if (s->type == CONTROL && (!strcasecmp(&s->keystr[1], "space")))
354 s->seq = 0;
355 else if (s->type == META && (!strcasecmp(&s->keystr[2], "space")))
356 s->seq = (int) ' ';
Chris Allegretta17436ce2008-03-11 03:03:53 +0000357 else if (s->type == RAW && (!strcasecmp(s->keystr, "kup")))
358 s->seq = KEY_UP;
359 else if (s->type == RAW && (!strcasecmp(s->keystr, "kdown")))
360 s->seq = KEY_DOWN;
361 else if (s->type == RAW && (!strcasecmp(s->keystr, "kleft")))
362 s->seq = KEY_LEFT;
363 else if (s->type == RAW && (!strcasecmp(s->keystr, "kright")))
364 s->seq = KEY_RIGHT;
365 else if (s->type == RAW && (!strcasecmp(s->keystr, "kinsert")))
366 s->seq = KEY_IC;
367 else if (s->type == RAW && (!strcasecmp(s->keystr, "kdel")))
368 s->seq = KEY_DC;
Chris Allegrettaeb643142008-03-12 04:44:14 +0000369 else if (s->type == RAW && (!strcasecmp(s->keystr, "kbsp")))
370 s->seq = KEY_BACKSPACE;
371 else if (s->type == RAW && (!strcasecmp(s->keystr, "kenter")))
372 s->seq = KEY_ENTER;
Chris Allegretta17436ce2008-03-11 03:03:53 +0000373 else if (s->type == RAW && (!strcasecmp(s->keystr, "kpup")))
374 s->seq = KEY_PPAGE;
375 else if (s->type == RAW && (!strcasecmp(s->keystr, "kpdown")))
376 s->seq = KEY_NPAGE;
377#ifdef KEY_HOME
378 else if (s->type == RAW && (!strcasecmp(s->keystr, "khome")))
379 s->seq = KEY_HOME;
380#endif
381#ifdef KEY_END
382 else if (s->type == RAW && (!strcasecmp(s->keystr, "kend")))
383 s->seq = KEY_END;
384#endif
Chris Allegretta9b422202008-03-05 17:15:33 +0000385
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000386}
387
388#ifdef DEBUG
389
390void print_sclist(void)
391{
392 sc *s;
393 const subnfunc *f;
394
395 for (s = sclist; s->next != NULL; s = s->next) {
396 f = sctofunc(s);
397 if (f)
Chris Allegrettae347efb2008-03-09 02:52:40 +0000398 fprintf(stderr, "Shortcut \"%s\", function: %s, menus %d\n", s->keystr, f->desc, f->menus);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000399 else
400 fprintf(stderr, "Hmm, didnt find a func for \"%s\"\n", s->keystr);
401 }
402
403}
404#endif
405
406
407/* Stuff we need to make at least static here so we can access it below */
408const char *cancel_msg = N_("Cancel");
409
410#ifndef NANO_TINY
411const char *case_sens_msg = N_("Case Sens");
412const char *backwards_msg = N_("Backwards");
413#endif
414
415#ifdef HAVE_REGEX_H
416const char *regexp_msg = N_("Regexp");
417#endif
418
419/* Stuff we want to just stun out if we're in TINY mode */
420#ifdef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000421const char *gototext_msg = "";
Chris Allegrettae347efb2008-03-09 02:52:40 +0000422const char *do_para_begin_msg = "";
423const char *do_para_end_msg = "";
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000424const char *case_sens_msg = "";
425const char *backwards_msg = "";
426const char *do_cut_till_end = "";
427const char *dos_format_msg = "";
428const char *mac_format_msg = "";
429const char *append_msg = "";
430const char *prepend_msg = "";
431const char *backup_file_msg = "";
432const char *to_files_msg = "";
Chris Allegrettae347efb2008-03-09 02:52:40 +0000433const char *first_file_msg = "";
434const char *whereis_next_msg = "";
Chris Allegrettae347efb2008-03-09 02:52:40 +0000435const char *last_file_msg = "";
436const char *new_buffer_msg = "";
437const char *goto_dir_msg;
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000438const char *ext_cmd_msg = "";
Chris Allegrettae347efb2008-03-09 02:52:40 +0000439
440#else
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000441/* TRANSLATORS: Try to keep the next five strings at most 10 characters. */
Chris Allegrettae347efb2008-03-09 02:52:40 +0000442const char *prev_history_msg = N_("PrevHstory");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000443const char *next_history_msg = N_("NextHstory");
444const char *replace_msg = N_("Replace");
445const char *no_replace_msg = N_("No Replace");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000446const char *gototext_msg = N_("Go To Text");
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000447/* TRANSLATORS: Try to keep the next three strings at most 12 characters. */
Chris Allegrettae347efb2008-03-09 02:52:40 +0000448const char *whereis_next_msg = N_("WhereIs Next");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000449#ifndef DISABLE_BROWSER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000450const char *first_file_msg = N_("First File");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000451const char *last_file_msg = N_("Last File");
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000452/* TRANSLATORS: Try to keep the next nine strings at most 16 characters. */
453const char *to_files_msg = N_("To Files");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000454#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000455const char *dos_format_msg = N_("DOS Format");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000456const char *mac_format_msg = N_("Mac Format");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000457const char *append_msg = N_("Append");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000458const char *prepend_msg = N_("Prepend");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000459const char *backup_file_msg = N_("Backup File");
Chris Allegrettaeb643142008-03-12 04:44:14 +0000460const char *ext_cmd_msg = N_("Execute Command");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000461#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000462const char *new_buffer_msg = N_("New Buffer");
463#endif
Chris Allegrettae347efb2008-03-09 02:52:40 +0000464const char *goto_dir_msg = N_("Go To Dir");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000465
Chris Allegrettae347efb2008-03-09 02:52:40 +0000466#endif /* NANO_TINY */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000467
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000468/* Initialize all shortcut lists. If unjustify is TRUE, replace the
469 * Uncut shortcut in the main shortcut list with UnJustify. */
David Lawrence Ramsey1f1ebb82004-11-11 21:50:01 +0000470void shortcut_init(bool unjustify)
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000471{
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000472 /* TRANSLATORS: Try to keep the following strings at most 10 characters. */
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000473 const char *get_help_msg = N_("Get Help");
474 const char *exit_msg = N_("Exit");
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000475 const char *whereis_msg = N_("Where Is");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000476 const char *prev_page_msg = N_("Prev Page");
477 const char *next_page_msg = N_("Next Page");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000478 const char *first_line_msg = N_("First Line");
479 const char *last_line_msg = N_("Last Line");
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000480 const char *suspend_msg = N_("Suspend");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000481#ifndef DISABLE_JUSTIFY
482 const char *beg_of_par_msg = N_("Beg of Par");
483 const char *end_of_par_msg = N_("End of Par");
484 const char *fulljstify_msg = N_("FullJstify");
485#endif
David Lawrence Ramsey81378762006-04-24 20:53:43 +0000486 const char *refresh_msg = N_("Refresh");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000487 const char *insert_file_msg = N_("Insert File");
Chris Allegrettae347efb2008-03-09 02:52:40 +0000488 const char *go_to_line_msg = N_("Go To Line");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000489
Chris Allegrettadab017e2002-04-23 10:56:06 +0000490#ifndef DISABLE_HELP
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000491 /* TRANSLATORS: The next long series of strings are shortcut descriptions;
492 * they are best kept shorter than 56 characters, but may be longer. */
David Lawrence Ramsey804e1072006-03-29 19:43:32 +0000493 const char *nano_cancel_msg = N_("Cancel the current function");
David Lawrence Ramsey57c9afb2006-04-14 20:21:45 +0000494 const char *nano_help_msg = N_("Display this help text");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000495 const char *nano_exit_msg =
Chris Allegretta7162e3d2002-04-06 05:02:14 +0000496#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000497 N_("Close the current file buffer / Exit from nano")
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000498#else
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000499 N_("Exit from nano")
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000500#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000501 ;
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000502 const char *nano_writeout_msg =
503 N_("Write the current file to disk");
Chris Allegretta90ee8ee2008-03-20 04:45:55 +0000504#ifndef DISABLE_JUSTIFY
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000505 const char *nano_justify_msg = N_("Justify the current paragraph");
Chris Allegretta90ee8ee2008-03-20 04:45:55 +0000506#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000507 const char *nano_insert_msg =
508 N_("Insert another file into the current one");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000509 const char *nano_whereis_msg =
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000510 N_("Search for a string or a regular expression");
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000511 const char *nano_prevpage_msg = N_("Go to previous screen");
512 const char *nano_nextpage_msg = N_("Go to next screen");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000513 const char *nano_cut_msg =
514 N_("Cut the current line and store it in the cutbuffer");
515 const char *nano_uncut_msg =
516 N_("Uncut from the cutbuffer into the current line");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000517 const char *nano_cursorpos_msg =
David Lawrence Ramseyf50bd4b2006-04-14 20:15:44 +0000518 N_("Display the position of the cursor");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000519 const char *nano_spell_msg =
520 N_("Invoke the spell checker, if available");
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000521 const char *nano_replace_msg =
522 N_("Replace a string or a regular expression");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000523 const char *nano_gotoline_msg = N_("Go to line and column number");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000524#ifndef NANO_TINY
David Lawrence Ramsey8381fdd2004-11-01 22:40:02 +0000525 const char *nano_mark_msg = N_("Mark text at the cursor position");
526 const char *nano_whereis_next_msg = N_("Repeat last search");
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000527 const char *nano_copy_msg =
528 N_("Copy the current line and store it in the cutbuffer");
David Lawrence Ramseyaee00d42006-07-05 18:42:22 +0000529 const char *nano_indent_msg = N_("Indent the current line");
530 const char *nano_unindent_msg = N_("Unindent the current line");
David Lawrence Ramsey4b4b6082004-11-01 22:54:40 +0000531#endif
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000532 const char *nano_forward_msg = N_("Go forward one character");
533 const char *nano_back_msg = N_("Go back one character");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000534#ifndef NANO_TINY
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000535 const char *nano_nextword_msg = N_("Go forward one word");
536 const char *nano_prevword_msg = N_("Go back one word");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000537#endif
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000538 const char *nano_prevline_msg = N_("Go to previous line");
539 const char *nano_nextline_msg = N_("Go to next line");
540 const char *nano_home_msg = N_("Go to beginning of current line");
541 const char *nano_end_msg = N_("Go to end of current line");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000542#ifndef DISABLE_JUSTIFY
543 const char *nano_parabegin_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000544 N_("Go to beginning of paragraph; then of previous paragraph");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000545 const char *nano_paraend_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000546 N_("Go just beyond end of paragraph; then of next paragraph");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000547#endif
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000548 const char *nano_firstline_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000549 N_("Go to the first line of the file");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000550 const char *nano_lastline_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000551 N_("Go to the last line of the file");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000552#ifndef NANO_TINY
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000553 const char *nano_bracket_msg = N_("Go to the matching bracket");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000554 const char *nano_scrollup_msg =
555 N_("Scroll up one line without scrolling the cursor");
556 const char *nano_scrolldown_msg =
557 N_("Scroll down one line without scrolling the cursor");
558#endif
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000559#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +0000560 const char *nano_prevfile_msg =
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000561 N_("Switch to the previous file buffer");
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +0000562 const char *nano_nextfile_msg =
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000563 N_("Switch to the next file buffer");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000564#endif
David Lawrence Ramsey40e05722006-04-23 19:21:12 +0000565 const char *nano_verbatim_msg =
David Lawrence Ramsey939d4232006-04-24 21:00:17 +0000566 N_("Insert the next keystroke verbatim");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000567 const char *nano_tab_msg =
David Lawrence Ramseybf784202006-04-29 13:59:04 +0000568 N_("Insert a tab at the cursor position");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000569 const char *nano_enter_msg =
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000570 N_("Insert a newline at the cursor position");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000571 const char *nano_delete_msg =
572 N_("Delete the character under the cursor");
573 const char *nano_backspace_msg =
574 N_("Delete the character to the left of the cursor");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000575#ifndef NANO_TINY
David Lawrence Ramsey295d1722005-01-01 07:43:32 +0000576 const char *nano_cut_till_end_msg =
577 N_("Cut from the cursor position to the end of the file");
578#endif
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000579#ifndef DISABLE_JUSTIFY
580 const char *nano_fulljustify_msg = N_("Justify the entire file");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000581#endif
David Lawrence Ramseyc5c52302005-11-15 23:45:29 +0000582#ifndef NANO_TINY
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000583 const char *nano_wordcount_msg =
584 N_("Count the number of words, lines, and characters");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000585#endif
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000586 const char *nano_refresh_msg =
587 N_("Refresh (redraw) the current screen");
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000588 const char *nano_suspend_msg =
589 N_("Suspend the editor (if suspend is enabled)");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000590#ifndef NANO_TINY
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000591 const char *nano_case_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000592 N_("Toggle the case sensitivity of the search");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000593 const char *nano_reverse_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000594 N_("Reverse the direction of the search");
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000595#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000596#ifdef HAVE_REGEX_H
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000597 const char *nano_regexp_msg =
598 N_("Toggle the use of regular expressions");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000599#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000600#ifndef NANO_TINY
David Lawrence Ramsey305d8892006-05-24 19:48:03 +0000601 const char *nano_prev_history_msg =
David Lawrence Ramsey7b0531a2006-07-31 01:30:31 +0000602 N_("Recall the previous search/replace string");
David Lawrence Ramsey305d8892006-05-24 19:48:03 +0000603 const char *nano_next_history_msg =
David Lawrence Ramsey7b0531a2006-07-31 01:30:31 +0000604 N_("Recall the next search/replace string");
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000605#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000606#ifndef DISABLE_BROWSER
607 const char *nano_tofiles_msg = N_("Go to file browser");
608#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000609#ifndef NANO_TINY
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000610 const char *nano_dos_msg = N_("Toggle the use of DOS format");
611 const char *nano_mac_msg = N_("Toggle the use of Mac format");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000612#endif
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000613 const char *nano_append_msg = N_("Toggle appending");
614 const char *nano_prepend_msg = N_("Toggle prepending");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000615#ifndef NANO_TINY
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000616 const char *nano_backup_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000617 N_("Toggle backing up of the original file");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000618 const char *nano_execute_msg = N_("Execute external command");
619#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000620#if !defined(NANO_TINY) && defined(ENABLE_MULTIBUFFER)
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000621 const char *nano_multibuffer_msg =
622 N_("Toggle the use of a new buffer");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000623#endif
624#ifndef DISABLE_BROWSER
David Lawrence Ramseyc41d4282004-07-23 12:51:40 +0000625 const char *nano_exitbrowser_msg = N_("Exit from the file browser");
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000626 const char *nano_firstfile_msg =
627 N_("Go to the first file in the list");
628 const char *nano_lastfile_msg =
629 N_("Go to the last file in the list");
David Lawrence Ramseyc41d4282004-07-23 12:51:40 +0000630 const char *nano_gotodir_msg = N_("Go to directory");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000631
Chris Allegretta2bef1822001-09-28 19:53:11 +0000632#endif
Chris Allegrettadab017e2002-04-23 10:56:06 +0000633#endif /* !DISABLE_HELP */
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000634
David Lawrence Ramseyea43a1d2004-03-02 22:52:57 +0000635#ifndef DISABLE_HELP
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000636#define IFSCHELP(help) help
David Lawrence Ramseyea43a1d2004-03-02 22:52:57 +0000637#else
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000638#define IFSCHELP(help) ""
Chris Allegrettadab017e2002-04-23 10:56:06 +0000639#endif
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000640
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000641 while (allfuncs != NULL) {
642 subnfunc *f = allfuncs;
643 allfuncs = (allfuncs)->next;
644 free(f);
645 }
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000646
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000647#ifndef DISABLE_HELP
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000648 add_to_funcs(do_help_void, MALL, get_help_msg, nano_help_msg,
649 FALSE, VIEW);
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000650#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000651
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000652 add_to_funcs((void *) cancel_msg,
Chris Allegrettacc593832008-03-19 02:32:48 +0000653 (MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MWHEREISFILE|MGOTODIR|MYESNO),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000654 cancel_msg, IFSCHELP(nano_cancel_msg), FALSE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000655
656 add_to_funcs(do_exit, MMAIN,
Chris Allegretta355fbe52001-07-14 19:32:47 +0000657#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000658 /* TRANSLATORS: Try to keep this at most 10 characters. */
David Lawrence Ramsey017dde22006-03-24 05:28:03 +0000659 openfile != NULL && openfile != openfile->next ? N_("Close") :
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000660#endif
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000661 exit_msg, IFSCHELP(nano_exit_msg), FALSE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000662
Chris Allegretta90ee8ee2008-03-20 04:45:55 +0000663 add_to_funcs(do_exit, MHELP, exit_msg, IFSCHELP(nano_exit_msg), FALSE, VIEW);
664
665 add_to_funcs(do_exit, MBROWSER, exit_msg, IFSCHELP(nano_exitbrowser_msg), FALSE, 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_writeout_void, MMAIN, N_("WriteOut"),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000669 IFSCHELP(nano_writeout_msg), FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000670
David Lawrence Ramseya539fce2004-06-29 00:43:56 +0000671#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000672 /* TRANSLATORS: Try to keep this at most 10 characters. */
673 add_to_funcs(do_justify_void, MMAIN, N_("Justify"),
674 nano_justify_msg, TRUE, NOVIEW);
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000675#endif
Chris Allegretta32da4562002-01-02 15:12:21 +0000676
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000677 /* We allow inserting files in view mode if multibuffers are
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000678 * available, so that we can view multiple files. If we're using
679 * restricted mode, inserting files is disabled, since it allows
680 * reading from or writing to files not specified on the command
681 * line. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000682 add_to_funcs(!ISSET(RESTRICTED) ? do_insertfile_void : nano_disabled_msg,
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000683 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000684 MMAIN, N_("Read File"), IFSCHELP(nano_insert_msg), FALSE,
Chris Allegretta32da4562002-01-02 15:12:21 +0000685#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000686 VIEW);
Chris Allegretta32da4562002-01-02 15:12:21 +0000687#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000688 NOVIEW);
Chris Allegretta32da4562002-01-02 15:12:21 +0000689#endif
Chris Allegrettaaf6414a2001-02-11 19:05:05 +0000690
Chris Allegrettae347efb2008-03-09 02:52:40 +0000691 add_to_funcs(do_search, MMAIN|MBROWSER, whereis_msg,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000692 IFSCHELP(nano_whereis_msg), FALSE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000693
Chris Allegrettae347efb2008-03-09 02:52:40 +0000694 add_to_funcs(do_page_up, MMAIN|MHELP,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000695 prev_page_msg, IFSCHELP(nano_prevpage_msg), FALSE, VIEW);
Chris Allegrettae347efb2008-03-09 02:52:40 +0000696 add_to_funcs(do_page_down, MMAIN|MHELP,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000697 next_page_msg, IFSCHELP(nano_nextpage_msg), TRUE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000698
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000699 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000700 add_to_funcs(do_cut_text_void, MMAIN, N_("Cut Text"), IFSCHELP(nano_cut_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000701 FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000702
Chris Allegretta07798352000-11-27 22:58:23 +0000703 if (unjustify)
David Lawrence Ramseyed467e52006-07-03 18:40:53 +0000704 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000705 add_to_funcs(do_uncut_text, MMAIN, N_("UnJustify"), "",
706 FALSE, NOVIEW);
707
Chris Allegretta07798352000-11-27 22:58:23 +0000708 else
David Lawrence Ramseyed467e52006-07-03 18:40:53 +0000709 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000710 add_to_funcs(do_uncut_text, MMAIN, N_("UnCut Text"), IFSCHELP(nano_uncut_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000711 FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000712
Chris Allegrettae347efb2008-03-09 02:52:40 +0000713#ifndef NANO_TINY
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000714 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000715 add_to_funcs(do_cursorpos_void, MMAIN, N_("Cur Pos"), IFSCHELP(nano_cursorpos_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000716 FALSE, VIEW);
Chris Allegrettae347efb2008-03-09 02:52:40 +0000717#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000718
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000719 /* If we're using restricted mode, spell checking is disabled
720 * because it allows reading from or writing to files not specified
721 * on the command line. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000722#ifndef DISABLE_SPELLER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000723 if (!ISSET(RESTRICTED))
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000724 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000725 add_to_funcs(do_spell, MMAIN, N_("To Spell"), nano_spell_msg,
726 TRUE, NOVIEW);
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000727#endif
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000728
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000729 add_to_funcs(do_first_line,
730 (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP),
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000731 first_line_msg, IFSCHELP(nano_firstline_msg), FALSE, VIEW);
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000732
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000733 add_to_funcs(do_last_line,
734 (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000735 last_line_msg, IFSCHELP(nano_lastline_msg), TRUE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000736
737
738 add_to_funcs(do_gotolinecolumn_void, (MMAIN|MWHEREIS),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000739 go_to_line_msg, IFSCHELP(nano_gotoline_msg), FALSE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000740
Chris Allegrettae347efb2008-03-09 02:52:40 +0000741#ifdef NANO_TINY
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000742 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000743 add_to_funcs(do_cursorpos_void, MMAIN, N_("Cur Pos"), IFSCHELP(nano_cursorpos_msg),
Chris Allegrettae347efb2008-03-09 02:52:40 +0000744 FALSE, VIEW);
745#endif
746
747
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000748 add_to_funcs(do_replace, (MMAIN|MWHEREIS), replace_msg, IFSCHELP(nano_replace_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000749
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000750#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000751 FALSE,
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000752#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000753 TRUE,
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000754#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000755 NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000756
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000757#ifndef NANO_TINY
David Lawrence Ramseyefb4b0a2006-04-19 14:09:01 +0000758
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000759 add_to_funcs(do_mark, MMAIN, N_("Mark Text"),
760 nano_mark_msg, FALSE, VIEW);
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000761
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000762 add_to_funcs(do_research, (MMAIN|MBROWSER), whereis_next_msg,
763 nano_whereis_next_msg, TRUE, VIEW);
David Lawrence Ramseyf85001a2006-04-28 13:19:56 +0000764
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000765 add_to_funcs(do_copy_text, MMAIN, N_("Copy Text"),
766 nano_copy_msg, FALSE, NOVIEW);
David Lawrence Ramseyf85001a2006-04-28 13:19:56 +0000767
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000768 add_to_funcs(do_indent_void, MMAIN, N_("Indent Text"),
769 nano_indent_msg, FALSE, NOVIEW);
770
771 add_to_funcs(do_unindent, MMAIN, N_("Unindent Text"),
772 nano_unindent_msg, TRUE, NOVIEW);
773
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000774#endif
775
Chris Allegrettae347efb2008-03-09 02:52:40 +0000776 add_to_funcs(do_page_up, MBROWSER,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000777 prev_page_msg, IFSCHELP(nano_prevpage_msg), FALSE, VIEW);
Chris Allegrettae347efb2008-03-09 02:52:40 +0000778 add_to_funcs(do_page_down, MBROWSER,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000779 next_page_msg, IFSCHELP(nano_nextpage_msg), TRUE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000780
Chris Allegrettae347efb2008-03-09 02:52:40 +0000781
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000782 add_to_funcs(do_right, (MMAIN|MBROWSER), N_("Forward"), IFSCHELP(nano_forward_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000783 FALSE, VIEW);
Chris Allegrettaeb643142008-03-12 04:44:14 +0000784 add_to_funcs(do_right, MALL, "", "", FALSE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000785
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000786 add_to_funcs(do_left, (MMAIN|MBROWSER), N_("Back"), IFSCHELP(nano_back_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000787 FALSE, VIEW);
Chris Allegrettaeb643142008-03-12 04:44:14 +0000788 add_to_funcs(do_left, MALL, "", "", FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000789
790#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000791 add_to_funcs(do_next_word_void, MMAIN, N_("Next Word"),
792 nano_nextword_msg, FALSE, VIEW);
David Lawrence Ramseyc5967552002-06-21 03:20:06 +0000793
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000794 add_to_funcs(do_prev_word_void, MMAIN, N_("Prev Word"),
795 nano_prevword_msg, FALSE, VIEW);
Chris Allegretta8d990b52001-09-22 22:14:25 +0000796#endif
David Lawrence Ramseye0497062003-08-23 21:11:06 +0000797
Chris Allegrettae347efb2008-03-09 02:52:40 +0000798 add_to_funcs(do_up_void, (MMAIN|MHELP|MBROWSER), N_("Prev Line"),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000799 IFSCHELP(nano_prevline_msg), FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000800
Chris Allegrettae347efb2008-03-09 02:52:40 +0000801 add_to_funcs(do_down_void, (MMAIN|MHELP|MBROWSER), N_("Next Line"),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000802 IFSCHELP(nano_nextline_msg), TRUE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000803
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000804 add_to_funcs(do_home, MMAIN, N_("Home"), IFSCHELP(nano_home_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000805 FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000806
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000807 add_to_funcs(do_end, MMAIN, N_("End"), IFSCHELP(nano_end_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000808 FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000809
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000810#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000811 add_to_funcs(do_para_begin_void, (MMAIN|MWHEREIS), beg_of_par_msg,
812 nano_parabegin_msg, FALSE, VIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000813
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000814 add_to_funcs(do_para_end_void, (MMAIN|MWHEREIS), end_of_par_msg,
815 nano_paraend_msg, FALSE, VIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000816#endif
David Lawrence Ramseye0497062003-08-23 21:11:06 +0000817
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000818#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000819 add_to_funcs(do_find_bracket, MMAIN, _("Find Other Bracket"),
820 nano_bracket_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000821
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000822 add_to_funcs(do_scroll_up, MMAIN, N_("Scroll Up"),
823 nano_scrollup_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000824
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000825 add_to_funcs(do_scroll_down, MMAIN, N_("Scroll Down"),
826 nano_scrolldown_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000827#endif
David Lawrence Ramseydf453652006-04-21 02:05:09 +0000828
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000829#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000830 add_to_funcs(switch_to_prev_buffer_void, MMAIN, _("Previous File"),
831 nano_prevfile_msg, FALSE, VIEW);
832 add_to_funcs(switch_to_next_buffer_void, MMAIN, N_("Next File"),
833 nano_nextfile_msg, TRUE, VIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000834#endif
Chris Allegrettab3655b42001-10-22 03:15:31 +0000835
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000836 add_to_funcs(do_verbatim_input, MMAIN, N_("Verbatim Input"),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000837 IFSCHELP(nano_verbatim_msg), FALSE, NOVIEW);
Chris Allegrettaaa17df02008-03-17 05:50:04 +0000838 add_to_funcs(do_verbatim_input, MWHEREIS|MREPLACE|MREPLACE2|MEXTCMD|MSPELL,
839 "", "", FALSE, NOVIEW);
840
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000841 add_to_funcs(do_tab, MMAIN, N_("Tab"), IFSCHELP(nano_tab_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000842 FALSE, NOVIEW);
Chris Allegrettaeb643142008-03-12 04:44:14 +0000843 add_to_funcs(do_tab, MALL, "", "", FALSE, NOVIEW);
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000844 add_to_funcs(do_enter, MMAIN, N_("Enter"), IFSCHELP(nano_enter_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000845 FALSE, NOVIEW);
Chris Allegrettaeb643142008-03-12 04:44:14 +0000846 add_to_funcs(do_enter, MALL, "", "", FALSE, NOVIEW);
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000847 add_to_funcs(do_delete, MMAIN, N_("Delete"), IFSCHELP(nano_delete_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000848 FALSE, NOVIEW);
Chris Allegrettaeb643142008-03-12 04:44:14 +0000849 add_to_funcs(do_delete, MALL, "", "", FALSE, NOVIEW);
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000850 add_to_funcs(do_backspace, MMAIN, N_("Backspace"), IFSCHELP(nano_backspace_msg),
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000851#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000852 FALSE,
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000853#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000854 TRUE,
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000855#endif
Chris Allegrettaeb643142008-03-12 04:44:14 +0000856 NOVIEW);
857
858 add_to_funcs(do_backspace, MALL, "", "",
859#ifndef NANO_TINY
860 FALSE,
861#else
862 TRUE,
863#endif
864 NOVIEW);
David Lawrence Ramsey295d1722005-01-01 07:43:32 +0000865
David Lawrence Ramsey2ca23562006-04-23 19:15:15 +0000866#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000867 add_to_funcs(do_cut_till_end, MMAIN, N_("CutTillEnd"),
868 nano_cut_till_end_msg, TRUE, NOVIEW);
David Lawrence Ramsey2ca23562006-04-23 19:15:15 +0000869#endif
870
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000871 add_to_funcs(xon_complaint, MMAIN, "", "", FALSE, VIEW);
872 add_to_funcs(xoff_complaint, MMAIN, "", "", FALSE, VIEW);
873
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000874#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000875 add_to_funcs(do_full_justify, (MMAIN|MWHEREIS), fulljstify_msg,
876 nano_fulljustify_msg, FALSE, NOVIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000877#endif
878
David Lawrence Ramseyc5c52302005-11-15 23:45:29 +0000879#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000880 add_to_funcs(do_wordlinechar_count, MMAIN, N_("Word Count"),
881 nano_wordcount_msg, FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000882#endif
David Lawrence Ramseyefb4b0a2006-04-19 14:09:01 +0000883
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000884 add_to_funcs(total_refresh, (MMAIN|MHELP), refresh_msg,
885 IFSCHELP(nano_refresh_msg), FALSE, VIEW);
886
887 add_to_funcs(do_suspend_void, MMAIN, suspend_msg,
888 IFSCHELP(nano_suspend_msg), TRUE, VIEW);
David Lawrence Ramsey8faf3052003-09-04 20:25:29 +0000889
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000890#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000891 add_to_funcs((void *) case_sens_msg,
892 (MWHEREIS|MREPLACE|MWHEREISFILE),
893 case_sens_msg, nano_case_msg, FALSE, VIEW);
Chris Allegretta658399a2001-06-14 02:54:22 +0000894
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000895 add_to_funcs((void *) backwards_msg,
896 (MWHEREIS|MREPLACE|MWHEREISFILE),
897 backwards_msg, nano_reverse_msg, FALSE, VIEW);
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000898#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000899
Chris Allegretta658399a2001-06-14 02:54:22 +0000900#ifdef HAVE_REGEX_H
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000901 add_to_funcs((void *) regexp_msg,
902 (MWHEREIS|MREPLACE|MWHEREISFILE),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000903 regexp_msg, IFSCHELP(nano_regexp_msg), FALSE, VIEW);
Chris Allegretta658399a2001-06-14 02:54:22 +0000904#endif
Chris Allegretta5beed502003-01-05 20:41:21 +0000905
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000906#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000907 add_to_funcs((void *) prev_history_msg,
908 (MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE),
909 prev_history_msg, nano_prev_history_msg, FALSE, VIEW);
David Lawrence Ramsey305d8892006-05-24 19:48:03 +0000910
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000911 add_to_funcs((void *) next_history_msg,
912 (MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE),
913 next_history_msg, nano_next_history_msg, FALSE, VIEW);
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000914#endif
David Lawrence Ramsey02085d72004-11-07 16:04:18 +0000915
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000916 add_to_funcs((void *) no_replace_msg, MREPLACE,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000917 no_replace_msg, IFSCHELP(nano_whereis_msg), FALSE, VIEW);
Chris Allegretta5f36c372001-07-16 00:48:53 +0000918
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000919 add_to_funcs((void *) gototext_msg, MGOTOLINE,
Chris Allegretta10f868d2008-03-14 04:08:51 +0000920 gototext_msg, IFSCHELP(nano_whereis_msg), TRUE, VIEW);
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000921
Rocco Corsiaf5c3022001-01-12 07:51:05 +0000922#ifndef DISABLE_BROWSER
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000923 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000924 add_to_funcs((void *) to_files_msg,
925 (MGOTOLINE|MINSERTFILE),
926 to_files_msg, nano_tofiles_msg, FALSE, VIEW);
Chris Allegrettaf4b96012001-01-03 07:11:47 +0000927#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000928
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000929#ifndef NANO_TINY
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000930 /* If we're using restricted mode, the DOS format, Mac format,
931 * append, prepend, and backup toggles are disabled. The first and
932 * second are useless since inserting files is disabled, the third
933 * and fourth are disabled because they allow writing to files not
934 * specified on the command line, and the fifth is useless since
935 * backups are disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000936 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000937 add_to_funcs((void *) dos_format_msg, MWRITEFILE,
938 dos_format_msg, nano_dos_msg, FALSE, NOVIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000939
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000940 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000941 add_to_funcs((void *) mac_format_msg, MWRITEFILE,
942 mac_format_msg, nano_mac_msg, FALSE, NOVIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000943
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000944 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000945 add_to_funcs((void *) append_msg, MWRITEFILE,
946 append_msg, nano_append_msg, FALSE, NOVIEW);
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000947
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000948 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000949 add_to_funcs((void *) prepend_msg, MWRITEFILE,
950 prepend_msg, nano_prepend_msg, FALSE, NOVIEW);
Chris Allegretta0e9b7aa2002-04-16 03:15:47 +0000951
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000952 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000953 add_to_funcs((void *) backup_file_msg, MWRITEFILE,
954 backup_file_msg, nano_backup_msg, FALSE, NOVIEW);
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000955#endif
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000956
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000957#ifndef NANO_TINY
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000958 /* If we're using restricted mode, command execution is disabled.
959 * It's useless since inserting files is disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000960 if (!ISSET(RESTRICTED))
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000961 add_to_funcs((void *) ext_cmd_msg, MINSERTFILE,
962 ext_cmd_msg, nano_execute_msg, FALSE, NOVIEW);
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000963
Chris Allegrettaf7c68112002-09-03 22:58:40 +0000964#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000965 /* If we're using restricted mode, the multibuffer toggle is
966 * disabled. It's useless since inserting files is disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000967 if (!ISSET(RESTRICTED))
Chris Allegretta10f868d2008-03-14 04:08:51 +0000968 add_to_funcs((void *) new_buffer_msg, MINSERTFILE,
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000969 new_buffer_msg, nano_multibuffer_msg, FALSE, NOVIEW);
David Lawrence Ramseye21adfa2002-09-13 18:14:04 +0000970#endif
Chris Allegrettacc197ef2001-05-29 04:21:44 +0000971
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000972 add_to_funcs((void *) insert_file_msg, MEXTCMD,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000973 insert_file_msg, IFSCHELP(nano_insert_msg), FALSE, VIEW);
David Lawrence Ramseye5d8f322004-09-30 22:07:21 +0000974
David Lawrence Ramsey47e82b12004-09-28 22:21:46 +0000975#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000976 add_to_funcs((void *) new_buffer_msg, MEXTCMD,
977 new_buffer_msg, nano_multibuffer_msg, FALSE, NOVIEW);
Chris Allegretta52c5a6e2002-03-21 05:07:28 +0000978#endif
David Lawrence Ramsey47e82b12004-09-28 22:21:46 +0000979#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000980
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000981#ifndef DISABLE_HELP
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000982 add_to_funcs((void *) refresh_msg, MHELP,
983 refresh_msg, nano_refresh_msg, FALSE, VIEW);
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000984#endif
985
Rocco Corsiaf5c3022001-01-12 07:51:05 +0000986#ifndef DISABLE_BROWSER
Chris Allegrettaf5de33a2002-02-27 04:14:16 +0000987
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000988 add_to_funcs((void *) first_file_msg,
989 (MBROWSER|MWHEREISFILE),
990 first_file_msg, nano_firstfile_msg, FALSE, VIEW);
Chris Allegrettab3655b42001-10-22 03:15:31 +0000991
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000992 add_to_funcs((void *) last_file_msg,
993 (MBROWSER|MWHEREISFILE),
994 last_file_msg, nano_lastfile_msg, FALSE, VIEW);
Chris Allegrettab3655b42001-10-22 03:15:31 +0000995
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000996 add_to_funcs((void *) goto_dir_msg, MBROWSER,
997 goto_dir_msg, nano_gotodir_msg, FALSE, VIEW);
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000998#endif
999
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001000 currmenu = MMAIN;
David Lawrence Ramsey35e97132005-01-08 06:04:19 +00001001
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001002#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001003 add_to_sclist(MALL, "^G", do_help_void, 0, TRUE);
1004 add_to_sclist(MALL, "F1", do_help_void, 0, TRUE);
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001005#endif
Chris Allegrettae347efb2008-03-09 02:52:40 +00001006 add_to_sclist(MMAIN|MHELP|MBROWSER, "^X", do_exit, 0, TRUE);
1007 add_to_sclist(MMAIN|MHELP|MBROWSER, "F2", do_exit, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001008 add_to_sclist(MMAIN, "^_", do_gotolinecolumn_void, 0, TRUE);
1009 add_to_sclist(MMAIN, "F13", do_gotolinecolumn_void, 0, TRUE);
1010 add_to_sclist(MMAIN, "^O", do_writeout_void, 0, TRUE);
1011 add_to_sclist(MMAIN, "F3", do_writeout_void, 0, TRUE);
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001012#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001013 add_to_sclist(MMAIN, "^J", do_justify_void, 0, TRUE);
1014 add_to_sclist(MMAIN, "F4", do_justify_void, 0, TRUE);
1015#endif
1016 add_to_sclist(MMAIN, "^R", do_insertfile_void, 0, TRUE);
1017 add_to_sclist(MMAIN, "F5", do_insertfile_void, 0, TRUE);
Chris Allegretta17436ce2008-03-11 03:03:53 +00001018 add_to_sclist(MMAIN, "kinsert", do_insertfile_void, 0, TRUE);
Chris Allegrettae347efb2008-03-09 02:52:40 +00001019 add_to_sclist(MMAIN|MBROWSER, "^W", do_search, 0, TRUE);
1020 add_to_sclist(MMAIN|MBROWSER, "F6", do_search, 0, TRUE);
Chris Allegretta17436ce2008-03-11 03:03:53 +00001021 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE, "^Y", do_page_up, 0, TRUE);
1022 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE, "F7", do_page_up, 0, TRUE);
1023 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE, "kpup", do_page_up, 0, TRUE);
1024 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE, "^V", do_page_down, 0, TRUE);
1025 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE, "F8", do_page_down, 0, TRUE);
1026 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE, "kpdown", do_page_down, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001027 add_to_sclist(MMAIN, "^K", do_cut_text_void, 0, TRUE);
1028 add_to_sclist(MMAIN, "F9", do_cut_text_void, 0, TRUE);
1029 add_to_sclist(MMAIN, "^U", do_uncut_text, 0, TRUE);
1030 add_to_sclist(MMAIN, "F10", do_uncut_text, 0, TRUE);
1031 add_to_sclist(MMAIN, "^C", do_cursorpos_void, 0, TRUE);
1032 add_to_sclist(MMAIN, "F11", do_cursorpos_void, 0, TRUE);
1033#ifndef NANO_TINY
1034 add_to_sclist(MMAIN, "^T", do_spell, 0, TRUE);
1035 add_to_sclist(MMAIN, "F12", do_spell, 0, TRUE);
1036#endif
1037 add_to_sclist(MMAIN, "^_", do_gotolinecolumn_void, 0, TRUE);
1038 add_to_sclist(MMAIN, "F13", do_gotolinecolumn_void, 0, TRUE);
1039 add_to_sclist(MMAIN, "M-G", do_gotolinecolumn_void, 0, TRUE);
1040 add_to_sclist(MMAIN, "^\\", do_replace, 0, TRUE);
1041 add_to_sclist(MMAIN, "F14", do_replace, 0, TRUE);
1042 add_to_sclist(MMAIN, "M-R", do_replace, 0, TRUE);
1043 add_to_sclist(MWHEREIS, "^R", do_replace, 0, FALSE);
1044 add_to_sclist(MREPLACE, "^R", (void *) no_replace_msg, 0, FALSE);
1045 add_to_sclist(MWHEREIS, "^T", do_gotolinecolumn_void, 0, TRUE);
1046#ifndef NANO_TINY
1047 add_to_sclist(MMAIN, "^^", do_mark, 0, TRUE);
1048 add_to_sclist(MMAIN, "F15", do_mark, 0, TRUE);
1049 add_to_sclist(MMAIN, "M-A", do_mark, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001050 add_to_sclist(MALL, "M-W", do_research, 0, TRUE);
Chris Allegrettae347efb2008-03-09 02:52:40 +00001051 add_to_sclist(MALL, "F16", do_research, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001052 add_to_sclist(MMAIN, "M-^", do_copy_text, 0, TRUE);
1053 add_to_sclist(MMAIN, "M-6", do_copy_text, 0, TRUE);
1054 add_to_sclist(MMAIN, "M-}", do_indent_void, 0, TRUE);
1055 add_to_sclist(MMAIN, "M-{", do_unindent, 0, TRUE);
Chris Allegrettaeb643142008-03-12 04:44:14 +00001056 add_to_sclist(MALL, "^F", do_right, 0, TRUE);
1057 add_to_sclist(MALL, "kright", do_right, 0, TRUE);
1058 add_to_sclist(MALL, "^B", do_left, 0, TRUE);
1059 add_to_sclist(MALL, "kleft", do_left, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001060 add_to_sclist(MMAIN, "^Space", do_next_word_void, 0, TRUE);
1061 add_to_sclist(MMAIN, "M-Space", do_prev_word_void, 0, TRUE);
1062#endif
Chris Allegrettaeb643142008-03-12 04:44:14 +00001063 add_to_sclist(MMAIN, "^Q", xon_complaint, 0, TRUE);
1064 add_to_sclist(MMAIN, "^S", xoff_complaint, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001065 add_to_sclist(MALL, "^P", do_up_void, 0, TRUE);
Chris Allegretta17436ce2008-03-11 03:03:53 +00001066 add_to_sclist(MALL, "kup", do_up_void, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001067 add_to_sclist(MALL, "^N", do_down_void, 0, TRUE);
Chris Allegretta17436ce2008-03-11 03:03:53 +00001068 add_to_sclist(MALL, "kdown", do_down_void, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001069 add_to_sclist(MALL, "^A", do_home, 0, TRUE);
Chris Allegretta17436ce2008-03-11 03:03:53 +00001070 add_to_sclist(MALL, "khome", do_home, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001071 add_to_sclist(MALL, "^E", do_end, 0, TRUE);
Chris Allegretta17436ce2008-03-11 03:03:53 +00001072 add_to_sclist(MALL, "kend", do_end, 0, TRUE);
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001073#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001074 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1075 "^W", do_para_begin_void, 0, TRUE);
1076 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1077 "^O", do_para_end_void, 0, TRUE);
1078 add_to_sclist(MALL, "M-(", do_para_begin_void, 0, TRUE);
1079 add_to_sclist(MALL, "M-9", do_para_begin_void, 0, TRUE);
1080 add_to_sclist(MALL, "M-)", do_para_end_void, 0, TRUE);
1081 add_to_sclist(MALL, "M-0", do_para_end_void, 0, TRUE);
Chris Allegrettae347efb2008-03-09 02:52:40 +00001082#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001083 add_to_sclist(MWHEREIS,
1084 "M-C", (void *) case_sens_msg, 0, FALSE);
1085 add_to_sclist(MREPLACE,
1086 "M-C", (void *) case_sens_msg, 0, FALSE);
1087 add_to_sclist(MREPLACE2,
1088 "M-C", (void *) case_sens_msg, 0, FALSE);
1089 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1090 "M-B", (void *) backwards_msg, 0, FALSE);
1091 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
1092 "M-R", (void *) regexp_msg, 0, FALSE);
1093
1094 add_to_sclist(MMAIN, "M-\\", do_first_line, 0, TRUE);
1095 add_to_sclist(MMAIN, "M-|", do_first_line, 0, TRUE);
1096 add_to_sclist(MMAIN, "M-/", do_last_line, 0, TRUE);
1097 add_to_sclist(MMAIN, "M-?", do_last_line, 0, TRUE);
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001098 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP,
1099 "^Y", do_first_line, 0, TRUE);
1100 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP,
1101 "^V", do_last_line, 0, TRUE);
1102
Chris Allegrettae347efb2008-03-09 02:52:40 +00001103 add_to_sclist(MBROWSER|MWHEREISFILE, "M-\\", (void *) first_file_msg, 0, TRUE);
1104 add_to_sclist(MBROWSER|MWHEREISFILE, "M-|", (void *) first_file_msg, 0, TRUE);
1105 add_to_sclist(MBROWSER|MWHEREISFILE, "M-/", (void *) last_file_msg, 0, TRUE);
1106 add_to_sclist(MBROWSER|MWHEREISFILE, "M-?", (void *) last_file_msg, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001107#ifndef NANO_TINY
1108 add_to_sclist(MMAIN, "M-[", do_find_bracket, 0, TRUE);
1109 add_to_sclist(MMAIN, "M--", do_scroll_up, 0, TRUE);
1110 add_to_sclist(MMAIN, "M-_", do_scroll_up, 0, TRUE);
1111 add_to_sclist(MMAIN, "M-+", do_scroll_down, 0, TRUE);
1112 add_to_sclist(MMAIN, "M-=", do_scroll_down, 0, TRUE);
1113#endif
1114
1115#ifdef ENABLE_MULTIBUFFER
1116 add_to_sclist(MMAIN, "M-<", switch_to_prev_buffer_void, 0, TRUE);
1117 add_to_sclist(MMAIN, "M-,", switch_to_prev_buffer_void, 0, TRUE);
1118 add_to_sclist(MMAIN, "M->", switch_to_next_buffer_void, 0, TRUE);
1119 add_to_sclist(MMAIN, "M-.", switch_to_next_buffer_void, 0, TRUE);
1120#endif
Chris Allegrettaaa17df02008-03-17 05:50:04 +00001121 add_to_sclist(MALL, "M-V", do_verbatim_input, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001122#ifndef NANO_TINY
Chris Allegrettae347efb2008-03-09 02:52:40 +00001123 add_to_sclist(MALL, "M-T", do_cut_till_end, 0, TRUE);
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001124#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001125 add_to_sclist(MALL, "M-J", do_full_justify, 0, TRUE);
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001126#endif
Chris Allegretta10f868d2008-03-14 04:08:51 +00001127 add_to_sclist(MMAIN, "M-D", do_wordlinechar_count, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001128 add_to_sclist(MMAIN, "M-X", do_toggle, NO_HELP, TRUE);
1129 add_to_sclist(MMAIN, "M-C", do_toggle, CONST_UPDATE, TRUE);
1130 add_to_sclist(MMAIN, "M-O", do_toggle, MORE_SPACE, TRUE);
1131 add_to_sclist(MMAIN, "M-S", do_toggle, SMOOTH_SCROLL, TRUE);
1132 add_to_sclist(MMAIN, "M-P", do_toggle, WHITESPACE_DISPLAY, TRUE);
1133 add_to_sclist(MMAIN, "M-Y", do_toggle, NO_COLOR_SYNTAX, TRUE);
1134 add_to_sclist(MMAIN, "M-H", do_toggle, SMART_HOME, TRUE);
1135 add_to_sclist(MMAIN, "M-I", do_toggle, AUTOINDENT, TRUE);
1136 add_to_sclist(MMAIN, "M-K", do_toggle, CUT_TO_END, TRUE);
1137 add_to_sclist(MMAIN, "M-L", do_toggle, NO_WRAP, TRUE);
1138 add_to_sclist(MMAIN, "M-Q", do_toggle, TABS_TO_SPACES, TRUE);
1139 add_to_sclist(MMAIN, "M-B", do_toggle, BACKUP_FILE, TRUE);
1140 add_to_sclist(MMAIN, "M-F", do_toggle, MULTIBUFFER, TRUE);
1141 add_to_sclist(MMAIN, "M-M", do_toggle, USE_MOUSE, TRUE);
1142 add_to_sclist(MMAIN, "M-N", do_toggle, NO_CONVERT, TRUE);
1143 add_to_sclist(MMAIN, "M-Z", do_toggle, SUSPEND, TRUE);
1144#endif
Chris Allegretta10f868d2008-03-14 04:08:51 +00001145 add_to_sclist(MGOTOLINE, "^T", (void *) gototext_msg, 0, FALSE);
1146 add_to_sclist(MINSERTFILE|MEXTCMD, "M-F", (void *) new_buffer_msg, 0, FALSE);
Chris Allegrettacc593832008-03-19 02:32:48 +00001147 add_to_sclist((MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MWHEREISFILE|MGOTODIR|MYESNO),
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001148 "^C", (void *) cancel_msg, 0, FALSE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001149 add_to_sclist(MHELP, "^X", do_exit, 0, TRUE);
1150 add_to_sclist(MHELP, "F2", do_exit, 0, TRUE);
1151 add_to_sclist(MWRITEFILE, "M-D", (void *) dos_format_msg, 0, FALSE);
1152 add_to_sclist(MWRITEFILE, "M-M", (void *) mac_format_msg, 0, FALSE);
1153 add_to_sclist(MWRITEFILE, "M-A", (void *) append_msg, 0, FALSE);
1154 add_to_sclist(MWRITEFILE, "M-P", (void *) prepend_msg, 0, FALSE);
1155 add_to_sclist(MWRITEFILE, "M-B", (void *) backup_file_msg, 0, FALSE);
1156 add_to_sclist(MWRITEFILE, "^T", (void *) to_files_msg, 0, FALSE);
1157 add_to_sclist(MINSERTFILE, "^T", (void *) to_files_msg, 0, FALSE);
1158 add_to_sclist(MINSERTFILE, "^X", (void *) ext_cmd_msg, 0, FALSE);
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001159 add_to_sclist(MMAIN, "^Z", do_suspend_void, 0, FALSE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001160 add_to_sclist(MMAIN, "^L", total_refresh, 0, TRUE);
Chris Allegretta10f868d2008-03-14 04:08:51 +00001161 add_to_sclist(MALL, "^I", do_tab, 0, TRUE);
1162 add_to_sclist(MALL, "^M", do_enter, 0, TRUE);
1163 add_to_sclist(MALL, "kenter", do_enter, 0, TRUE);
1164 add_to_sclist(MALL, "^D", do_delete, 0, TRUE);
1165 add_to_sclist(MALL, "kdel", do_delete, 0, TRUE);
1166 add_to_sclist(MALL, "^H", do_backspace, 0, TRUE);
1167 add_to_sclist(MALL, "kbsp", do_backspace, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001168
1169#ifdef DEBUG
1170 print_sclist();
1171#endif
1172
Chris Allegrettadab017e2002-04-23 10:56:06 +00001173}
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001174
David Lawrence Ramseye6757b92006-04-19 13:36:56 +00001175/* Free the given shortcut. */
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001176void free_shortcutage(shortcut **shortcutage)
1177{
1178 assert(shortcutage != NULL);
David Lawrence Ramsey193b0e52005-06-06 18:41:17 +00001179
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001180 while (*shortcutage != NULL) {
1181 shortcut *ps = *shortcutage;
1182 *shortcutage = (*shortcutage)->next;
1183 free(ps);
1184 }
1185}
1186
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001187const subnfunc *sctofunc(sc *s)
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001188{
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001189 subnfunc *f;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001190
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001191 for (f = allfuncs; f != NULL && s->scfunc != f->scfunc; f = f->next)
1192 ;
1193
1194 return f;
1195}
1196
1197#ifndef NANO_TINY
1198/* Now lets come up with a single (hopefully)
1199 function to get a string for each flag */
1200char *flagtostr(int flag)
1201{
1202 switch (flag) {
1203 case NO_HELP:
1204 return N_("Help mode");
1205 case CONST_UPDATE:
1206 return N_("Constant cursor position display");
1207 case MORE_SPACE:
1208 return N_("Use of one more line for editing");
1209 case SMOOTH_SCROLL:
1210 return N_("Smooth scrolling");
1211 case WHITESPACE_DISPLAY:
1212 return N_("Whitespace display");
1213 case NO_COLOR_SYNTAX:
1214 return N_("Color syntax highlighting");
1215 case SMART_HOME:
1216 return N_("Smart home key");
1217 case AUTOINDENT:
1218 return N_("Auto indent");
1219 case CUT_TO_END:
1220 return N_("Cut to end");
1221 case NO_WRAP:
1222 return N_("Long line wrapping");
1223 case TABS_TO_SPACES:
1224 return N_("Conversion of typed tabs to spaces");
1225 case BACKUP_FILE:
1226 return N_("Backup files");
1227 case MULTIBUFFER:
1228 return N_("Multiple file buffers");
1229 case USE_MOUSE:
1230 return N_("Mouse support");
1231 case NO_CONVERT:
1232 return N_("No conversion from DOS/Mac format");
1233 case SUSPEND:
1234 return N_("Suspension");
1235 default:
1236 return "?????";
1237 }
1238}
Chris Allegrettae347efb2008-03-09 02:52:40 +00001239#endif /* NANO_TINY */
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001240
1241/* Interpret the string given by the rc file and return a
1242 shortcut struct, complete with proper value for execute */
1243sc *strtosc(int menu, char *input)
1244{
1245 sc *s;
1246
1247 s = (sc *)nmalloc(sizeof(sc));
1248 s->execute = TRUE; /* overridden as needed below */
1249
Chris Allegrettae347efb2008-03-09 02:52:40 +00001250
1251#ifndef DISABLE_HELP
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001252 if (!strcasecmp(input, "help"))
1253 s->scfunc = do_help_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001254 else
1255#endif
1256 if (!strcasecmp(input, "cancel")) {
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001257 s->scfunc = (void *) cancel_msg;
1258 s->execute = FALSE;
1259 } else if (!strcasecmp(input, "exit"))
1260 s->scfunc = do_exit;
1261 else if (!strcasecmp(input, "writeout"))
1262 s->scfunc = do_writeout_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001263 else if (!strcasecmp(input, "insert"))
1264 s->scfunc = do_insertfile_void;
1265 else if (!strcasecmp(input, "whereis"))
1266 s->scfunc = do_search;
1267 else if (!strcasecmp(input, "up"))
Chris Allegretta17436ce2008-03-11 03:03:53 +00001268 s->scfunc = do_up_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001269 else if (!strcasecmp(input, "down"))
Chris Allegretta17436ce2008-03-11 03:03:53 +00001270 s->scfunc = do_down_void;
1271 else if (!strcasecmp(input, "pageup")
1272 || !strcasecmp(input, "prevpage"))
1273 s->scfunc = do_page_up;
1274 else if (!strcasecmp(input, "pagedown")
1275 || !strcasecmp(input, "nextpage"))
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001276 s->scfunc = do_page_down;
1277 else if (!strcasecmp(input, "cut"))
1278 s->scfunc = do_cut_text_void;
1279 else if (!strcasecmp(input, "uncut"))
1280 s->scfunc = do_uncut_text;
1281 else if (!strcasecmp(input, "curpos") ||
1282 !strcasecmp(input, "cursorpos"))
1283 s->scfunc = do_cursorpos_void;
1284 else if (!strcasecmp(input, "firstline"))
1285 s->scfunc = do_first_line;
1286 else if (!strcasecmp(input, "lastline"))
1287 s->scfunc = do_last_line;
1288 else if (!strcasecmp(input, "gotoline"))
1289 s->scfunc = do_gotolinecolumn_void;
1290 else if (!strcasecmp(input, "replace"))
1291 s->scfunc = do_replace;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001292#ifndef DISABLE_JUSTIFY
Chris Allegrettae347efb2008-03-09 02:52:40 +00001293 else if (!strcasecmp(input, "justify"))
1294 s->scfunc = do_justify_void;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001295 else if (!strcasecmp(input, "beginpara"))
1296 s->scfunc = do_para_begin_void;
1297 else if (!strcasecmp(input, "endpara"))
1298 s->scfunc = do_para_end_void;
1299 else if (!strcasecmp(input, "fulljustify"))
1300 s->scfunc = do_full_justify;
1301#endif
1302#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001303 else if (!strcasecmp(input, "mark"))
1304 s->scfunc = do_mark;
1305 else if (!strcasecmp(input, "searchagain") ||
1306 !strcasecmp(input, "research"))
1307 s->scfunc = do_research;
1308 else if (!strcasecmp(input, "copytext"))
1309 s->scfunc = do_copy_text;
1310 else if (!strcasecmp(input, "indent"))
1311 s->scfunc = do_indent_void;
1312 else if (!strcasecmp(input, "unindent"))
1313 s->scfunc = do_unindent;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001314 else if (!strcasecmp(input, "scrollup"))
1315 s->scfunc = do_scroll_up;
1316 else if (!strcasecmp(input, "scrolldown"))
1317 s->scfunc = do_scroll_down;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001318 else if (!strcasecmp(input, "nextword"))
1319 s->scfunc = do_next_word_void;
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001320 else if (!strcasecmp(input, "suspend"))
1321 s->scfunc = do_suspend_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001322 else if (!strcasecmp(input, "prevword"))
1323 s->scfunc = do_prev_word_void;
1324 else if (!strcasecmp(input, "findbracket"))
1325 s->scfunc = do_find_bracket;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001326 else if (!strcasecmp(input, "wordcount"))
1327 s->scfunc = do_wordlinechar_count;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001328 else if (!strcasecmp(input, "prevhistory")) {
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001329 s->scfunc = (void *) prev_history_msg;
1330 s->execute = FALSE;
1331 } else if (!strcasecmp(input, "nexthistory")) {
1332 s->scfunc = (void *) next_history_msg;
1333 s->execute = FALSE;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001334 } else if (!strcasecmp(input, "nohelp") ||
1335 !strcasecmp(input, "nohelp")) {
1336 s->scfunc = (void *) do_toggle;
1337 s->execute = FALSE;
1338 s->toggle = NO_HELP;
1339 } else if (!strcasecmp(input, "constupdate")) {
1340 s->scfunc = (void *) do_toggle;
1341 s->execute = FALSE;
1342 s->toggle = CONST_UPDATE;
1343 } else if (!strcasecmp(input, "morespace")) {
1344 s->scfunc = (void *) do_toggle;
1345 s->execute = FALSE;
1346 s->toggle = MORE_SPACE;
1347 } else if (!strcasecmp(input, "smoothscroll")) {
1348 s->scfunc = (void *) do_toggle;
1349 s->execute = FALSE;
1350 s->toggle = SMOOTH_SCROLL;
Chris Allegrettad3659f82008-03-16 23:57:14 +00001351 } else if (!strcasecmp(input, "whitespacedisplay")) {
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001352 s->scfunc = (void *) do_toggle;
1353 s->execute = FALSE;
1354 s->toggle = WHITESPACE_DISPLAY;
1355 } else if (!strcasecmp(input, "nosyntax")) {
1356 s->scfunc = (void *) do_toggle;
1357 s->execute = FALSE;
1358 s->toggle = NO_COLOR_SYNTAX;
1359 } else if (!strcasecmp(input, "smarthome")) {
1360 s->scfunc = (void *) do_toggle;
1361 s->execute = FALSE;
1362 s->toggle = SMART_HOME;
1363 } else if (!strcasecmp(input, "autoindent")) {
1364 s->scfunc = (void *) do_toggle;
1365 s->execute = FALSE;
1366 s->toggle = AUTOINDENT;
1367 } else if (!strcasecmp(input, "cuttoend")) {
1368 s->scfunc = (void *) do_toggle;
1369 s->execute = FALSE;
1370 s->toggle = CUT_TO_END;
1371 } else if (!strcasecmp(input, "nowrap")) {
1372 s->scfunc = (void *) do_toggle;
1373 s->execute = FALSE;
1374 s->toggle = NO_WRAP;
1375 } else if (!strcasecmp(input, "tabstospaces")) {
1376 s->scfunc = (void *) do_toggle;
1377 s->execute = FALSE;
1378 s->toggle = TABS_TO_SPACES;
1379 } else if (!strcasecmp(input, "backupfile")) {
1380 s->scfunc = (void *) do_toggle;
1381 s->execute = FALSE;
1382 s->toggle = BACKUP_FILE;
1383 } else if (!strcasecmp(input, "mutlibuffer")) {
1384 s->scfunc = (void *) do_toggle;
1385 s->execute = FALSE;
1386 s->toggle = MULTIBUFFER;
1387 } else if (!strcasecmp(input, "mouse")) {
1388 s->scfunc = (void *) do_toggle;
1389 s->execute = FALSE;
1390 s->toggle = USE_MOUSE;
1391 } else if (!strcasecmp(input, "noconvert")) {
1392 s->scfunc = (void *) do_toggle;
1393 s->execute = FALSE;
1394 s->toggle = NO_CONVERT;
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001395 } else if (!strcasecmp(input, "suspendenable")) {
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001396 s->scfunc = (void *) do_toggle;
1397 s->execute = FALSE;
1398 s->toggle = SUSPEND;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001399 }
Chris Allegrettae347efb2008-03-09 02:52:40 +00001400#endif /* NANO_TINY */
1401 else if (!strcasecmp(input, "right") ||
1402 !strcasecmp(input, "forward"))
1403 s->scfunc = do_right;
1404 else if (!strcasecmp(input, "left") ||
1405 !strcasecmp(input, "back"))
1406 s->scfunc = do_left;
1407 else if (!strcasecmp(input, "up") ||
1408 !strcasecmp(input, "prevline"))
1409 s->scfunc = do_up_void;
1410 else if (!strcasecmp(input, "down") ||
1411 !strcasecmp(input, "nextline"))
1412 s->scfunc = do_down_void;
1413 else if (!strcasecmp(input, "home"))
1414 s->scfunc = do_home;
1415 else if (!strcasecmp(input, "end"))
1416 s->scfunc = do_end;
1417#ifdef ENABLE_MULTIBUFFER
1418 else if (!strcasecmp(input, "prevbuf"))
1419 s->scfunc = switch_to_prev_buffer_void;
1420 else if (!strcasecmp(input, "nextbuf"))
1421 s->scfunc = switch_to_next_buffer_void;
1422#endif
1423 else if (!strcasecmp(input, "verbatim"))
1424 s->scfunc = do_verbatim_input;
1425 else if (!strcasecmp(input, "tab"))
1426 s->scfunc = do_tab;
1427 else if (!strcasecmp(input, "enter"))
1428 s->scfunc = do_enter;
1429 else if (!strcasecmp(input, "delete"))
1430 s->scfunc = do_delete;
1431 else if (!strcasecmp(input, "refresh"))
1432 s->scfunc = total_refresh;
1433 else if (!strcasecmp(input, "casesens")) {
1434 s->scfunc = (void *) case_sens_msg;
1435 s->execute = FALSE;
1436 } else if (!strcasecmp(input, "regexp") ||
1437 !strcasecmp(input, "regex")) {
1438 s->scfunc = (void *) regexp_msg;
1439 s->execute = FALSE;
1440 } else if (!strcasecmp(input, "dontreplace")) {
1441 s->scfunc = (void *) no_replace_msg;
1442 s->execute = FALSE;
1443 } else if (!strcasecmp(input, "gototext")) {
1444 s->scfunc = (void *) gototext_msg;
1445 s->execute = FALSE;
1446 } else if (!strcasecmp(input, "browser") ||
1447 !strcasecmp(input, "tofiles")) {
1448 s->scfunc = (void *) to_files_msg;
1449 s->execute = FALSE;
1450 } else if (!strcasecmp(input, "dosformat")) {
1451 s->scfunc = (void *) dos_format_msg;
1452 s->execute = FALSE;
1453 } else if (!strcasecmp(input, "macformat")) {
1454 s->scfunc = (void *) mac_format_msg;
1455 s->execute = FALSE;
1456 } else if (!strcasecmp(input, "append")) {
1457 s->scfunc = (void *) append_msg;
1458 s->execute = FALSE;
1459 } else if (!strcasecmp(input, "prepend")) {
1460 s->scfunc = (void *) prepend_msg;
1461 s->execute = FALSE;
1462 } else if (!strcasecmp(input, "backup")) {
1463 s->scfunc = (void *) backup_file_msg;
1464 s->execute = FALSE;
1465#ifdef ENABLE_MULTIBUFFER
1466 } else if (!strcasecmp(input, "newbuffer")) {
1467 s->scfunc = (void *) new_buffer_msg;
1468 s->execute = FALSE;
1469#endif
1470 } else if (!strcasecmp(input, "firstfile")) {
1471 s->scfunc = (void *) first_file_msg;
1472 s->execute = FALSE;
1473 } else if (!strcasecmp(input, "lastfile")) {
1474 s->scfunc = (void *) last_file_msg;
1475 s->execute = FALSE;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001476 } else {
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001477 free(s);
1478 return NULL;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001479 }
1480
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001481 return s;
1482
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001483}
1484
Chris Allegrettae347efb2008-03-09 02:52:40 +00001485#ifdef ENABLE_NANORC
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001486/* Same thing as abnove but for the menu */
1487int strtomenu(char *input)
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001488{
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001489 if (!strcasecmp(input, "all"))
1490 return MALL;
1491 else if (!strcasecmp(input, "main"))
1492 return MMAIN;
1493 else if (!strcasecmp(input, "search"))
1494 return MWHEREIS;
1495 else if (!strcasecmp(input, "replace"))
1496 return MREPLACE;
1497 else if (!strcasecmp(input, "replace2") ||
1498 !strcasecmp(input, "replacewith"))
1499 return MREPLACE2;
1500 else if (!strcasecmp(input, "gotoline"))
1501 return MGOTOLINE;
1502 else if (!strcasecmp(input, "writeout"))
1503 return MWRITEFILE;
1504 else if (!strcasecmp(input, "insert"))
1505 return MINSERTFILE;
1506 else if (!strcasecmp(input, "externalcmd") ||
1507 !strcasecmp(input, "extcmd"))
1508 return MEXTCMD;
1509 else if (!strcasecmp(input, "help"))
1510 return MHELP;
1511 else if (!strcasecmp(input, "spell"))
1512 return MSPELL;
1513 else if (!strcasecmp(input, "browser"))
1514 return MBROWSER;
1515 else if (!strcasecmp(input, "whereisfile"))
1516 return MWHEREISFILE;
1517 else if (!strcasecmp(input, "gotodir"))
1518 return MGOTODIR;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001519
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001520 return -1;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001521}
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001522#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001523
Chris Allegrettae347efb2008-03-09 02:52:40 +00001524
David Lawrence Ramseye6757b92006-04-19 13:36:56 +00001525#ifdef DEBUG
1526/* This function is used to gracefully return all the memory we've used.
1527 * It should be called just before calling exit(). Practically, the
Chris Allegretta6232d662002-05-12 19:52:15 +00001528 * only effect is to cause a segmentation fault if the various data
1529 * structures got bolloxed earlier. Thus, we don't bother having this
Chris Allegretta6df90f52002-07-19 01:08:59 +00001530 * function unless debugging is turned on. */
Chris Allegretta6df90f52002-07-19 01:08:59 +00001531void thanks_for_all_the_fish(void)
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001532{
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001533 delwin(topwin);
1534 delwin(edit);
1535 delwin(bottomwin);
1536
Chris Allegretta7662c862003-01-13 01:35:15 +00001537#ifndef DISABLE_JUSTIFY
1538 if (quotestr != NULL)
1539 free(quotestr);
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +00001540#ifdef HAVE_REGEX_H
1541 regfree(&quotereg);
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001542 if (quoteerr != NULL)
1543 free(quoteerr);
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +00001544#endif
Chris Allegretta7662c862003-01-13 01:35:15 +00001545#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001546#ifndef NANO_TINY
David Lawrence Ramsey04e42a62004-02-28 16:24:31 +00001547 if (backup_dir != NULL)
1548 free(backup_dir);
1549#endif
Chris Allegretta2598c662002-03-28 01:59:34 +00001550#ifndef DISABLE_OPERATINGDIR
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001551 if (operating_dir != NULL)
1552 free(operating_dir);
1553 if (full_operating_dir != NULL)
1554 free(full_operating_dir);
1555#endif
1556 if (last_search != NULL)
1557 free(last_search);
1558 if (last_replace != NULL)
1559 free(last_replace);
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001560#ifndef DISABLE_SPELLER
1561 if (alt_speller != NULL)
1562 free(alt_speller);
1563#endif
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001564 if (answer != NULL)
1565 free(answer);
1566 if (cutbuffer != NULL)
Chris Allegretta7662c862003-01-13 01:35:15 +00001567 free_filestruct(cutbuffer);
David Lawrence Ramsey93c84052004-11-23 04:08:28 +00001568#ifndef DISABLE_JUSTIFY
1569 if (jusbuffer != NULL)
1570 free_filestruct(jusbuffer);
1571#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001572#ifndef NANO_TINY
David Lawrence Ramsey40e4acf2005-05-26 06:09:07 +00001573 /* Free the memory associated with each toggle. */
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001574 while (toggles != NULL) {
1575 toggle *t = toggles;
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001576
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001577 toggles = toggles->next;
1578 free(t);
1579 }
1580#endif
David Lawrence Ramsey5d8d0b12005-05-26 05:53:29 +00001581 /* Free the memory associated with each open file buffer. */
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +00001582 if (openfile != NULL)
David Lawrence Ramsey64661ac2005-07-08 19:57:25 +00001583 free_openfilestruct(openfile);
Chris Allegretta6df90f52002-07-19 01:08:59 +00001584#ifdef ENABLE_COLOR
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001585 if (syntaxstr != NULL)
1586 free(syntaxstr);
Chris Allegretta6df90f52002-07-19 01:08:59 +00001587 while (syntaxes != NULL) {
1588 syntaxtype *bill = syntaxes;
1589
1590 free(syntaxes->desc);
1591 while (syntaxes->extensions != NULL) {
1592 exttype *bob = syntaxes->extensions;
1593
1594 syntaxes->extensions = bob->next;
David Lawrence Ramsey2385c1a2005-07-29 21:42:08 +00001595 free(bob->ext_regex);
David Lawrence Ramsey7fc0ada2005-08-29 18:52:06 +00001596 if (bob->ext != NULL) {
1597 regfree(bob->ext);
1598 free(bob->ext);
1599 }
Chris Allegretta6df90f52002-07-19 01:08:59 +00001600 free(bob);
1601 }
1602 while (syntaxes->color != NULL) {
1603 colortype *bob = syntaxes->color;
1604
1605 syntaxes->color = bob->next;
David Lawrence Ramsey2385c1a2005-07-29 21:42:08 +00001606 free(bob->start_regex);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001607 if (bob->start != NULL) {
1608 regfree(bob->start);
1609 free(bob->start);
1610 }
David Lawrence Ramseyd2361f02005-07-14 18:33:51 +00001611 if (bob->end_regex != NULL)
1612 free(bob->end_regex);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001613 if (bob->end != NULL) {
Chris Allegrettace452fb2003-02-03 02:56:44 +00001614 regfree(bob->end);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001615 free(bob->end);
1616 }
Chris Allegretta6df90f52002-07-19 01:08:59 +00001617 free(bob);
1618 }
1619 syntaxes = syntaxes->next;
1620 free(bill);
1621 }
1622#endif /* ENABLE_COLOR */
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001623#ifndef NANO_TINY
David Lawrence Ramsey40e4acf2005-05-26 06:09:07 +00001624 /* Free the search and replace history lists. */
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001625 if (searchage != NULL)
1626 free_filestruct(searchage);
1627 if (replaceage != NULL)
1628 free_filestruct(replaceage);
Chris Allegretta5beed502003-01-05 20:41:21 +00001629#endif
David Lawrence Ramseya27bd652004-08-17 05:23:38 +00001630#ifdef ENABLE_NANORC
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001631 if (homedir != NULL)
1632 free(homedir);
David Lawrence Ramseya27bd652004-08-17 05:23:38 +00001633#endif
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001634}
Chris Allegretta6232d662002-05-12 19:52:15 +00001635#endif /* DEBUG */
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001636