diff --git a/lib/chibi/stty.scm b/lib/chibi/stty.scm index 544ace1d..24d0a5d4 100644 --- a/lib/chibi/stty.scm +++ b/lib/chibi/stty.scm @@ -233,15 +233,15 @@ (let* ((port (if (pair? o) (car o) (current-input-port))) (orig-attrs (get-terminal-attributes port))) (dynamic-wind - (lambda () (stty setting)) - thunk - (lambda () (set-terminal-attributes! port TCSANOW orig-attrs))))) + (lambda () (stty setting)) + thunk + (lambda () (set-terminal-attributes! port TCSANOW orig-attrs))))) ;;> Run @var{thunk} with the "raw" (no canonical or echo) options ;;> needed for a terminal application. (define (with-raw-io port thunk) - (with-stty '(not icanon echo) thunk port)) + (with-stty '(not icanon isig echo) thunk port)) ;;> Returns the current terminal width in characters of @var{x}, ;;> which must be a port or a file descriptor. diff --git a/lib/chibi/term/edit-line.scm b/lib/chibi/term/edit-line.scm index 2840f507..c3f781f3 100644 --- a/lib/chibi/term/edit-line.scm +++ b/lib/chibi/term/edit-line.scm @@ -336,6 +336,7 @@ (v (car keymap))) (vector-set! v 1 command/beggining-of-line) (vector-set! v 2 command/backward-char) + (vector-set! v 3 command/cancel) (vector-set! v 4 command/forward-delete-char) (vector-set! v 5 command/end-of-line) (vector-set! v 6 command/forward-char) @@ -377,6 +378,13 @@ (else (command/self-insert ch buf out return))))) +(define (command/cancel ch buf out return) + (command/end-of-line ch buf out return) + (display "^C" out) + (newline out) + (buffer-delete! buf out 0 (buffer-length buf)) + (buffer-draw buf out)) + (define (command/beep ch buf out return) (write-char (integer->char 7) out))