Blame src/LYKeymap.h

Packit f574b8
/* $LynxId: LYKeymap.h,v 1.55 2015/10/07 23:34:55 tom Exp $ */
Packit f574b8
#ifndef LYKEYMAP_H
Packit f574b8
#define LYKEYMAP_H
Packit f574b8
Packit f574b8
#include <HTUtils.h>
Packit f574b8
#include <HTList.h>
Packit f574b8
#include <LYCurses.h>
Packit f574b8
Packit f574b8
#ifdef __cplusplus
Packit f574b8
extern "C" {
Packit f574b8
#endif
Packit f574b8
    extern BOOLEAN LYisNonAlnumKeyname(int ch, int KeyName);
Packit f574b8
    extern HTList *LYcommandList(void);
Packit f574b8
    extern const char *lec_to_lecname(int code);
Packit f574b8
    extern char *LYKeycodeToString(int c, int upper8);
Packit f574b8
    extern char *fmt_keys(int lkc_first, int lkc_second);
Packit f574b8
    extern char *key_for_func(int func);
Packit f574b8
    extern char *key_for_func_ext(int lac, int context_code);
Packit f574b8
    extern int LYReverseKeymap(int KeyName);
Packit f574b8
    extern int LYStringToKeycode(char *src);
Packit f574b8
    extern int lacname_to_lac(const char *func);
Packit f574b8
    extern int lecname_to_lec(const char *func);
Packit f574b8
    extern int lkcstring_to_lkc(const char *src);
Packit f574b8
    extern int remap(char *key, const char *func, int for_dired);
Packit f574b8
    extern void print_keymap(char **newfile);
Packit f574b8
    extern void reset_emacs_keys(void);
Packit f574b8
    extern void reset_numbers_as_arrows(void);
Packit f574b8
    extern void reset_vi_keys(void);
Packit f574b8
    extern void set_emacs_keys(void);
Packit f574b8
    extern void set_numbers_as_arrows(void);
Packit f574b8
    extern void set_vi_keys(void);
Packit f574b8
    extern void set_vms_keys(void);
Packit f574b8
Packit f574b8
/* We only use unsigned keycodes; if there's a problem matching with enum
Packit f574b8
 * (which is supposed to be 'int'), that would be okay, but not as clean
Packit f574b8
 * for type-checking.
Packit f574b8
 */
Packit f574b8
    typedef short LYKeymap_t;
Packit f574b8
Packit f574b8
#define KEYMAP_SIZE 661
Packit f574b8
    extern LYKeymap_t keymap[KEYMAP_SIZE];	/* main keymap matrix */
Packit f574b8
Packit f574b8
#ifdef EXP_KEYBOARD_LAYOUT
Packit f574b8
    typedef unsigned short LYKbLayout_t;
Packit f574b8
    extern int current_layout;
Packit f574b8
    extern LYKbLayout_t *LYKbLayouts[];
Packit f574b8
    extern const char *LYKbLayoutNames[];
Packit f574b8
    extern BOOLEAN LYSetKbLayout(char *layout_id);
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
Packit f574b8
    extern LYKeymap_t key_override[];
Packit f574b8
#endif
Packit f574b8
Packit f574b8
/* readable mapping for characters in edit- and key-maps */
Packit f574b8
#define CTL(c)		((c) & 0x1f)
Packit f574b8
#define KHR(c)		((c) + 1)
Packit f574b8
#define KTL(c)		(CTL(c) + 1)
Packit f574b8
Packit f574b8
/* * *  LynxKeyCodes  * * */
Packit f574b8
#define LKC_ISLECLAC	0x8000	/* flag: contains lynxaction + editaction */
Packit f574b8
#define LKC_MOD1	0x4000	/* a modifier bit - currently for ^x-map */
Packit f574b8
#define LKC_MOD2	0x2000	/* another one - currently for esc-map */
Packit f574b8
#define LKC_MOD3	0x1000	/* another one - currently for double-map */
Packit f574b8
#define LKC_ISLAC	0x0800	/* flag: lynxkeycode already lynxactioncode */
Packit f574b8
Packit f574b8
/* Used to distinguish internal Lynx keycodes of (say) extended ncurses once. */
Packit f574b8
#define LKC_ISLKC	0x0400	/* flag: already lynxkeycode (not native) */
Packit f574b8
    /* 0x0400  is MOUSE_KEYSYM for slang in LYStrings.c */
Packit f574b8
#define LKC_MASK	0x07FF	/* mask for lynxkeycode proper */
Packit f574b8
Packit f574b8
#define LKC_DONE	0x07FE	/* special value - operation done, not-a-key */
Packit f574b8
Packit f574b8
/* * *  LynxActionCodes  * * */
Packit f574b8
#define LAC_SHIFT	8	/* shift for lynxactioncode - must not
Packit f574b8
				   overwrite any assigned LYK_* values */
Packit f574b8
#define LAC_MASK	((1<
Packit f574b8
    /* mask for lynxactioncode - must cover all
Packit f574b8
       assigned LYK_* values */
Packit f574b8
Packit f574b8
/*  Return lkc masking single actioncode, given an lkc masking a lac + lec */
Packit f574b8
#define LKC2_TO_LKC(c)   (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \
Packit f574b8
			    (((c) & LAC_MASK) | LKC_ISLAC))
