mirror of
https://github.com/rfivet/uemacs.git
synced 2024-12-18 07:16:23 -05:00
bindable: code review and minor refactoring.
This commit is contained in:
parent
720603ac8e
commit
665d9ca1da
109
bindable.c
109
bindable.c
@ -3,64 +3,48 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "display.h"
|
#include "display.h" /* vttidy() */
|
||||||
#include "estruct.h"
|
|
||||||
#include "file.h"
|
#include "file.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "lock.h"
|
#include "lock.h"
|
||||||
#include "mlout.h"
|
#include "mlout.h"
|
||||||
#include "terminal.h"
|
#include "terminal.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* Fancy quit command, as implemented by Norm. If the any buffer has
|
/* Fancy quit command, as implemented by Norm. If any buffer has changed
|
||||||
* changed do a write on that buffer and exit emacs, otherwise simply exit.
|
do a write on that buffer and exit emacs, otherwise simply exit.
|
||||||
*/
|
*/
|
||||||
int quickexit(int f, int n)
|
BINDABLE( quickexit) {
|
||||||
{
|
buffer_p oldcb = curbp ; /* save in case we fail */
|
||||||
struct buffer *bp; /* scanning pointer to buffers */
|
for( buffer_p bp = bheadp ; bp != NULL ; bp = bp->b_bufp) {
|
||||||
struct buffer *oldcb; /* original current buffer */
|
if( (bp->b_flag & (BFCHG | BFTRUNC | BFINVS)) == BFCHG) {
|
||||||
int status;
|
/* Changed, Not truncated and real buffer */
|
||||||
|
|
||||||
oldcb = curbp; /* save in case we fail */
|
|
||||||
|
|
||||||
bp = bheadp;
|
|
||||||
while (bp != NULL) {
|
|
||||||
if ((bp->b_flag & BFCHG) != 0 /* Changed. */
|
|
||||||
&& (bp->b_flag & BFTRUNC) == 0 /* Not truncated P.K. */
|
|
||||||
&& (bp->b_flag & BFINVS) == 0) { /* Real. */
|
|
||||||
curbp = bp ; /* make that buffer cur */
|
curbp = bp ; /* make that buffer cur */
|
||||||
mloutfmt( "(Saving %s)", bp->b_fname) ;
|
mloutfmt( "(Saving %s)", bp->b_fname) ;
|
||||||
#if PKCODE
|
int status = filesave( f, n) ;
|
||||||
#else
|
if( status != TRUE) {
|
||||||
mloutstr( "\n") ;
|
|
||||||
#endif
|
|
||||||
if ((status = filesave(f, n)) != TRUE) {
|
|
||||||
curbp = oldcb ; /* restore curbp */
|
curbp = oldcb ; /* restore curbp */
|
||||||
return status ;
|
return status ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bp = bp->b_bufp; /* on to the next buffer */
|
|
||||||
}
|
|
||||||
quit(f, n); /* conditionally quit */
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
return quit( f, n) ; /* conditionally quit */
|
||||||
* Quit command. If an argument, always quit. Otherwise confirm if a buffer
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Quit command. If an argument, always quit. Otherwise confirm if a buffer
|
||||||
* has been changed and not written out. Normally bound to "C-X C-C".
|
* has been changed and not written out. Normally bound to "C-X C-C".
|
||||||
*/
|
*/
|
||||||
int quit(int f, int n)
|
BINDABLE( quit) {
|
||||||
{
|
int s ; /* status of user query */
|
||||||
int s;
|
|
||||||
|
|
||||||
if( f != FALSE /* Argument forces it. */
|
if( f != FALSE /* Argument forces it. */
|
||||||
|| anycb() == FALSE /* All buffers clean. */
|
|| anycb() == FALSE /* All buffers clean. */
|
||||||
/* User says it's OK. */
|
/* User says it's OK. */
|
||||||
|| (s =
|
|| (s = mlyesno( "Modified buffers exist. Leave anyway")) == TRUE) {
|
||||||
mlyesno("Modified buffers exist. Leave anyway")) == TRUE) {
|
|
||||||
#if (FILOCK && BSD) || SVR4
|
#if (FILOCK && BSD) || SVR4
|
||||||
if( lockrel() != TRUE) {
|
if( lockrel() != TRUE) {
|
||||||
TTputc('\n') ;
|
TTputc('\n') ;
|
||||||
@ -76,70 +60,67 @@ int quit(int f, int n)
|
|||||||
else
|
else
|
||||||
exit( EXIT_SUCCESS) ;
|
exit( EXIT_SUCCESS) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
mloutstr( "") ;
|
mloutstr( "") ;
|
||||||
return s ;
|
return s ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Begin a keyboard macro.
|
/* Begin a keyboard macro.
|
||||||
* Error if not at the top level in keyboard processing. Set up variables and
|
* Error if not at the top level in keyboard processing. Set up variables and
|
||||||
* return.
|
* return.
|
||||||
*/
|
*/
|
||||||
int ctlxlp(int f, int n)
|
BINDABLE( ctlxlp) {
|
||||||
{
|
if( kbdmode != STOP)
|
||||||
if (kbdmode != STOP) {
|
return mloutfail( "%Macro already active") ;
|
||||||
mloutstr( "%Macro already active") ;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
mloutstr( "(Start macro)") ;
|
mloutstr( "(Start macro)") ;
|
||||||
kbdptr = &kbdm[0];
|
kbdptr = kbdm ;
|
||||||
kbdend = kbdptr ;
|
kbdend = kbdptr ;
|
||||||
kbdmode = RECORD ;
|
kbdmode = RECORD ;
|
||||||
return TRUE ;
|
return TRUE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* End keyboard macro. Check for the same limit conditions as the above
|
/* End keyboard macro. Check for the same limit conditions as the above
|
||||||
* routine. Set up the variables and return to the caller.
|
* routine. Set up the variables and return to the caller.
|
||||||
*/
|
*/
|
||||||
int ctlxrp(int f, int n)
|
BINDABLE( ctlxrp) {
|
||||||
{
|
if( kbdmode == STOP)
|
||||||
if (kbdmode == STOP) {
|
return mloutfail( "%Macro not active") ;
|
||||||
mloutstr( "%Macro not active") ;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (kbdmode == RECORD) {
|
if (kbdmode == RECORD) {
|
||||||
mloutstr( "(End macro)") ;
|
mloutstr( "(End macro)") ;
|
||||||
kbdmode = STOP;
|
kbdmode = STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE ;
|
return TRUE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Execute a macro.
|
/* Execute a macro.
|
||||||
* The command argument is the number of times to loop. Quit as soon as a
|
* The command argument is the number of times to loop. Quit as soon as a
|
||||||
* command gets an error. Return TRUE if all ok, else FALSE.
|
* command gets an error. Return TRUE if all ok, else FALSE.
|
||||||
*/
|
*/
|
||||||
int ctlxe(int f, int n)
|
BINDABLE( ctlxe) {
|
||||||
{
|
if( kbdmode != STOP)
|
||||||
if (kbdmode != STOP) {
|
return mloutfail( "%Macro already active") ;
|
||||||
mloutstr( "%Macro already active") ;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if( n <= 0)
|
if( n <= 0)
|
||||||
return TRUE ;
|
return TRUE ;
|
||||||
|
|
||||||
kbdrep = n ; /* remember how many times to execute */
|
kbdrep = n ; /* remember how many times to execute */
|
||||||
kbdmode = PLAY ; /* start us in play mode */
|
kbdmode = PLAY ; /* start us in play mode */
|
||||||
kbdptr = &kbdm[0]; /* at the beginning */
|
kbdptr = kbdm ; /* at the beginning */
|
||||||
return TRUE ;
|
return TRUE ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* abort:
|
/* abort:
|
||||||
* Beep the beeper. Kill off any keyboard macro, etc., that is in progress.
|
* Beep the beeper. Kill off any keyboard macro, etc., that is in progress.
|
||||||
* Sometimes called as a routine, to do general aborting of stuff.
|
* Sometimes called as a routine, to do general aborting of stuff.
|
||||||
*/
|
*/
|
||||||
int ctrlg( int f, int n) {
|
BINDABLE( ctrlg) {
|
||||||
kbdmode = STOP ;
|
kbdmode = STOP ;
|
||||||
mloutfmt( "%B(Aborted)") ;
|
mloutfmt( "%B(Aborted)") ;
|
||||||
return ABORT ;
|
return ABORT ;
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
/* bindable.h -- misc bindable functions */
|
||||||
|
|
||||||
|
#ifndef _BINDABLE_H_
|
||||||
|
#define _BINDABLE_H_
|
||||||
|
|
||||||
#include "names.h"
|
#include "names.h"
|
||||||
|
|
||||||
/* functions that can be bound to keys or procedure names */
|
/* functions that can be bound to keys or procedure names */
|
||||||
@ -7,3 +12,7 @@ BINDABLE( ctlxlp) ;
|
|||||||
BINDABLE( ctlxrp) ;
|
BINDABLE( ctlxrp) ;
|
||||||
BINDABLE( ctlxe) ;
|
BINDABLE( ctlxe) ;
|
||||||
BINDABLE( ctrlg) ;
|
BINDABLE( ctrlg) ;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* end of bindable.h */
|
||||||
|
Loading…
Reference in New Issue
Block a user