global.c 22 KB
Newer Older
Chris Allegretta's avatar
Chris Allegretta committed
1
/* $Id$ */
Chris Allegretta's avatar
Chris Allegretta committed
2
3
4
/**************************************************************************
 *   global.c                                                             *
 *                                                                        *
5
 *   Copyright (C) 1999-2002 Chris Allegretta                             *
Chris Allegretta's avatar
Chris Allegretta committed
6
7
 *   This program is free software; you can redistribute it and/or modify *
 *   it under the terms of the GNU General Public License as published by *
8
 *   the Free Software Foundation; either version 2, or (at your option)  *
Chris Allegretta's avatar
Chris Allegretta committed
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 *   any later version.                                                   *
 *                                                                        *
 *   This program is distributed in the hope that it will be useful,      *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of       *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
 *   GNU General Public License for more details.                         *
 *                                                                        *
 *   You should have received a copy of the GNU General Public License    *
 *   along with this program; if not, write to the Free Software          *
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.            *
 *                                                                        *
 **************************************************************************/

#include "config.h"
23
24

#include <sys/stat.h>
Chris Allegretta's avatar
Chris Allegretta committed
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "nano.h"
#include "proto.h"

#ifndef NANO_SMALL
#include <libintl.h>
#define _(string) gettext(string)
#else
#define _(string) (string)
#endif

/*
 * Global variables
 */
38

39
int flags = 0;			/* Our new flag containing many options */
Chris Allegretta's avatar
Chris Allegretta committed
40
41
42
WINDOW *edit;			/* The file portion of the editor  */
WINDOW *topwin;			/* Top line of screen */
WINDOW *bottomwin;		/* Bottom buffer */
Chris Allegretta's avatar
Chris Allegretta committed
43
char *filename = NULL;		/* Name of the file */
Chris Allegretta's avatar
Chris Allegretta committed
44
45
46
47
48
49
50
51
52
53
54
55
56
57
int editwinrows = 0;		/* How many rows long is the edit
				   window? */
filestruct *current;		/* Current buffer pointer */
int current_x = 0, current_y = 0;	/* Current position of X and Y in
					   the editor - relative to edit
					   window (0,0) */
filestruct *fileage = NULL;	/* Our file buffer */
filestruct *edittop = NULL;	/* Pointer to the top of the edit
				   buffer with respect to the
				   file struct */
filestruct *editbot = NULL;	/* Same for the bottom */
filestruct *filebot = NULL;	/* Last node in the file struct */
filestruct *cutbuffer = NULL;	/* A place to store cut text */

58
#ifdef ENABLE_MULTIBUFFER
59
60
61
filestruct *open_files = NULL;	/* The list of open files */
#endif

62
char *answer = NULL;			/* Answer str to many questions */
Chris Allegretta's avatar
Chris Allegretta committed
63
int totlines = 0;		/* Total number of lines in the file */
64
long totsize = 0;		/* Total number of bytes in the file */
65
int placewewant = 0;		/* The column we'd like the cursor
Chris Allegretta's avatar
Chris Allegretta committed
66
67
68
				   to jump to when we go to the
				   next or previous line */

69
70
int tabsize = 8;		/* Our internal tabsize variable */

Chris Allegretta's avatar
Chris Allegretta committed
71
72
73
74
75
76
77
78
char *hblank;			/* A horizontal blank line */
char *help_text;		/* The text in the help window */

/* More stuff for the marker select */

filestruct *mark_beginbuf;	/* the begin marker buffer */
int mark_beginx;		/* X value in the string to start */

79
80
81
82
83
#ifndef DISABLE_OPERATINGDIR
char *operating_dir = NULL;	/* Operating directory, which we can't go
				   higher than */
#endif

84
85
86
87
#ifndef DISABLE_SPELLER
char *alt_speller;		/* Alternative spell command */
#endif

88
89
90
shortcut *main_list = NULL;
shortcut *whereis_list = NULL;
shortcut *replace_list = NULL;
91
shortcut *replace_list_2 = NULL; 	/* 2nd half of replace dialog */
92
93
94
95
96
97
shortcut *goto_list = NULL;
shortcut *gotodir_list = NULL;
shortcut *writefile_list = NULL;
shortcut *insertfile_list = NULL;
shortcut *help_list = NULL;
shortcut *spell_list = NULL;
98
#ifndef DISABLE_BROWSER
99
shortcut *browser_list = NULL;
Chris Allegretta's avatar
Chris Allegretta committed
100
101
#endif

102
103
#ifdef ENABLE_COLOR
    colorstruct colors[NUM_NCOLORS];
104
    colortype *colorstrings = NULL;
