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);
 }

Reply via email to