mirror of
https://github.com/zsh-users/zsh
synced 2024-11-02 20:47:49 +00:00
421 lines
12 KiB
C
421 lines
12 KiB
C
/*
|
|
* zle_bindings.c - commands and keymaps
|
|
*
|
|
* This file is part of zsh, the Z shell.
|
|
*
|
|
* Copyright (c) 1992-1997 Paul Falstad
|
|
* All rights reserved.
|
|
*
|
|
* Permission is hereby granted, without written agreement and without
|
|
* license or royalty fees, to use, copy, modify, and distribute this
|
|
* software and to distribute modified versions of this software for any
|
|
* purpose, provided that the above copyright notice and the following
|
|
* two paragraphs appear in all copies of this software.
|
|
*
|
|
* In no event shall Paul Falstad or the Zsh Development Group be liable
|
|
* to any party for direct, indirect, special, incidental, or consequential
|
|
* damages arising out of the use of this software and its documentation,
|
|
* even if Paul Falstad and the Zsh Development Group have been advised of
|
|
* the possibility of such damage.
|
|
*
|
|
* Paul Falstad and the Zsh Development Group specifically disclaim any
|
|
* warranties, including, but not limited to, the implied warranties of
|
|
* merchantability and fitness for a particular purpose. The software
|
|
* provided hereunder is on an "as is" basis, and Paul Falstad and the
|
|
* Zsh Development Group have no obligation to provide maintenance,
|
|
* support, updates, enhancements, or modifications.
|
|
*
|
|
*/
|
|
|
|
#include "zle.mdh"
|
|
#include "zle_widget.h"
|
|
|
|
#include "zle_bindings.pro"
|
|
|
|
/*
|
|
* widgets is the table of internally implemented widgets. This
|
|
* table is not used directly, but each widget in it is referenced
|
|
* by address from within the table of thingies (below). The only
|
|
* complication here is that not all systems support union
|
|
* initialisation.
|
|
*/
|
|
|
|
static
|
|
#ifdef HAVE_UNION_INIT
|
|
# define BR(X) {X}
|
|
struct widget
|
|
#else /* !HAVE_UNION_INIT */
|
|
# define BR(X) X
|
|
struct intwidget {
|
|
int flags;
|
|
Thingy first;
|
|
ZleIntFunc fn;
|
|
}
|
|
#endif /* !HAVE_UNION_INIT */
|
|
widgets[] = {
|
|
#define W(zle_flags, t_firstname, functionname) \
|
|
{ WIDGET_INT | zle_flags, t_firstname, BR(functionname) },
|
|
#include "widgets.list"
|
|
#undef W
|
|
};
|
|
|
|
/*
|
|
* thingies is the table of `known thingies', that exist on startup.
|
|
* Some bits of ZLE rely on some of these thingies always being the
|
|
* ones in this table, rather than doing a name lookup and accepting
|
|
* any semantically identical thingy. The initial reference count of
|
|
* these thingies is 2: 1 for the widget they name, and 1 extra to
|
|
* make sure they never get deleted.
|
|
*/
|
|
|
|
/**/
|
|
mod_export struct thingy thingies[] = {
|
|
#define T(name, th_flags, w_idget, t_next) \
|
|
{ NULL, name, th_flags, 2, w_idget, t_next },
|
|
#include "thingies.list"
|
|
#undef T
|
|
{ NULL, NULL, 0, 0, NULL, NULL }
|
|
};
|
|
|
|
/*
|
|
* Default key binding tables:
|
|
*
|
|
* In these tables, each element is bound to a single thingy, the index
|
|
* of which in the above table is stored here.
|
|
*/
|
|
|
|
/**/
|
|
int emacsbind[32] = {
|
|
/* ^@ */ z_setmarkcommand,
|
|
/* ^A */ z_beginningofline,
|
|
/* ^B */ z_backwardchar,
|
|
/* ^C */ z_undefinedkey,
|
|
/* ^D */ z_deletecharorlist,
|
|
/* ^E */ z_endofline,
|
|
/* ^F */ z_forwardchar,
|
|
/* ^G */ z_sendbreak,
|
|
/* ^H */ z_backwarddeletechar,
|
|
/* ^I */ z_expandorcomplete,
|
|
/* ^J */ z_acceptline,
|
|
/* ^K */ z_killline,
|
|
/* ^L */ z_clearscreen,
|
|
/* ^M */ z_acceptline,
|
|
/* ^N */ z_downlineorhistory,
|
|
/* ^O */ z_acceptlineanddownhistory,
|
|
/* ^P */ z_uplineorhistory,
|
|
/* ^Q */ z_pushline,
|
|
/* ^R */ z_historyincrementalsearchbackward,
|
|
/* ^S */ z_historyincrementalsearchforward,
|
|
/* ^T */ z_transposechars,
|
|
/* ^U */ z_killwholeline,
|
|
/* ^V */ z_quotedinsert,
|
|
/* ^W */ z_backwardkillword,
|
|
/* ^X */ z_undefinedkey,
|
|
/* ^Y */ z_yank,
|
|
/* ^Z */ z_undefinedkey,
|
|
/* ^[ */ z_undefinedkey,
|
|
/* ^\ */ z_undefinedkey,
|
|
/* ^] */ z_undefinedkey,
|
|
/* ^^ */ z_undefinedkey,
|
|
/* ^_ */ z_undo,
|
|
};
|
|
|
|
/**/
|
|
int metabind[128] = {
|
|
/* M-^@ */ z_undefinedkey,
|
|
/* M-^A */ z_undefinedkey,
|
|
/* M-^B */ z_undefinedkey,
|
|
/* M-^C */ z_undefinedkey,
|
|
/* M-^D */ z_listchoices,
|
|
/* M-^E */ z_undefinedkey,
|
|
/* M-^F */ z_undefinedkey,
|
|
/* M-^G */ z_sendbreak,
|
|
/* M-^H */ z_backwardkillword,
|
|
/* M-^I */ z_selfinsertunmeta,
|
|
/* M-^J */ z_selfinsertunmeta,
|
|
/* M-^K */ z_undefinedkey,
|
|
/* M-^L */ z_clearscreen,
|
|
/* M-^M */ z_selfinsertunmeta,
|
|
/* M-^N */ z_undefinedkey,
|
|
/* M-^O */ z_undefinedkey,
|
|
/* M-^P */ z_undefinedkey,
|
|
/* M-^Q */ z_undefinedkey,
|
|
/* M-^R */ z_undefinedkey,
|
|
/* M-^S */ z_undefinedkey,
|
|
/* M-^T */ z_undefinedkey,
|
|
/* M-^U */ z_undefinedkey,
|
|
/* M-^V */ z_undefinedkey,
|
|
/* M-^W */ z_undefinedkey,
|
|
/* M-^X */ z_undefinedkey,
|
|
/* M-^Y */ z_undefinedkey,
|
|
/* M-^Z */ z_undefinedkey,
|
|
/* M-^[ */ z_undefinedkey,
|
|
/* M-^\ */ z_undefinedkey,
|
|
/* M-^] */ z_undefinedkey,
|
|
/* M-^^ */ z_undefinedkey,
|
|
/* M-^_ */ z_copyprevword,
|
|
/* M- */ z_expandhistory,
|
|
/* M-! */ z_expandhistory,
|
|
/* M-" */ z_quoteregion,
|
|
/* M-# */ z_undefinedkey,
|
|
/* M-$ */ z_spellword,
|
|
/* M-% */ z_undefinedkey,
|
|
/* M-& */ z_undefinedkey,
|
|
/* M-' */ z_quoteline,
|
|
/* M-( */ z_undefinedkey,
|
|
/* M-) */ z_undefinedkey,
|
|
/* M-* */ z_undefinedkey,
|
|
/* M-+ */ z_undefinedkey,
|
|
/* M-, */ z_undefinedkey,
|
|
/* M-- */ z_negargument,
|
|
/* M-. */ z_insertlastword,
|
|
/* M-/ */ z_undefinedkey,
|
|
/* M-0 */ z_digitargument,
|
|
/* M-1 */ z_digitargument,
|
|
/* M-2 */ z_digitargument,
|
|
/* M-3 */ z_digitargument,
|
|
/* M-4 */ z_digitargument,
|
|
/* M-5 */ z_digitargument,
|
|
/* M-6 */ z_digitargument,
|
|
/* M-7 */ z_digitargument,
|
|
/* M-8 */ z_digitargument,
|
|
/* M-9 */ z_digitargument,
|
|
/* M-: */ z_undefinedkey,
|
|
/* M-; */ z_undefinedkey,
|
|
/* M-< */ z_beginningofbufferorhistory,
|
|
/* M-= */ z_undefinedkey,
|
|
/* M-> */ z_endofbufferorhistory,
|
|
/* M-? */ z_whichcommand,
|
|
/* M-@ */ z_undefinedkey,
|
|
/* M-A */ z_acceptandhold,
|
|
/* M-B */ z_backwardword,
|
|
/* M-C */ z_capitalizeword,
|
|
/* M-D */ z_killword,
|
|
/* M-E */ z_undefinedkey,
|
|
/* M-F */ z_forwardword,
|
|
/* M-G */ z_getline,
|
|
/* M-H */ z_runhelp,
|
|
/* M-I */ z_undefinedkey,
|
|
/* M-J */ z_undefinedkey,
|
|
/* M-K */ z_undefinedkey,
|
|
/* M-L */ z_downcaseword,
|
|
/* M-M */ z_undefinedkey,
|
|
/* M-N */ z_historysearchforward,
|
|
/* M-O */ z_undefinedkey,
|
|
/* M-P */ z_historysearchbackward,
|
|
/* M-Q */ z_pushline,
|
|
/* M-R */ z_undefinedkey,
|
|
/* M-S */ z_spellword,
|
|
/* M-T */ z_transposewords,
|
|
/* M-U */ z_upcaseword,
|
|
/* M-V */ z_undefinedkey,
|
|
/* M-W */ z_copyregionaskill,
|
|
/* M-X */ z_undefinedkey,
|
|
/* M-Y */ z_undefinedkey,
|
|
/* M-Z */ z_undefinedkey,
|
|
/* M-[ */ z_undefinedkey,
|
|
/* M-\ */ z_undefinedkey,
|
|
/* M-] */ z_undefinedkey,
|
|
/* M-^ */ z_undefinedkey,
|
|
/* M-_ */ z_insertlastword,
|
|
/* M-` */ z_undefinedkey,
|
|
/* M-a */ z_acceptandhold,
|
|
/* M-b */ z_backwardword,
|
|
/* M-c */ z_capitalizeword,
|
|
/* M-d */ z_killword,
|
|
/* M-e */ z_undefinedkey,
|
|
/* M-f */ z_forwardword,
|
|
/* M-g */ z_getline,
|
|
/* M-h */ z_runhelp,
|
|
/* M-i */ z_undefinedkey,
|
|
/* M-j */ z_undefinedkey,
|
|
/* M-k */ z_undefinedkey,
|
|
/* M-l */ z_downcaseword,
|
|
/* M-m */ z_undefinedkey,
|
|
/* M-n */ z_historysearchforward,
|
|
/* M-o */ z_undefinedkey,
|
|
/* M-p */ z_historysearchbackward,
|
|
/* M-q */ z_pushline,
|
|
/* M-r */ z_undefinedkey,
|
|
/* M-s */ z_spellword,
|
|
/* M-t */ z_transposewords,
|
|
/* M-u */ z_upcaseword,
|
|
/* M-v */ z_undefinedkey,
|
|
/* M-w */ z_copyregionaskill,
|
|
/* M-x */ z_executenamedcmd,
|
|
/* M-y */ z_yankpop,
|
|
/* M-z */ z_executelastnamedcmd,
|
|
/* M-{ */ z_undefinedkey,
|
|
/* M-| */ z_vigotocolumn,
|
|
/* M-} */ z_undefinedkey,
|
|
/* M-~ */ z_undefinedkey,
|
|
/* M-^? */ z_backwardkillword,
|
|
};
|
|
|
|
/**/
|
|
int viinsbind[32] = {
|
|
/* ^@ */ z_undefinedkey,
|
|
/* ^A */ z_selfinsert,
|
|
/* ^B */ z_selfinsert,
|
|
/* ^C */ z_selfinsert,
|
|
/* ^D */ z_listchoices,
|
|
/* ^E */ z_selfinsert,
|
|
/* ^F */ z_selfinsert,
|
|
/* ^G */ z_listexpand,
|
|
/* ^H */ z_vibackwarddeletechar,
|
|
/* ^I */ z_expandorcomplete,
|
|
/* ^J */ z_acceptline,
|
|
/* ^K */ z_selfinsert,
|
|
/* ^L */ z_clearscreen,
|
|
/* ^M */ z_acceptline,
|
|
/* ^N */ z_selfinsert,
|
|
/* ^O */ z_selfinsert,
|
|
/* ^P */ z_selfinsert,
|
|
/* ^Q */ z_viquotedinsert,
|
|
/* ^R */ z_redisplay,
|
|
/* ^S */ z_selfinsert,
|
|
/* ^T */ z_selfinsert,
|
|
/* ^U */ z_vikillline,
|
|
/* ^V */ z_viquotedinsert,
|
|
/* ^W */ z_vibackwardkillword,
|
|
/* ^X */ z_undefinedkey,
|
|
/* ^Y */ z_selfinsert,
|
|
/* ^Z */ z_selfinsert,
|
|
/* ^[ */ z_vicmdmode,
|
|
/* ^\ */ z_selfinsert,
|
|
/* ^] */ z_selfinsert,
|
|
/* ^^ */ z_selfinsert,
|
|
/* ^_ */ z_selfinsert,
|
|
};
|
|
|
|
/**/
|
|
int vicmdbind[128] = {
|
|
/* ^@ */ z_undefinedkey,
|
|
/* ^A */ z_undefinedkey,
|
|
/* ^B */ z_undefinedkey,
|
|
/* ^C */ z_undefinedkey,
|
|
/* ^D */ z_listchoices,
|
|
/* ^E */ z_undefinedkey,
|
|
/* ^F */ z_undefinedkey,
|
|
/* ^G */ z_listexpand,
|
|
/* ^H */ z_vibackwardchar,
|
|
/* ^I */ z_undefinedkey,
|
|
/* ^J */ z_acceptline,
|
|
/* ^K */ z_undefinedkey,
|
|
/* ^L */ z_clearscreen,
|
|
/* ^M */ z_acceptline,
|
|
/* ^N */ z_downhistory,
|
|
/* ^O */ z_undefinedkey,
|
|
/* ^P */ z_uphistory,
|
|
/* ^Q */ z_undefinedkey,
|
|
/* ^R */ z_redo,
|
|
/* ^S */ z_undefinedkey,
|
|
/* ^T */ z_undefinedkey,
|
|
/* ^U */ z_undefinedkey,
|
|
/* ^V */ z_undefinedkey,
|
|
/* ^W */ z_undefinedkey,
|
|
/* ^X */ z_undefinedkey,
|
|
/* ^Y */ z_undefinedkey,
|
|
/* ^Z */ z_undefinedkey,
|
|
/* ^[ */ z_beep,
|
|
/* ^\ */ z_undefinedkey,
|
|
/* ^] */ z_undefinedkey,
|
|
/* ^^ */ z_undefinedkey,
|
|
/* ^_ */ z_undefinedkey,
|
|
/* */ z_viforwardchar,
|
|
/* ! */ z_undefinedkey,
|
|
/* " */ z_visetbuffer,
|
|
/* # */ z_poundinsert,
|
|
/* $ */ z_viendofline,
|
|
/* % */ z_vimatchbracket,
|
|
/* & */ z_undefinedkey,
|
|
/* ' */ z_vigotomarkline,
|
|
/* ( */ z_undefinedkey,
|
|
/* ) */ z_undefinedkey,
|
|
/* * */ z_undefinedkey,
|
|
/* + */ z_vidownlineorhistory,
|
|
/* , */ z_virevrepeatfind,
|
|
/* - */ z_viuplineorhistory,
|
|
/* . */ z_virepeatchange,
|
|
/* / */ z_vihistorysearchbackward,
|
|
/* 0 */ z_vidigitorbeginningofline,
|
|
/* 1 */ z_digitargument,
|
|
/* 2 */ z_digitargument,
|
|
/* 3 */ z_digitargument,
|
|
/* 4 */ z_digitargument,
|
|
/* 5 */ z_digitargument,
|
|
/* 6 */ z_digitargument,
|
|
/* 7 */ z_digitargument,
|
|
/* 8 */ z_digitargument,
|
|
/* 9 */ z_digitargument,
|
|
/* : */ z_executenamedcmd,
|
|
/* ; */ z_virepeatfind,
|
|
/* < */ z_viunindent,
|
|
/* = */ z_listchoices,
|
|
/* > */ z_viindent,
|
|
/* ? */ z_vihistorysearchforward,
|
|
/* @ */ z_undefinedkey,
|
|
/* A */ z_viaddeol,
|
|
/* B */ z_vibackwardblankword,
|
|
/* C */ z_vichangeeol,
|
|
/* D */ z_vikilleol,
|
|
/* E */ z_viforwardblankwordend,
|
|
/* F */ z_vifindprevchar,
|
|
/* G */ z_vifetchhistory,
|
|
/* H */ z_undefinedkey,
|
|
/* I */ z_viinsertbol,
|
|
/* J */ z_vijoin,
|
|
/* K */ z_undefinedkey,
|
|
/* L */ z_undefinedkey,
|
|
/* M */ z_undefinedkey,
|
|
/* N */ z_virevrepeatsearch,
|
|
/* O */ z_viopenlineabove,
|
|
/* P */ z_viputbefore,
|
|
/* Q */ z_undefinedkey,
|
|
/* R */ z_vireplace,
|
|
/* S */ z_vichangewholeline,
|
|
/* T */ z_vifindprevcharskip,
|
|
/* U */ z_undefinedkey,
|
|
/* V */ z_visuallinemode,
|
|
/* W */ z_viforwardblankword,
|
|
/* X */ z_vibackwarddeletechar,
|
|
/* Y */ z_viyankwholeline,
|
|
/* Z */ z_undefinedkey,
|
|
/* [ */ z_undefinedkey,
|
|
/* \ */ z_undefinedkey,
|
|
/* ] */ z_undefinedkey,
|
|
/* ^ */ z_vifirstnonblank,
|
|
/* _ */ z_undefinedkey,
|
|
/* ` */ z_vigotomark,
|
|
/* a */ z_viaddnext,
|
|
/* b */ z_vibackwardword,
|
|
/* c */ z_vichange,
|
|
/* d */ z_videlete,
|
|
/* e */ z_viforwardwordend,
|
|
/* f */ z_vifindnextchar,
|
|
/* g */ z_undefinedkey,
|
|
/* h */ z_vibackwardchar,
|
|
/* i */ z_viinsert,
|
|
/* j */ z_downlineorhistory,
|
|
/* k */ z_uplineorhistory,
|
|
/* l */ z_viforwardchar,
|
|
/* m */ z_visetmark,
|
|
/* n */ z_virepeatsearch,
|
|
/* o */ z_viopenlinebelow,
|
|
/* p */ z_viputafter,
|
|
/* q */ z_undefinedkey,
|
|
/* r */ z_vireplacechars,
|
|
/* s */ z_visubstitute,
|
|
/* t */ z_vifindnextcharskip,
|
|
/* u */ z_undo,
|
|
/* v */ z_visualmode,
|
|
/* w */ z_viforwardword,
|
|
/* x */ z_videletechar,
|
|
/* y */ z_viyank,
|
|
/* z */ z_undefinedkey,
|
|
/* { */ z_undefinedkey,
|
|
/* | */ z_vigotocolumn,
|
|
/* } */ z_undefinedkey,
|
|
/* ~ */ z_viswapcase,
|
|
/* ^? */ z_vibackwardchar,
|
|
};
|