/* * Name: MicroEMACS * GNU compatible commands * Version: 29 * Last edit: 19-Apr-86 * By: {sun, amdahl, mtxinu}!rtech!daveb * * This file contains new commands written for GNU emacs compatibility. * * suspend(), replacing jeffexit(). * savebuffs(), new. * savequit(), new. * notmodified(), new. * findalternate(), new. * scrollother(), new. */ #include "def.h" /* * GNU style suspend. Asks to save all dirty buffs, then starts a CLI. * Bound to "C-Z" and "X-C-Z" * * Supercedes "jeffexit" X-C-Z too. */ suspend(f, n, k) { if(ABORT != savebuffs(0, 0, KRANDOM)) return (spawncli(f, n, KRANDOM)); else return (ABORT); } /* * GNU compatible buffer save routine. * Scan all buffers and ask for disposition. * Does not affect display. X-S * (daveb) */ savebuffs(f, n, k) { char buf[ 80 ]; register int s; register BUFFER *bp; BUFFER *oldbp = curbp; int considered = FALSE; int row = ttrow; int col = ttcol; for( bp = bheadp; bp != NULL; bp = bp->b_bufp ) if (bp->b_bname[0]!=' ' && bp->b_fname[0]!='\0' && (bp->b_flag&BFCHG) != 0) { considered = TRUE; strcpy( buf, "Save file "); strcat( buf, bp->b_fname ); s = eyesno( buf, bp->b_fname); if (s == ABORT) return (ABORT); if (s == TRUE) { curbp = bp; filesave(f, n, KRANDOM); ttmove( row, col ); ttflush(); } } if(!considered) eprintf("(No files need saving)"); curbp = oldbp; ttmove( row, col ); ttflush(); return(TRUE); } /* * GNU style exit: query on every dirty buffer, then exit. X-C-C */ savequit(f, n, k) { if(ABORT != savebuffs(0, 0, KRANDOM)) quit(f, n, k); return( ABORT ); } /* * Turn off the dirty bit on this buffer. M-~ */ notmodified(f, n, k) { register WINDOW *wp; curbp->b_flag &= ~BFCHG; wp = wheadp; /* Update mode lines. */ while (wp != NULL) { if (wp->w_bufp == curbp) wp->w_flag |= WFMODE; wp = wp->w_wndp; } eprintf("Modification-flag cleared"); return (TRUE); } /* * Scroll the other window. On C-M-V. Works OK (daveb). */ scrollother(f, n, k) { nextwind(0, 0, KRANDOM); forwpage(f, n, k); prevwind(0, 0, KRANDOM); }