Changeset 8357 in project


Ignore:
Timestamp:
02/11/08 09:21:07 (12 years ago)
Author:
felix winkelmann
Message:

uses ##sys#user-interrupt-hook, used elf's version again

Location:
readline
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • readline/readline.meta

    r8355 r8357  
    11;;; readline.meta -*- Hen -*-
    22
    3 ((date "2006-07-24")
     3((date "2008-02-06")
    44 (egg "readline.egg")
    55 (synopsis "An interface to the GNU readline library")
  • readline/readline.scm

    r8355 r8357  
    313313        rl_bind_key(']', gnu_readline_paren_bounce);
    314314        rl_completion_entry_function = &gnu_readline_tab_complete;
     315        rl_variable_bind("rl_catch_signals", 0);
     316        rl_clear_signals();
     317        rl_set_signals();
    315318        //rl_add_defun ("lisp-word-rubout" , gnu_readline_lisp_word_rubout, -1);
    316319}
     
    347350
    348351        return(gnu_readline_buf);
     352}
     353
     354void gnu_readline_signal_cleanup()
     355{
     356    gnu_readline_clear_balances();
     357    free(gnu_readline_buf);
     358    gnu_readline_buf = NULL;
     359    rl_free_line_state();
     360    rl_cleanup_after_signal();
    349361}
    350362
     
    416428;; Creates a port that reads using readline
    417429(define (make-gnu-readline-port #!optional prompt prompt2)
    418   (let ((buffer "")
    419                 (pos 0))
    420         (letrec ((char-ready? (lambda ()
    421                                                         (< pos (string-length buffer))))
    422                          (get-next-char!
    423                            (lambda ()
    424                                  (cond
    425                                    ((not buffer) #!eof)
    426                                    ((char-ready?)
    427                                         (let ((ch (string-ref buffer pos)))
    428                                           (set! pos (+ pos 1))
    429                                           ch))
    430                                    (else
    431                                          (set! pos 0)
    432                                          (set! buffer
    433                                            (let* ((prompt (or prompt ((repl-prompt))))
    434                                                           (prompt2 (make-prompt2 prompt)))
    435                                                  (gnu-readline prompt prompt2)) )
    436                                          (if (string? buffer)
    437                                            (set! buffer (string-append buffer "\n")))
    438                                          (get-next-char!))))))
    439           (let ((p (make-input-port get-next-char! char-ready?
    440                                                                 (lambda () 'closed-gnu-readline-port))))
    441                 (set-port-name! p "(gnu-readline)")
    442                 p))))
     430    (let ((buffer   "")
     431          (pos      -)
     432          (p1       prompt)
     433          (p2       prompt2)
     434          (handle   #f))
     435        (letrec ((char-ready?
     436                    (lambda ()
     437                        (< pos (string-length buffer))))
     438                 (get-next-char!
     439                    (lambda ()
     440                        (cond ((not buffer)
     441                                  #!eof)
     442                              ((char-ready?)
     443                                  (let ((ch   (string-ref buffer pos)))
     444                                      (set! pos (+ 1 pos))
     445                                      ch))
     446                              (else
     447                                  (set! pos 0)
     448                                  (set! buffer
     449                                        (let* ((prompt    (or prompt
     450                                                              ((repl-prompt))))
     451                                               (prompt2   (make-prompt2
     452                                                              prompt)))
     453                                            (gnu-readline prompt prompt2)))
     454                                  (if (string? buffer)
     455                                      (set! buffer (string-append buffer "\n")))
     456                                  (get-next-char!))))))
     457            (set! handle (lambda (s)
     458                             (set! pos 0)
     459                             (set! buffer "")
     460                             ((foreign-lambda void
     461                                  "gnu_readline_signal_cleanup"))
     462                             (##sys#user-interrupt-hook)))
     463            (set-signal-handler! signal/int handle)
     464            (let ((p   (make-input-port
     465                           get-next-char!
     466                           char-ready?
     467                           (lambda ()
     468                               (set-signal-handler! signal/int #f)
     469                               'closed-gnu-readline-port))))
     470                (set-port-name! p "(gnu-readline)")
     471                p))))
    443472
    444473
  • readline/readline.setup

    r8355 r8357  
    5050  'readline
    5151 '("readline.so" "readline.html" "readline-static.o")
    52  `((version 1.91)
     52 `((version 1.92)
    5353   (static "readline-static.o")
    5454   (static-options ,(conc "-lreadline " librl))
Note: See TracChangeset for help on using the changeset viewer.