105
106
#endif

107
#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined (DISABLE_HELP)
108
shortcut *currshortcut;			/* Current shortcut list we're using */
109
#endif
110

111
#ifndef NANO_SMALL
112
toggle *toggles = NULL;
113
#endif
Chris Allegretta's avatar
Chris Allegretta committed
114

115
116
/* Regular expressions */

117
#ifdef HAVE_REGEX_H
118
119
120
regex_t search_regexp;		/* Global to store compiled search regexp */
regmatch_t regmatches[10];	/* Match positions for parenthetical
				   subexpressions, max of 10 */
121
#endif
122

123
124
125
126
127
128
129
130
131
132
133
int length_of_list(shortcut *s) 
{
    int i = 0;
    shortcut *t;

    for (t = s; t != NULL; t = t->next)
	i++;

    return i;
}

Chris Allegretta's avatar
Chris Allegretta committed
134
/* Initialize a struct *without* our lovely braces =( */
135
void sc_init_one(shortcut **shortcutage, int key, char *desc, char *help, int alt,
Chris Allegretta's avatar
Chris Allegretta committed
136
137
		 int misc1, int misc2, int view, int (*func) (void))
{
138
139
140
141
142
143
144
145
146
147
148
149
    shortcut *s;

    if (*shortcutage == NULL) {
	*shortcutage = nmalloc(sizeof(shortcut));
	s = *shortcutage;
    } else {
	for (s = *shortcutage; s->next != NULL; s = s->next)
	    ;
	s->next = nmalloc(sizeof(shortcut));
	s = s->next; 
    }

Chris Allegretta's avatar
Chris Allegretta committed
150
151
152
153
154
155
156
157
    s->val = key;
    s->desc = desc;
    s->help = help;
    s->altval = alt;
    s->misc1 = misc1;
    s->misc2 = misc2;
    s->viewok = view;
    s->func = func;
158
    s->next = NULL;
Chris Allegretta's avatar
Chris Allegretta committed
159
160
}

161
#ifndef NANO_SMALL
162
/* Initialize the toggles in the same manner */
163
void toggle_init_one(int val, char *desc, int flag)
164
{
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
    toggle *u;

    if (toggles == NULL) {
	toggles = nmalloc(sizeof(toggle));
	u = toggles;
    } else {
	for (u = toggles; u->next != NULL; u = u->next)
	    ;
	u->next = nmalloc(sizeof(toggle));
	u = u->next;
    }

    u->val = val;
    u->desc = desc;
    u->flag = flag;
    u->next = NULL;
181
}
182
#endif
183
184
185
186
187
188

void toggle_init(void)
{
#ifndef NANO_SMALL
    char *toggle_const_msg, *toggle_autoindent_msg, *toggle_suspend_msg,
	*toggle_nohelp_msg, *toggle_picomode_msg, *toggle_mouse_msg,
189
	*toggle_cuttoend_msg, *toggle_wrap_msg, *toggle_case_msg, 
190
191
	*toggle_backwards_msg, *toggle_noconvert_msg, *toggle_dos_msg,
	*toggle_mac_msg, *toggle_smooth_msg;
192

193
#ifdef HAVE_REGEX_H
194
    char *toggle_regexp_msg;
195
#endif
196

197
198
199
#ifdef ENABLE_MULTIBUFFER
    char *toggle_load_msg;
#endif
200

201
    toggle_const_msg = _("Constant cursor position");
202
    toggle_autoindent_msg = _("Auto indent");
203
    toggle_suspend_msg = _("Suspend");
204
    toggle_nohelp_msg = _("Help mode");
205
    toggle_picomode_msg = _("Pico mode");
206
207
    toggle_mouse_msg = _("Mouse support");
    toggle_cuttoend_msg = _("Cut to end");
208
209
    toggle_backwards_msg = _("Backwards search");
    toggle_case_msg = _("Case sensitive search");
210

211
#ifdef HAVE_REGEX_H
212
    toggle_regexp_msg = _("Regular expression search");
213
#endif
214
215
216
217
218

    toggle_noconvert_msg = _("No conversion from DOS/Mac format");
    toggle_dos_msg = _("Writing file in DOS format");
    toggle_mac_msg = _("Writing file in Mac format");
    toggle_smooth_msg = _("Smooth scrolling");
219
    toggle_wrap_msg = _("Auto wrap");
220

221
222
#ifdef ENABLE_MULTIBUFFER
    toggle_load_msg = _("Multiple file buffers");
223
224
#endif

225
226
227
228
229
230
231
232
233
234
    toggle_init_one(TOGGLE_CONST_KEY, toggle_const_msg, CONSTUPDATE);
    toggle_init_one(TOGGLE_AUTOINDENT_KEY, toggle_autoindent_msg, AUTOINDENT);
    toggle_init_one(TOGGLE_SUSPEND_KEY, toggle_suspend_msg, SUSPEND);
    toggle_init_one(TOGGLE_NOHELP_KEY, toggle_nohelp_msg, NO_HELP);
    toggle_init_one(TOGGLE_PICOMODE_KEY, toggle_picomode_msg, PICO_MODE);
    toggle_init_one(TOGGLE_WRAP_KEY, toggle_wrap_msg, NO_WRAP);
    toggle_init_one(TOGGLE_MOUSE_KEY, toggle_mouse_msg, USE_MOUSE);
    toggle_init_one(TOGGLE_CUTTOEND_KEY, toggle_cuttoend_msg, CUT_TO_END);
    toggle_init_one(TOGGLE_BACKWARDS_KEY, toggle_backwards_msg, REVERSE_SEARCH);
    toggle_init_one(TOGGLE_CASE_KEY, toggle_case_msg, CASE_SENSITIVE);
235
#ifdef HAVE_REGEX_H
236
    toggle_init_one(TOGGLE_REGEXP_KEY, toggle_regexp_msg, USE_REGEXP);
237
#endif
238
239
#ifdef ENABLE_MULTIBUFFER
    toggle_init_one(TOGGLE_LOAD_KEY, toggle_load_msg, MULTIBUFFER);
240
#endif
241
242
243
244
245
    toggle_init_one(TOGGLE_NOCONVERT_KEY, toggle_noconvert_msg, NO_CONVERT);
    toggle_init_one(TOGGLE_DOS_KEY, toggle_dos_msg, DOS_FILE);
    toggle_init_one(TOGGLE_MAC_KEY, toggle_mac_msg, MAC_FILE);
    toggle_init_one(TOGGLE_SMOOTH_KEY, toggle_smooth_msg, SMOOTHSCROLL);
#endif /* !NANO_SMALL */
246
247
}

