commit 099063cb08f3a7fcc52134ec132c93b5096571a4
parent 2eb4931742974b81bd37aaadc350fec147c9f34c
Author: ukai <ukai>
Date:   Fri, 23 Nov 2001 20:50:59 +0000
add emacs_like_lineedit
Diffstat:
| M | ChangeLog | | | 7 | +++++++ | 
| M | fm.h | | | 3 | +++ | 
| M | linein.c | | | 68 | ++++++++++++++++++++++++++++++++++++++++---------------------------- | 
| M | rc.c | | | 9 | +++++++++ | 
4 files changed, 59 insertions(+), 28 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,5 +1,12 @@
 2001-11-24  Fumitoshi UKAI  <ukai@debian.or.jp
 
+	* fm.h (emacs_like_lineedit): runtime option emacs_like_lineedit
+	* linein.c (inputLineHist): ditto
+	* linein.c (_esc): ditto
+	* linein.c (next_dcompl): ditto
+	* rc.c (CMT_EMACS_LIKE_LINEEDIT): ditto
+	* rc.c (params3): ditto
+
 	* fm.h (ftppass_hostnamegen): runtime option ftppass_hostnamegen
 	* ftp.c (FtpLogin): ditto
 	* rc.c (CMT_FTPPASS_HOSTNAMEGEN): ditto
diff --git a/fm.h b/fm.h
@@ -703,6 +703,9 @@ global int useVisitedColor init(FALSE);
 global int visited_color init(5);	/* magenta  */
 #endif				/* USE_COLOR */
 global int confirm_on_quit init(TRUE);
+#ifdef EMACS_LIKE_LINEEDIT
+global int emacs_like_lineedit init(FALSE);
+#endif
 global int displayLink init(FALSE);
 global int retryAsHttp init(TRUE);
 global int showLineNum init(FALSE);
diff --git a/linein.c b/linein.c
@@ -37,10 +37,7 @@ static void insertself(char c),
   _mvB(void), _mvE(void), _enter(void), _quo(void), _bs(void), _bsw(void),
   killn(void), killb(void), _inbrk(void), _esc(void),
   _prev(void), _next(void), _compl(void), _tcompl(void),
-  _dcompl(void), _rdcompl(void);
-#ifndef EMACS_LIKE_LINEEDIT
-static void _rcompl(void);
-#endif
+  _dcompl(void), _rdcompl(void),  _rcompl(void);
 #ifdef __EMX__
 static int getcntrl(void);
 #endif
@@ -191,22 +188,27 @@ inputLineHist(char *prompt, char *def_str, int flag, Hist * hist)
 	    (((cm_mode & CPL_ALWAYS) && (c == CTRL_I || c == ' ')) ||
 	     ((cm_mode & CPL_ON) && (c == CTRL_I)))) {
 #ifdef EMACS_LIKE_LINEEDIT
-	    if (cm_next) {
-		_dcompl();
-		need_redraw = TRUE;
-	    }
-	    else {
-		_compl();
-		cm_disp_next = -1;
-	    }
-#else
-	    _compl();
-	    cm_disp_next = -1;
+		if (emacs_like_lineedit && cm_next) {
+		    _dcompl();
+		    need_redraw = TRUE;
+		}
+	        else {
+#endif
+		    _compl();
+		    cm_disp_next = -1;
+#ifdef EMACS_LIKE_LINEEDIT
+		}	
+#endif
 	}
 	else if (!i_quote && CLen == CPos &&
 		 (cm_mode & CPL_ALWAYS || cm_mode & CPL_ON) && c == CTRL_D) {
-	    _dcompl();
-	    need_redraw = TRUE;
+#ifdef EMACS_LIKE_LINEEDIT
+		if (! emacs_like_lineedit) {
+#endif
+		    _dcompl();
+		    need_redraw = TRUE;
+#ifdef EMACS_LIKE_LINEEDIT
+		}
 #endif
 	}
 	else if (!i_quote && c == DEL_CODE) {
@@ -421,25 +423,35 @@ _esc(void)
     case CTRL_I:
     case ' ':
 #ifdef EMACS_LIKE_LINEEDIT
-	_rdcompl();
-	cm_clear = FALSE;
+	if (emacs_like_lineedit) {
+	    _rdcompl();
+	    cm_clear = FALSE;
+	    need_redraw = TRUE;
+	} else
 #else
-	_rcompl();
+	    _rcompl();
+#endif
 	break;
     case CTRL_D:
-	_rdcompl();
+#ifdef EMACS_LIKE_LINEEDIT
+	if (!emacs_like_lineedit)
+#else
+	    _rdcompl();
 #endif
 	need_redraw = TRUE;
 	break;
 #ifdef EMACS_LIKE_LINEEDIT
     case 'f':
-	_mvRw();
+	if (emacs_like_lineedit)
+	    _mvRw();
 	break;
     case 'b':
-	_mvLw();
+	if (emacs_like_lineedit)
+	    _mvLw();
 	break;
     case CTRL_H:
-	_bsw();
+	if (emacs_like_lineedit)
+	    _bsw();
 	break;
 #endif
 #ifdef JP_CHARSET
@@ -628,13 +640,11 @@ _compl(void)
     next_compl(1);
 }
 
