diff options
Diffstat (limited to 'src/nano.h')
-rw-r--r-- | src/nano.h | 794 |
1 files changed, 794 insertions, 0 deletions
diff --git a/src/nano.h b/src/nano.h new file mode 100644 index 0000000..b19d195 --- /dev/null +++ b/src/nano.h @@ -0,0 +1,794 @@ +/* $Id: nano.h 4535 2011-02-26 14:22:37Z astyanax $ */ +/************************************************************************** + * nano.h * + * * + * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * + * 2008, 2009 Free Software Foundation, Inc. * + * 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 * + * the Free Software Foundation; either version 3, or (at your option) * + * 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., 51 Franklin St, Fifth Floor, Boston, MA * + * 02110-1301, USA. * + * * + **************************************************************************/ + +#ifndef NANO_H +#define NANO_H 1 + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifdef NEED_XOPEN_SOURCE_EXTENDED +#ifndef _XOPEN_SOURCE_EXTENDED +#define _XOPEN_SOURCE_EXTENDED 1 +#endif /* _XOPEN_SOURCE_EXTENDED */ +#endif /* NEED_XOPEN_SOURCE_EXTENDED */ + +#ifdef __TANDEM +/* Tandem NonStop Kernel support. */ +#include <floss.h> +#define NANO_ROOT_UID 65535 +#else +#define NANO_ROOT_UID 0 +#endif + +#ifdef HAVE_LIMITS_H +#include <limits.h> +#endif + +#ifdef HAVE_SYS_PARAM_H +#include <sys/param.h> +#endif + +#ifdef HAVE_STDARG_H +#include <stdarg.h> +#endif + +/* Suppress warnings for __attribute__((warn_unused_result)) */ +#define IGNORE_CALL_RESULT(call) do { if (call) {} } while(0) + +/* Macros for flags. */ +#define FLAGOFF(flag) ((flag) / (sizeof(unsigned) * 8)) +#define FLAGMASK(flag) (1 << ((flag) % (sizeof(unsigned) * 8))) +#define FLAGS(flag) flags[FLAGOFF(flag)] +#define SET(flag) FLAGS(flag) |= FLAGMASK(flag) +#define UNSET(flag) FLAGS(flag) &= ~FLAGMASK(flag) +#define ISSET(flag) ((FLAGS(flag) & FLAGMASK(flag)) != 0) +#define TOGGLE(flag) FLAGS(flag) ^= FLAGMASK(flag) + +/* Macros for character allocation and more. */ +#define charalloc(howmuch) (char *)nmalloc((howmuch) * sizeof(char)) +#define charealloc(ptr, howmuch) (char *)nrealloc(ptr, (howmuch) * sizeof(char)) +#define charmove(dest, src, n) memmove(dest, src, (n) * sizeof(char)) +#define charset(dest, src, n) memset(dest, src, (n) * sizeof(char)) + +/* Set a default value for PATH_MAX if there isn't one. */ +#ifndef PATH_MAX +#define PATH_MAX 4096 +#endif + +#ifdef USE_SLANG +/* Slang support. */ +#include <slcurses.h> +/* Slang curses emulation brain damage, part 3: Slang doesn't define the + * curses equivalents of the Insert or Delete keys. */ +#define KEY_DC SL_KEY_DELETE +#define KEY_IC SL_KEY_IC +/* Ncurses support. */ +#elif defined(HAVE_NCURSES_H) +#include <ncurses.h> +#else +/* Curses support. */ +#include <curses.h> +#endif /* CURSES_H */ + +#ifdef ENABLE_NLS +/* Native language support. */ +#ifdef HAVE_LIBINTL_H +#include <libintl.h> +#endif +#define _(string) gettext(string) +#define P_(singular, plural, number) ngettext(singular, plural, number) +#else +#define _(string) (string) +#define P_(singular, plural, number) (number == 1 ? singular : plural) +#endif +#define gettext_noop(string) (string) +#define N_(string) gettext_noop(string) + /* Mark a string that will be sent to gettext() later. */ + +#include <stddef.h> +#include <stdlib.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <dirent.h> +#ifdef HAVE_REGEX_H +#include <regex.h> +#endif +#ifndef NANO_TINY +#include <setjmp.h> +#endif +#include <assert.h> + +/* If no vsnprintf(), use the version from glib 2.x. */ +#ifndef HAVE_VSNPRINTF +#include <glib.h> +#define vsnprintf g_vsnprintf +#endif + +/* If no isblank(), iswblank(), strcasecmp(), strncasecmp(), + * strcasestr(), strnlen(), getdelim(), or getline(), use the versions + * we have. */ +#ifndef HAVE_ISBLANK +#define isblank nisblank +#endif +#ifndef HAVE_ISWBLANK +#define iswblank niswblank +#endif +#ifndef HAVE_STRCASECMP +#define strcasecmp nstrcasecmp +#endif +#ifndef HAVE_STRNCASECMP +#define strncasecmp nstrncasecmp +#endif +#ifndef HAVE_STRCASESTR +#define strcasestr nstrcasestr +#endif +#ifndef HAVE_STRNLEN +#define strnlen nstrnlen +#endif +#ifndef HAVE_GETDELIM +#define getdelim ngetdelim +#endif +#ifndef HAVE_GETLINE +#define getline ngetline +#endif + +/* If we aren't using ncurses with mouse support, turn the mouse support + * off, as it's useless then. */ +#ifndef NCURSES_MOUSE_VERSION +#define DISABLE_MOUSE 1 +#endif + +#if defined(DISABLE_WRAPPING) && defined(DISABLE_JUSTIFY) +#define DISABLE_WRAPJUSTIFY 1 +#endif + +/* Enumeration types. */ +typedef enum { + NIX_FILE, DOS_FILE, MAC_FILE +} file_format; + +typedef enum { + OVERWRITE, APPEND, PREPEND +} append_type; + +typedef enum { + UP_DIR, DOWN_DIR +} scroll_dir; + +typedef enum { + CENTER, NONE +} update_type; + +typedef enum { + CONTROL, META, FKEY, RAWINPUT +} function_type; + +typedef enum { + ADD, DEL, REPLACE, SPLIT, UNSPLIT, CUT, UNCUT, ENTER, INSERT, OTHER +} undo_type; + +#ifdef ENABLE_COLOR +typedef struct colortype { + short fg; + /* This syntax's foreground color. */ + short bg; + /* This syntax's background color. */ + bool bright; + /* Is this color A_BOLD? */ + bool icase; + /* Is this regex string case insensitive? */ + int pairnum; + /* The color pair number used for this foreground color and + * background color. */ + char *start_regex; + /* The start (or all) of the regex string. */ + regex_t *start; + /* The compiled start (or all) of the regex string. */ + char *end_regex; + /* The end (if any) of the regex string. */ + regex_t *end; + /* The compiled end (if any) of the regex string. */ + struct colortype *next; + /* Next set of colors. */ + int id; + /* basic id for assigning to lines later */ +} colortype; + +typedef struct exttype { + char *ext_regex; + /* The extensions that match this syntax. */ + regex_t *ext; + /* The compiled extensions that match this syntax. */ + struct exttype *next; + /* Next set of extensions. */ +} exttype; + +typedef struct syntaxtype { + char *desc; + /* The name of this syntax. */ + exttype *extensions; + /* The list of extensions that this syntax applies to. */ + exttype *headers; + /* Regexes to match on the 'header' (1st line) of the file */ + exttype *magics; + /* Regexes to match libmagic results */ + colortype *color; + /* The colors used in this syntax. */ + int nmultis; + /* How many multi line strings this syntax has */ + struct syntaxtype *next; + /* Next syntax. */ +} syntaxtype; + +#define CNONE (1<<1) + /* Yay, regex doesn't apply to this line at all! */ +#define CBEGINBEFORE (1<<2) + /* regex starts on an earlier line, ends on this one */ +#define CENDAFTER (1<<3) + /* regex sraers on this line and ends on a later one */ +#define CWHOLELINE (1<<4) + /* whole line engulfed by the regex start < me, end > me */ +#define CSTARTENDHERE (1<<5) + /* regex starts and ends within this line */ +#define CWTF (1<<6) + /* Something else */ + +#endif /* ENABLE_COLOR */ + + +/* Structure types. */ +typedef struct filestruct { + char *data; + /* The text of this line. */ + ssize_t lineno; + /* The number of this line. */ + struct filestruct *next; + /* Next node. */ + struct filestruct *prev; + /* Previous node. */ +#ifdef ENABLE_COLOR + short *multidata; /* Array of which multi-line regexes apply to this line */ +#endif +} filestruct; + +typedef struct partition { + filestruct *fileage; + /* The top line of this portion of the file. */ + filestruct *top_prev; + /* The line before the top line of this portion of the file. */ + char *top_data; + /* The text before the beginning of the top line of this portion + * of the file. */ + filestruct *filebot; + /* The bottom line of this portion of the file. */ + filestruct *bot_next; + /* The line after the bottom line of this portion of the + * file. */ + char *bot_data; + /* The text after the end of the bottom line of this portion of + * the file. */ +} partition; + +#ifndef NANO_TINY +typedef struct undo { + ssize_t lineno; + undo_type type; + /* What type of undo was this */ + int begin; + /* Where did this action begin or end */ + char *strdata; + /* String type data we will use for ccopying the affected line back */ + char *strdata2; + /* Sigh, need this too it looks like */ + int xflags; + /* Some flag data we need */ + + /* Cut specific stuff we need */ + filestruct *cutbuffer; + /* Copy of the cutbuffer */ + filestruct *cutbottom; + /* Copy of cutbottom */ + bool mark_set; + /* was the marker set when we cut */ + bool to_end; + /* was this a cut to end */ + ssize_t mark_begin_lineno; + /* copy copy copy */ + ssize_t mark_begin_x; + /* Another shadow variable */ + struct undo *next; +} undo; + + +typedef struct poshiststruct { + char *filename; + /* The file. */ + ssize_t lineno; + /* Line number we left off on */ + ssize_t xno; + /* x position in the file we left off on */ + struct poshiststruct *next; +} poshiststruct; +#endif /* NANO_TINY */ + + +typedef struct openfilestruct { + char *filename; + /* The current file's name. */ + filestruct *fileage; + /* The current file's first line. */ + filestruct *filebot; + /* The current file's last line. */ + filestruct *edittop; + /* The current top of the edit window. */ + filestruct *current; + /* The current file's current line. */ + size_t totsize; + /* The current file's total number of characters. */ + size_t current_x; + /* The current file's x-coordinate position. */ + size_t placewewant; + /* The current file's place we want. */ + ssize_t current_y; + /* The current file's y-coordinate position. */ + bool modified; + /* Whether the current file has been modified. */ +#ifndef NANO_TINY + bool mark_set; + /* Whether the mark is on in the current file. */ + filestruct *mark_begin; + /* The current file's beginning marked line, if any. */ + size_t mark_begin_x; + /* The current file's beginning marked line's x-coordinate + * position, if any. */ + file_format fmt; + /* The current file's format. */ + struct stat *current_stat; + /* The current file's stat. */ + undo *undotop; + /* Top of the undo list */ + undo *current_undo; + /* The current (i.e. n ext) level of undo */ + undo_type last_action; +#endif +#ifdef ENABLE_COLOR + syntaxtype *syntax; + /* The syntax struct for this file, if any */ + colortype *colorstrings; + /* The current file's associated colors. */ +#endif + struct openfilestruct *next; + /* Next node. */ + struct openfilestruct *prev; + /* Previous node. */ +} openfilestruct; + +typedef struct shortcut { + const char *desc; + /* The function's description, e.g. "Page Up". */ +#ifndef DISABLE_HELP + const char *help; + /* The help file entry text for this function. */ + bool blank_after; + /* Whether there should be a blank line after the help entry + * text for this function. */ +#endif + /* Note: Key values that aren't used should be set to + * NANO_NO_KEY. */ + int ctrlval; + /* The special sentinel key or control key we want bound, if + * any. */ + int metaval; + /* The meta key we want bound, if any. */ + int funcval; + /* The function key we want bound, if any. */ + int miscval; + /* The other meta key we want bound, if any. */ + bool viewok; + /* Is this function allowed when in view mode? */ + void (*func)(void); + /* The function to call when we get this key. */ + struct shortcut *next; + /* Next shortcut. */ +} shortcut; + +#ifdef ENABLE_NANORC +typedef struct rcoption { + const char *name; + /* The name of the rcfile option. */ + long flag; + /* The flag associated with it, if any. */ +} rcoption; + +#endif + +typedef struct sc { + char *keystr; + /* The shortcut key for a function, ASCII version */ + function_type type; + /* What kind of function key is it for convenience later */ + int seq; + /* The actual sequence to check on the the type is determined */ + int menu; + /* What list does this apply to */ + void (*scfunc)(void); + /* The function we're going to run */ + int toggle; + /* If a toggle, what we're toggling */ + bool execute; + /* Whether to execute the function in question or just return + so the sequence can be caught by the calling code */ + struct sc *next; + /* Next in the list */ +} sc; + +typedef struct subnfunc { + void (*scfunc)(void); + /* What function is this */ + int menus; + /* In what menus does this function applu */ + const char *desc; + /* The function's description, e.g. "Page Up". */ +#ifndef DISABLE_HELP + const char *help; + /* The help file entry text for this function. */ + bool blank_after; + /* Whether there should be a blank line after the help entry + * text for this function. */ +#endif + bool viewok; + /* Is this function allowed when in view mode? */ + long toggle; + /* If this is a toggle, if nonzero what toggle to set */ + struct subnfunc *next; + /* next item in the list */ +} subnfunc; + + +/* Enumeration to be used in flags table. See FLAGBIT and FLAGOFF + * definitions. */ +enum +{ + DONTUSE, + CASE_SENSITIVE, + CONST_UPDATE, + NO_HELP, + NOFOLLOW_SYMLINKS, + SUSPEND, + NO_WRAP, + AUTOINDENT, + VIEW_MODE, + USE_MOUSE, + USE_REGEXP, + TEMP_FILE, + CUT_TO_END, + BACKWARDS_SEARCH, + MULTIBUFFER, + SMOOTH_SCROLL, + REBIND_DELETE, + REBIND_KEYPAD, + NO_CONVERT, + BACKUP_FILE, + INSECURE_BACKUP, + NO_COLOR_SYNTAX, + PRESERVE, + HISTORYLOG, + RESTRICTED, + SMART_HOME, + WHITESPACE_DISPLAY, + MORE_SPACE, + TABS_TO_SPACES, + QUICK_BLANK, + WORD_BOUNDS, + NO_NEWLINES, + BOLD_TEXT, + QUIET, + UNDOABLE, + SOFTWRAP, + POS_HISTORY +}; + +/* Flags for which menus in which a given function should be present */ +#define MMAIN (1<<0) +#define MWHEREIS (1<<1) +#define MREPLACE (1<<2) +#define MREPLACE2 (1<<3) +#define MGOTOLINE (1<<4) +#define MWRITEFILE (1<<5) +#define MINSERTFILE (1<<6) +#define MEXTCMD (1<<7) +#define MHELP (1<<8) +#define MSPELL (1<<9) +#define MBROWSER (1<<10) +#define MWHEREISFILE (1<<11) +#define MGOTODIR (1<<12) +#define MYESNO (1<<13) +/* This really isnt all but close enough */ +#define MALL (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MBROWSER|MWHEREISFILE|MGOTODIR|MHELP) + +/* Control key sequences. Changing these would be very, very bad. */ +#define NANO_CONTROL_SPACE 0 +#define NANO_CONTROL_A 1 +#define NANO_CONTROL_B 2 +#define NANO_CONTROL_C 3 +#define NANO_CONTROL_D 4 +#define NANO_CONTROL_E 5 +#define NANO_CONTROL_F 6 +#define NANO_CONTROL_G 7 +#define NANO_CONTROL_H 8 +#define NANO_CONTROL_I 9 +#define NANO_CONTROL_J 10 +#define NANO_CONTROL_K 11 +#define NANO_CONTROL_L 12 +#define NANO_CONTROL_M 13 +#define NANO_CONTROL_N 14 +#define NANO_CONTROL_O 15 +#define NANO_CONTROL_P 16 +#define NANO_CONTROL_Q 17 +#define NANO_CONTROL_R 18 +#define NANO_CONTROL_S 19 +#define NANO_CONTROL_T 20 +#define NANO_CONTROL_U 21 +#define NANO_CONTROL_V 22 +#define NANO_CONTROL_W 23 +#define NANO_CONTROL_X 24 +#define NANO_CONTROL_Y 25 +#define NANO_CONTROL_Z 26 +#define NANO_CONTROL_3 27 +#define NANO_CONTROL_4 28 +#define NANO_CONTROL_5 29 +#define NANO_CONTROL_6 30 +#define NANO_CONTROL_7 31 +#define NANO_CONTROL_8 127 + +/* Meta key sequences. */ +#define NANO_META_SPACE ' ' +#define NANO_META_LPARENTHESIS '(' +#define NANO_META_RPARENTHESIS ')' +#define NANO_META_PLUS '+' +#define NANO_META_COMMA ',' +#define NANO_META_MINUS '-' +#define NANO_META_PERIOD '.' +#define NANO_META_SLASH '/' +#define NANO_META_0 '0' +#define NANO_META_6 '6' +#define NANO_META_9 '9' +#define NANO_META_LCARET '<' +#define NANO_META_EQUALS '=' +#define NANO_META_RCARET '>' +#define NANO_META_QUESTION '?' +#define NANO_META_BACKSLASH '\\' +#define NANO_META_RBRACKET ']' +#define NANO_META_CARET '^' +#define NANO_META_UNDERSCORE '_' +#define NANO_META_A 'a' +#define NANO_META_B 'b' +#define NANO_META_C 'c' +#define NANO_META_D 'd' +#define NANO_META_E 'e' +#define NANO_META_F 'f' +#define NANO_META_G 'g' +#define NANO_META_H 'h' +#define NANO_META_I 'i' +#define NANO_META_J 'j' +#define NANO_META_K 'k' +#define NANO_META_L 'l' +#define NANO_META_M 'm' +#define NANO_META_N 'n' +#define NANO_META_O 'o' +#define NANO_META_P 'p' +#define NANO_META_Q 'q' +#define NANO_META_R 'r' +#define NANO_META_S 's' +#define NANO_META_T 't' +#define NANO_META_U 'u' +#define NANO_META_V 'v' +#define NANO_META_W 'w' +#define NANO_META_X 'x' +#define NANO_META_Y 'y' +#define NANO_META_Z 'z' +#define NANO_META_LCURLYBRACKET '{' +#define NANO_META_PIPE '|' +#define NANO_META_RCURLYBRACKET '}' + +/* Some semi-changeable keybindings; don't play with these unless you're + * sure you know what you're doing. Assume ERR is defined as -1. */ + +/* No key at all. */ +#define NANO_NO_KEY -2 + +/* Normal keys. */ +#define NANO_XON_KEY NANO_CONTROL_Q +#define NANO_XOFF_KEY NANO_CONTROL_S +#define NANO_CANCEL_KEY NANO_CONTROL_C +#define NANO_EXIT_KEY NANO_CONTROL_X +#define NANO_EXIT_FKEY KEY_F(2) +#define NANO_INSERTFILE_KEY NANO_CONTROL_R +#define NANO_INSERTFILE_FKEY KEY_F(5) +#define NANO_TOOTHERINSERT_KEY NANO_CONTROL_X +#define NANO_WRITEOUT_KEY NANO_CONTROL_O +#define NANO_WRITEOUT_FKEY KEY_F(3) +#define NANO_GOTOLINE_KEY NANO_CONTROL_7 +#define NANO_GOTOLINE_FKEY KEY_F(13) +#define NANO_GOTOLINE_METAKEY NANO_META_G +#define NANO_GOTODIR_KEY NANO_CONTROL_7 +#define NANO_GOTODIR_FKEY KEY_F(13) +#define NANO_GOTODIR_METAKEY NANO_META_G +#define NANO_TOGOTOLINE_KEY NANO_CONTROL_T +#define NANO_HELP_KEY NANO_CONTROL_G +#define NANO_HELP_FKEY KEY_F(1) +#define NANO_WHEREIS_KEY NANO_CONTROL_W +#define NANO_WHEREIS_FKEY KEY_F(6) +#define NANO_WHEREIS_NEXT_KEY NANO_META_W +#define NANO_WHEREIS_NEXT_FKEY KEY_F(16) +#define NANO_TOOTHERWHEREIS_KEY NANO_CONTROL_T +#define NANO_REGEXP_KEY NANO_META_R +#define NANO_REPLACE_KEY NANO_CONTROL_4 +#define NANO_REPLACE_FKEY KEY_F(14) +#define NANO_REPLACE_METAKEY NANO_META_R +#define NANO_TOOTHERSEARCH_KEY NANO_CONTROL_R +#define NANO_PREVPAGE_KEY NANO_CONTROL_Y +#define NANO_PREVPAGE_FKEY KEY_F(7) +#define NANO_NEXTPAGE_KEY NANO_CONTROL_V +#define NANO_NEXTPAGE_FKEY KEY_F(8) +#define NANO_CUT_KEY NANO_CONTROL_K +#define NANO_CUT_FKEY KEY_F(9) +#define NANO_COPY_KEY NANO_META_CARET +#define NANO_COPY_METAKEY NANO_META_6 +#define NANO_UNCUT_KEY NANO_CONTROL_U +#define NANO_UNCUT_FKEY KEY_F(10) +#define NANO_CURSORPOS_KEY NANO_CONTROL_C +#define NANO_CURSORPOS_FKEY KEY_F(11) +#define NANO_SPELL_KEY NANO_CONTROL_T +#define NANO_SPELL_FKEY KEY_F(12) +#define NANO_FIRSTLINE_KEY NANO_PREVPAGE_KEY +#define NANO_FIRSTLINE_FKEY NANO_PREVPAGE_FKEY +#define NANO_FIRSTLINE_METAKEY NANO_META_BACKSLASH +#define NANO_FIRSTLINE_METAKEY2 NANO_META_PIPE +#define NANO_FIRSTFILE_KEY NANO_FIRSTLINE_KEY +#define NANO_FIRSTFILE_FKEY NANO_FIRSTLINE_FKEY +#define NANO_FIRSTFILE_METAKEY NANO_FIRSTLINE_METAKEY +#define NANO_FIRSTFILE_METAKEY2 NANO_FIRSTLINE_METAKEY2 +#define NANO_LASTLINE_KEY NANO_NEXTPAGE_KEY +#define NANO_LASTLINE_FKEY NANO_NEXTPAGE_FKEY +#define NANO_LASTLINE_METAKEY NANO_META_SLASH +#define NANO_LASTLINE_METAKEY2 NANO_META_QUESTION +#define NANO_LASTFILE_KEY NANO_LASTLINE_KEY +#define NANO_LASTFILE_FKEY NANO_LASTLINE_FKEY +#define NANO_LASTFILE_METAKEY NANO_LASTLINE_METAKEY +#define NANO_LASTFILE_METAKEY2 NANO_LASTLINE_METAKEY2 +#define NANO_REFRESH_KEY NANO_CONTROL_L +#define NANO_JUSTIFY_KEY NANO_CONTROL_J +#define NANO_JUSTIFY_FKEY KEY_F(4) +#define NANO_UNJUSTIFY_KEY NANO_UNCUT_KEY +#define NANO_UNJUSTIFY_FKEY NANO_UNCUT_FKEY +#define NANO_PREVLINE_KEY NANO_CONTROL_P +#define NANO_NEXTLINE_KEY NANO_CONTROL_N +#define NANO_FORWARD_KEY NANO_CONTROL_F +#define NANO_BACK_KEY NANO_CONTROL_B +#define NANO_MARK_KEY NANO_CONTROL_6 +#define NANO_MARK_METAKEY NANO_META_A +#define NANO_MARK_FKEY KEY_F(15) +#define NANO_HOME_KEY NANO_CONTROL_A +#define NANO_END_KEY NANO_CONTROL_E +#define NANO_DELETE_KEY NANO_CONTROL_D +#define NANO_BACKSPACE_KEY NANO_CONTROL_H +#define NANO_TAB_KEY NANO_CONTROL_I +#define NANO_INDENT_KEY NANO_META_RCURLYBRACKET +#define NANO_UNINDENT_KEY NANO_META_LCURLYBRACKET +#define NANO_SUSPEND_KEY NANO_CONTROL_Z +#define NANO_ENTER_KEY NANO_CONTROL_M +#define NANO_TOFILES_KEY NANO_CONTROL_T +#define NANO_APPEND_KEY NANO_META_A +#define NANO_PREPEND_KEY NANO_META_P +#define NANO_PREVFILE_KEY NANO_META_LCARET +#define NANO_PREVFILE_METAKEY NANO_META_COMMA +#define NANO_NEXTFILE_KEY NANO_META_RCARET +#define NANO_NEXTFILE_METAKEY NANO_META_PERIOD +#define NANO_BRACKET_KEY NANO_META_RBRACKET +#define NANO_NEXTWORD_KEY NANO_CONTROL_SPACE +#define NANO_PREVWORD_KEY NANO_META_SPACE +#define NANO_WORDCOUNT_KEY NANO_META_D +#define NANO_SCROLLUP_KEY NANO_META_MINUS +#define NANO_SCROLLDOWN_KEY NANO_META_PLUS +#define NANO_SCROLLUP_METAKEY NANO_META_UNDERSCORE +#define NANO_SCROLLDOWN_METAKEY NANO_META_EQUALS +#define NANO_CUTTILLEND_METAKEY NANO_META_T +#define NANO_PARABEGIN_KEY NANO_CONTROL_W +#define NANO_PARABEGIN_METAKEY NANO_META_LPARENTHESIS +#define NANO_PARABEGIN_METAKEY2 NANO_META_9 +#define NANO_PARAEND_KEY NANO_CONTROL_O +#define NANO_PARAEND_METAKEY NANO_META_RPARENTHESIS +#define NANO_PARAEND_METAKEY2 NANO_META_0 +#define NANO_FULLJUSTIFY_KEY NANO_CONTROL_U +#define NANO_FULLJUSTIFY_METAKEY NANO_META_J +#define NANO_VERBATIM_KEY NANO_META_V + +/* Toggles do not exist if NANO_TINY is defined. */ +#ifndef NANO_TINY + +/* No toggle at all. */ +#define TOGGLE_NO_KEY -2 + +/* Normal toggles. */ +#define TOGGLE_NOHELP_KEY NANO_META_X +#define TOGGLE_CONST_KEY NANO_META_C +#define TOGGLE_MORESPACE_KEY NANO_META_O +#define TOGGLE_SMOOTH_KEY NANO_META_S +#define TOGGLE_WHITESPACE_KEY NANO_META_P +#define TOGGLE_SYNTAX_KEY NANO_META_Y +#define TOGGLE_SMARTHOME_KEY NANO_META_H +#define TOGGLE_AUTOINDENT_KEY NANO_META_I +#define TOGGLE_CUTTOEND_KEY NANO_META_K +#define TOGGLE_WRAP_KEY NANO_META_L +#define TOGGLE_TABSTOSPACES_KEY NANO_META_Q +#define TOGGLE_BACKUP_KEY NANO_META_B +#define TOGGLE_MULTIBUFFER_KEY NANO_META_F +#define TOGGLE_MOUSE_KEY NANO_META_M +#define TOGGLE_NOCONVERT_KEY NANO_META_N +#define TOGGLE_SUSPEND_KEY NANO_META_Z +#define TOGGLE_CASE_KEY NANO_META_C +#define TOGGLE_BACKWARDS_KEY NANO_META_B +#define TOGGLE_DOS_KEY NANO_META_D +#define TOGGLE_MAC_KEY NANO_META_M + +/* Extra bits for the undo function */ +#define UNdel_del (1<<0) +#define UNdel_backspace (1<<1) +#define UNsplit_madenew (1<<2) + +/* Since in ISO C you can't pass around function pointers anymore, + let's make some integer macros for function names, and then I + can go cut my wrists after writing the big switch statement + that will necessitate. */ + +#endif /* !NANO_TINY */ + +#define VIEW TRUE +#define NOVIEW FALSE + +/* The maximum number of entries displayed in the main shortcut list. */ +#define MAIN_VISIBLE 12 + +/* The minimum editor window columns and rows required for nano to work + * correctly. */ +#define MIN_EDITOR_COLS 4 +#define MIN_EDITOR_ROWS 1 + +/* The default number of characters from the end of the line where + * wrapping occurs. */ +#define CHARS_FROM_EOL 8 + +/* The default width of a tab in spaces. */ +#define WIDTH_OF_TAB 8 + +/* The maximum number of search/replace history strings saved, not + * counting the blank lines at their ends. */ +#define MAX_SEARCH_HISTORY 100 + +/* The maximum number of bytes buffered at one time. */ +#define MAX_BUF_SIZE 128 + +#endif /* !NANO_H */ |