blob: 21bc27eb6bb1d11a8b4ce559b2eb27cd66fb3fc8 [file] [log] [blame]
Chris Allegretta07fcc4c2008-07-10 20:13:04 +00001/* $Id$ */
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00002/**************************************************************************
3 * global.c *
4 * *
Chris Allegretta8a07a962009-12-02 03:36:22 +00005 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, *
6 * 2008, 2009 Free Software Foundation, Inc. *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00007 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
David Lawrence Ramseyd0035b42007-08-11 05:17:36 +00009 * the Free Software Foundation; either version 3, or (at your option) *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000010 * any later version. *
11 * *
David Lawrence Ramsey6e925cf2005-05-15 19:57:17 +000012 * This program is distributed in the hope that it will be useful, but *
13 * WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
15 * General Public License for more details. *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000016 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the Free Software *
David Lawrence Ramsey6e925cf2005-05-15 19:57:17 +000019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
20 * 02110-1301, USA. *
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000021 * *
22 **************************************************************************/
23
Chris Allegrettaa855fa22008-07-12 02:13:22 +000024#include "proto.h"
25
Chris Allegretta79a33bb2008-03-05 07:34:01 +000026#include <ctype.h>
Chris Allegrettaeb643142008-03-12 04:44:14 +000027#include <string.h>
Chris Allegretta79a33bb2008-03-05 07:34:01 +000028#include <strings.h>
29#include "assert.h"
Chris Allegrettaa2ea1932000-06-06 05:53:49 +000030
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
Chris Allegrettaa48507d2009-08-14 03:18:29 +000055unsigned flags[4] = {0, 0, 0, 0};
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000056 /* 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? */
Chris Allegretta8c1edd12009-11-16 04:28:40 +000069int maxrows = 0;
Benno Schulenberg7f873932014-02-25 21:27:22 +000070 /* How many usable lines there are (due to soft wrapping). */
David Lawrence Ramsey5db0cdc2002-06-28 22:45:14 +000071
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000072filestruct *cutbuffer = NULL;
73 /* The buffer where we store cut text. */
Chris Allegretta12dc8ca2008-07-31 04:24:04 +000074filestruct *cutbottom = NULL;
David Lawrence Ramsey93c84052004-11-23 04:08:28 +000075#ifndef DISABLE_JUSTIFY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000076filestruct *jusbuffer = NULL;
77 /* The buffer where we store unjustified text. */
David Lawrence Ramsey93c84052004-11-23 04:08:28 +000078#endif
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000079partition *filepart = NULL;
80 /* The partition where we store a portion of the current
81 * file. */
David Lawrence Ramsey64661ac2005-07-08 19:57:25 +000082openfilestruct *openfile = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000083 /* The list of all open file buffers. */
Chris Allegretta2d7893d2001-07-11 02:08:33 +000084
David Lawrence Ramseyd89617f2006-01-06 21:51:10 +000085#ifndef NANO_TINY
86char *matchbrackets = NULL;
87 /* The opening and closing brackets that can be found by bracket
88 * searches. */
89#endif
90
David Lawrence Ramseyebe34252005-11-15 03:17:35 +000091#if !defined(NANO_TINY) && defined(ENABLE_NANORC)
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +000092char *whitespace = NULL;
93 /* The characters used when displaying the first characters of
94 * tabs and spaces. */
95int whitespace_len[2];
96 /* The length of these characters. */
David Lawrence Ramsey89bb9372004-05-29 16:47:52 +000097#endif
98
Chris Allegrettae4f940d2002-03-03 22:36:36 +000099#ifndef DISABLE_JUSTIFY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000100char *punct = NULL;
101 /* The closing punctuation that can end sentences. */
102char *brackets = NULL;
103 /* The closing brackets that can follow closing punctuation and
104 * can end sentences. */
105char *quotestr = NULL;
106 /* The quoting string. The default value is set in main(). */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000107#ifdef HAVE_REGEX_H
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000108regex_t quotereg;
109 /* The compiled regular expression from the quoting string. */
110int quoterc;
David Lawrence Ramsey88165642006-05-22 18:30:09 +0000111 /* Whether it was compiled successfully. */
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000112char *quoteerr = NULL;
113 /* The error message, if it didn't. */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000114#else
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000115size_t quotelen;
116 /* The length of the quoting string in bytes. */
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +0000117#endif
Chris Allegretta6df90f52002-07-19 01:08:59 +0000118#endif
Chris Allegrettae4f940d2002-03-03 22:36:36 +0000119
Chris Allegretta0dc26dc2009-01-24 22:40:41 +0000120bool nodelay_mode = FALSE;
121 /* Are we in nodelay mode (checking for a cancel wile doing something */
122
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000123char *answer = NULL;
David Lawrence Ramsey6335fb52007-01-01 05:15:32 +0000124 /* The answer string used by the statusbar prompt. */
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000125
126ssize_t tabsize = -1;
127 /* The width of a tab in spaces. The default value is set in
128 * main(). */
129
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000130#ifndef NANO_TINY
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000131char *backup_dir = NULL;
132 /* The directory where we store backup files. */
Chris Allegrettabf88d272013-01-01 03:24:39 +0000133
Chris Allegretta3116d2f2013-01-03 04:36:39 +0000134const char *locking_prefix = ".";
Chris Allegrettabf88d272013-01-01 03:24:39 +0000135 /* Prefix of how to store the vim-style lock file */
Chris Allegretta3116d2f2013-01-03 04:36:39 +0000136const char *locking_suffix = ".swp";
Chris Allegrettabf88d272013-01-01 03:24:39 +0000137 /* Suffix of the vim-style lock file */
David Lawrence Ramsey04e42a62004-02-28 16:24:31 +0000138#endif
Chris Allegrettae1f14522001-09-19 03:19:43 +0000139#ifndef DISABLE_OPERATINGDIR
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000140char *operating_dir = NULL;
141 /* The relative path to the operating directory, which we can't
142 * move outside of. */
143char *full_operating_dir = NULL;
144 /* The full path to it. */
Chris Allegrettae1f14522001-09-19 03:19:43 +0000145#endif
146
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000147#ifndef DISABLE_SPELLER
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000148char *alt_speller = NULL;
149 /* The command to use for the alternate spell checker. */
Chris Allegretta8d8e0122001-04-18 04:28:54 +0000150#endif
151
Chris Allegretta8ce24132001-04-30 11:28:46 +0000152#ifdef ENABLE_COLOR
David Lawrence Ramsey9b13ff32002-12-22 16:30:00 +0000153syntaxtype *syntaxes = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000154 /* The global list of color syntaxes. */
David Lawrence Ramsey9b13ff32002-12-22 16:30:00 +0000155char *syntaxstr = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000156 /* The color syntax name specified on the command line. */
Chris Allegrettafd265af2009-02-06 03:41:02 +0000157
Chris Allegretta8ce24132001-04-30 11:28:46 +0000158#endif
159
Chris Allegretta637daa82011-02-07 14:45:56 +0000160bool edit_refresh_needed = 0;
Chris Allegretta2ad1de02012-12-30 19:20:10 +0000161 /* Did a command mangle enough of the buffer refresh that we
Benno Schulenberg7f873932014-02-25 21:27:22 +0000162 * should repaint the screen? */
Chris Allegrettafd265af2009-02-06 03:41:02 +0000163
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000164const shortcut *currshortcut;
165 /* The current shortcut list we're using. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000166int currmenu;
Benno Schulenberg7f873932014-02-25 21:27:22 +0000167 /* The currently loaded menu. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000168
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000169sc *sclist = NULL;
Benno Schulenberg7f873932014-02-25 21:27:22 +0000170 /* New shortcut key struct. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000171subnfunc *allfuncs = NULL;
Benno Schulenberg7f873932014-02-25 21:27:22 +0000172 /* New struct for the function list. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000173
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000174#ifndef NANO_TINY
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000175filestruct *search_history = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000176 /* The search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000177filestruct *searchage = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000178 /* The top of the search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000179filestruct *searchbot = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000180 /* The bottom of the search string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000181filestruct *replace_history = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000182 /* The replace string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000183filestruct *replaceage = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000184 /* The top of the replace string history list. */
David Lawrence Ramsey934f9682005-05-23 16:30:06 +0000185filestruct *replacebot = NULL;
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000186 /* The bottom of the replace string history list. */
Chris Allegretta9bfda912011-02-16 06:52:30 +0000187poshiststruct *poshistory;
Benno Schulenberg7f873932014-02-25 21:27:22 +0000188 /* The cursor position history list. */
Chris Allegretta5beed502003-01-05 20:41:21 +0000189#endif
190
David Lawrence Ramseyfc0f8f82006-05-10 13:41:53 +0000191/* Regular expressions. */
Chris Allegretta805c26d2000-09-06 13:39:17 +0000192#ifdef HAVE_REGEX_H
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000193regex_t search_regexp;
194 /* The compiled regular expression to use in searches. */
195regmatch_t regmatches[10];
196 /* The match positions for parenthetical subexpressions, 10
197 * maximum, used in regular expression searches. */
Chris Allegretta6df90f52002-07-19 01:08:59 +0000198#endif
Chris Allegretta3533a342002-03-24 23:19:32 +0000199
David Lawrence Ramsey4d72de72006-04-12 15:27:40 +0000200int reverse_attr = A_REVERSE;
201 /* The curses attribute we use for reverse video. */
Chris Allegrettaa0d89972003-02-03 03:32:08 +0000202
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000203char *homedir = NULL;
David Lawrence Ramseyc1c818e2006-05-14 18:22:01 +0000204 /* The user's home directory, from $HOME or /etc/passwd. */
David Lawrence Ramseya27bd652004-08-17 05:23:38 +0000205
Benno Schulenberg7f873932014-02-25 21:27:22 +0000206/* Return the number of entries in the shortcut list for a given menu. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000207size_t length_of_list(int menu)
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000208{
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000209 subnfunc *f;
David Lawrence Ramseyebd0d7c2004-07-01 18:59:52 +0000210 size_t i = 0;
David Lawrence Ramseye21adfa2002-09-13 18:14:04 +0000211
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000212 for (f = allfuncs; f != NULL; f = f->next)
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000213 if ((f->menus & menu) != 0
214#ifndef DISABLE_HELP
215 && strlen(f->help) > 0
216#endif
217 ) {
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000218 i++;
219 }
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000220 return i;
221}
222
Benno Schulenberg7f873932014-02-25 21:27:22 +0000223/* Just throw this here. */
Chris Allegretta637daa82011-02-07 14:45:56 +0000224void case_sens_void(void)
225{
226}
227void regexp_void(void)
228{
229}
230void gototext_void(void)
231{
232}
233void to_files_void(void)
234{
235}
236void dos_format_void(void)
237{
238}
239void mac_format_void(void)
240{
241}
242void append_void(void)
243{
244}
245void prepend_void(void)
246{
247}
248void backup_file_void(void)
249{
250}
251void new_buffer_void(void)
252{
253}
254void backwards_void(void)
255{
256}
257void goto_dir_void(void)
258{
259}
260void no_replace_void(void)
261{
262}
263void ext_cmd_void(void)
264{
265}
266
Benno Schulenberg7f873932014-02-25 21:27:22 +0000267/* Set type of function based on the string. */
Chris Allegretta5a018f02009-11-29 06:13:22 +0000268function_type strtokeytype(const char *str)
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000269{
Chris Allegretta17436ce2008-03-11 03:03:53 +0000270 if (str[0] == 'M' || str[0] == 'm')
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000271 return META;
Chris Allegretta17436ce2008-03-11 03:03:53 +0000272 else if (str[0] == '^')
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000273 return CONTROL;
Chris Allegretta18b10922014-01-01 22:21:38 +0000274 else if (str[0] == 'F' || str[0] == 'f')
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000275 return FKEY;
Chris Allegretta17436ce2008-03-11 03:03:53 +0000276 else
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000277 return RAWINPUT;
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000278}
279
Benno Schulenberg7f873932014-02-25 21:27:22 +0000280/* Add a string to the new function list struct.
281 * Does not allow updates, not yet anyway. */
Chris Allegretta637daa82011-02-07 14:45:56 +0000282void add_to_funcs(void (*func)(void), int menus, const char *desc, const char *help,
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000283 bool blank_after, bool viewok)
284{
285 subnfunc *f;
286
287 if (allfuncs == NULL) {
Chris Allegrettaf86fa862009-02-25 04:32:15 +0000288 allfuncs = (subnfunc *) nmalloc(sizeof(subnfunc));
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000289 f = allfuncs;
290 } else {
291 for (f = allfuncs; f->next != NULL; f = f->next)
292 ;
293 f->next = (subnfunc *)nmalloc(sizeof(subnfunc));
294 f = f->next;
295 }
296 f->next = NULL;
297 f->scfunc = func;
298 f->menus = menus;
299 f->desc = desc;
300 f->viewok = viewok;
Chris Allegretta1d778232008-08-30 21:00:00 +0000301#ifndef DISABLE_HELP
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000302 f->help = help;
303 f->blank_after = blank_after;
304#endif
305
306#ifdef DEBUG
Benno Schulenberg3ae5bab2014-03-03 08:53:38 +0000307 fprintf(stderr, "Added func \"%s\"\n", f->desc);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000308#endif
309}
310
Chris Allegrettabf406ff2013-06-14 02:44:54 +0000311const sc *first_sc_for(int menu, void (*func)(void))
312{
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000313 const sc *s;
Chris Allegrettabf406ff2013-06-14 02:44:54 +0000314 const sc *fkeysc = NULL;
Chris Allegrettab775c072008-03-09 05:07:37 +0000315 const sc *metasc = NULL;
Chris Allegrettaf7c68cd2014-03-05 04:30:07 +0000316 const sc *rawsc = NULL;
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000317
318 for (s = sclist; s != NULL; s = s->next) {
319 if ((s->menu & menu) && s->scfunc == func) {
Chris Allegrettabf406ff2013-06-14 02:44:54 +0000320 /* Try to use function keys and meta sequences as last
321 * resorts. Otherwise, we will run into problems when we
322 * try and handle things like the arrow keys, Home, etc., if
323 * for some reason the user bound them to a function key or
324 * meta sequence first *shrug*. */
325 if (s->type == FKEY) {
326 if (!fkeysc)
327 fkeysc = s;
Chris Allegrettab775c072008-03-09 05:07:37 +0000328 continue;
Chris Allegrettabf406ff2013-06-14 02:44:54 +0000329 } else if (s->type == META) {
330 if (!metasc)
331 metasc = s;
332 continue;
Chris Allegrettaf7c68cd2014-03-05 04:30:07 +0000333 } else if (s->type == RAWINPUT) {
334 if (!rawsc)
335 rawsc = s;
336 continue;
Chris Allegrettabf406ff2013-06-14 02:44:54 +0000337 }
338
339 /* Otherwise, it was something else, so use it. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000340 return s;
341 }
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000342 }
343
Chris Allegrettabf406ff2013-06-14 02:44:54 +0000344 /* If we're here, we may have found only function keys or meta
345 * sequences. If so, use one, with the same priority as in the
346 * help browser: function keys come first, unless meta sequences are
Chris Allegrettaf7c68cd2014-03-05 04:30:07 +0000347 * available, in which case meta sequences come first. Last choice
348 * is the raw key. */
Chris Allegrettabf406ff2013-06-14 02:44:54 +0000349 if (fkeysc && !metasc)
350 return fkeysc;
351 else if (metasc)
Chris Allegretta17436ce2008-03-11 03:03:53 +0000352 return metasc;
Chris Allegrettaf7c68cd2014-03-05 04:30:07 +0000353 else if (rawsc)
354 return rawsc;
Chris Allegrettab775c072008-03-09 05:07:37 +0000355
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000356#ifdef DEBUG
Chris Allegrettae347efb2008-03-09 02:52:40 +0000357 fprintf(stderr, "Whoops, returning null given func %ld in menu %d\n", (long) func, menu);
David Lawrence Ramseybd28ee42006-07-25 21:13:30 +0000358#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000359 /* Otherwise... */
360 return NULL;
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000361}
362
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000363
Benno Schulenberg7f873932014-02-25 21:27:22 +0000364/* Add a string to the new shortcut list implementation.
365 * Allows updates to existing entries in the list. */
Chris Allegretta637daa82011-02-07 14:45:56 +0000366void add_to_sclist(int menu, const char *scstring, void (*func)(void), int toggle, int execute)
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000367{
368 sc *s;
369
370 if (sclist == NULL) {
Chris Allegrettaf86fa862009-02-25 04:32:15 +0000371 sclist = (sc *) nmalloc(sizeof(sc));
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000372 s = sclist;
373 s->next = NULL;
374 } else {
375 for (s = sclist; s->next != NULL; s = s->next)
376 if (s->menu == menu && s->keystr == scstring)
377 break;
378
379 if (s->menu != menu || s->keystr != scstring) { /* i.e. this is not a replace... */
380#ifdef DEBUG
381 fprintf(stderr, "No match found...\n");
382#endif
383 s->next = (sc *)nmalloc(sizeof(sc));
384 s = s->next;
385 s->next = NULL;
386 }
387 }
388
389 s->type = strtokeytype(scstring);
390 s->menu = menu;
391 s->toggle = toggle;
Chris Allegretta5a018f02009-11-29 06:13:22 +0000392 s->keystr = (char *) scstring;
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000393 s->scfunc = func;
394 s->execute = execute;
395 assign_keyinfo(s);
396
397#ifdef DEBUG
398 fprintf(stderr, "list val = %d\n", (int) s->menu);
399 fprintf(stderr, "Hey, set sequence to %d for shortcut \"%s\"\n", s->seq, scstring);
400#endif
401}
402
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000403
Benno Schulenberg7f873932014-02-25 21:27:22 +0000404/* Assign one menu's shortcuts to another function. */
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000405void replace_scs_for(void (*oldfunc)(void), void (*newfunc)(void))
406{
407 sc *s;
408
409 if (sclist == NULL)
410 return;
411
412 for (s = sclist; s->next != NULL; s = s->next)
413 if (s->scfunc == oldfunc) {
414 s->scfunc = newfunc;
415 }
416}
417
418
Chris Allegrettae347efb2008-03-09 02:52:40 +0000419/* Return the given menu's first shortcut sequence, or the default value
Benno Schulenberg7f873932014-02-25 21:27:22 +0000420 * (2nd arg). Assumes currmenu for the menu to check. */
Chris Allegretta2ad1de02012-12-30 19:20:10 +0000421int sc_seq_or (void (*func)(void), int defaultval)
Chris Allegrettae347efb2008-03-09 02:52:40 +0000422{
423 const sc *s = first_sc_for(currmenu, func);
424
425 if (s)
426 return s->seq;
427 /* else */
428 return defaultval;
429
430}
431
Benno Schulenberg7f873932014-02-25 21:27:22 +0000432/* Assign the info to the shortcut struct.
433 * Assumes keystr is already assigned, naturally. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000434void assign_keyinfo(sc *s)
435{
436 if (s->type == CONTROL) {
437 assert(strlen(s->keystr) > 1);
438 s->seq = s->keystr[1] - 64;
439 } else if (s->type == META) {
440 assert(strlen(s->keystr) > 2);
441 s->seq = tolower((int) s->keystr[2]);
442 } else if (s->type == FKEY) {
443 assert(strlen(s->keystr) > 1);
444 s->seq = KEY_F0 + atoi(&s->keystr[1]);
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000445 } else /* RAWINPUT */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000446 s->seq = (int) s->keystr[0];
Chris Allegretta9b422202008-03-05 17:15:33 +0000447
Benno Schulenberg7f873932014-02-25 21:27:22 +0000448 /* Override some keys which don't bind as nicely as we'd like. */
Chris Allegretta9b422202008-03-05 17:15:33 +0000449 if (s->type == CONTROL && (!strcasecmp(&s->keystr[1], "space")))
450 s->seq = 0;
451 else if (s->type == META && (!strcasecmp(&s->keystr[2], "space")))
452 s->seq = (int) ' ';
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000453 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kup")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000454 s->seq = KEY_UP;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000455 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kdown")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000456 s->seq = KEY_DOWN;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000457 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kleft")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000458 s->seq = KEY_LEFT;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000459 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kright")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000460 s->seq = KEY_RIGHT;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000461 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kinsert")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000462 s->seq = KEY_IC;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000463 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kdel")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000464 s->seq = KEY_DC;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000465 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kbsp")))
Chris Allegrettaeb643142008-03-12 04:44:14 +0000466 s->seq = KEY_BACKSPACE;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000467 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kenter")))
Chris Allegrettaeb643142008-03-12 04:44:14 +0000468 s->seq = KEY_ENTER;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000469 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kpup")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000470 s->seq = KEY_PPAGE;
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000471 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kpdown")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000472 s->seq = KEY_NPAGE;
473#ifdef KEY_HOME
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000474 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "khome")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000475 s->seq = KEY_HOME;
476#endif
477#ifdef KEY_END
Chris Allegretta3bd12e32011-02-26 14:22:37 +0000478 else if (s->type == RAWINPUT && (!strcasecmp(s->keystr, "kend")))
Chris Allegretta17436ce2008-03-11 03:03:53 +0000479 s->seq = KEY_END;
480#endif
Chris Allegretta9b422202008-03-05 17:15:33 +0000481
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000482}
483
484#ifdef DEBUG
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000485void print_sclist(void)
486{
487 sc *s;
488 const subnfunc *f;
489
490 for (s = sclist; s->next != NULL; s = s->next) {
491 f = sctofunc(s);
492 if (f)
Chris Allegrettae347efb2008-03-09 02:52:40 +0000493 fprintf(stderr, "Shortcut \"%s\", function: %s, menus %d\n", s->keystr, f->desc, f->menus);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000494 else
495 fprintf(stderr, "Hmm, didnt find a func for \"%s\"\n", s->keystr);
496 }
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000497}
498#endif
499
500
Benno Schulenberg7f873932014-02-25 21:27:22 +0000501/* Stuff we need to make at least static here so we can access it below. */
502/* TRANSLATORS: Try to keep the next six strings at most 10 characters. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000503const char *cancel_msg = N_("Cancel");
Chris Allegrettab43f6912009-11-29 06:24:10 +0000504const char *replace_msg = N_("Replace");
505const char *no_replace_msg = N_("No Replace");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000506
507#ifndef NANO_TINY
508const char *case_sens_msg = N_("Case Sens");
509const char *backwards_msg = N_("Backwards");
510#endif
511
512#ifdef HAVE_REGEX_H
513const char *regexp_msg = N_("Regexp");
514#endif
515
Benno Schulenberg7f873932014-02-25 21:27:22 +0000516/* Stuff we want to just stun out if we're in TINY mode. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000517#ifdef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000518const char *gototext_msg = "";
Chris Allegrettae347efb2008-03-09 02:52:40 +0000519const char *do_para_begin_msg = "";
520const char *do_para_end_msg = "";
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000521const char *case_sens_msg = "";
522const char *backwards_msg = "";
523const char *do_cut_till_end = "";
524const char *dos_format_msg = "";
525const char *mac_format_msg = "";
526const char *append_msg = "";
527const char *prepend_msg = "";
528const char *backup_file_msg = "";
529const char *to_files_msg = "";
Chris Allegrettae347efb2008-03-09 02:52:40 +0000530const char *first_file_msg = "";
531const char *whereis_next_msg = "";
Chris Allegrettae347efb2008-03-09 02:52:40 +0000532const char *last_file_msg = "";
533const char *new_buffer_msg = "";
534const char *goto_dir_msg;
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000535const char *ext_cmd_msg = "";
Chris Allegrettae347efb2008-03-09 02:52:40 +0000536
537#else
Benno Schulenberg7f873932014-02-25 21:27:22 +0000538/* TRANSLATORS: Try to keep the next three strings at most 10 characters. */
Chris Allegrettae347efb2008-03-09 02:52:40 +0000539const char *prev_history_msg = N_("PrevHstory");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000540const char *next_history_msg = N_("NextHstory");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000541const char *gototext_msg = N_("Go To Text");
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000542/* TRANSLATORS: Try to keep the next three strings at most 12 characters. */
Chris Allegrettae347efb2008-03-09 02:52:40 +0000543const char *whereis_next_msg = N_("WhereIs Next");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000544#ifndef DISABLE_BROWSER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000545const char *first_file_msg = N_("First File");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000546const char *last_file_msg = N_("Last File");
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000547/* TRANSLATORS: Try to keep the next nine strings at most 16 characters. */
548const char *to_files_msg = N_("To Files");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000549#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000550const char *dos_format_msg = N_("DOS Format");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000551const char *mac_format_msg = N_("Mac Format");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000552const char *append_msg = N_("Append");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000553const char *prepend_msg = N_("Prepend");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000554const char *backup_file_msg = N_("Backup File");
Chris Allegrettaeb643142008-03-12 04:44:14 +0000555const char *ext_cmd_msg = N_("Execute Command");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000556#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000557const char *new_buffer_msg = N_("New Buffer");
558#endif
Chris Allegrettae347efb2008-03-09 02:52:40 +0000559const char *goto_dir_msg = N_("Go To Dir");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000560
Chris Allegrettae347efb2008-03-09 02:52:40 +0000561#endif /* NANO_TINY */
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000562
Benno Schulenberg7f873932014-02-25 21:27:22 +0000563/* Initialize all shortcut lists. If unjustify is TRUE, replace
564 * the Uncut shortcut in the main shortcut list with UnJustify. */
David Lawrence Ramsey1f1ebb82004-11-11 21:50:01 +0000565void shortcut_init(bool unjustify)
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000566{
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000567 /* TRANSLATORS: Try to keep the following strings at most 10 characters. */
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000568 const char *get_help_msg = N_("Get Help");
569 const char *exit_msg = N_("Exit");
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000570 const char *whereis_msg = N_("Where Is");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000571 const char *prev_page_msg = N_("Prev Page");
572 const char *next_page_msg = N_("Next Page");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000573 const char *first_line_msg = N_("First Line");
574 const char *last_line_msg = N_("Last Line");
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000575 const char *suspend_msg = N_("Suspend");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000576#ifndef DISABLE_JUSTIFY
577 const char *beg_of_par_msg = N_("Beg of Par");
578 const char *end_of_par_msg = N_("End of Par");
579 const char *fulljstify_msg = N_("FullJstify");
580#endif
David Lawrence Ramsey81378762006-04-24 20:53:43 +0000581 const char *refresh_msg = N_("Refresh");
Chris Allegrettab43f6912009-11-29 06:24:10 +0000582#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000583 const char *insert_file_msg = N_("Insert File");
Chris Allegrettab43f6912009-11-29 06:24:10 +0000584#endif
Chris Allegrettae347efb2008-03-09 02:52:40 +0000585 const char *go_to_line_msg = N_("Go To Line");
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000586 const char *spell_msg = N_("To Spell");
587#ifdef ENABLE_COLOR
588 const char *lint_msg = N_("To Linter");
589 const char *nano_lint_msg =
590 N_("Invoke the linter, if available");
591 const char *prev_lint_msg = N_("Prev Lint Msg");
592 const char *next_lint_msg = N_("Next Lint Msg");
593#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000594
Chris Allegretta1d778232008-08-30 21:00:00 +0000595#ifndef DISABLE_JUSTIFY
Benno Schulenberg7f873932014-02-25 21:27:22 +0000596 /* TRANSLATORS: The next long series of strings are shortcut descriptions;
597 * they are best kept shorter than 56 characters, but may be longer. */
Chris Allegretta1d778232008-08-30 21:00:00 +0000598 const char *nano_justify_msg = N_("Justify the current paragraph");
599#endif
Chris Allegrettadab017e2002-04-23 10:56:06 +0000600#ifndef DISABLE_HELP
David Lawrence Ramsey804e1072006-03-29 19:43:32 +0000601 const char *nano_cancel_msg = N_("Cancel the current function");
David Lawrence Ramsey57c9afb2006-04-14 20:21:45 +0000602 const char *nano_help_msg = N_("Display this help text");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000603 const char *nano_exit_msg =
Chris Allegretta7162e3d2002-04-06 05:02:14 +0000604#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000605 N_("Close the current file buffer / Exit from nano")
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000606#else
Benno Schulenberga65ef422014-03-17 21:36:37 +0000607 N_("Exit from nano")
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000608#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000609 ;
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000610 const char *nano_writeout_msg =
611 N_("Write the current file to disk");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000612 const char *nano_insert_msg =
613 N_("Insert another file into the current one");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000614 const char *nano_whereis_msg =
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000615 N_("Search for a string or a regular expression");
Benno Schulenberg960a1202014-03-18 22:04:41 +0000616 const char *nano_browser_whereis_msg =
617 N_("Search for a string");
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000618 const char *nano_prevpage_msg = N_("Go to previous screen");
619 const char *nano_nextpage_msg = N_("Go to next screen");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000620 const char *nano_cut_msg =
621 N_("Cut the current line and store it in the cutbuffer");
622 const char *nano_uncut_msg =
623 N_("Uncut from the cutbuffer into the current line");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000624 const char *nano_cursorpos_msg =
David Lawrence Ramseyf50bd4b2006-04-14 20:15:44 +0000625 N_("Display the position of the cursor");
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000626 const char *nano_spell_msg =
627 N_("Invoke the spell checker, if available");
David Lawrence Ramseybe231d32006-05-21 21:37:21 +0000628 const char *nano_replace_msg =
629 N_("Replace a string or a regular expression");
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000630 const char *nano_gotoline_msg = N_("Go to line and column number");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000631#ifndef NANO_TINY
David Lawrence Ramsey8381fdd2004-11-01 22:40:02 +0000632 const char *nano_mark_msg = N_("Mark text at the cursor position");
633 const char *nano_whereis_next_msg = N_("Repeat last search");
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000634 const char *nano_copy_msg =
635 N_("Copy the current line and store it in the cutbuffer");
David Lawrence Ramseyaee00d42006-07-05 18:42:22 +0000636 const char *nano_indent_msg = N_("Indent the current line");
637 const char *nano_unindent_msg = N_("Unindent the current line");
Chris Allegretta07fcc4c2008-07-10 20:13:04 +0000638 const char *nano_undo_msg = N_("Undo the last operation");
639 const char *nano_redo_msg = N_("Redo the last undone operation");
David Lawrence Ramsey4b4b6082004-11-01 22:54:40 +0000640#endif
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000641 const char *nano_forward_msg = N_("Go forward one character");
642 const char *nano_back_msg = N_("Go back one character");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000643#ifndef NANO_TINY
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000644 const char *nano_nextword_msg = N_("Go forward one word");
645 const char *nano_prevword_msg = N_("Go back one word");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000646#endif
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000647 const char *nano_prevline_msg = N_("Go to previous line");
648 const char *nano_nextline_msg = N_("Go to next line");
649 const char *nano_home_msg = N_("Go to beginning of current line");
650 const char *nano_end_msg = N_("Go to end of current line");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000651#ifndef DISABLE_JUSTIFY
652 const char *nano_parabegin_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000653 N_("Go to beginning of paragraph; then of previous paragraph");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000654 const char *nano_paraend_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000655 N_("Go just beyond end of paragraph; then of next paragraph");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000656#endif
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000657 const char *nano_firstline_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000658 N_("Go to the first line of the file");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000659 const char *nano_lastline_msg =
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000660 N_("Go to the last line of the file");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000661#ifndef NANO_TINY
David Lawrence Ramsey9f1db5d2007-02-01 13:40:59 +0000662 const char *nano_bracket_msg = N_("Go to the matching bracket");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000663 const char *nano_scrollup_msg =
664 N_("Scroll up one line without scrolling the cursor");
665 const char *nano_scrolldown_msg =
666 N_("Scroll down one line without scrolling the cursor");
667#endif
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000668#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +0000669 const char *nano_prevfile_msg =
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000670 N_("Switch to the previous file buffer");
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +0000671 const char *nano_nextfile_msg =
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000672 N_("Switch to the next file buffer");
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000673#endif
David Lawrence Ramsey40e05722006-04-23 19:21:12 +0000674 const char *nano_verbatim_msg =
David Lawrence Ramsey939d4232006-04-24 21:00:17 +0000675 N_("Insert the next keystroke verbatim");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000676 const char *nano_tab_msg =
David Lawrence Ramseybf784202006-04-29 13:59:04 +0000677 N_("Insert a tab at the cursor position");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000678 const char *nano_enter_msg =
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000679 N_("Insert a newline at the cursor position");
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000680 const char *nano_delete_msg =
681 N_("Delete the character under the cursor");
682 const char *nano_backspace_msg =
683 N_("Delete the character to the left of the cursor");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000684#ifndef NANO_TINY
David Lawrence Ramsey295d1722005-01-01 07:43:32 +0000685 const char *nano_cut_till_end_msg =
686 N_("Cut from the cursor position to the end of the file");
687#endif
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000688#ifndef DISABLE_JUSTIFY
689 const char *nano_fulljustify_msg = N_("Justify the entire file");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000690#endif
David Lawrence Ramseyc5c52302005-11-15 23:45:29 +0000691#ifndef NANO_TINY
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000692 const char *nano_wordcount_msg =
693 N_("Count the number of words, lines, and characters");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000694#endif
David Lawrence Ramsey854a44a2006-04-24 21:14:55 +0000695 const char *nano_refresh_msg =
696 N_("Refresh (redraw) the current screen");
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000697 const char *nano_suspend_msg =
698 N_("Suspend the editor (if suspend is enabled)");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000699#ifndef NANO_TINY
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000700 const char *nano_case_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000701 N_("Toggle the case sensitivity of the search");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000702 const char *nano_reverse_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000703 N_("Reverse the direction of the search");
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000704#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000705#ifdef HAVE_REGEX_H
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000706 const char *nano_regexp_msg =
707 N_("Toggle the use of regular expressions");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000708#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000709#ifndef NANO_TINY
David Lawrence Ramsey305d8892006-05-24 19:48:03 +0000710 const char *nano_prev_history_msg =
David Lawrence Ramsey7b0531a2006-07-31 01:30:31 +0000711 N_("Recall the previous search/replace string");
David Lawrence Ramsey305d8892006-05-24 19:48:03 +0000712 const char *nano_next_history_msg =
David Lawrence Ramsey7b0531a2006-07-31 01:30:31 +0000713 N_("Recall the next search/replace string");
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +0000714#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000715#ifndef DISABLE_BROWSER
716 const char *nano_tofiles_msg = N_("Go to file browser");
717#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000718#ifndef NANO_TINY
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000719 const char *nano_dos_msg = N_("Toggle the use of DOS format");
720 const char *nano_mac_msg = N_("Toggle the use of Mac format");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000721#endif
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000722 const char *nano_append_msg = N_("Toggle appending");
723 const char *nano_prepend_msg = N_("Toggle prepending");
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000724#ifndef NANO_TINY
David Lawrence Ramsey9b108c22005-06-06 18:38:16 +0000725 const char *nano_backup_msg =
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000726 N_("Toggle backing up of the original file");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000727 const char *nano_execute_msg = N_("Execute external command");
728#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000729#if !defined(NANO_TINY) && defined(ENABLE_MULTIBUFFER)
David Lawrence Ramsey69e1ce52006-06-08 02:37:45 +0000730 const char *nano_multibuffer_msg =
731 N_("Toggle the use of a new buffer");
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000732#endif
733#ifndef DISABLE_BROWSER
David Lawrence Ramseyc41d4282004-07-23 12:51:40 +0000734 const char *nano_exitbrowser_msg = N_("Exit from the file browser");
David Lawrence Ramseye38b8082006-03-30 07:03:04 +0000735 const char *nano_firstfile_msg =
736 N_("Go to the first file in the list");
737 const char *nano_lastfile_msg =
738 N_("Go to the last file in the list");
Chris Allegretta8d41fb82009-12-23 05:03:09 +0000739 const char *nano_forwardfile_msg = N_("Go to the next file in the list");
740 const char *nano_backfile_msg = N_("Go to the previous file in the list");
David Lawrence Ramseyc41d4282004-07-23 12:51:40 +0000741 const char *nano_gotodir_msg = N_("Go to directory");
Chris Allegretta2bef1822001-09-28 19:53:11 +0000742#endif
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000743#ifdef ENABLE_COLOR
744 const char *nano_prevlint_msg = N_("Go to previous linter msg");
745 const char *nano_nextlint_msg = N_("Go to next linter msg");
746#endif
Chris Allegrettadab017e2002-04-23 10:56:06 +0000747#endif /* !DISABLE_HELP */
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000748
David Lawrence Ramseyea43a1d2004-03-02 22:52:57 +0000749#ifndef DISABLE_HELP
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000750#define IFSCHELP(help) help
David Lawrence Ramseyea43a1d2004-03-02 22:52:57 +0000751#else
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000752#define IFSCHELP(help) ""
Chris Allegrettadab017e2002-04-23 10:56:06 +0000753#endif
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000754
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000755 while (allfuncs != NULL) {
756 subnfunc *f = allfuncs;
757 allfuncs = (allfuncs)->next;
758 free(f);
759 }
David Lawrence Ramsey576bf332004-07-12 03:10:30 +0000760
Chris Allegretta637daa82011-02-07 14:45:56 +0000761 add_to_funcs(do_help_void,
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000762 (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MBROWSER|MWHEREISFILE|MGOTODIR|MLINTER),
Chris Allegrettab27b3a12009-12-04 04:29:55 +0000763 get_help_msg, IFSCHELP(nano_help_msg), FALSE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000764
Benno Schulenberge34ac8e2014-03-17 12:15:23 +0000765 add_to_funcs(do_cancel,
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000766 (MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MWHEREISFILE|MGOTODIR|MYESNO|MLINTER),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000767 cancel_msg, IFSCHELP(nano_cancel_msg), FALSE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000768
Chris Allegretta637daa82011-02-07 14:45:56 +0000769 add_to_funcs(do_exit, MMAIN,
Chris Allegretta355fbe52001-07-14 19:32:47 +0000770#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000771 /* TRANSLATORS: Try to keep this at most 10 characters. */
David Lawrence Ramsey017dde22006-03-24 05:28:03 +0000772 openfile != NULL && openfile != openfile->next ? N_("Close") :
Chris Allegretta2d7893d2001-07-11 02:08:33 +0000773#endif
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000774 exit_msg, IFSCHELP(nano_exit_msg), FALSE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000775
Chris Allegrettadcd19c92008-03-20 04:51:26 +0000776#ifndef DISABLE_BROWSER
Chris Allegretta637daa82011-02-07 14:45:56 +0000777 add_to_funcs(do_exit, MBROWSER, exit_msg, IFSCHELP(nano_exitbrowser_msg), FALSE, VIEW);
Chris Allegrettadcd19c92008-03-20 04:51:26 +0000778#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000779
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000780 /* TRANSLATORS: Try to keep this at most 10 characters. */
Benno Schulenberg6ae77602014-03-04 10:30:15 +0000781 add_to_funcs(do_writeout_void, MMAIN, N_("Write Out"),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000782 IFSCHELP(nano_writeout_msg), FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000783
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000784 /* We allow inserting files in view mode if multibuffers are
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +0000785 * available, so that we can view multiple files. If we're using
786 * restricted mode, inserting files is disabled, since it allows
787 * reading from or writing to files not specified on the command
788 * line. */
Chris Allegrettaab538642010-11-12 06:22:12 +0000789
Chris Allegretta637daa82011-02-07 14:45:56 +0000790 add_to_funcs(do_insertfile_void,
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000791 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000792 MMAIN, N_("Read File"), IFSCHELP(nano_insert_msg), FALSE,
Chris Allegretta32da4562002-01-02 15:12:21 +0000793#ifdef ENABLE_MULTIBUFFER
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000794 VIEW);
Chris Allegretta32da4562002-01-02 15:12:21 +0000795#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000796 NOVIEW);
Chris Allegretta32da4562002-01-02 15:12:21 +0000797#endif
Chris Allegrettaaf6414a2001-02-11 19:05:05 +0000798
Benno Schulenberg960a1202014-03-18 22:04:41 +0000799 add_to_funcs(do_search, MMAIN, whereis_msg,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000800 IFSCHELP(nano_whereis_msg), FALSE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000801
Benno Schulenberg960a1202014-03-18 22:04:41 +0000802 add_to_funcs(do_search, MBROWSER, whereis_msg,
803 IFSCHELP(nano_browser_whereis_msg), FALSE, VIEW);
804
Chris Allegrettae52eac52014-03-02 05:27:56 +0000805#ifndef NANO_TINY
Benno Schulenbergcae7aea2014-02-26 20:37:40 +0000806 add_to_funcs(do_research, MBROWSER, whereis_next_msg,
807 IFSCHELP(nano_whereis_next_msg), TRUE, VIEW);
Benno Schulenberge4c34c32014-03-17 14:15:57 +0000808#endif
Benno Schulenbergcae7aea2014-02-26 20:37:40 +0000809
810#ifndef DISABLE_JUSTIFY
811 /* TRANSLATORS: Try to keep this at most 10 characters. */
812 add_to_funcs(do_justify_void, MMAIN, N_("Justify"),
813 nano_justify_msg, TRUE, NOVIEW);
814#endif
815
Chris Allegretta637daa82011-02-07 14:45:56 +0000816 add_to_funcs(do_page_up, MMAIN|MHELP|MBROWSER,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000817 prev_page_msg, IFSCHELP(nano_prevpage_msg), FALSE, VIEW);
Chris Allegretta637daa82011-02-07 14:45:56 +0000818 add_to_funcs(do_page_down, MMAIN|MHELP|MBROWSER,
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000819 next_page_msg, IFSCHELP(nano_nextpage_msg), TRUE, VIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000820
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000821#ifdef ENABLE_COLOR
822 add_to_funcs(do_page_up, MLINTER,
823 prev_lint_msg, IFSCHELP(nano_prevlint_msg), FALSE, VIEW);
824 add_to_funcs(do_page_down, MLINTER,
825 next_lint_msg, IFSCHELP(nano_nextlint_msg), FALSE, VIEW);
826#endif
Chris Allegretta07fcc4c2008-07-10 20:13:04 +0000827
David Lawrence Ramseycde90392006-04-09 18:27:42 +0000828 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta637daa82011-02-07 14:45:56 +0000829 add_to_funcs(do_cut_text_void, MMAIN, N_("Cut Text"), IFSCHELP(nano_cut_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000830 FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000831
Chris Allegretta07798352000-11-27 22:58:23 +0000832 if (unjustify)
David Lawrence Ramseyed467e52006-07-03 18:40:53 +0000833 /* TRANSLATORS: Try to keep this at most 10 characters. */
Benno Schulenberg6ae77602014-03-04 10:30:15 +0000834 add_to_funcs(do_uncut_text, MMAIN, N_("Unjustify"), "",
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000835 FALSE, NOVIEW);
Chris Allegretta07798352000-11-27 22:58:23 +0000836 else
David Lawrence Ramseyed467e52006-07-03 18:40:53 +0000837 /* TRANSLATORS: Try to keep this at most 10 characters. */
Benno Schulenberg6ae77602014-03-04 10:30:15 +0000838 add_to_funcs(do_uncut_text, MMAIN, N_("Uncut Text"), IFSCHELP(nano_uncut_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000839 FALSE, NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000840
Chris Allegrettae347efb2008-03-09 02:52:40 +0000841#ifndef NANO_TINY
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000842 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta637daa82011-02-07 14:45:56 +0000843 add_to_funcs(do_cursorpos_void, MMAIN, N_("Cur Pos"), IFSCHELP(nano_cursorpos_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000844 FALSE, VIEW);
Chris Allegrettae347efb2008-03-09 02:52:40 +0000845#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000846
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +0000847 /* If we're using restricted mode, spell checking is disabled
848 * because it allows reading from or writing to files not specified
849 * on the command line. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000850#ifndef DISABLE_SPELLER
Chris Allegrettaab538642010-11-12 06:22:12 +0000851 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000852 add_to_funcs(do_spell, MMAIN, spell_msg, IFSCHELP(nano_spell_msg),
Chris Allegrettaab538642010-11-12 06:22:12 +0000853 TRUE, NOVIEW);
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +0000854#endif
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000855
Chris Allegretta5575bfa2014-02-24 10:18:15 +0000856#ifdef ENABLE_COLOR
857 add_to_funcs(do_linter, MMAIN, lint_msg, IFSCHELP(nano_lint_msg),
858 TRUE, NOVIEW);
859#endif
860
Chris Allegretta637daa82011-02-07 14:45:56 +0000861 add_to_funcs(do_first_line,
Chris Allegrettaa97cb812009-12-02 03:24:18 +0000862 (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE),
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000863 first_line_msg, IFSCHELP(nano_firstline_msg), FALSE, VIEW);
David Lawrence Ramseya593f532003-11-28 19:47:42 +0000864
Chris Allegretta637daa82011-02-07 14:45:56 +0000865 add_to_funcs(do_last_line,
Chris Allegrettaa97cb812009-12-02 03:24:18 +0000866 (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000867 last_line_msg, IFSCHELP(nano_lastline_msg), TRUE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000868
Chris Allegretta637daa82011-02-07 14:45:56 +0000869 add_to_funcs(do_gotolinecolumn_void, (MMAIN|MWHEREIS),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000870 go_to_line_msg, IFSCHELP(nano_gotoline_msg), FALSE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000871
Chris Allegrettae347efb2008-03-09 02:52:40 +0000872#ifdef NANO_TINY
Chris Allegretta1fb25fd2008-03-18 03:06:27 +0000873 /* TRANSLATORS: Try to keep this at most 10 characters. */
Chris Allegretta637daa82011-02-07 14:45:56 +0000874 add_to_funcs(do_cursorpos_void, MMAIN, N_("Cur Pos"), IFSCHELP(nano_cursorpos_msg),
Chris Allegrettae347efb2008-03-09 02:52:40 +0000875 FALSE, VIEW);
876#endif
877
Chris Allegretta637daa82011-02-07 14:45:56 +0000878 add_to_funcs(do_replace, (MMAIN|MWHEREIS), replace_msg, IFSCHELP(nano_replace_msg),
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000879#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000880 FALSE,
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000881#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000882 TRUE,
David Lawrence Ramseyf1e56272006-05-22 18:28:20 +0000883#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000884 NOVIEW);
Chris Allegrettaa2ea1932000-06-06 05:53:49 +0000885
David Lawrence Ramseyebe34252005-11-15 03:17:35 +0000886#ifndef NANO_TINY
Chris Allegretta2ad1de02012-12-30 19:20:10 +0000887 add_to_funcs(do_mark, MMAIN, N_("Mark Text"),
Chris Allegretta1d778232008-08-30 21:00:00 +0000888 IFSCHELP(nano_mark_msg), FALSE, VIEW);
David Lawrence Ramseycf1879b2006-04-27 23:39:49 +0000889
Benno Schulenbergcae7aea2014-02-26 20:37:40 +0000890 add_to_funcs(do_research, MMAIN, whereis_next_msg,
Chris Allegretta1d778232008-08-30 21:00:00 +0000891 IFSCHELP(nano_whereis_next_msg), TRUE, VIEW);
David Lawrence Ramseyf85001a2006-04-28 13:19:56 +0000892
Chris Allegretta637daa82011-02-07 14:45:56 +0000893 add_to_funcs(do_copy_text, MMAIN, N_("Copy Text"),
Chris Allegretta1d778232008-08-30 21:00:00 +0000894 IFSCHELP(nano_copy_msg), FALSE, NOVIEW);
David Lawrence Ramseyf85001a2006-04-28 13:19:56 +0000895
Chris Allegretta637daa82011-02-07 14:45:56 +0000896 add_to_funcs(do_indent_void, MMAIN, N_("Indent Text"),
Chris Allegretta1d778232008-08-30 21:00:00 +0000897 IFSCHELP(nano_indent_msg), FALSE, NOVIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000898
Chris Allegretta637daa82011-02-07 14:45:56 +0000899 add_to_funcs(do_unindent, MMAIN, N_("Unindent Text"),
Chris Allegretta1d778232008-08-30 21:00:00 +0000900 IFSCHELP(nano_unindent_msg), FALSE, NOVIEW);
Chris Allegretta07fcc4c2008-07-10 20:13:04 +0000901
Chris Allegrettaa48507d2009-08-14 03:18:29 +0000902 if (ISSET(UNDOABLE)) {
Chris Allegretta637daa82011-02-07 14:45:56 +0000903 add_to_funcs(do_undo, MMAIN, N_("Undo"),
Chris Allegrettaad37e672009-07-12 03:36:58 +0000904 IFSCHELP(nano_undo_msg), FALSE, NOVIEW);
Chris Allegretta07fcc4c2008-07-10 20:13:04 +0000905
Chris Allegretta637daa82011-02-07 14:45:56 +0000906 add_to_funcs(do_redo, MMAIN, N_("Redo"),
Chris Allegrettaad37e672009-07-12 03:36:58 +0000907 IFSCHELP(nano_redo_msg), TRUE, NOVIEW);
908 }
Benno Schulenberge4c34c32014-03-17 14:15:57 +0000909#endif /* !NANO_TINY */
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000910
Chris Allegretta637daa82011-02-07 14:45:56 +0000911 add_to_funcs(do_left, MMAIN, N_("Back"), IFSCHELP(nano_back_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000912 FALSE, VIEW);
Benno Schulenberg88ff6a72014-03-17 21:26:53 +0000913 add_to_funcs(do_right, MMAIN, N_("Forward"), IFSCHELP(nano_forward_msg),
914 FALSE, VIEW);
Chris Allegretta8d41fb82009-12-23 05:03:09 +0000915
916#ifndef DISABLE_BROWSER
Chris Allegretta637daa82011-02-07 14:45:56 +0000917 add_to_funcs(do_left, MBROWSER, N_("Back"), IFSCHELP(nano_backfile_msg),
Chris Allegretta8d41fb82009-12-23 05:03:09 +0000918 FALSE, VIEW);
Benno Schulenberg88ff6a72014-03-17 21:26:53 +0000919 add_to_funcs(do_right, MBROWSER, N_("Forward"), IFSCHELP(nano_forwardfile_msg),
920 FALSE, VIEW);
Chris Allegretta8d41fb82009-12-23 05:03:09 +0000921#endif
922
Chris Allegretta637daa82011-02-07 14:45:56 +0000923 add_to_funcs(do_left, MALL, "", "", FALSE, VIEW);
Benno Schulenberg88ff6a72014-03-17 21:26:53 +0000924 add_to_funcs(do_right, MALL, "", "", FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000925
926#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +0000927 add_to_funcs(do_prev_word_void, MMAIN, N_("Prev Word"),
Chris Allegretta1d778232008-08-30 21:00:00 +0000928 IFSCHELP(nano_prevword_msg), FALSE, VIEW);
Benno Schulenbergbe5ab4e2014-02-25 21:30:12 +0000929
930 add_to_funcs(do_next_word_void, MMAIN, N_("Next Word"),
931 IFSCHELP(nano_nextword_msg), FALSE, VIEW);
Chris Allegretta8d990b52001-09-22 22:14:25 +0000932#endif
David Lawrence Ramseye0497062003-08-23 21:11:06 +0000933
Chris Allegretta637daa82011-02-07 14:45:56 +0000934 add_to_funcs(do_up_void, (MMAIN|MHELP|MBROWSER), N_("Prev Line"),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000935 IFSCHELP(nano_prevline_msg), FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000936
Chris Allegretta637daa82011-02-07 14:45:56 +0000937 add_to_funcs(do_down_void, (MMAIN|MHELP|MBROWSER), N_("Next Line"),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000938 IFSCHELP(nano_nextline_msg), TRUE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000939
Chris Allegretta637daa82011-02-07 14:45:56 +0000940 add_to_funcs(do_home, MMAIN, N_("Home"), IFSCHELP(nano_home_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000941 FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000942
Chris Allegretta637daa82011-02-07 14:45:56 +0000943 add_to_funcs(do_end, MMAIN, N_("End"), IFSCHELP(nano_end_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000944 FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000945
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000946#ifndef DISABLE_JUSTIFY
Chris Allegretta637daa82011-02-07 14:45:56 +0000947 add_to_funcs(do_para_begin_void, (MMAIN|MWHEREIS), beg_of_par_msg,
Chris Allegretta1d778232008-08-30 21:00:00 +0000948 IFSCHELP(nano_parabegin_msg), FALSE, VIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000949
Chris Allegretta637daa82011-02-07 14:45:56 +0000950 add_to_funcs(do_para_end_void, (MMAIN|MWHEREIS), end_of_par_msg,
Chris Allegretta1d778232008-08-30 21:00:00 +0000951 IFSCHELP(nano_paraend_msg), FALSE, VIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +0000952#endif
David Lawrence Ramseye0497062003-08-23 21:11:06 +0000953
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000954#ifndef NANO_TINY
Benno Schulenberg3ae5bab2014-03-03 08:53:38 +0000955 add_to_funcs(do_find_bracket, MMAIN, N_("Find Other Bracket"),
Chris Allegretta1d778232008-08-30 21:00:00 +0000956 IFSCHELP(nano_bracket_msg), FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000957
Chris Allegretta637daa82011-02-07 14:45:56 +0000958 add_to_funcs(do_scroll_up, MMAIN, N_("Scroll Up"),
Chris Allegretta1d778232008-08-30 21:00:00 +0000959 IFSCHELP(nano_scrollup_msg), FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000960
Chris Allegretta637daa82011-02-07 14:45:56 +0000961 add_to_funcs(do_scroll_down, MMAIN, N_("Scroll Down"),
Chris Allegretta1d778232008-08-30 21:00:00 +0000962 IFSCHELP(nano_scrolldown_msg), FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +0000963#endif
David Lawrence Ramseydf453652006-04-21 02:05:09 +0000964
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000965#ifdef ENABLE_MULTIBUFFER
Benno Schulenberg3ae5bab2014-03-03 08:53:38 +0000966 add_to_funcs(switch_to_prev_buffer_void, MMAIN, N_("Previous File"),
Chris Allegretta2cca4832008-03-31 06:25:14 +0000967 IFSCHELP(nano_prevfile_msg), FALSE, VIEW);
Chris Allegretta637daa82011-02-07 14:45:56 +0000968 add_to_funcs(switch_to_next_buffer_void, MMAIN, N_("Next File"),
Chris Allegretta2cca4832008-03-31 06:25:14 +0000969 IFSCHELP(nano_nextfile_msg), TRUE, VIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +0000970#endif
Chris Allegrettab3655b42001-10-22 03:15:31 +0000971
Chris Allegretta637daa82011-02-07 14:45:56 +0000972 add_to_funcs(do_verbatim_input, MMAIN, N_("Verbatim Input"),
Chris Allegretta0018d8e2008-03-13 08:23:52 +0000973 IFSCHELP(nano_verbatim_msg), FALSE, NOVIEW);
Chris Allegretta637daa82011-02-07 14:45:56 +0000974 add_to_funcs(do_verbatim_input, MWHEREIS|MREPLACE|MREPLACE2|MEXTCMD|MSPELL,
Chris Allegrettaaa17df02008-03-17 05:50:04 +0000975 "", "", FALSE, NOVIEW);
976
Chris Allegretta637daa82011-02-07 14:45:56 +0000977 add_to_funcs(do_tab, MMAIN, N_("Tab"), IFSCHELP(nano_tab_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000978 FALSE, NOVIEW);
Chris Allegretta637daa82011-02-07 14:45:56 +0000979 add_to_funcs(do_tab, MALL, "", "", FALSE, NOVIEW);
980 add_to_funcs(do_enter_void, MMAIN, N_("Enter"), IFSCHELP(nano_enter_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000981 FALSE, NOVIEW);
Chris Allegretta637daa82011-02-07 14:45:56 +0000982 add_to_funcs(do_enter_void, MALL, "", "", FALSE, NOVIEW);
983 add_to_funcs(do_delete, MMAIN, N_("Delete"), IFSCHELP(nano_delete_msg),
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000984 FALSE, NOVIEW);
Chris Allegretta637daa82011-02-07 14:45:56 +0000985 add_to_funcs(do_delete, MALL, "", "", FALSE, NOVIEW);
986 add_to_funcs(do_backspace, MMAIN, N_("Backspace"), IFSCHELP(nano_backspace_msg),
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000987#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000988 FALSE,
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000989#else
Chris Allegretta79a33bb2008-03-05 07:34:01 +0000990 TRUE,
David Lawrence Ramseybf487982006-04-24 20:50:52 +0000991#endif
Chris Allegrettaeb643142008-03-12 04:44:14 +0000992 NOVIEW);
993
Chris Allegretta637daa82011-02-07 14:45:56 +0000994 add_to_funcs(do_backspace, MALL, "", "",
Chris Allegrettaeb643142008-03-12 04:44:14 +0000995#ifndef NANO_TINY
996 FALSE,
997#else
998 TRUE,
999#endif
1000 NOVIEW);
David Lawrence Ramsey295d1722005-01-01 07:43:32 +00001001
David Lawrence Ramsey2ca23562006-04-23 19:15:15 +00001002#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +00001003 add_to_funcs(do_cut_till_end, MMAIN, N_("CutTillEnd"),
Chris Allegretta1d778232008-08-30 21:00:00 +00001004 IFSCHELP(nano_cut_till_end_msg), TRUE, NOVIEW);
David Lawrence Ramsey2ca23562006-04-23 19:15:15 +00001005#endif
1006
Chris Allegretta637daa82011-02-07 14:45:56 +00001007 add_to_funcs(xon_complaint, MMAIN, "", "", FALSE, VIEW);
1008 add_to_funcs(xoff_complaint, MMAIN, "", "", FALSE, VIEW);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001009
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +00001010#ifndef DISABLE_JUSTIFY
Chris Allegretta637daa82011-02-07 14:45:56 +00001011 add_to_funcs(do_full_justify, (MMAIN|MWHEREIS), fulljstify_msg,
Chris Allegretta1d778232008-08-30 21:00:00 +00001012 IFSCHELP(nano_fulljustify_msg), FALSE, NOVIEW);
David Lawrence Ramseydb6015c2004-09-11 21:41:13 +00001013#endif
1014
David Lawrence Ramseyc5c52302005-11-15 23:45:29 +00001015#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +00001016 add_to_funcs(do_wordlinechar_count, MMAIN, N_("Word Count"),
Chris Allegretta1d778232008-08-30 21:00:00 +00001017 IFSCHELP(nano_wordcount_msg), FALSE, VIEW);
David Lawrence Ramsey1df3e2d2006-04-22 19:45:26 +00001018#endif
David Lawrence Ramseyefb4b0a2006-04-19 14:09:01 +00001019
Chris Allegretta2ad1de02012-12-30 19:20:10 +00001020 add_to_funcs(total_refresh, (MMAIN|MHELP), refresh_msg,
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001021 IFSCHELP(nano_refresh_msg), FALSE, VIEW);
1022
Chris Allegretta637daa82011-02-07 14:45:56 +00001023 add_to_funcs(do_suspend_void, MMAIN, suspend_msg,
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001024 IFSCHELP(nano_suspend_msg), TRUE, VIEW);
David Lawrence Ramsey8faf3052003-09-04 20:25:29 +00001025
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001026#ifndef NANO_TINY
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001027 add_to_funcs(case_sens_void, (MWHEREIS|MREPLACE|MWHEREISFILE),
Chris Allegretta1d778232008-08-30 21:00:00 +00001028 case_sens_msg, IFSCHELP(nano_case_msg), FALSE, VIEW);
Chris Allegretta658399a2001-06-14 02:54:22 +00001029
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001030 add_to_funcs(backwards_void, (MWHEREIS|MREPLACE|MWHEREISFILE),
Chris Allegretta1d778232008-08-30 21:00:00 +00001031 backwards_msg, IFSCHELP(nano_reverse_msg), FALSE, VIEW);
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +00001032#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00001033
Chris Allegretta658399a2001-06-14 02:54:22 +00001034#ifdef HAVE_REGEX_H
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001035 add_to_funcs(regexp_void, (MWHEREIS|MREPLACE|MWHEREISFILE),
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001036 regexp_msg, IFSCHELP(nano_regexp_msg), FALSE, VIEW);
Chris Allegretta658399a2001-06-14 02:54:22 +00001037#endif
Chris Allegretta5beed502003-01-05 20:41:21 +00001038
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001039#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +00001040 add_to_funcs(get_history_older_void,
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001041 (MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE),
Chris Allegretta1d778232008-08-30 21:00:00 +00001042 prev_history_msg, IFSCHELP(nano_prev_history_msg), FALSE, VIEW);
David Lawrence Ramsey305d8892006-05-24 19:48:03 +00001043
Chris Allegretta637daa82011-02-07 14:45:56 +00001044 add_to_funcs(get_history_newer_void,
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001045 (MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE),
Chris Allegretta1d778232008-08-30 21:00:00 +00001046 next_history_msg, IFSCHELP(nano_next_history_msg), FALSE, VIEW);
David Lawrence Ramseyc10d8ff2005-06-03 20:51:39 +00001047#endif
David Lawrence Ramsey02085d72004-11-07 16:04:18 +00001048
Chris Allegretta637daa82011-02-07 14:45:56 +00001049 add_to_funcs(no_replace_void, MREPLACE,
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001050 no_replace_msg, IFSCHELP(nano_whereis_msg), FALSE, VIEW);
Chris Allegretta5f36c372001-07-16 00:48:53 +00001051
Chris Allegretta637daa82011-02-07 14:45:56 +00001052 add_to_funcs(gototext_void, MGOTOLINE,
Chris Allegretta10f868d2008-03-14 04:08:51 +00001053 gototext_msg, IFSCHELP(nano_whereis_msg), TRUE, VIEW);
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001054
Rocco Corsiaf5c3022001-01-12 07:51:05 +00001055#ifndef DISABLE_BROWSER
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +00001056 if (!ISSET(RESTRICTED))
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001057 add_to_funcs(to_files_void, (MGOTOLINE|MINSERTFILE),
Chris Allegretta1d778232008-08-30 21:00:00 +00001058 to_files_msg, IFSCHELP(nano_tofiles_msg), FALSE, VIEW);
Chris Allegrettaf4b96012001-01-03 07:11:47 +00001059#endif
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00001060
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001061#ifndef NANO_TINY
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +00001062 /* If we're using restricted mode, the DOS format, Mac format,
1063 * append, prepend, and backup toggles are disabled. The first and
1064 * second are useless since inserting files is disabled, the third
1065 * and fourth are disabled because they allow writing to files not
1066 * specified on the command line, and the fifth is useless since
1067 * backups are disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +00001068 if (!ISSET(RESTRICTED))
Chris Allegretta637daa82011-02-07 14:45:56 +00001069 add_to_funcs(dos_format_void, MWRITEFILE,
Chris Allegretta1d778232008-08-30 21:00:00 +00001070 dos_format_msg, IFSCHELP(nano_dos_msg), FALSE, NOVIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +00001071
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +00001072 if (!ISSET(RESTRICTED))
Chris Allegretta637daa82011-02-07 14:45:56 +00001073 add_to_funcs(mac_format_void, MWRITEFILE,
Chris Allegretta1d778232008-08-30 21:00:00 +00001074 mac_format_msg, IFSCHELP(nano_mac_msg), FALSE, NOVIEW);
Chris Allegrettaa8c22572002-02-15 19:17:02 +00001075
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +00001076 if (!ISSET(RESTRICTED))
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001077 add_to_funcs(append_void, MWRITEFILE,
Chris Allegretta1d778232008-08-30 21:00:00 +00001078 append_msg, IFSCHELP(nano_append_msg), FALSE, NOVIEW);
Chris Allegrettacc197ef2001-05-29 04:21:44 +00001079
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +00001080 if (!ISSET(RESTRICTED))
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001081 add_to_funcs(prepend_void, MWRITEFILE,
Chris Allegretta1d778232008-08-30 21:00:00 +00001082 prepend_msg, IFSCHELP(nano_prepend_msg), FALSE, NOVIEW);
Chris Allegretta0e9b7aa2002-04-16 03:15:47 +00001083
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +00001084 if (!ISSET(RESTRICTED))
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001085 add_to_funcs(backup_file_void, MWRITEFILE,
Chris Allegretta1d778232008-08-30 21:00:00 +00001086 backup_file_msg, IFSCHELP(nano_backup_msg), FALSE, NOVIEW);
David Lawrence Ramseya593f532003-11-28 19:47:42 +00001087
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +00001088 /* If we're using restricted mode, command execution is disabled.
1089 * It's useless since inserting files is disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +00001090 if (!ISSET(RESTRICTED))
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001091 add_to_funcs(ext_cmd_void, MINSERTFILE,
Chris Allegretta1d778232008-08-30 21:00:00 +00001092 ext_cmd_msg, IFSCHELP(nano_execute_msg), FALSE, NOVIEW);
David Lawrence Ramseya593f532003-11-28 19:47:42 +00001093
Chris Allegrettaf7c68112002-09-03 22:58:40 +00001094#ifdef ENABLE_MULTIBUFFER
David Lawrence Ramsey32e3b882004-05-29 01:20:17 +00001095 /* If we're using restricted mode, the multibuffer toggle is
1096 * disabled. It's useless since inserting files is disabled. */
David Lawrence Ramseyd893fa92004-04-30 04:49:02 +00001097 if (!ISSET(RESTRICTED))
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001098 add_to_funcs(new_buffer_void, MINSERTFILE,
Chris Allegretta1d778232008-08-30 21:00:00 +00001099 new_buffer_msg, IFSCHELP(nano_multibuffer_msg), FALSE, NOVIEW);
David Lawrence Ramseye21adfa2002-09-13 18:14:04 +00001100#endif
Chris Allegrettacc197ef2001-05-29 04:21:44 +00001101
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001102 add_to_funcs(do_insertfile_void, MEXTCMD,
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001103 insert_file_msg, IFSCHELP(nano_insert_msg), FALSE, VIEW);
David Lawrence Ramseye5d8f322004-09-30 22:07:21 +00001104
David Lawrence Ramsey47e82b12004-09-28 22:21:46 +00001105#ifdef ENABLE_MULTIBUFFER
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001106 add_to_funcs(new_buffer_void, MEXTCMD,
Chris Allegretta1d778232008-08-30 21:00:00 +00001107 new_buffer_msg, IFSCHELP(nano_multibuffer_msg), FALSE, NOVIEW);
Chris Allegretta52c5a6e2002-03-21 05:07:28 +00001108#endif
Benno Schulenberge4c34c32014-03-17 14:15:57 +00001109#endif /* !NANO_TINY */
Chris Allegrettaa2ea1932000-06-06 05:53:49 +00001110
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +00001111#ifndef DISABLE_HELP
Chris Allegretta637daa82011-02-07 14:45:56 +00001112 add_to_funcs(edit_refresh, MHELP,
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001113 refresh_msg, nano_refresh_msg, FALSE, VIEW);
Chris Allegrettab27b3a12009-12-04 04:29:55 +00001114
Chris Allegretta637daa82011-02-07 14:45:56 +00001115 add_to_funcs(do_exit, MHELP, exit_msg, IFSCHELP(nano_exit_msg), FALSE, VIEW);
David Lawrence Ramsey6d6a36c2005-12-08 07:09:08 +00001116#endif
1117
Rocco Corsiaf5c3022001-01-12 07:51:05 +00001118#ifndef DISABLE_BROWSER
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001119 add_to_funcs(do_first_file, (MBROWSER|MWHEREISFILE),
Chris Allegretta1d778232008-08-30 21:00:00 +00001120 first_file_msg, IFSCHELP(nano_firstfile_msg), FALSE, VIEW);
Chris Allegrettab3655b42001-10-22 03:15:31 +00001121
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001122 add_to_funcs(do_last_file, (MBROWSER|MWHEREISFILE),
Chris Allegretta1d778232008-08-30 21:00:00 +00001123 last_file_msg, IFSCHELP(nano_lastfile_msg), FALSE, VIEW);
Chris Allegrettab3655b42001-10-22 03:15:31 +00001124
Chris Allegretta637daa82011-02-07 14:45:56 +00001125 add_to_funcs(goto_dir_void, MBROWSER,
Chris Allegretta1d778232008-08-30 21:00:00 +00001126 goto_dir_msg, IFSCHELP(nano_gotodir_msg), FALSE, VIEW);
David Lawrence Ramseye38b8082006-03-30 07:03:04 +00001127#endif
1128
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001129 currmenu = MMAIN;
David Lawrence Ramsey35e97132005-01-08 06:04:19 +00001130
Chris Allegretta5575bfa2014-02-24 10:18:15 +00001131 add_to_sclist(MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MBROWSER|MWHEREISFILE|MGOTODIR|MLINTER,
Chris Allegretta637daa82011-02-07 14:45:56 +00001132 "^G", do_help_void, 0, TRUE);
Chris Allegretta5575bfa2014-02-24 10:18:15 +00001133 add_to_sclist(MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MBROWSER|MWHEREISFILE|MGOTODIR|MLINTER,
Chris Allegretta637daa82011-02-07 14:45:56 +00001134 "F1", do_help_void, 0, TRUE);
1135 add_to_sclist(MMAIN|MHELP|MBROWSER, "^X", do_exit, 0, TRUE);
1136 add_to_sclist(MMAIN|MHELP|MBROWSER, "F2", do_exit, 0, TRUE);
1137 add_to_sclist(MMAIN, "^_", do_gotolinecolumn_void, 0, TRUE);
1138 add_to_sclist(MMAIN, "F13", do_gotolinecolumn_void, 0, TRUE);
1139 add_to_sclist(MMAIN, "M-G", do_gotolinecolumn_void, 0, TRUE);
1140 add_to_sclist(MMAIN, "^O", do_writeout_void, 0, TRUE);
1141 add_to_sclist(MMAIN, "F3", do_writeout_void, 0, TRUE);
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001142#ifndef DISABLE_JUSTIFY
Chris Allegretta637daa82011-02-07 14:45:56 +00001143 add_to_sclist(MMAIN, "^J", do_justify_void, 0, TRUE);
1144 add_to_sclist(MMAIN, "F4", do_justify_void, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001145#endif
Chris Allegretta637daa82011-02-07 14:45:56 +00001146 add_to_sclist(MMAIN, "^R", do_insertfile_void, 0, TRUE);
1147 add_to_sclist(MMAIN, "F5", do_insertfile_void, 0, TRUE);
1148 add_to_sclist(MMAIN, "kinsert", do_insertfile_void, 0, TRUE);
1149 add_to_sclist(MMAIN|MBROWSER, "^W", do_search, 0, TRUE);
1150 add_to_sclist(MMAIN|MBROWSER, "F6", do_search, 0, TRUE);
Chris Allegretta5575bfa2014-02-24 10:18:15 +00001151 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE|MLINTER, "^Y", do_page_up, 0, TRUE);
1152 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE|MLINTER, "F7", do_page_up, 0, TRUE);
1153 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE|MLINTER, "kpup", do_page_up, 0, TRUE);
1154 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE|MLINTER, "^V", do_page_down, 0, TRUE);
1155 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE|MLINTER, "F8", do_page_down, 0, TRUE);
1156 add_to_sclist(MMAIN|MBROWSER|MHELP|MWHEREISFILE|MLINTER, "kpdown", do_page_down, 0, TRUE);
Chris Allegretta637daa82011-02-07 14:45:56 +00001157 add_to_sclist(MMAIN, "^K", do_cut_text_void, 0, TRUE);
1158 add_to_sclist(MMAIN, "F9", do_cut_text_void, 0, TRUE);
1159 add_to_sclist(MMAIN, "^U", do_uncut_text, 0, TRUE);
1160 add_to_sclist(MMAIN, "F10", do_uncut_text, 0, TRUE);
1161 add_to_sclist(MMAIN, "^C", do_cursorpos_void, 0, TRUE);
1162 add_to_sclist(MMAIN, "F11", do_cursorpos_void, 0, TRUE);
Chris Allegretta506af6f2008-05-31 22:49:55 +00001163#ifndef DISABLE_SPELLER
Chris Allegretta637daa82011-02-07 14:45:56 +00001164 add_to_sclist(MMAIN, "^T", do_spell, 0, TRUE);
1165 add_to_sclist(MMAIN, "F12", do_spell, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001166#endif
Chris Allegretta637daa82011-02-07 14:45:56 +00001167 add_to_sclist(MMAIN, "^\\", do_replace, 0, TRUE);
1168 add_to_sclist(MMAIN, "F14", do_replace, 0, TRUE);
1169 add_to_sclist(MMAIN, "M-R", do_replace, 0, TRUE);
1170 add_to_sclist(MWHEREIS, "^R", do_replace, 0, FALSE);
1171 add_to_sclist(MREPLACE, "^R", no_replace_void, 0, FALSE);
1172 add_to_sclist(MWHEREIS, "^T", do_gotolinecolumn_void, 0, FALSE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001173#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +00001174 add_to_sclist(MMAIN, "^^", do_mark, 0, TRUE);
1175 add_to_sclist(MMAIN, "F15", do_mark, 0, TRUE);
1176 add_to_sclist(MMAIN, "M-A", do_mark, 0, TRUE);
1177 add_to_sclist(MMAIN|MBROWSER, "M-W", do_research, 0, TRUE);
1178 add_to_sclist(MMAIN|MBROWSER, "F16", do_research, 0, TRUE);
1179 add_to_sclist(MMAIN, "M-^", do_copy_text, 0, TRUE);
1180 add_to_sclist(MMAIN, "M-6", do_copy_text, 0, TRUE);
1181 add_to_sclist(MMAIN, "M-}", do_indent_void, 0, TRUE);
1182 add_to_sclist(MMAIN, "M-{", do_unindent, 0, TRUE);
Chris Allegrettaa48507d2009-08-14 03:18:29 +00001183 if (ISSET(UNDOABLE)) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001184 add_to_sclist(MMAIN, "M-U", do_undo, 0, TRUE);
Benno Schulenberga65ef422014-03-17 21:36:37 +00001185 add_to_sclist(MMAIN, "M-E", do_redo, 0, TRUE);
Chris Allegrettaad37e672009-07-12 03:36:58 +00001186 }
Benno Schulenbergc3e4a1f2014-03-17 11:47:49 +00001187#endif
Chris Allegretta637daa82011-02-07 14:45:56 +00001188 add_to_sclist(MALL, "^F", do_right, 0, TRUE);
1189 add_to_sclist(MALL, "^B", do_left, 0, TRUE);
Benno Schulenbergc3e4a1f2014-03-17 11:47:49 +00001190 add_to_sclist(MALL, "kright", do_right, 0, TRUE);
1191 add_to_sclist(MALL, "kleft", do_left, 0, TRUE);
1192#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +00001193 add_to_sclist(MMAIN, "^Space", do_next_word_void, 0, TRUE);
1194 add_to_sclist(MMAIN, "M-Space", do_prev_word_void, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001195#endif
Chris Allegretta637daa82011-02-07 14:45:56 +00001196 add_to_sclist(MMAIN, "^Q", xon_complaint, 0, TRUE);
1197 add_to_sclist(MMAIN, "^S", xoff_complaint, 0, TRUE);
1198 add_to_sclist(MMAIN|MHELP|MBROWSER, "^P", do_up_void, 0, TRUE);
1199 add_to_sclist(MMAIN|MHELP|MBROWSER, "kup", do_up_void, 0, TRUE);
1200 add_to_sclist(MMAIN|MHELP|MBROWSER, "^N", do_down_void, 0, TRUE);
1201 add_to_sclist(MMAIN|MHELP|MBROWSER, "kdown", do_down_void, 0, TRUE);
1202 add_to_sclist(MALL, "^A", do_home, 0, TRUE);
1203 add_to_sclist(MALL, "khome", do_home, 0, TRUE);
1204 add_to_sclist(MALL, "^E", do_end, 0, TRUE);
1205 add_to_sclist(MALL, "kend", do_end, 0, TRUE);
Chris Allegretta1b6ed072008-06-03 08:09:05 +00001206#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +00001207 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE, "^P", get_history_older_void, 0, FALSE);
1208 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE, "kup", get_history_older_void, 0, FALSE);
1209 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE, "^N", get_history_newer_void, 0, FALSE);
1210 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2|MWHEREISFILE, "kdown", get_history_newer_void, 0, FALSE);
Chris Allegretta1b6ed072008-06-03 08:09:05 +00001211#endif
Chris Allegretta1347f222008-06-29 06:22:31 +00001212#ifndef DISABLE_JUSTIFY
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001213 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
Chris Allegretta637daa82011-02-07 14:45:56 +00001214 "^W", do_para_begin_void, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001215 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
Chris Allegretta637daa82011-02-07 14:45:56 +00001216 "^O", do_para_end_void, 0, TRUE);
1217 add_to_sclist(MALL, "M-(", do_para_begin_void, 0, TRUE);
1218 add_to_sclist(MALL, "M-9", do_para_begin_void, 0, TRUE);
1219 add_to_sclist(MALL, "M-)", do_para_end_void, 0, TRUE);
1220 add_to_sclist(MALL, "M-0", do_para_end_void, 0, TRUE);
Chris Allegrettae347efb2008-03-09 02:52:40 +00001221#endif
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001222 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
Chris Allegretta637daa82011-02-07 14:45:56 +00001223 "M-C", case_sens_void, 0, FALSE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001224 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
Chris Allegretta637daa82011-02-07 14:45:56 +00001225 "M-B", backwards_void, 0, FALSE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001226 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2,
Chris Allegretta637daa82011-02-07 14:45:56 +00001227 "M-R", regexp_void, 0, FALSE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001228
Chris Allegretta637daa82011-02-07 14:45:56 +00001229 add_to_sclist(MMAIN, "M-\\", do_first_line, 0, TRUE);
1230 add_to_sclist(MMAIN, "M-|", do_first_line, 0, TRUE);
1231 add_to_sclist(MMAIN, "M-/", do_last_line, 0, TRUE);
1232 add_to_sclist(MMAIN, "M-?", do_last_line, 0, TRUE);
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001233 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP,
Chris Allegretta637daa82011-02-07 14:45:56 +00001234 "^Y", do_first_line, 0, TRUE);
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001235 add_to_sclist(MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP,
Chris Allegretta637daa82011-02-07 14:45:56 +00001236 "^V", do_last_line, 0, TRUE);
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001237
Chris Allegretta637daa82011-02-07 14:45:56 +00001238#ifndef DISABLE_BROWSER
1239 add_to_sclist(MBROWSER|MWHEREISFILE, "M-\\", do_first_file, 0, TRUE);
1240 add_to_sclist(MBROWSER|MWHEREISFILE, "M-|", do_first_file, 0, TRUE);
1241 add_to_sclist(MBROWSER|MWHEREISFILE, "M-/", do_last_file, 0, TRUE);
1242 add_to_sclist(MBROWSER|MWHEREISFILE, "M-?", do_last_file, 0, TRUE);
Chris Allegretta637daa82011-02-07 14:45:56 +00001243 add_to_sclist(MBROWSER|MWHEREISFILE, "^_", goto_dir_void, 0, TRUE);
1244 add_to_sclist(MBROWSER|MWHEREISFILE, "F13", goto_dir_void, 0, TRUE);
1245 add_to_sclist(MBROWSER|MWHEREISFILE, "M-G", goto_dir_void, 0, TRUE);
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001246#endif
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001247#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +00001248 add_to_sclist(MMAIN, "M-]", do_find_bracket, 0, TRUE);
1249 add_to_sclist(MMAIN, "M--", do_scroll_up, 0, TRUE);
1250 add_to_sclist(MMAIN, "M-_", do_scroll_up, 0, TRUE);
1251 add_to_sclist(MMAIN, "M-+", do_scroll_down, 0, TRUE);
1252 add_to_sclist(MMAIN, "M-=", do_scroll_down, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001253#endif
1254
1255#ifdef ENABLE_MULTIBUFFER
Chris Allegretta637daa82011-02-07 14:45:56 +00001256 add_to_sclist(MMAIN, "M-<", switch_to_prev_buffer_void, 0, TRUE);
1257 add_to_sclist(MMAIN, "M-,", switch_to_prev_buffer_void, 0, TRUE);
1258 add_to_sclist(MMAIN, "M->", switch_to_next_buffer_void, 0, TRUE);
1259 add_to_sclist(MMAIN, "M-.", switch_to_next_buffer_void, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001260#endif
Chris Allegretta637daa82011-02-07 14:45:56 +00001261 add_to_sclist(MALL, "M-V", do_verbatim_input, 0, TRUE);
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001262
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001263#ifndef NANO_TINY
Chris Allegretta637daa82011-02-07 14:45:56 +00001264 add_to_sclist(MALL, "M-T", do_cut_till_end, 0, TRUE);
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001265#ifndef DISABLE_JUSTIFY
Chris Allegretta637daa82011-02-07 14:45:56 +00001266 add_to_sclist(MALL, "M-J", do_full_justify, 0, TRUE);
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001267#endif
Chris Allegretta637daa82011-02-07 14:45:56 +00001268 add_to_sclist(MMAIN, "M-D", do_wordlinechar_count, 0, TRUE);
1269 add_to_sclist(MMAIN, "M-X", do_toggle_void, NO_HELP, TRUE);
1270 add_to_sclist(MMAIN, "M-C", do_toggle_void, CONST_UPDATE, TRUE);
1271 add_to_sclist(MMAIN, "M-O", do_toggle_void, MORE_SPACE, TRUE);
1272 add_to_sclist(MMAIN, "M-S", do_toggle_void, SMOOTH_SCROLL, TRUE);
1273 add_to_sclist(MMAIN, "M-P", do_toggle_void, WHITESPACE_DISPLAY, TRUE);
1274 add_to_sclist(MMAIN, "M-Y", do_toggle_void, NO_COLOR_SYNTAX, TRUE);
1275 add_to_sclist(MMAIN, "M-H", do_toggle_void, SMART_HOME, TRUE);
1276 add_to_sclist(MMAIN, "M-I", do_toggle_void, AUTOINDENT, TRUE);
1277 add_to_sclist(MMAIN, "M-K", do_toggle_void, CUT_TO_END, TRUE);
1278 add_to_sclist(MMAIN, "M-L", do_toggle_void, NO_WRAP, TRUE);
1279 add_to_sclist(MMAIN, "M-Q", do_toggle_void, TABS_TO_SPACES, TRUE);
1280 add_to_sclist(MMAIN, "M-B", do_toggle_void, BACKUP_FILE, TRUE);
1281 add_to_sclist(MMAIN, "M-F", do_toggle_void, MULTIBUFFER, TRUE);
1282 add_to_sclist(MMAIN, "M-M", do_toggle_void, USE_MOUSE, TRUE);
1283 add_to_sclist(MMAIN, "M-N", do_toggle_void, NO_CONVERT, TRUE);
1284 add_to_sclist(MMAIN, "M-Z", do_toggle_void, SUSPEND, TRUE);
1285 add_to_sclist(MMAIN, "M-$", do_toggle_void, SOFTWRAP, TRUE);
Benno Schulenberge4c34c32014-03-17 14:15:57 +00001286#endif /* !NANO_TINY */
Benno Schulenberge34ac8e2014-03-17 12:15:23 +00001287
Benno Schulenbergdb906ea2014-02-25 21:45:55 +00001288 add_to_sclist(MHELP|MBROWSER, "^C", do_exit, 0, TRUE);
1289 add_to_sclist(MHELP, "^G", do_exit, 0, TRUE);
Chris Allegretta637daa82011-02-07 14:45:56 +00001290 add_to_sclist(MGOTOLINE, "^T", gototext_void, 0, FALSE);
1291 add_to_sclist(MINSERTFILE|MEXTCMD, "M-F", new_buffer_void, 0, FALSE);
Chris Allegretta5575bfa2014-02-24 10:18:15 +00001292 add_to_sclist((MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MWHEREISFILE|MGOTODIR|MYESNO|MLINTER),
Chris Allegretta637daa82011-02-07 14:45:56 +00001293 "^C", do_cancel, 0, FALSE);
Chris Allegretta637daa82011-02-07 14:45:56 +00001294 add_to_sclist(MWRITEFILE, "M-D", dos_format_void, 0, FALSE);
1295 add_to_sclist(MWRITEFILE, "M-M", mac_format_void, 0, FALSE);
1296 add_to_sclist(MWRITEFILE, "M-A", append_void, 0, FALSE);
1297 add_to_sclist(MWRITEFILE, "M-P", prepend_void, 0, FALSE);
1298 add_to_sclist(MWRITEFILE, "M-B", backup_file_void, 0, FALSE);
1299 add_to_sclist(MWRITEFILE, "^T", to_files_void, 0, FALSE);
1300 add_to_sclist(MINSERTFILE, "^T", to_files_void, 0, FALSE);
1301 add_to_sclist(MINSERTFILE, "^X", ext_cmd_void, 0, FALSE);
1302 add_to_sclist(MMAIN, "^Z", do_suspend_void, 0, FALSE);
1303 add_to_sclist(MMAIN, "^L", total_refresh, 0, TRUE);
1304 add_to_sclist(MALL, "^I", do_tab, 0, TRUE);
1305 add_to_sclist(MALL, "^M", do_enter_void, 0, TRUE);
1306 add_to_sclist(MALL, "kenter", do_enter_void, 0, TRUE);
1307 add_to_sclist(MALL, "^D", do_delete, 0, TRUE);
1308 add_to_sclist(MALL, "kdel", do_delete, 0, TRUE);
1309 add_to_sclist(MALL, "^H", do_backspace, 0, TRUE);
1310 add_to_sclist(MALL, "kbsp", do_backspace, 0, TRUE);
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001311
1312#ifdef DEBUG
1313 print_sclist();
1314#endif
1315
Chris Allegrettadab017e2002-04-23 10:56:06 +00001316}
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001317
Chris Allegretta5575bfa2014-02-24 10:18:15 +00001318#ifdef ENABLE_COLOR
1319void set_lint_shortcuts(void)
1320{
1321#ifndef DISABLE_SPELLER
1322 replace_scs_for(do_spell, do_linter);
1323#endif
1324}
1325
1326void set_spell_shortcuts(void)
1327{
1328#ifndef DISABLE_SPELLER
1329 replace_scs_for(do_linter, do_spell);
1330#endif
1331}
1332#endif
1333
1334
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001335const subnfunc *sctofunc(sc *s)
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001336{
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001337 subnfunc *f;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001338
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001339 for (f = allfuncs; f != NULL && s->scfunc != f->scfunc; f = f->next)
1340 ;
1341
1342 return f;
1343}
1344
1345#ifndef NANO_TINY
Benno Schulenberg7f873932014-02-25 21:27:22 +00001346/* Now let's come up with a single (hopefully)
1347 * function to get a string for each flag. */
Chris Allegretta5a018f02009-11-29 06:13:22 +00001348const char *flagtostr(int flag)
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001349{
1350 switch (flag) {
1351 case NO_HELP:
1352 return N_("Help mode");
1353 case CONST_UPDATE:
1354 return N_("Constant cursor position display");
1355 case MORE_SPACE:
1356 return N_("Use of one more line for editing");
1357 case SMOOTH_SCROLL:
1358 return N_("Smooth scrolling");
1359 case WHITESPACE_DISPLAY:
1360 return N_("Whitespace display");
1361 case NO_COLOR_SYNTAX:
1362 return N_("Color syntax highlighting");
1363 case SMART_HOME:
1364 return N_("Smart home key");
1365 case AUTOINDENT:
1366 return N_("Auto indent");
1367 case CUT_TO_END:
1368 return N_("Cut to end");
1369 case NO_WRAP:
1370 return N_("Long line wrapping");
1371 case TABS_TO_SPACES:
1372 return N_("Conversion of typed tabs to spaces");
1373 case BACKUP_FILE:
1374 return N_("Backup files");
1375 case MULTIBUFFER:
1376 return N_("Multiple file buffers");
1377 case USE_MOUSE:
1378 return N_("Mouse support");
1379 case NO_CONVERT:
1380 return N_("No conversion from DOS/Mac format");
1381 case SUSPEND:
1382 return N_("Suspension");
Chris Allegretta05417a22009-08-17 07:52:10 +00001383 case SOFTWRAP:
1384 return N_("Soft line wrapping");
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001385 default:
1386 return "?????";
1387 }
1388}
Benno Schulenberge4c34c32014-03-17 14:15:57 +00001389#endif /* !NANO_TINY */
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001390
1391/* Interpret the string given by the rc file and return a
Benno Schulenberg7f873932014-02-25 21:27:22 +00001392 * shortcut struct, complete with proper value for execute. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001393sc *strtosc(int menu, char *input)
1394{
1395 sc *s;
1396
1397 s = (sc *)nmalloc(sizeof(sc));
1398 s->execute = TRUE; /* overridden as needed below */
1399
Chris Allegrettae347efb2008-03-09 02:52:40 +00001400#ifndef DISABLE_HELP
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001401 if (!strcasecmp(input, "help"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001402 s->scfunc = do_help_void;
1403 else
Chris Allegrettae347efb2008-03-09 02:52:40 +00001404#endif
1405 if (!strcasecmp(input, "cancel")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001406 s->scfunc = do_cancel;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001407 s->execute = FALSE;
1408 } else if (!strcasecmp(input, "exit"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001409 s->scfunc = do_exit;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001410 else if (!strcasecmp(input, "writeout"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001411 s->scfunc = do_writeout_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001412 else if (!strcasecmp(input, "insert"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001413 s->scfunc = do_insertfile_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001414 else if (!strcasecmp(input, "whereis"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001415 s->scfunc = do_search;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001416 else if (!strcasecmp(input, "up"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001417 s->scfunc = do_up_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001418 else if (!strcasecmp(input, "down"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001419 s->scfunc = do_down_void;
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001420 else if (!strcasecmp(input, "pageup") ||
1421 !strcasecmp(input, "prevpage"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001422 s->scfunc = do_page_up;
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001423 else if (!strcasecmp(input, "pagedown") ||
1424 !strcasecmp(input, "nextpage"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001425 s->scfunc = do_page_down;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001426 else if (!strcasecmp(input, "cut"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001427 s->scfunc = do_cut_text_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001428 else if (!strcasecmp(input, "uncut"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001429 s->scfunc = do_uncut_text;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001430 else if (!strcasecmp(input, "curpos") ||
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001431 !strcasecmp(input, "cursorpos"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001432 s->scfunc = do_cursorpos_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001433 else if (!strcasecmp(input, "firstline"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001434 s->scfunc = do_first_line;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001435 else if (!strcasecmp(input, "lastline"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001436 s->scfunc = do_last_line;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001437 else if (!strcasecmp(input, "gotoline"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001438 s->scfunc = do_gotolinecolumn_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001439 else if (!strcasecmp(input, "replace"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001440 s->scfunc = do_replace;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001441#ifndef DISABLE_JUSTIFY
Chris Allegrettae347efb2008-03-09 02:52:40 +00001442 else if (!strcasecmp(input, "justify"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001443 s->scfunc = do_justify_void;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001444 else if (!strcasecmp(input, "beginpara"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001445 s->scfunc = do_para_begin_void;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001446 else if (!strcasecmp(input, "endpara"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001447 s->scfunc = do_para_end_void;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001448 else if (!strcasecmp(input, "fulljustify"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001449 s->scfunc = do_full_justify;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001450#endif
1451#ifndef NANO_TINY
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001452 else if (!strcasecmp(input, "mark"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001453 s->scfunc = do_mark;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001454 else if (!strcasecmp(input, "searchagain") ||
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001455 !strcasecmp(input, "research"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001456 s->scfunc = do_research;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001457 else if (!strcasecmp(input, "copytext"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001458 s->scfunc = do_copy_text;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001459 else if (!strcasecmp(input, "indent"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001460 s->scfunc = do_indent_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001461 else if (!strcasecmp(input, "unindent"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001462 s->scfunc = do_unindent;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001463 else if (!strcasecmp(input, "scrollup"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001464 s->scfunc = do_scroll_up;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001465 else if (!strcasecmp(input, "scrolldown"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001466 s->scfunc = do_scroll_down;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001467 else if (!strcasecmp(input, "nextword"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001468 s->scfunc = do_next_word_void;
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001469 else if (!strcasecmp(input, "suspend"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001470 s->scfunc = do_suspend_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001471 else if (!strcasecmp(input, "prevword"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001472 s->scfunc = do_prev_word_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001473 else if (!strcasecmp(input, "findbracket"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001474 s->scfunc = do_find_bracket;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001475 else if (!strcasecmp(input, "wordcount"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001476 s->scfunc = do_wordlinechar_count;
Chris Allegretta70859f42008-07-13 01:36:06 +00001477 else if (!strcasecmp(input, "undo"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001478 s->scfunc = do_undo;
Chris Allegretta70859f42008-07-13 01:36:06 +00001479 else if (!strcasecmp(input, "redo"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001480 s->scfunc = do_redo;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001481 else if (!strcasecmp(input, "prevhistory")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001482 s->scfunc = get_history_older_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001483 s->execute = FALSE;
1484 } else if (!strcasecmp(input, "nexthistory")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001485 s->scfunc = get_history_newer_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001486 s->execute = FALSE;
Benno Schulenbergeec71e32014-03-19 09:34:37 +00001487 } else if (!strcasecmp(input, "nohelp")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001488 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001489 s->execute = FALSE;
1490 s->toggle = NO_HELP;
1491 } else if (!strcasecmp(input, "constupdate")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001492 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001493 s->execute = FALSE;
1494 s->toggle = CONST_UPDATE;
1495 } else if (!strcasecmp(input, "morespace")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001496 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001497 s->execute = FALSE;
1498 s->toggle = MORE_SPACE;
1499 } else if (!strcasecmp(input, "smoothscroll")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001500 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001501 s->execute = FALSE;
1502 s->toggle = SMOOTH_SCROLL;
Chris Allegrettad3659f82008-03-16 23:57:14 +00001503 } else if (!strcasecmp(input, "whitespacedisplay")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001504 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001505 s->execute = FALSE;
1506 s->toggle = WHITESPACE_DISPLAY;
1507 } else if (!strcasecmp(input, "nosyntax")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001508 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001509 s->execute = FALSE;
1510 s->toggle = NO_COLOR_SYNTAX;
1511 } else if (!strcasecmp(input, "smarthome")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001512 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001513 s->execute = FALSE;
1514 s->toggle = SMART_HOME;
1515 } else if (!strcasecmp(input, "autoindent")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001516 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001517 s->execute = FALSE;
1518 s->toggle = AUTOINDENT;
1519 } else if (!strcasecmp(input, "cuttoend")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001520 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001521 s->execute = FALSE;
1522 s->toggle = CUT_TO_END;
1523 } else if (!strcasecmp(input, "nowrap")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001524 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001525 s->execute = FALSE;
1526 s->toggle = NO_WRAP;
Benno Schulenbergeec71e32014-03-19 09:34:37 +00001527 } else if (!strcasecmp(input, "softwrap")) {
1528 s->scfunc = do_toggle_void;
1529 s->execute = FALSE;
1530 s->toggle = SOFTWRAP;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001531 } else if (!strcasecmp(input, "tabstospaces")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001532 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001533 s->execute = FALSE;
1534 s->toggle = TABS_TO_SPACES;
1535 } else if (!strcasecmp(input, "backupfile")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001536 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001537 s->execute = FALSE;
1538 s->toggle = BACKUP_FILE;
Benno Schulenberg92ccf772014-02-28 19:34:11 +00001539 } else if (!strcasecmp(input, "multibuffer")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001540 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001541 s->execute = FALSE;
1542 s->toggle = MULTIBUFFER;
1543 } else if (!strcasecmp(input, "mouse")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001544 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001545 s->execute = FALSE;
1546 s->toggle = USE_MOUSE;
1547 } else if (!strcasecmp(input, "noconvert")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001548 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001549 s->execute = FALSE;
1550 s->toggle = NO_CONVERT;
Chris Allegretta0018d8e2008-03-13 08:23:52 +00001551 } else if (!strcasecmp(input, "suspendenable")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001552 s->scfunc = do_toggle_void;
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001553 s->execute = FALSE;
1554 s->toggle = SUSPEND;
Chris Allegrettac656e9d2008-03-16 12:55:41 +00001555 }
Benno Schulenberge4c34c32014-03-17 14:15:57 +00001556#endif /* !NANO_TINY */
Chris Allegrettae347efb2008-03-09 02:52:40 +00001557 else if (!strcasecmp(input, "right") ||
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001558 !strcasecmp(input, "forward"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001559 s->scfunc = do_right;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001560 else if (!strcasecmp(input, "left") ||
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001561 !strcasecmp(input, "back"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001562 s->scfunc = do_left;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001563 else if (!strcasecmp(input, "up") ||
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001564 !strcasecmp(input, "prevline"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001565 s->scfunc = do_up_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001566 else if (!strcasecmp(input, "down") ||
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001567 !strcasecmp(input, "nextline"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001568 s->scfunc = do_down_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001569 else if (!strcasecmp(input, "home"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001570 s->scfunc = do_home;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001571 else if (!strcasecmp(input, "end"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001572 s->scfunc = do_end;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001573#ifdef ENABLE_MULTIBUFFER
1574 else if (!strcasecmp(input, "prevbuf"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001575 s->scfunc = switch_to_prev_buffer_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001576 else if (!strcasecmp(input, "nextbuf"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001577 s->scfunc = switch_to_next_buffer_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001578#endif
1579 else if (!strcasecmp(input, "verbatim"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001580 s->scfunc = do_verbatim_input;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001581 else if (!strcasecmp(input, "tab"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001582 s->scfunc = do_tab;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001583 else if (!strcasecmp(input, "enter"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001584 s->scfunc = do_enter_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001585 else if (!strcasecmp(input, "delete"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001586 s->scfunc = do_delete;
Chris Allegrettafa406942008-07-13 16:44:19 +00001587 else if (!strcasecmp(input, "backspace"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001588 s->scfunc = do_backspace;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001589 else if (!strcasecmp(input, "refresh"))
Chris Allegretta637daa82011-02-07 14:45:56 +00001590 s->scfunc = total_refresh;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001591 else if (!strcasecmp(input, "casesens")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001592 s->scfunc = case_sens_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001593 s->execute = FALSE;
1594 } else if (!strcasecmp(input, "regexp") ||
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001595 !strcasecmp(input, "regex")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001596 s->scfunc = regexp_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001597 s->execute = FALSE;
1598 } else if (!strcasecmp(input, "dontreplace")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001599 s->scfunc = no_replace_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001600 s->execute = FALSE;
1601 } else if (!strcasecmp(input, "gototext")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001602 s->scfunc = gototext_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001603 s->execute = FALSE;
1604 } else if (!strcasecmp(input, "browser") ||
Benno Schulenberg3aea69d2014-02-28 20:08:59 +00001605 !strcasecmp(input, "tofiles")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001606 s->scfunc = to_files_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001607 s->execute = FALSE;
1608 } else if (!strcasecmp(input, "dosformat")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001609 s->scfunc = dos_format_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001610 s->execute = FALSE;
1611 } else if (!strcasecmp(input, "macformat")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001612 s->scfunc = mac_format_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001613 s->execute = FALSE;
1614 } else if (!strcasecmp(input, "append")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001615 s->scfunc = append_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001616 s->execute = FALSE;
1617 } else if (!strcasecmp(input, "prepend")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001618 s->scfunc = prepend_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001619 s->execute = FALSE;
1620 } else if (!strcasecmp(input, "backup")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001621 s->scfunc = backup_file_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001622 s->execute = FALSE;
1623#ifdef ENABLE_MULTIBUFFER
1624 } else if (!strcasecmp(input, "newbuffer")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001625 s->scfunc = new_buffer_void;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001626 s->execute = FALSE;
1627#endif
Chris Allegretta637daa82011-02-07 14:45:56 +00001628#ifndef DISABLE_BROWSER
Chris Allegrettae347efb2008-03-09 02:52:40 +00001629 } else if (!strcasecmp(input, "firstfile")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001630 s->scfunc = do_first_file;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001631 s->execute = FALSE;
1632 } else if (!strcasecmp(input, "lastfile")) {
Chris Allegretta637daa82011-02-07 14:45:56 +00001633 s->scfunc = do_last_file;
Chris Allegrettae347efb2008-03-09 02:52:40 +00001634 s->execute = FALSE;
Chris Allegretta637daa82011-02-07 14:45:56 +00001635#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001636 } else {
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001637 free(s);
1638 return NULL;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001639 }
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001640 return s;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001641}
1642
Chris Allegrettae347efb2008-03-09 02:52:40 +00001643#ifdef ENABLE_NANORC
Benno Schulenberg7f873932014-02-25 21:27:22 +00001644/* Same thing as above but for the menu. */
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001645int strtomenu(char *input)
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001646{
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001647 if (!strcasecmp(input, "all"))
1648 return MALL;
1649 else if (!strcasecmp(input, "main"))
1650 return MMAIN;
1651 else if (!strcasecmp(input, "search"))
1652 return MWHEREIS;
1653 else if (!strcasecmp(input, "replace"))
1654 return MREPLACE;
1655 else if (!strcasecmp(input, "replace2") ||
1656 !strcasecmp(input, "replacewith"))
1657 return MREPLACE2;
1658 else if (!strcasecmp(input, "gotoline"))
1659 return MGOTOLINE;
1660 else if (!strcasecmp(input, "writeout"))
1661 return MWRITEFILE;
1662 else if (!strcasecmp(input, "insert"))
1663 return MINSERTFILE;
1664 else if (!strcasecmp(input, "externalcmd") ||
1665 !strcasecmp(input, "extcmd"))
1666 return MEXTCMD;
1667 else if (!strcasecmp(input, "help"))
1668 return MHELP;
1669 else if (!strcasecmp(input, "spell"))
1670 return MSPELL;
1671 else if (!strcasecmp(input, "browser"))
1672 return MBROWSER;
1673 else if (!strcasecmp(input, "whereisfile"))
1674 return MWHEREISFILE;
1675 else if (!strcasecmp(input, "gotodir"))
1676 return MGOTODIR;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001677
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001678 return -1;
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001679}
Chris Allegretta79a33bb2008-03-05 07:34:01 +00001680#endif
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001681
Chris Allegrettae347efb2008-03-09 02:52:40 +00001682
David Lawrence Ramseye6757b92006-04-19 13:36:56 +00001683#ifdef DEBUG
1684/* This function is used to gracefully return all the memory we've used.
1685 * It should be called just before calling exit(). Practically, the
Chris Allegretta6232d662002-05-12 19:52:15 +00001686 * only effect is to cause a segmentation fault if the various data
1687 * structures got bolloxed earlier. Thus, we don't bother having this
Chris Allegretta6df90f52002-07-19 01:08:59 +00001688 * function unless debugging is turned on. */
Chris Allegretta6df90f52002-07-19 01:08:59 +00001689void thanks_for_all_the_fish(void)
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001690{
David Lawrence Ramsey576bf332004-07-12 03:10:30 +00001691 delwin(topwin);
1692 delwin(edit);
1693 delwin(bottomwin);
1694
Chris Allegretta7662c862003-01-13 01:35:15 +00001695#ifndef DISABLE_JUSTIFY
1696 if (quotestr != NULL)
1697 free(quotestr);
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +00001698#ifdef HAVE_REGEX_H
1699 regfree(&quotereg);
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001700 if (quoteerr != NULL)
1701 free(quoteerr);
David Lawrence Ramsey819c7f02004-07-30 03:54:34 +00001702#endif
Chris Allegretta7662c862003-01-13 01:35:15 +00001703#endif
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001704#ifndef NANO_TINY
David Lawrence Ramsey04e42a62004-02-28 16:24:31 +00001705 if (backup_dir != NULL)
1706 free(backup_dir);
1707#endif
Chris Allegretta2598c662002-03-28 01:59:34 +00001708#ifndef DISABLE_OPERATINGDIR
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001709 if (operating_dir != NULL)
1710 free(operating_dir);
1711 if (full_operating_dir != NULL)
1712 free(full_operating_dir);
1713#endif
1714 if (last_search != NULL)
1715 free(last_search);
1716 if (last_replace != NULL)
1717 free(last_replace);
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001718#ifndef DISABLE_SPELLER
1719 if (alt_speller != NULL)
1720 free(alt_speller);
1721#endif
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001722 if (answer != NULL)
1723 free(answer);
1724 if (cutbuffer != NULL)
Chris Allegretta7662c862003-01-13 01:35:15 +00001725 free_filestruct(cutbuffer);
David Lawrence Ramsey93c84052004-11-23 04:08:28 +00001726#ifndef DISABLE_JUSTIFY
1727 if (jusbuffer != NULL)
1728 free_filestruct(jusbuffer);
1729#endif
David Lawrence Ramsey5d8d0b12005-05-26 05:53:29 +00001730 /* Free the memory associated with each open file buffer. */
David Lawrence Ramsey6ad59cd2005-07-08 20:09:16 +00001731 if (openfile != NULL)
David Lawrence Ramsey64661ac2005-07-08 19:57:25 +00001732 free_openfilestruct(openfile);
Chris Allegretta6df90f52002-07-19 01:08:59 +00001733#ifdef ENABLE_COLOR
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001734 if (syntaxstr != NULL)
1735 free(syntaxstr);
Chris Allegretta6df90f52002-07-19 01:08:59 +00001736 while (syntaxes != NULL) {
1737 syntaxtype *bill = syntaxes;
1738
1739 free(syntaxes->desc);
1740 while (syntaxes->extensions != NULL) {
1741 exttype *bob = syntaxes->extensions;
1742
1743 syntaxes->extensions = bob->next;
David Lawrence Ramsey2385c1a2005-07-29 21:42:08 +00001744 free(bob->ext_regex);
David Lawrence Ramsey7fc0ada2005-08-29 18:52:06 +00001745 if (bob->ext != NULL) {
1746 regfree(bob->ext);
1747 free(bob->ext);
1748 }
Chris Allegretta6df90f52002-07-19 01:08:59 +00001749 free(bob);
1750 }
1751 while (syntaxes->color != NULL) {
1752 colortype *bob = syntaxes->color;
1753
1754 syntaxes->color = bob->next;
David Lawrence Ramsey2385c1a2005-07-29 21:42:08 +00001755 free(bob->start_regex);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001756 if (bob->start != NULL) {
1757 regfree(bob->start);
1758 free(bob->start);
1759 }
David Lawrence Ramseyd2361f02005-07-14 18:33:51 +00001760 if (bob->end_regex != NULL)
1761 free(bob->end_regex);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001762 if (bob->end != NULL) {
Chris Allegrettace452fb2003-02-03 02:56:44 +00001763 regfree(bob->end);
David Lawrence Ramseydb958022005-07-13 20:18:46 +00001764 free(bob->end);
1765 }
Chris Allegretta6df90f52002-07-19 01:08:59 +00001766 free(bob);
1767 }
1768 syntaxes = syntaxes->next;
1769 free(bill);
1770 }
1771#endif /* ENABLE_COLOR */
David Lawrence Ramseyebe34252005-11-15 03:17:35 +00001772#ifndef NANO_TINY
David Lawrence Ramsey40e4acf2005-05-26 06:09:07 +00001773 /* Free the search and replace history lists. */
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001774 if (searchage != NULL)
1775 free_filestruct(searchage);
1776 if (replaceage != NULL)
1777 free_filestruct(replaceage);
Chris Allegretta5beed502003-01-05 20:41:21 +00001778#endif
David Lawrence Ramseya27bd652004-08-17 05:23:38 +00001779#ifdef ENABLE_NANORC
David Lawrence Ramsey31b159c2005-05-26 05:17:13 +00001780 if (homedir != NULL)
1781 free(homedir);
David Lawrence Ramseya27bd652004-08-17 05:23:38 +00001782#endif
Chris Allegrettaf5de33a2002-02-27 04:14:16 +00001783}
Chris Allegretta637daa82011-02-07 14:45:56 +00001784
Chris Allegretta6232d662002-05-12 19:52:15 +00001785#endif /* DEBUG */