diff options
author | David E. O'Brien <obrien@FreeBSD.org> | 2001-04-26 19:00:32 +0000 |
---|---|---|
committer | David E. O'Brien <obrien@FreeBSD.org> | 2001-04-26 19:00:32 +0000 |
commit | 8cad2d661d7f59c59047f8cd4e336516b2e903fa (patch) | |
tree | 082bd3a1ece9d9733ed4bd7134f4f9061776d676 /devel/cscope | |
parent | Add myself to make the ICBM delivery easiser. (diff) |
Add ^A/^E, ^B/^F editing keys for the input area.
Submitted by: Nick Dixon (nickdixon)
Obtained from: Cscope's Sourceforge area, patch #403750
Notes
Notes:
svn path=/head/; revision=41935
Diffstat (limited to 'devel/cscope')
-rw-r--r-- | devel/cscope/Makefile | 2 | ||||
-rw-r--r-- | devel/cscope/files/patch-input.c | 133 |
2 files changed, 134 insertions, 1 deletions
diff --git a/devel/cscope/Makefile b/devel/cscope/Makefile index 6e7e98b34a6d..c7fcf79f9396 100644 --- a/devel/cscope/Makefile +++ b/devel/cscope/Makefile @@ -8,7 +8,7 @@ PORTNAME= cscope PORTVERSION= 15.1 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= devel MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ${PORTNAME} diff --git a/devel/cscope/files/patch-input.c b/devel/cscope/files/patch-input.c new file mode 100644 index 000000000000..e007e218208e --- /dev/null +++ b/devel/cscope/files/patch-input.c @@ -0,0 +1,133 @@ +*** src/input.c.old Mon Feb 12 14:32:17 2001 +--- src/input.c Mon Feb 12 14:51:49 2001 +*************** +*** 103,107 **** +--- 103,120 ---- + int c, i = 0; + int j; ++ char *sright; /* substring to the right of the cursor */ ++ int ri = 0; /* position in right-string */ + ++ /* Inserts and deletes are always performed on the left-string, ++ * but we'll also have a right-string 'sright' to hold characters ++ * which are on the right of the cursor [insertion point]. ++ * ++ * Think of 'sright' as a stack -- we push chars into it when the cursor ++ * moves left, and we pop chars off it when the cursor moves right again. ++ * At the end of the function, we'll pop off any remaining characters ++ * onto the end of 's' ++ */ ++ sright = calloc(sizeof(char), size); ++ + /* if a character already has been typed */ + if (firstchar != '\0') { +*************** +*** 114,121 **** + /* until the end of the line is reached */ + while ((c = mygetch()) != '\r' && c != '\n' && c != KEY_ENTER) { +! if (c == erasechar() || c == KEY_BACKSPACE || c == DEL || c == ctrl('H') ) { + /* erase */ + if (i > 0) { +! addstr("\b \b"); + --i; + } +--- 127,177 ---- + /* until the end of the line is reached */ + while ((c = mygetch()) != '\r' && c != '\n' && c != KEY_ENTER) { +! +! if (c == KEY_LEFT || c == ctrl('B')) { /* left */ +! if (i > 0) { +! addch('\b'); +! /* move this char into the second (rhs) string */ +! sright[ri++] = s[--i]; +! } +! } +! else if (c == KEY_RIGHT || c == ctrl('F')) { /* right */ +! if (i < size && ri > 0) { +! /* move this char to the left of the cursor */ +! s[i++] = sright[--ri]; +! addch(s[i-1]); +! } +! } +! else if ( +! #ifdef KEY_HOME +! c == KEY_HOME || +! #endif +! c == ctrl('A') ) { +! while ( i > 0 ) { +! sright[ri++] = s[--i]; +! addch('\b'); +! addch(s[i]); +! addch('\b'); +! } +! } +! else if ( +! #ifdef KEY_END +! c == KEY_END || +! #endif +! c == ctrl('E') ) { +! while ( ri > 0 ) { +! s[i++] = sright[--ri]; +! addch(s[i-1]); +! } +! } +! else if (c == erasechar() || c == KEY_BACKSPACE || c == DEL || c == ctrl('H') ) { + /* erase */ + if (i > 0) { +! if (ri == 0) { +! addstr("\b \b"); +! } else { +! addch('\b'); +! delch(); +! } +! s[i] = '\0'; + --i; + } +*************** +*** 139,144 **** + /* if it will fit on the line */ + if (i < size) { +- addch(c); /* display it */ + s[i++] = c; /* save it */ + } + } +--- 195,205 ---- + /* if it will fit on the line */ + if (i < size) { + s[i++] = c; /* save it */ ++ if (ri == 0) { ++ addch(c); /* display it */ ++ } else { ++ insch(c); /* display it */ ++ addch(c); /* advance cursor */ ++ } + } + } +*************** +*** 155,162 **** + } + /* return on an empty line to allow a command to be entered */ +! if (firstchar != '\0' && i == 0) { + break; + } + } + s[i] = '\0'; + return(i); +--- 216,232 ---- + } + /* return on an empty line to allow a command to be entered */ +! if (firstchar != '\0' && (i+ri) == 0) { + break; + } + } ++ ++ /* move any remaining chars on the rhs of the cursor ++ * onto the end of our string ++ */ ++ for (; ri > 0; ) { ++ s[i++] = sright[--ri]; ++ } ++ free(sright); ++ + s[i] = '\0'; + return(i); |