summaryrefslogtreecommitdiff
path: root/devel/cscope
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>2001-04-26 19:00:32 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>2001-04-26 19:00:32 +0000
commit8cad2d661d7f59c59047f8cd4e336516b2e903fa (patch)
tree082bd3a1ece9d9733ed4bd7134f4f9061776d676 /devel/cscope
parentAdd 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/Makefile2
-rw-r--r--devel/cscope/files/patch-input.c133
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);