From 720603ac8e2f75c874a68f18b90dbf9f7e2fa430 Mon Sep 17 00:00:00 2001 From: Renaud Fivet Date: Mon, 9 Aug 2021 15:24:33 +0800 Subject: [PATCH] bind: code review and minor refactoring. basic: minor reformatting. --- basic.c | 1 + bind.c | 391 ++++++++++++++++++++++++++++---------------------------- bind.h | 6 +- 3 files changed, 199 insertions(+), 199 deletions(-) diff --git a/basic.c b/basic.c index c87cf4c..af3ea35 100644 --- a/basic.c +++ b/basic.c @@ -320,6 +320,7 @@ boolean setmark( int f, int n) { return TRUE ; } + /* Swap the values of "." and "mark" in the current window. If no mark as been previously set, set it. Bound to C-X C-X exchange-point-and-mark. */ diff --git a/bind.c b/bind.c index 3406fe8..2975702 100644 --- a/bind.c +++ b/bind.c @@ -9,24 +9,22 @@ */ #include -#include #include #include -#include "estruct.h" #include "bindable.h" #include "buffer.h" -#include "display.h" +#include "display.h" /* upmode(), ostring() */ #include "exec.h" #include "file.h" #include "flook.h" #include "input.h" #include "line.h" +#include "mlout.h" #include "names.h" #include "util.h" #include "window.h" - static int buildlist( char *mstring) ; static char *cmdstr( unsigned c, char *seq) ; static unsigned int getckey( int mflag) ; @@ -34,124 +32,122 @@ static unsigned int stock( char *keyname) ; static const char *getfname( unsigned keycode, const char *failmsg) ; -static boolean cmdfail( const char *msg) { - mlwrite( "%s", msg) ; - return FALSE ; -} - +/* give me some help!!!! bring up a fake buffer and read the help file into + it with view mode + */ BINDABLE( help) { -/* give me some help!!!! - bring up a fake buffer and read the help file into it with view mode */ char *fname = NULL; /* ptr to file returned by flook() */ /* first check if we are already here */ buffer_p bp = bfind( hlpfname, FALSE, BFINVS); - if( bp == curbp) - return TRUE ; + if( bp == curbp) + return TRUE ; if( bp == NULL) { fname = flook( hlpfname, FALSE) ; if( fname == NULL) - return cmdfail( "(Help file is not online)") ; + return mloutfail( "(Help file is not online)") ; } /* split the current window to make room for the help stuff */ - if( wheadp->w_wndp == NULL /* One window */ - && splitwind( FALSE, 1) == FALSE) /* Split it */ + if( wheadp->w_wndp == NULL /* One window */ + && splitwind( FALSE, 1) == FALSE) /* Split it */ return FALSE ; - if (bp == NULL) { - /* and read the stuff in */ - if (getfile(fname, FALSE) == FALSE) - return FALSE; + if( bp == NULL) { + /* and read the stuff in */ + if( getfile( fname, FALSE) == FALSE) + return FALSE ; } else - swbuffer( bp) ; + swbuffer( bp) ; /* make this window in VIEW mode, update all mode lines */ curwp->w_bufp->b_mode |= MDVIEW; curwp->w_bufp->b_flag |= BFINVS; upmode() ; - return TRUE; + return TRUE ; } + static boolean invalidkey( void) { - return cmdfail( "(Invalid key sequence)") ; + return mloutfail( "(Invalid key sequence)") ; } + /* describe the command for a certain key */ BINDABLE( deskey) { - const char cmdname[] = "describe-key" ; - char outseq[ NSTRING] ; /* output buffer for command sequence */ + const char cmdname[] = "describe-key" ; + char outseq[ 8] ; /* output buffer for keystroke sequence */ /* prompt the user to type a key to describe */ - mlwrite( "%s: ", cmdname) ; + mloutfmt( "%s: ", cmdname) ; /* get the command sequence to describe * change it to something we can print as well */ unsigned keycode = getckey( FALSE) ; - if( keycode == (unsigned) ~0) - return invalidkey() ; + if( keycode == (unsigned) ~0) + return invalidkey() ; /* output the command sequence */ - mlwrite( "%s %s: 0x%x, %s", cmdname, cmdstr( keycode, outseq), keycode, + mloutfmt( "%s %s: 0x%x, %s", cmdname, cmdstr( keycode, outseq), keycode, getfname( keycode, "Not Bound")) ; return TRUE ; } -/* - * bindtokey: + +/* bindtokey: * add a new key to the key binding table * * int f, n; command arguments [IGNORED] */ BINDABLE( bindtokey) { - kbind_p ktp ; /* pointer into the command table */ - char outseq[ 80] ; /* output buffer for keystroke sequence */ + kbind_p ktp ; /* pointer into the command table */ + char outseq[ 8] ; /* output buffer for keystroke sequence */ /* prompt the user to type in a key to bind */ - mlwrite("bind-to-key: "); + mloutstr( "bind-to-key: ") ; /* get the function name to bind it to */ - nbind_p nbp = getname() ; - if( nbp == NULL) /* abort */ - return FALSE ; + nbind_p nbp = getname() ; + if( nbp == NULL) /* abort */ + return FALSE ; fnp_t kfunc = nbp->n_func ; if( kfunc == NULL) - return cmdfail( "(No such function)") ; + return mloutfail( "(No such function)") ; - mlwrite( "bind-to-key %s: ", bind_name( nbp)) ; + mloutfmt( "bind-to-key %s: ", bind_name( nbp)) ; /* get the command sequence to bind */ - boolean prefix_f = (kfunc == metafn) || (kfunc == cex) || - (kfunc == unarg) || (kfunc == ctrlg) ; + boolean prefix_f = (kfunc == metafn) || (kfunc == cex) || + (kfunc == unarg) || (kfunc == ctrlg) ; int c = getckey( prefix_f) ; - if( c == ~0) - return invalidkey() ; + if( c == ~0) + return invalidkey() ; /* change it to something we can print as well */ /* and dump it out */ ostring( cmdstr( c, outseq)) ; /* key sequence can't be an active prefix key */ - if( c == metac || c == ctlxc || c == reptc || c == abortc) { - if( (c == metac && kfunc == metafn) - || (c == ctlxc && kfunc == cex) - || (c == reptc && kfunc == unarg) - || (c == abortc && kfunc == ctrlg)) - return TRUE ; + if( c == metac || c == ctlxc || c == reptc || c == abortc) { + if( (c == metac && kfunc == metafn) + || (c == ctlxc && kfunc == cex) + || (c == reptc && kfunc == unarg) + || (c == abortc && kfunc == ctrlg)) + return TRUE ; /* be silent if keep current */ - return cmdfail( "(Can't bind to active prefix)") ; - } + return mloutfail( "(Can't bind to active prefix)") ; + } /* if the function is a prefix key */ - if( prefix_f) { + if( prefix_f) { /* remove existing binding for the prefix */ for( ktp = keytab ; ktp->k_code != 0 ; ktp++) if( ktp->k_nbp == nbp) { - delkeybinding( ktp->k_code) ; - break ; - } + delkeybinding( ktp->k_code) ; + break ; + } /* set the appropriate global prefix variable */ if( kfunc == metafn) @@ -164,49 +160,47 @@ BINDABLE( bindtokey) { abortc = c ; } - ktp = setkeybinding( c, nbp) ; - if( ktp->k_code == 0) - return cmdfail( "Binding table FULL!") ; + ktp = setkeybinding( c, nbp) ; + if( ktp->k_code == 0) + return mloutfail( "Binding table FULL!") ; - return TRUE ; + return TRUE ; } -/* - * unbindkey: + +/* unbindkey: * delete a key from the key binding table * * int f, n; command arguments [IGNORED] */ BINDABLE( unbindkey) { - char outseq[ 80] ; /* output buffer for keystroke sequence */ + char outseq[ 8] ; /* output buffer for keystroke sequence */ /* prompt the user to type in a key to unbind */ - mlwrite( "unbind-key: ") ; + mloutstr( "unbind-key: ") ; /* get the command sequence to unbind */ - int c = getckey( FALSE) ; /* get a command sequence */ - if( c == ~0) - return invalidkey() ; + int c = getckey( FALSE) ; /* get a command sequence */ + if( c == ~0) + return invalidkey() ; /* change it to something we can print as well */ /* and dump it out */ ostring( cmdstr( c, outseq)) ; /* prefix key sequence can't be undound, just redefined */ - if( c == reptc || c == abortc) - return cmdfail( "(Can't unbind prefix)") ; + if( c == reptc || c == abortc) + return mloutfail( "(Can't unbind prefix)") ; /* if it isn't bound, bitch */ - if( delkeybinding( c) == FALSE) { - mlwrite( "(Key not bound)") ; - return FALSE ; - } - - return TRUE ; + if( delkeybinding( c) == FALSE) + return mloutfail( "(Key not bound)") ; + + return TRUE ; } -/* - * does source include sub? + +/* does source include sub? * * char *source; string to search in * char *sub; substring to look for @@ -214,8 +208,8 @@ BINDABLE( unbindkey) { static boolean strinc( const char *source, const char *sub) { /* for each character in the source string */ for( ; *source ; source++) { - const char *nxtsp ; /* next ptr into source */ - const char *tp ; /* ptr into substring */ + const char *nxtsp ; /* next ptr into source */ + const char *tp ; /* ptr into substring */ nxtsp = source; @@ -232,6 +226,7 @@ static boolean strinc( const char *source, const char *sub) { return FALSE ; } + /* describe bindings * bring up a fake buffer and list the key bindings * into it with view mode @@ -240,168 +235,166 @@ BINDABLE( desbind) { return buildlist( "") ; } + /* Apropos (List functions that match a substring) */ BINDABLE( apro) { - char *mstring ; /* string to match cmd names to */ + char *mstring ; /* string to match cmd names to */ int status = newmlarg( &mstring, "apropos: ", 0) ; - if( status == TRUE) { - status = buildlist( mstring) ; - free( mstring) ; - } else if( status == FALSE) - status = buildlist( "") ; /* build list of all commands */ + if( status == TRUE) { + status = buildlist( mstring) ; + free( mstring) ; + } else if( status == FALSE) + status = buildlist( "") ; /* build list of all commands */ return status ; } -/* - * build a binding list (limited or full) + +/* build a binding list (limited or full) * * char *mstring; match string if a partial list, "" matches all */ static int buildlist( char *mstring) { - struct window *wp; /* scanning pointer to windows */ - kbind_p ktp; /* pointer into the command table */ - nbind_p nptr;/* pointer into the name binding table */ - struct buffer *bp; /* buffer to put binding list into */ - char outseq[80]; /* output buffer for keystroke sequence */ +#define PADDING 28 + char outseq[ PADDING + 8] ; /* output buffer for command + keystroke */ - /* split the current window to make room for the binding list */ - if( wheadp->w_wndp == NULL /* One window */ - && splitwind( FALSE, 1) == FALSE) /* Split it */ - return FALSE; +/* split the current window to make room for the binding list */ + if( wheadp->w_wndp == NULL /* One window */ + && splitwind( FALSE, 1) == FALSE) /* Split it */ + return FALSE ; - /* and get a buffer for it */ - bp = bfind("*Binding list*", TRUE, 0); +/* and get a buffer for it */ + buffer_p bp = bfind( "*Binding list*", TRUE, 0) ; if( bp == NULL || bclear( bp) == FALSE) - return cmdfail( "Can't display binding list") ; + return mloutfail( "Can't display binding list") ; - /* let us know this is in progress */ - mlwrite("(Building binding list)"); +/* let us know this is in progress */ + mloutstr( "(Building binding list)") ; - /* disconnect the current buffer */ - if (--curbp->b_nwnd == 0) { /* Last use. */ - curbp->b_dotp = curwp->w_dotp; - curbp->b_doto = curwp->w_doto; - curbp->b_markp = curwp->w_markp; - curbp->b_marko = curwp->w_marko; +/* disconnect the current buffer */ + if( --curbp->b_nwnd == 0) { /* Last use. */ + curbp->b_dotp = curwp->w_dotp ; + curbp->b_doto = curwp->w_doto ; + curbp->b_markp = curwp->w_markp ; + curbp->b_marko = curwp->w_marko ; } - /* connect the current window to this buffer */ - curbp = bp; /* make this buffer current in current window */ - bp->b_mode = 0; /* no modes active in binding list */ - bp->b_nwnd++; /* mark us as more in use */ - wp = curwp; - wp->w_bufp = bp; - wp->w_linep = bp->b_linep; - wp->w_flag = WFHARD | WFFORCE; - wp->w_dotp = bp->b_dotp; - wp->w_doto = bp->b_doto; - wp->w_markp = NULL; - wp->w_marko = 0; +/* connect the current window to this buffer */ + curbp = bp ; /* make this buffer current in current window */ + bp->b_mode = 0 ; /* no modes active in binding list */ + bp->b_nwnd++ ; /* mark us as more in use */ + window_p wp = curwp ; + wp->w_bufp = bp ; + wp->w_linep = bp->b_linep ; + wp->w_flag = WFHARD | WFFORCE ; + wp->w_dotp = bp->b_dotp ; + wp->w_doto = bp->b_doto ; + wp->w_markp = NULL ; + wp->w_marko = 0 ; - /* build the contents of this window, inserting it line by line */ - for( nptr = names ; nptr->n_func != NULL ; nptr++) { - int cpos ; /* current position to use in outseq */ +/* build the contents of this window, inserting it line by line */ + for( nbind_p nptr = names ; nptr->n_func != NULL ; nptr++) { + int cpos ; /* current position to use in outseq */ /* if we are executing an apropos command..... */ /* and current string doesn't include the search string */ if( *mstring && strinc( bind_name( nptr), mstring) == FALSE) - continue ; + continue ; /* add in the command name */ mystrscpy( outseq, bind_name( nptr), sizeof outseq) ; - cpos = strlen(outseq); + cpos = strlen( outseq) ; /* search down any keys bound to this */ - for( ktp = keytab ; ktp->k_code != 0 ; ktp++) { + for( kbind_p ktp = keytab ; ktp->k_code != 0 ; ktp++) { if( ktp->k_nbp == nptr) { - /* padd out some spaces */ - while (cpos < 28) - outseq[cpos++] = ' '; + /* padd out some spaces */ + while( cpos < PADDING) + outseq[ cpos++] = ' ' ; - /* add in the command sequence */ - cmdstr(ktp->k_code, &outseq[cpos]); - strcat(outseq, "\n"); + /* add in the command sequence */ + cmdstr( ktp->k_code, &outseq[ cpos]) ; + strcat( outseq, "\n") ; - /* and add it as a line into the buffer */ - if (linstr(outseq) != TRUE) - return FALSE; + /* and add it as a line into the buffer */ + if( linstr( outseq) != TRUE) + return FALSE ; - cpos = 0; /* and clear the line */ + cpos = 0 ; /* and clear the line */ } } /* if no key was bound, we need to dump it anyway */ - if (cpos > 0) { - outseq[cpos++] = '\n'; - outseq[cpos] = 0; - if (linstr(outseq) != TRUE) - return FALSE; + if( cpos > 0) { + outseq[ cpos++] = '\n'; + outseq[ cpos] = 0; + if( linstr( outseq) != TRUE) + return FALSE ; } } - bp->b_mode |= MDVIEW; /* put this buffer view mode */ - bp->b_flag &= ~BFCHG; /* don't flag this as a change */ - wp->w_dotp = lforw(bp->b_linep); /* back to the beginning */ - wp->w_doto = 0; - upmode() ; /* and update ALL mode lines */ - mlwrite(""); /* clear the mode line */ - return TRUE; + bp->b_mode |= MDVIEW ; /* put this buffer view mode */ + bp->b_flag &= ~BFCHG ; /* don't flag this as a change */ + wp->w_dotp = lforw( bp->b_linep) ; /* back to the beginning */ + wp->w_doto = 0 ; + upmode() ; /* and update ALL mode lines */ + mloutstr( "") ; /* clear the mode line */ + return TRUE ; } -/* - * get a command key sequence from the keyboard + +/* get a command key sequence from the keyboard * * int mflag; going for a meta sequence? * returns ~0 on failure */ static unsigned int getckey( int mflag) { - unsigned int c ; /* character fetched */ + unsigned int c ; /* character fetched */ /* check to see if we are executing a command line */ if( clexec) { - char *tok = getnewtokval() ; /* get the next token */ - if( tok == NULL) - c = ~0 ; /* return invalid key on failure */ - else { - c = stock( tok) ; - free( tok) ; - } - } else { /* or the normal way */ - if( mflag) - c = get1key() ; - else - c = getcmd() ; - } + char *tok = getnewtokval() ; /* get the next token */ + if( tok == NULL) + c = ~0 ; /* return invalid key on failure */ + else { + c = stock( tok) ; + free( tok) ; + } + } else { /* or the normal way */ + if( mflag) + c = get1key() ; + else + c = getcmd() ; + } - return c ; + return c ; } -/* - * execute the startup file + +/* execute the startup file * * char *fname; name of startup file (null if default) */ int startup( const char *fname) { - if( !fname || *fname == 0) /* use default if empty parameter */ - fname = rcfname ; + if( !fname || *fname == 0) /* use default if empty parameter */ + fname = rcfname ; - fname = flook( fname, TRUE) ; /* look up the startup file */ - if( fname == NULL) /* if it isn't around, don't sweat it */ - return TRUE ; + fname = flook( fname, TRUE) ; /* look up the startup file */ + if( fname == NULL) /* if it isn't around, don't sweat it */ + return TRUE ; - return dofile( fname) ; /* otherwise, execute the sucker */ + return dofile( fname) ; /* otherwise, execute the sucker */ } -/* - * change a key command to a string we can print out + +/* change a key command to a string we can print out * * int c; sequence to translate * char *seq; destination string for sequence */ static char *cmdstr( unsigned c, char *seq) { - char *ptr = seq ; /* pointer into current position in sequence */ + char *ptr = seq ; /* pointer into current position in sequence */ /* apply meta sequence if needed */ if( c & META) { @@ -411,8 +404,8 @@ static char *cmdstr( unsigned c, char *seq) { /* apply ^X sequence if needed */ if( c & CTLX) { - if( ctlxc & CTRL) - *ptr++ = '^' ; + if( ctlxc & CTRL) + *ptr++ = '^' ; *ptr++ = ctlxc & ~PRFXMASK ; } @@ -428,22 +421,24 @@ static char *cmdstr( unsigned c, char *seq) { } /* and output the final sequence */ - ptr += unicode_to_utf8( c & ~PRFXMASK, ptr) ; - *ptr = 0 ; /* terminate the string */ - return seq ; + ptr += unicode_to_utf8( c & ~PRFXMASK, ptr) ; + *ptr = 0 ; /* terminate the string */ + return seq ; } + static const char *getfname( unsigned keycode, const char *failmsg) { /* takes a key code and gets the name of the function bound to it */ - kbind_p kbp = getkeybinding( keycode) ; - if( kbp->k_code == 0) - return failmsg ; + kbind_p kbp = getkeybinding( keycode) ; + if( kbp->k_code == 0) + return failmsg ; - const char *found = bind_name( kbp->k_nbp) ; - assert( *found) ; - return found ; + const char *found = bind_name( kbp->k_nbp) ; + assert( *found) ; + return found ; } + /* stock: * String key name TO Command Key * @@ -477,16 +472,16 @@ static unsigned int stock( char *keyname) { } /* only one character left to parse */ - if( !*keyname || keyname[1]) - return ~0 ; + if( !*keyname || keyname[1]) + return ~0 ; /* only way to redefine ^X is by quoting binary value */ if( *keyname < 32 || *keyname == 0x7F) { c |= CTRL ; *keyname ^= 0x40 ; - } else if( c && !(c & SPEC) - && *keyname >= 'a' && *keyname <= 'z') - /* make sure we are not lower case (not with function keys) */ + } else if( c && !(c & SPEC) + && *keyname >= 'a' && *keyname <= 'z') + /* make sure we are not lower case (not with function keys) */ *keyname -= 32 ; /* the final sequence... */ @@ -494,19 +489,19 @@ static unsigned int stock( char *keyname) { return c ; } -/* - * string key name to binding name.... + +/* string key name to binding name.... * * char *skey; name of key to get binding for */ const char *transbind( char *skey) { - static const char failmsg[] = "ERROR" ; + static const char failmsg[] = "ERROR" ; - unsigned c = stock( skey) ; - if( c == (unsigned) ~0) - return failmsg ; - else - return getfname( c, failmsg) ; + unsigned c = stock( skey) ; + if( c == (unsigned) ~0) + return failmsg ; + else + return getfname( c, failmsg) ; } /* end of bind.c */ diff --git a/bind.h b/bind.h index dcb1ad6..e58fbc9 100644 --- a/bind.h +++ b/bind.h @@ -1,3 +1,5 @@ +/* bind.h -- bindable functions dealing with name and key bindings */ + #ifndef _BIND_H_ #define _BIND_H_ @@ -14,6 +16,8 @@ BINDABLE( unbindkey) ; int startup( const char *fname) ; /* find a key to function association in the key to function mapping table */ -const char *transbind( char *skey) ; /* by string representation of key */ +const char *transbind( char *skey) ; /* by string representation of key */ #endif + +/* end of bind.h */