Author: yamakenz
Date: Fri Aug 17 17:28:56 2007
New Revision: 4858
Modified:
trunk/scm/uim-sh.scm
trunk/uim/editline.c
Log:
* uim/editline.c
- (UIM_SH_FALLBACK_PROMPT): Removed
- (prompt):
* Plug leak
* Get string via editline-prompt
* scm/uim-sh.scm
- (uim-sh): Configure uim-sh prompt for editline
- (*editline-prompt-beginning*, *editline-prompt-succeeding*,
%*editline-reading*): New variable
- (editline-prompt): New procedure
- (editline-read): Add multi-line expr prompt handlings
Modified: trunk/scm/uim-sh.scm
==============================================================================
--- trunk/scm/uim-sh.scm (original)
+++ trunk/scm/uim-sh.scm Fri Aug 17 17:28:56 2007
@@ -140,7 +140,9 @@
(cdr args))) ;; drop the command name
(script (safe-car file.args))
(my-read (if (provided? "editline")
- editline-read
+ (begin
+ (set! *editline-prompt-beginning* uim-sh-prompt)
+ editline-read)
read))
(EX_OK 0)
(EX_SOFTWARE 70))
@@ -179,8 +181,17 @@
(reloop)))
EX_OK)))))
+(define *editline-prompt-beginning* "> ")
+(define *editline-prompt-succeeding* "")
+(define %*editline-reading* #f)
(define %EDITLINE-PARTIAL-EXPR (list 'partial-expr))
+(define editline-prompt
+ (lambda ()
+ (if %*editline-reading*
+ *editline-prompt-succeeding*
+ *editline-prompt-beginning*)))
+
;; SigScheme dependent
(define %editline-partial-read
(lambda args
@@ -204,9 +215,11 @@
(string-append buf line)
line))
(set! p (open-input-string buf))
+ (set! %*editline-reading* #t)
(editline-read))))
(begin
(set! buf "")
+ (set! %*editline-reading* #f)
expr))))))
;; Verbose level must be greater than or equal to 1 to print anything.
Modified: trunk/uim/editline.c
==============================================================================
--- trunk/uim/editline.c (original)
+++ trunk/uim/editline.c Fri Aug 17 17:28:56 2007
@@ -38,8 +38,6 @@
#include "plugin.h"
-#define UIM_SH_FALLBACK_PROMPT "uim-sh> "
-
static EditLine *el;
static History *hist;
static HistEvent hev;
@@ -89,9 +87,10 @@
static char *
prompt(EditLine *e)
{
- char *p;
+ uim_lisp p;
- p = uim_scm_symbol_value_str("uim-sh-prompt");
+ p = uim_scm_callf("editline-prompt", "");
- return (p) ? p : UIM_SH_FALLBACK_PROMPT;
+ /* libedit does not free the prompt str */
+ return (char *)uim_scm_refer_c_str(p);
}