816 lines
24 KiB
C
816 lines
24 KiB
C
/* $Id$ */
|
|
/**************************************************************************
|
|
* 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_NCURSESW_NCURSES_H)
|
|
#include <ncursesw/ncurses.h>
|
|
#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;
|
|
|
|
#ifndef DISABLE_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. */
|
|
char *linter;
|
|
/* Command to lint this type of file. */
|
|
int nmultis;
|
|
/* How many multi-line strings this syntax has. */
|
|
struct syntaxtype *next;
|
|
/* Next syntax. */
|
|
} syntaxtype;
|
|
|
|
typedef struct lintstruct {
|
|
ssize_t lineno;
|
|
/* Line number of the error. */
|
|
ssize_t colno;
|
|
/* Column # of the error. */
|
|
char *msg;
|
|
/* Error message text. */
|
|
char *filename;
|
|
/* Filename. */
|
|
struct lintstruct *next;
|
|
/* Next error. */
|
|
struct lintstruct *prev;
|
|
/* Previous error. */
|
|
} lintstruct;
|
|
|
|
|
|
#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 starts 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 /* !DISABLE_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. */
|
|
#ifndef DISABLE_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 this was. */
|
|
int begin;
|
|
/* Where did this action begin or end. */
|
|
char *strdata;
|
|
/* String type data we will use for copying 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 x position we would like. */
|
|
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. next) level of undo. */
|
|
undo_type last_action;
|
|
const char *lock_filename;
|
|
/* The path of the lockfile, if we created one. */
|
|
#endif
|
|
#ifndef DISABLE_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 it is, for convenience later. */
|
|
int seq;
|
|
/* The actual sequence to check on the type is determined. */
|
|
int menu;
|
|
/* What list this applies 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 this is. */
|
|
int menus;
|
|
/* In what menus this function applies. */
|
|
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,
|
|
LOCKING
|
|
};
|
|
|
|
/* Flags for the 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)
|
|
#define MLINTER (1<<14)
|
|
/* This isn't really all, but close enough. */
|
|
#define MALL (MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MWRITEFILE|MINSERTFILE|MEXTCMD|MSPELL|MBROWSER|MWHEREISFILE|MGOTODIR|MHELP|MLINTER)
|
|
|
|
/* 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)
|
|
|
|
#endif /* !NANO_TINY */
|
|
|
|
#define VIEW TRUE
|
|
#define NOVIEW FALSE
|
|
|
|
/* The maximum number of entries displayed in the main shortcut list. */
|
|
#define MAIN_VISIBLE (((COLS + 40) / 20) * 2)
|
|
|
|
/* 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 */
|