248
void shortcut_init(int unjustify)
Chris Allegretta's avatar
Chris Allegretta committed
249
250
251
252
253
254
255
256
257
258
259
260
{
    char *nano_help_msg = "", *nano_writeout_msg = "", *nano_exit_msg = "",
	*nano_goto_msg = "", *nano_justify_msg = "", *nano_replace_msg =
	"", *nano_insert_msg = "", *nano_whereis_msg =
	"", *nano_prevpage_msg = "", *nano_nextpage_msg =
	"", *nano_cut_msg = "", *nano_uncut_msg = "", *nano_cursorpos_msg =
	"", *nano_spell_msg = "", *nano_up_msg = "", *nano_down_msg =
	"", *nano_forward_msg = "", *nano_back_msg = "", *nano_home_msg =
	"", *nano_end_msg = "", *nano_firstline_msg =
	"", *nano_lastline_msg = "", *nano_refresh_msg =
	"", *nano_mark_msg = "", *nano_delete_msg =
	"", *nano_backspace_msg = "", *nano_tab_msg =
261
	"", *nano_enter_msg = "", *nano_cancel_msg = 
262
263
	"", *nano_unjustify_msg = "", *nano_append_msg =
	"", *nano_dos_msg = "", *nano_mac_msg = ""; 
Chris Allegretta's avatar
Chris Allegretta committed
264
265

#ifndef NANO_SMALL
266
    char *nano_tofiles_msg = "", *nano_gotodir_msg = "", *nano_case_msg =
267
268
269
270
	"", *nano_reverse_msg = "";
#ifdef HAVE_REGEX_H
    char *nano_regexp_msg = "", *nano_bracket_msg = "";
#endif
271
272
273
#ifdef ENABLE_MULTIBUFFER
    char *nano_openprev_msg = "", *nano_opennext_msg = "";
#endif
274

Chris Allegretta's avatar
Chris Allegretta committed
275
276
    nano_help_msg = _("Invoke the help menu");
    nano_writeout_msg = _("Write the current file to disk");
277

278
#ifdef ENABLE_MULTIBUFFER
279
280
    nano_exit_msg = _("Close currently loaded file/Exit from nano");
#else
Chris Allegretta's avatar
Chris Allegretta committed
281
    nano_exit_msg = _("Exit from nano");
282
283
#endif

Chris Allegretta's avatar
Chris Allegretta committed
284
285
    nano_goto_msg = _("Goto a specific line number");
    nano_justify_msg = _("Justify the current paragraph");
286
    nano_unjustify_msg = _("Unjustify after a justify");
Chris Allegretta's avatar
Chris Allegretta committed
287
288
289
290
291
292
293
    nano_replace_msg = _("Replace text within the editor");
    nano_insert_msg = _("Insert another file into the current one");
    nano_whereis_msg = _("Search for text within the editor");
    nano_prevpage_msg = _("Move to the previous screen");
    nano_nextpage_msg = _("Move to the next screen");
    nano_cut_msg = _("Cut the current line and store it in the cutbuffer");
    nano_uncut_msg = _("Uncut from the cutbuffer into the current line");
294
    nano_cursorpos_msg = _("Show the position of the cursor");
Chris Allegretta's avatar
Chris Allegretta committed
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
    nano_spell_msg = _("Invoke the spell checker (if available)");
    nano_up_msg = _("Move up one line");
    nano_down_msg = _("Move down one line");
    nano_forward_msg = _("Move forward one character");
    nano_back_msg = _("Move back one character");
    nano_home_msg = _("Move to the beginning of the current line");
    nano_end_msg = _("Move to the end of the current line");
    nano_firstline_msg = _("Go to the first line of the file");
    nano_lastline_msg = _("Go to the last line of the file");
    nano_refresh_msg = _("Refresh (redraw) the current screen");
    nano_mark_msg = _("Mark text at the current cursor location");
    nano_delete_msg = _("Delete the character under the cursor");
    nano_backspace_msg =
	_("Delete the character to the left of the cursor");
    nano_tab_msg = _("Insert a tab character");
    nano_enter_msg = _("Insert a carriage return at the cursor position");
    nano_case_msg =
	_("Make the current search or replace case (in)sensitive");
Chris Allegretta's avatar
Chris Allegretta committed
313
    nano_tofiles_msg = _("Go to file browser");
Rocco Corsi's avatar
   
Rocco Corsi committed
314
    nano_gotodir_msg = _("Goto Directory");
Chris Allegretta's avatar
Chris Allegretta committed
315
    nano_cancel_msg = _("Cancel the current function");
316
    nano_append_msg = _("Append to the current file");
317
    nano_reverse_msg = _("Search backwards");
318
319
    nano_dos_msg = _("Write file out in DOS format");
    nano_mac_msg = _("Write file out in Mac format");
320
#ifdef HAVE_REGEX_H
321
322
    nano_regexp_msg = _("Use Regular expressions");
    nano_bracket_msg = _("Find other bracket");
323
#endif
324
325
326
#ifdef ENABLE_MULTIBUFFER
    nano_openprev_msg = _("Open previously loaded file");
    nano_opennext_msg = _("Open next loaded file");
Chris Allegretta's avatar
Chris Allegretta committed
327
#endif
328
#endif /* !NANO_SMALL */
Chris Allegretta's avatar
Chris Allegretta committed
329

330
	sc_init_one(&main_list, NANO_HELP_KEY, _("Get Help"),
331
		    nano_help_msg, 0, NANO_HELP_FKEY, 0, VIEW, do_help);
Chris Allegretta's avatar
Chris Allegretta committed
332

333
#ifdef ENABLE_MULTIBUFFER
334
    if (open_files != NULL && (open_files->prev || open_files->next))
335
	sc_init_one(&main_list, NANO_EXIT_KEY, _("Close"),
336
337
338
		nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, do_exit);
    else
#endif
339
	sc_init_one(&main_list, NANO_EXIT_KEY, _("Exit"),
Chris Allegretta's avatar
Chris Allegretta committed
340
341
		nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, do_exit);

342
    sc_init_one(&main_list, NANO_WRITEOUT_KEY, _("WriteOut"),
Chris Allegretta's avatar
Chris Allegretta committed
343
344
345
		    nano_writeout_msg,
		    0, NANO_WRITEOUT_FKEY, 0, NOVIEW, do_writeout_void);

346
    if (ISSET(PICO_MODE))
347
	sc_init_one(&main_list, NANO_JUSTIFY_KEY, _("Justify"),
348
		    nano_justify_msg, 0, NANO_JUSTIFY_FKEY, 0,
349
		    NOVIEW, do_justify);
Chris Allegretta's avatar
Chris Allegretta committed
350
    else
351
352
353

#ifdef ENABLE_MULTIBUFFER
	/* this is so we can view multiple files */
354
	sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
355
356
357
		nano_insert_msg,
		0, NANO_INSERTFILE_FKEY, 0, VIEW, do_insertfile_void);