-#ifndef EMACS_LIKE_LINEEDIT
 static void
 _rcompl(void)
 {
     next_compl(-1);
 }
-#endif
 
 static void
 _tcompl(void)
@@ -815,9 +825,11 @@ disp_next:
 	clrtoeolx();
 	bold();
 #ifdef EMACS_LIKE_LINEEDIT
-	addstr("----- Press TAB to continue -----");
+	if (emacs_like_lineedit)
+	    addstr("----- Press TAB to continue -----");
+	else
 #else
-	addstr("----- Press CTRL-D to continue -----");
+	    addstr("----- Press CTRL-D to continue -----");
 #endif
 	boldend();
     }
diff --git a/rc.c b/rc.c
@@ -89,6 +89,9 @@ static int rc_initialized = 0;
 #define CMT_PDROOT       "/~user で表されるディレクトリ"
 #define CMT_CGIBIN       "/cgi-bin で表されるディレクトリ"
 #define CMT_CONFIRM_QQ   "q での終了時に確認する"
+#ifdef EMACS_LIKE_LINEEDIT
+#define CMT_EMACS_LIKE_LINEEDIT	"Emacs風の行編集にする"
+#endif
 #define CMT_SHOW_NUM     "行番号を表示する"
 #define CMT_MIMETYPES    "利用するmime.types"
 #define CMT_MAILCAP      "利用するmailcap"
@@ -187,6 +190,9 @@ static int rc_initialized = 0;
 #define CMT_PDROOT       "Directory corresponds to /~user"
 #define CMT_CGIBIN       "Directory corresponds to /cgi-bin"
 #define CMT_CONFIRM_QQ   "Confirm when quitting with q"
+#ifdef EMACS_LIKE_LINEEDIT
+#define CMT_EMACS_LIKE_LINEEDIT	"Emacs-style line editing"
+#endif
 #define CMT_SHOW_NUM     "Show line number"
 #define CMT_MIMETYPES    "mime.types files"
 #define CMT_MAILCAP      "mailcap files"
@@ -387,6 +393,9 @@ struct param_ptr params3[] =
     {"save_hist", P_INT, PI_ONOFF, (void *) &SaveURLHist, CMT_SAVEHIST, NULL},
 #endif				/* USE_HISTORY */
     {"confirm_qq", P_INT, PI_ONOFF, (void *) &confirm_on_quit, CMT_CONFIRM_QQ, NULL},
+#ifdef EMACS_LIKE_LINEEDIT
+    {"emacs_like_lineedit", P_INT, PI_ONOFF, (void *) &emacs_like_lineedit, CMT_EMACS_LIKE_LINEEDIT, NULL },
+#endif
     {"wrap_search", P_INT, PI_ONOFF, (void *) &WrapDefault, CMT_WRAP, NULL},
     {"ignorecase_search", P_INT, PI_ONOFF, (void *) &IgnoreCase, CMT_IGNORE_CASE, NULL},
 #ifdef USE_MOUSE