Packit f574b8
Packit f574b8
/*  Return lynxeditactioncode, given an lkc masking a lac + lec */
Packit f574b8
#define LKC2_TO_LEC(c)   (((c) == -1 || !((c) & LKC_ISLECLAC)) ? (c) : \
Packit f574b8
			    ((((c)&~LKC_ISLECLAC)>>LAC_SHIFT) & LAC_MASK))
Packit f574b8
Packit f574b8
/*  Convert lynxkeycode to lynxactioncode.  Modifiers are dropped.  */
Packit f574b8
#define LKC_TO_LAC(ktab,c) (((c) == -1) ? ktab[0] : \
Packit f574b8
			    ((c) & (LKC_ISLECLAC|LKC_ISLAC)) ? ((c) & LAC_MASK) : \
Packit f574b8
			    ktab[((c) & LKC_MASK) + 1])
Packit f574b8
Packit f574b8
/*  Mask lynxactioncode as a lynxkeycode.  */
Packit f574b8
#define LAC_TO_LKC0(a) ((a)|LKC_ISLAC)
Packit f574b8
Packit f574b8
/*  Mask a lynxactioncode and an editactioncode as a lynxkeycode.  */
Packit f574b8
#define LACLEC_TO_LKC0(a,b) ((a)|((b)<
Packit f574b8
Packit f574b8
/*  Convert lynxactioncode to a lynxkeycode, attempting reverse mapping.  */
Packit f574b8
#define LAC_TO_LKC(a) ((LYReverseKeymap(a)>=0)?LYReverseKeymap(a):LAC_TO_LKC0(a))
Packit f574b8
Packit f574b8
/*  Simplify a lynxkeycode:
Packit f574b8
    attempt reverse mapping if a single masked lynxactioncode, drop modifiers.  */
Packit f574b8
#define LKC_TO_C(c) ((c&LKC_ISLECLAC)? c : (c&LKC_ISLAC)? LAC_TO_LKC(c&LAC_MASK) : (c&LKC_MASK))
Packit f574b8
Packit f574b8
#define LKC_HAS_ESC_MOD(c) (c >= 0 && !(c&LKC_ISLECLAC) && (c&LKC_MOD2))
Packit f574b8
Packit f574b8
/* *  The defined LynxActionCodes  * */
Packit f574b8
Packit f574b8
/* Variables for holding and passing around lynxactioncodes are generally of
Packit f574b8
 * type int, the types LYKeymap_t and LYKeymapCodes are currently only used for
Packit f574b8
 * the definitions.  That could change.  - kw
Packit f574b8
 *
Packit f574b8
 * The values in this enum are indexed against the command names in the
Packit f574b8
 * 'revmap[]' array in LYKeymap.c
Packit f574b8
 */