#else
358
	sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
359
		nano_insert_msg,
360
		0, NANO_INSERTFILE_FKEY, 0, NOVIEW, do_insertfile_void);
361
#endif
362
363

    if (ISSET(PICO_MODE))
364
365
366

#ifdef ENABLE_MULTIBUFFER
	/* this is so we can view multiple files */
367
	sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
368
369
370
		nano_insert_msg,
		0, NANO_INSERTFILE_FKEY, 0, VIEW, do_insertfile_void);
#else
371
	sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
Chris Allegretta's avatar
Chris Allegretta committed
372
		nano_insert_msg,
373
		0, NANO_INSERTFILE_FKEY, 0, NOVIEW, do_insertfile_void);
374
375
#endif

376
    else
377
	sc_init_one(&main_list, NANO_REPLACE_KEY, _("Replace"),
378
		    nano_replace_msg,
379
		    NANO_ALT_REPLACE_KEY, NANO_REPLACE_FKEY, 0, NOVIEW, do_replace);
Chris Allegretta's avatar
Chris Allegretta committed
380

381
    sc_init_one(&main_list, NANO_WHEREIS_KEY, _("Where Is"),
Chris Allegretta's avatar
Chris Allegretta committed
382
383
384
		nano_whereis_msg,
		0, NANO_WHEREIS_FKEY, 0, VIEW, do_search);

