Make backspace behavior match Plan 9 sam. - sam - An updated version of the sam text editor.
 (HTM) git clone git://vernunftzentrum.de/sam.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 140ba1042462570fc3c966652ea1d6e79cd3ae93
 (DIR) parent 47566bf19ef592eff4ec8c945781618e67471d51
 (HTM) Author: Rob King <jking@deadpixi.com>
       Date:   Fri,  9 Sep 2016 10:20:00 -0500
       
       Make backspace behavior match Plan 9 sam.
       
       Diffstat:
         samterm/main.c                      |      47 ++++++++++++++++---------------
       
       1 file changed, 24 insertions(+), 23 deletions(-)
       ---
 (DIR) diff --git a/samterm/main.c b/samterm/main.c
       @@ -815,31 +815,32 @@ typedef long (*Commandfunc)(Flayer *, long, Text *);
        typedef struct CommandEntry CommandEntry;
        struct CommandEntry{
            Commandfunc f;
       -    int unlocked;
       +    bool unlocked;
       +    bool docut;
        };
        
        CommandEntry commands[Cmax] ={
       -    [Cnone]           = {cmdnone,           0},
       -    [Cscrolldown]     = {cmdscrolldown,     0},
       -    [Cscrollup]       = {cmdscrollup,       0},
       -    [Cscrolldownline] = {cmdscrolldownline, 0},
       -    [Cscrollupline]   = {cmdscrollupline,   0},
       -    [Ccharleft]       = {cmdcharleft,       0},
       -    [Ccharright]      = {cmdcharright,      0},
       -    [Clineup]         = {cmdlineup,         0},
       -    [Clinedown]       = {cmdlinedown,       0},
       -    [Cjump]           = {cmdjump,           0},
       -    [Cescape]         = {cmdescape,         0},
       -    [Csnarf]          = {cmdsnarf,          0},
       -    [Ccut]            = {cmdcut,            0},
       -    [Cpaste]          = {cmdpaste,          0},
       -    [Cexchange]       = {cmdexchange,       0},
       -    [Cdelword]        = {cmddelword,        1},
       -    [Cdelbol]         = {cmddelbol,         1},
       -    [Cdel]            = {cmddel,            1},
       -    [Cwrite]          = {cmdwrite,          1},
       -    [Ceol]            = {cmdeol,            0},
       -    [Cbol]            = {cmdbol,            0}
       +    [Cnone]           = {cmdnone,           false, false},
       +    [Cscrolldown]     = {cmdscrolldown,     false, false},
       +    [Cscrollup]       = {cmdscrollup,       false, false},
       +    [Cscrolldownline] = {cmdscrolldownline, false, false},
       +    [Cscrollupline]   = {cmdscrollupline,   false, false},
       +    [Ccharleft]       = {cmdcharleft,       false, false},
       +    [Ccharright]      = {cmdcharright,      false, false},
       +    [Clineup]         = {cmdlineup,         false, false},
       +    [Clinedown]       = {cmdlinedown,       false, false},
       +    [Cjump]           = {cmdjump,           false, false},
       +    [Cescape]         = {cmdescape,         false, false},
       +    [Csnarf]          = {cmdsnarf,          false, false},
       +    [Ccut]            = {cmdcut,            false, false},
       +    [Cpaste]          = {cmdpaste,          false, false},
       +    [Cexchange]       = {cmdexchange,       false, false},
       +    [Cdelword]        = {cmddelword,        true,  false},
       +    [Cdelbol]         = {cmddelbol,         true,  false},
       +    [Cdel]            = {cmddel,            true,  true},
       +    [Cwrite]          = {cmdwrite,          true,  false},
       +    [Ceol]            = {cmdeol,            false, false},
       +    [Cbol]            = {cmdbol,            false, false}
        };
        
        void
       @@ -858,7 +859,7 @@ type(Flayer *l, int res)    /* what a bloody mess this is -- but it's getting be
        
            k = qpeekc();
            a = l->p0;
       -    if (a != l->p1 && k.k != Kcommand){
       +    if (a != l->p1 && (k.k != Kcommand || commands[k.c].docut)){
                flushtyping(1);
                cut(t, t->front, 1, 1);
                return; /* it may now be locked */