Packit f574b8
    typedef enum {
Packit f574b8
	LYK_UNKNOWN = 0
Packit f574b8
	,LYK_COMMAND
Packit f574b8
	,LYK_1
Packit f574b8
	,LYK_2
Packit f574b8
	,LYK_3
Packit f574b8
	,LYK_4
Packit f574b8
	,LYK_5
Packit f574b8
	,LYK_6
Packit f574b8
	,LYK_7
Packit f574b8
	,LYK_8
Packit f574b8
	,LYK_9
Packit f574b8
	,LYK_SOURCE
Packit f574b8
	,LYK_RELOAD
Packit f574b8
	,LYK_QUIT
Packit f574b8
	,LYK_ABORT
Packit f574b8
	,LYK_NEXT_PAGE
Packit f574b8
	,LYK_PREV_PAGE
Packit f574b8
	,LYK_UP_TWO
Packit f574b8
	,LYK_DOWN_TWO
Packit f574b8
	,LYK_UP_HALF
Packit f574b8
	,LYK_DOWN_HALF
Packit f574b8
	,LYK_REFRESH
Packit f574b8
	,LYK_HOME
Packit f574b8
	,LYK_END
Packit f574b8
	,LYK_FIRST_LINK
Packit f574b8
	,LYK_LAST_LINK
Packit f574b8
	,LYK_PREV_LINK
Packit f574b8
	,LYK_NEXT_LINK
Packit f574b8
	,LYK_LPOS_PREV_LINK
Packit f574b8
	,LYK_LPOS_NEXT_LINK
Packit f574b8
	,LYK_FASTBACKW_LINK
Packit f574b8
	,LYK_FASTFORW_LINK
Packit f574b8
	,LYK_UP_LINK
Packit f574b8
	,LYK_DOWN_LINK
Packit f574b8
	,LYK_RIGHT_LINK
Packit f574b8
	,LYK_LEFT_LINK
Packit f574b8
	,LYK_HISTORY
Packit f574b8
	,LYK_PREV_DOC
Packit f574b8
	,LYK_NEXT_DOC
Packit f574b8
	,LYK_ACTIVATE
Packit f574b8
	,LYK_MOUSE_SUBMIT	/* mostly like LYK_ACTIVATE, for mouse use, don't map */
Packit f574b8
	,LYK_SUBMIT
Packit f574b8
	,LYK_RESET
Packit f574b8
	,LYK_GOTO
Packit f574b8
	,LYK_ECGOTO
Packit f574b8
	,LYK_HELP
Packit f574b8
	,LYK_DWIMHELP
Packit f574b8
	,LYK_INDEX
Packit f574b8
	,LYK_NOCACHE
Packit f574b8
	,LYK_INTERRUPT
Packit f574b8
	,LYK_MAIN_MENU
Packit f574b8
	,LYK_OPTIONS
Packit f574b8
	,LYK_INDEX_SEARCH
Packit f574b8
	,LYK_WHEREIS
Packit f574b8
	,LYK_PREV
Packit f574b8
	,LYK_NEXT
Packit f574b8
	,LYK_COMMENT
Packit f574b8
	,LYK_EDIT
Packit f574b8
	,LYK_INFO
Packit f574b8
	,LYK_PRINT
Packit f574b8
	,LYK_ADD_BOOKMARK
Packit f574b8
	,LYK_DEL_BOOKMARK
Packit f574b8
	,LYK_VIEW_BOOKMARK
Packit f574b8
	,LYK_VLINKS
Packit f574b8
	,LYK_SHELL
Packit f574b8
	,LYK_DOWNLOAD
Packit f574b8
	,LYK_TRACE_TOGGLE
Packit f574b8
	,LYK_TRACE_LOG
Packit f574b8
	,LYK_IMAGE_TOGGLE
Packit f574b8
	,LYK_INLINE_TOGGLE
Packit f574b8
	,LYK_HEAD
Packit f574b8
	,LYK_DO_NOTHING
Packit f574b8
	,LYK_TOGGLE_HELP
Packit f574b8
	,LYK_JUMP
Packit f574b8
	,LYK_EDITMAP
Packit f574b8
	,LYK_KEYMAP
Packit f574b8
	,LYK_LIST
Packit f574b8
	,LYK_TOOLBAR
Packit f574b8
	,LYK_HISTORICAL
Packit f574b8
	,LYK_MINIMAL
Packit f574b8
	,LYK_SOFT_DQUOTES
Packit f574b8
	,LYK_RAW_TOGGLE
Packit f574b8
	,LYK_COOKIE_JAR
Packit f574b8
	,LYK_F_LINK_NUM
Packit f574b8
	,LYK_CLEAR_AUTH
Packit f574b8
	,LYK_SWITCH_DTD
Packit f574b8
	,LYK_ELGOTO
Packit f574b8
	,LYK_CHANGE_LINK
Packit f574b8
	,LYK_DWIMEDIT
Packit f574b8
	,LYK_EDITTEXTAREA
Packit f574b8
	,LYK_GROWTEXTAREA
Packit f574b8
	,LYK_INSERTFILE
Packit f574b8
Packit f574b8
#ifdef USE_ADDRLIST_PAGE
Packit f574b8
	,LYK_ADDRLIST
Packit f574b8
#else
Packit f574b8
#define LYK_ADDRLIST      LYK_ADD_BOOKMARK
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef USE_EXTERNALS
Packit f574b8
	,LYK_EXTERN_LINK
Packit f574b8
	,LYK_EXTERN_PAGE
Packit f574b8
#else
Packit f574b8
#define LYK_EXTERN_LINK   LYK_UNKNOWN
Packit f574b8
#define LYK_EXTERN_PAGE   LYK_UNKNOWN
Packit f574b8
#endif				/* !defined(USE_EXTERNALS) */
Packit f574b8
Packit f574b8
#if defined(VMS) || defined(DIRED_SUPPORT)
Packit f574b8
	,LYK_DIRED_MENU
Packit f574b8
#else
Packit f574b8
#define LYK_DIRED_MENU    LYK_UNKNOWN
Packit f574b8
#endif				/* VMS || DIRED_SUPPORT */
Packit f574b8
Packit f574b8
#ifdef DIRED_SUPPORT
Packit f574b8
	,LYK_CREATE
Packit f574b8
	,LYK_REMOVE
Packit f574b8
	,LYK_MODIFY
Packit f574b8
	,LYK_TAG_LINK
Packit f574b8
	,LYK_UPLOAD
Packit f574b8
	,LYK_INSTALL
Packit f574b8
#else
Packit f574b8
#define LYK_TAG_LINK      LYK_UNKNOWN
Packit f574b8
#endif				/* DIRED_SUPPORT */
Packit f574b8
Packit f574b8
	,LYK_CHANGE_CENTER
Packit f574b8
Packit f574b8
#ifdef KANJI_CODE_OVERRIDE
Packit f574b8
	,LYK_CHANGE_KCODE
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef SUPPORT_CHDIR
Packit f574b8
	,LYK_CHDIR
Packit f574b8
	,LYK_PWD
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef USE_CURSES_PADS
Packit f574b8
	,LYK_SHIFT_LEFT
Packit f574b8
	,LYK_SHIFT_RIGHT
Packit f574b8
	,LYK_LINEWRAP_TOGGLE
Packit f574b8
#else
Packit f574b8
#define LYK_SHIFT_LEFT      LYK_UNKNOWN
Packit f574b8
#define LYK_SHIFT_RIGHT     LYK_UNKNOWN
Packit f574b8
#define LYK_LINEWRAP_TOGGLE LYK_UNKNOWN
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef CAN_CUT_AND_PASTE
Packit f574b8
	,LYK_PASTE_URL
Packit f574b8
	,LYK_TO_CLIPBOARD
Packit f574b8
#else
Packit f574b8
#define LYK_PASTE_URL      LYK_UNKNOWN
Packit f574b8
#define LYK_TO_CLIPBOARD   LYK_UNKNOWN
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef EXP_NESTED_TABLES
Packit f574b8
	,LYK_NESTED_TABLES
Packit f574b8
#else
Packit f574b8
#define LYK_NESTED_TABLES  LYK_UNKNOWN
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef USE_CACHEJAR
Packit f574b8
	,LYK_CACHE_JAR
Packit f574b8
#else
Packit f574b8
#define LYK_CACHE_JAR LYK_UNKNOWN
Packit f574b8
#endif
Packit f574b8
Packit f574b8
#ifdef USE_MAXSCREEN_TOGGLE
Packit f574b8
	,LYK_MAXSCREEN_TOGGLE
Packit f574b8
#else
Packit f574b8
#define LYK_MAXSCREEN_TOGGLE  LYK_UNKNOWN
Packit f574b8
#endif
Packit f574b8
Packit f574b8
    } LYKeymapCode;
Packit f574b8
Packit f574b8
/*
Packit f574b8
 * Symbol table for internal commands.
Packit f574b8
 */
Packit f574b8
    typedef struct {
Packit f574b8
	LYKeymapCode code;
Packit f574b8
	const char *name;
Packit f574b8
	const char *doc;
Packit f574b8
    } Kcmd;
Packit f574b8
Packit f574b8
    extern Kcmd *LYKeycodeToKcmd(LYKeymapCode code);
Packit f574b8
    extern Kcmd *LYStringToKcmd(const char *name);
Packit f574b8
Packit f574b8
#ifdef __cplusplus
Packit f574b8
}
Packit f574b8
#endif
Packit f574b8
#endif				/* LYKEYMAP_H */