385
    sc_init_one(&main_list, NANO_PREVPAGE_KEY, _("Prev Page"),
Chris Allegretta's avatar
Chris Allegretta committed
386
		nano_prevpage_msg,
387
		0, NANO_PREVPAGE_FKEY, KEY_PPAGE, VIEW, do_page_up);
Chris Allegretta's avatar
Chris Allegretta committed
388

389
    sc_init_one(&main_list, NANO_NEXTPAGE_KEY, _("Next Page"),
Chris Allegretta's avatar
Chris Allegretta committed
390
		nano_nextpage_msg,
391
		0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, do_page_down);
Chris Allegretta's avatar
Chris Allegretta committed
392

393
    sc_init_one(&main_list, NANO_CUT_KEY, _("Cut Text"),
Chris Allegretta's avatar
Chris Allegretta committed
394
395
		nano_cut_msg, 0, NANO_CUT_FKEY, 0, NOVIEW, do_cut_text);

396
    if (unjustify)
397
	sc_init_one(&main_list, NANO_UNJUSTIFY_KEY, _("UnJustify"),
398
399
		nano_unjustify_msg, 0, 0, 0, NOVIEW, do_uncut_text);
    else
400
	sc_init_one(&main_list, NANO_UNCUT_KEY, _("UnCut Txt"),
Chris Allegretta's avatar
Chris Allegretta committed
401
402
403
		nano_uncut_msg,
		0, NANO_UNCUT_FKEY, 0, NOVIEW, do_uncut_text);

404
    sc_init_one(&main_list, NANO_CURSORPOS_KEY, _("Cur Pos"),
Chris Allegretta's avatar
Chris Allegretta committed
405
		nano_cursorpos_msg,
406
		0, NANO_CURSORPOS_FKEY, 0, VIEW, do_cursorpos_void);
Chris Allegretta's avatar
Chris Allegretta committed
407

408
    sc_init_one(&main_list, NANO_SPELL_KEY, _("To Spell"),
Chris Allegretta's avatar
Chris Allegretta committed
409
410
411
		nano_spell_msg, 0, NANO_SPELL_FKEY, 0, NOVIEW, do_spell);


412
    sc_init_one(&main_list, NANO_UP_KEY, _("Up"),
Chris Allegretta's avatar
Chris Allegretta committed
413
414
		nano_up_msg, 0, KEY_UP, 0, VIEW, do_up);

415
    sc_init_one(&main_list, NANO_DOWN_KEY, _("Down"),
Chris Allegretta's avatar
Chris Allegretta committed
416
417
		nano_down_msg, 0, KEY_DOWN, 0, VIEW, do_down);

418
    sc_init_one(&main_list, NANO_FORWARD_KEY, _("Forward"),
Chris Allegretta's avatar
Chris Allegretta committed
419
420
		nano_forward_msg, 0, KEY_RIGHT, 0, VIEW, do_right);

421
    sc_init_one(&main_list, NANO_BACK_KEY, _("Back"),
Chris Allegretta's avatar
Chris Allegretta committed
422
423
		nano_back_msg, 0, KEY_LEFT, 0, VIEW, do_left);

424
    sc_init_one(&main_list, NANO_HOME_KEY, _("Home"),
Chris Allegretta's avatar
Chris Allegretta committed
425
426
		nano_home_msg, 0, KEY_HOME, 362, VIEW, do_home);

427
    sc_init_one(&main_list, NANO_END_KEY, _("End"),
Chris Allegretta's avatar
Chris Allegretta committed
428
429
		nano_end_msg, 0, KEY_END, 385, VIEW, do_end);

430
    sc_init_one(&main_list, NANO_REFRESH_KEY, _("Refresh"),
Chris Allegretta's avatar
Chris Allegretta committed
431
432
		nano_refresh_msg, 0, 0, 0, VIEW, total_refresh);

433
    sc_init_one(&main_list, NANO_MARK_KEY, _("Mark Text"),
434
		nano_mark_msg, NANO_ALT_MARK_KEY, 0, 0, NOVIEW, do_mark);
Chris Allegretta's avatar
Chris Allegretta committed
435

436
    sc_init_one(&main_list, NANO_DELETE_KEY, _("Delete"),
Chris Allegretta's avatar
Chris Allegretta committed
437
438
439
		nano_delete_msg, 0, KEY_DC,
		NANO_CONTROL_D, NOVIEW, do_delete);

440
    sc_init_one(&main_list, NANO_BACKSPACE_KEY, _("Backspace"),
Chris Allegretta's avatar
Chris Allegretta committed
441
442
443
		nano_backspace_msg, 0,
		KEY_BACKSPACE, 127, NOVIEW, do_backspace);

444
    sc_init_one(&main_list, NANO_TAB_KEY, _("Tab"),
Chris Allegretta's avatar
Chris Allegretta committed
445
446
		nano_tab_msg, 0, 0, 0, NOVIEW, do_tab);

447
    if (ISSET(PICO_MODE))
448
	sc_init_one(&main_list, NANO_REPLACE_KEY, _("Replace"),
Chris Allegretta's avatar
Chris Allegretta committed
449
		    nano_replace_msg,
450
		    NANO_ALT_REPLACE_KEY, NANO_REPLACE_FKEY, 0, NOVIEW, do_replace);
Chris Allegretta's avatar
Chris Allegretta committed
451
    else
452
	sc_init_one(&main_list, NANO_JUSTIFY_KEY, _("Justify"),
453
		    nano_justify_msg, 0, NANO_JUSTIFY_FKEY, 0,
454
		    NOVIEW, do_justify);
Chris Allegretta's avatar
Chris Allegretta committed
455

456
    sc_init_one(&main_list, NANO_ENTER_KEY, _("Enter"),
Chris Allegretta's avatar
Chris Allegretta committed
457
458
459
		nano_enter_msg,
		0, KEY_ENTER, NANO_CONTROL_M, NOVIEW, do_enter_void);

460
    sc_init_one(&main_list, NANO_GOTO_KEY, _("Goto Line"),
461
		    nano_goto_msg,
462
		    NANO_ALT_GOTO_KEY, NANO_GOTO_FKEY, 0, VIEW, do_gotoline_void);
463

464
#if (!defined NANO_SMALL) && (defined HAVE_REGEX_H)
465
    sc_init_one(&main_list, -9, _("Find Other Bracket"),
466
467
468
		    nano_bracket_msg,
		    NANO_BRACKET_KEY, 0, 0, VIEW, do_find_bracket);
#endif
Chris Allegretta's avatar
Chris Allegretta committed
469

470
471
472
473
474
475
476
477
#ifdef ENABLE_MULTIBUFFER
    sc_init_one(&main_list, -9, _("Previous File"),
		    nano_openprev_msg,
		    NANO_OPENPREV_KEY, 0, 0, VIEW, open_prevfile_void);
    sc_init_one(&main_list, -9, _("Next File"),
		    nano_opennext_msg,
		    NANO_OPENNEXT_KEY, 0, 0, VIEW, open_nextfile_void);
#endif
478

479
    sc_init_one(&whereis_list, NANO_HELP_KEY,
480
481
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);

482
    sc_init_one(&whereis_list, NANO_CANCEL_KEY,
483
484
		_("Cancel"), nano_cancel_msg, 0, 0, 0, VIEW, 0);

485
    sc_init_one(&whereis_list, NANO_FIRSTLINE_KEY, _("First Line"),
Chris Allegretta's avatar
Chris Allegretta committed
486
487
		nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);

488
    sc_init_one(&whereis_list, NANO_LASTLINE_KEY, _("Last Line"),
Chris Allegretta's avatar
Chris Allegretta committed
489
490
		nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);

491
    sc_init_one(&whereis_list, NANO_OTHERSEARCH_KEY, _("Replace"),
Chris Allegretta's avatar
Chris Allegretta committed
492
493
		nano_replace_msg, 0, 0, 0, VIEW, do_replace);

494
    sc_init_one(&whereis_list, NANO_FROMSEARCHTOGOTO_KEY,
495
496
		_("Goto Line"), nano_goto_msg, 0, 0, 0, VIEW,
		do_gotoline_void);
497

498
#ifndef NANO_SMALL
499
    sc_init_one(&whereis_list, TOGGLE_CASE_KEY, _("Case Sens"),
500
501
		nano_case_msg, 0, 0, 0, VIEW, 0);

502
    sc_init_one(&whereis_list, TOGGLE_BACKWARDS_KEY, _("Direction"),
Chris Allegretta's avatar
Chris Allegretta committed
503
		nano_reverse_msg, 0, 0, 0, VIEW, 0);
Chris Allegretta's avatar
Chris Allegretta committed
504

505
#ifdef HAVE_REGEX_H
506
    sc_init_one(&whereis_list, TOGGLE_REGEXP_KEY,
507
		_("Regexp"), nano_regexp_msg, 0, 0, 0, VIEW, 0);
508
#endif
509
#endif /* !NANO_SMALL */
510
511


512
    sc_init_one(&replace_list, NANO_HELP_KEY,
513
514
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);

515
    sc_init_one(&replace_list, NANO_CANCEL_KEY,
516
		_("Cancel"), nano_cancel_msg, 0, 0, 0, VIEW, 0);
Chris Allegretta's avatar
Chris Allegretta committed
517

518
    sc_init_one(&replace_list, NANO_FIRSTLINE_KEY, _("First Line"),
Chris Allegretta's avatar
Chris Allegretta committed
519
520
		nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);

521
    sc_init_one(&replace_list, NANO_LASTLINE_KEY, _("Last Line"),
Chris Allegretta's avatar
Chris Allegretta committed
522
523
		nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);

524
    sc_init_one(&replace_list, NANO_OTHERSEARCH_KEY, _("No Replace"),
Chris Allegretta's avatar
Chris Allegretta committed
525
526
		nano_whereis_msg, 0, 0, 0, VIEW, do_search);

527
    sc_init_one(&replace_list, NANO_FROMSEARCHTOGOTO_KEY,
528
529
		_("Goto Line"), nano_goto_msg, 0, 0, 0, VIEW,
		do_gotoline_void);
530

531
#ifndef NANO_SMALL
532
    sc_init_one(&replace_list, TOGGLE_CASE_KEY, _("Case Sens"),
533
534
		nano_case_msg, 0, 0, 0, VIEW, 0);

535
    sc_init_one(&replace_list, TOGGLE_BACKWARDS_KEY, _("Direction"),
Chris Allegretta's avatar
Chris Allegretta committed
536
		nano_reverse_msg, 0, 0, 0, VIEW, 0);
537

538
#ifdef HAVE_REGEX_H
539
    sc_init_one(&replace_list, TOGGLE_REGEXP_KEY, 
540
		_("Regexp"), nano_regexp_msg, 0, 0, 0, VIEW, 0);
541
#endif
542
#endif /* !NANO_SMALL */
543

544

545
    sc_init_one(&replace_list_2, NANO_HELP_KEY,
546
547
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);

548
    sc_init_one(&replace_list_2, NANO_CANCEL_KEY,
549
		_("Cancel"), nano_cancel_msg, 0, 0, 0, VIEW, 0);
550

551
    sc_init_one(&replace_list_2, NANO_FIRSTLINE_KEY, _("First Line"),
552
553
		nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);

554
    sc_init_one(&replace_list_2, NANO_LASTLINE_KEY, _("Last Line"),
555
556
		nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);

Chris Allegretta's avatar
Chris Allegretta committed
557

558
    sc_init_one(&goto_list, NANO_HELP_KEY,
559
560
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);

561
    sc_init_one(&goto_list, NANO_CANCEL_KEY, _("Cancel"),
562
		nano_cancel_msg, 0, 0, 0, VIEW, 0);
Chris Allegretta's avatar
Chris Allegretta committed
563

564
    sc_init_one(&goto_list, NANO_FIRSTLINE_KEY, _("First Line"),
Chris Allegretta's avatar
Chris Allegretta committed
565
566
		nano_firstline_msg, 0, 0, 0, VIEW, &do_first_line);

567
    sc_init_one(&goto_list, NANO_LASTLINE_KEY, _("Last Line"),
Chris Allegretta's avatar
Chris Allegretta committed
568
569
570
		nano_lastline_msg, 0, 0, 0, VIEW, &do_last_line);


571
    sc_init_one(&help_list, NANO_PREVPAGE_KEY, _("Prev Page"),
Chris Allegretta's avatar
Chris Allegretta committed
572
		nano_prevpage_msg,
573
		0, NANO_PREVPAGE_FKEY, KEY_PPAGE, VIEW, do_page_up);
Chris Allegretta's avatar
Chris Allegretta committed
574

575
    sc_init_one(&help_list, NANO_NEXTPAGE_KEY, _("Next Page"),
Chris Allegretta's avatar
Chris Allegretta committed
576
		nano_nextpage_msg,
577
		0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, do_page_down);
Chris Allegretta's avatar
Chris Allegretta committed
578

579
    sc_init_one(&help_list, NANO_EXIT_KEY, _("Exit"),
Chris Allegretta's avatar
Chris Allegretta committed
580
581
582
		nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, do_exit);


583
    sc_init_one(&writefile_list, NANO_HELP_KEY,
584
585
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);

586
#ifndef DISABLE_BROWSER
587
    sc_init_one(&writefile_list, NANO_TOFILES_KEY, _("To Files"),
Chris Allegretta's avatar
Chris Allegretta committed
588
589
		nano_tofiles_msg, 0, 0, 0, NOVIEW, 0);
#endif
Chris Allegretta's avatar
Chris Allegretta committed
590

591
592
593
594
595
596
597
598
599
600
#ifndef NANO_SMALL
    sc_init_one(&writefile_list, TOGGLE_DOS_KEY, 
		_("DOS Format"), nano_dos_msg, 0, 0, 0, NOVIEW, 0);

    sc_init_one(&writefile_list, TOGGLE_MAC_KEY, 
		_("Mac Format"), nano_mac_msg, 0, 0, 0, NOVIEW, 0);
#endif

    sc_init_one(&writefile_list, 
		NANO_APPEND_KEY, _("Append"),
601
602
		nano_append_msg, 0, 0, 0, NOVIEW, 0);

603
604
605
606
607
    sc_init_one(&writefile_list, NANO_CANCEL_KEY, 
		_("Cancel"), nano_cancel_msg, 0, 0, 0, VIEW, 0);


    sc_init_one(&insertfile_list, NANO_HELP_KEY,
608
609
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);

610
    sc_init_one(&insertfile_list, NANO_CANCEL_KEY, _("Cancel"),
Chris Allegretta's avatar
Chris Allegretta committed
611
612
		nano_cancel_msg, 0, 0, 0, VIEW, 0);

613
#ifndef DISABLE_BROWSER
614
    sc_init_one(&insertfile_list, NANO_TOFILES_KEY, _("To Files"),
615
616
617
		nano_tofiles_msg, 0, 0, 0, NOVIEW, 0);
#endif

618
    sc_init_one(&spell_list, NANO_HELP_KEY,
619
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
620

621
    sc_init_one(&spell_list, NANO_CANCEL_KEY, _("Cancel"),
Chris Allegretta's avatar
Chris Allegretta committed
622
623
		nano_cancel_msg, 0, 0, 0, VIEW, 0);

624

625
#ifndef DISABLE_BROWSER
626
    sc_init_one(&browser_list, NANO_HELP_KEY,
627
628
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);

629
    sc_init_one(&browser_list, NANO_EXIT_KEY, _("Exit"),
630
631
		nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, 0);

632
    sc_init_one(&browser_list, NANO_PREVPAGE_KEY, _("Prev Page"),
Chris Allegretta's avatar
Chris Allegretta committed
633
634
635
		nano_prevpage_msg,
		0, NANO_PREVPAGE_FKEY, KEY_PPAGE, VIEW, 0);

636
    sc_init_one(&browser_list, NANO_NEXTPAGE_KEY, _("Next Page"),
Chris Allegretta's avatar
Chris Allegretta committed
637
638
639
		nano_nextpage_msg,
		0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, 0);

640
    sc_init_one(&browser_list, NANO_GOTO_KEY, _("Goto"),
641
642
		nano_gotodir_msg, NANO_ALT_GOTO_KEY, NANO_GOTO_FKEY, 0, 
		VIEW, 0);
Rocco Corsi's avatar
   
Rocco Corsi committed
643

644
    sc_init_one(&gotodir_list, NANO_HELP_KEY,
645
		_("Get Help"), nano_help_msg, 0, 0, 0, VIEW, do_help);
Chris Allegretta's avatar
Chris Allegretta committed
646

647
    sc_init_one(&gotodir_list, NANO_CANCEL_KEY, _("Cancel"),
Rocco Corsi's avatar
   
Rocco Corsi committed
648
649
		nano_cancel_msg, 0, 0, 0, VIEW, 0);

Chris Allegretta's avatar
Chris Allegretta committed
650
651
652
#endif


653
654
655
656
#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined (DISABLE_HELP)
    currshortcut = main_list;
#endif

657
    toggle_init();
Chris Allegretta's avatar
Chris Allegretta committed
658
}