Nrepl is really great, but I've found myself missing wordwise navigation and deletion. So, the attached patch to nrepl.scm implements C-w, M-d, C-u, M-b, M-f a la readline (except with more relaxed word separators as befits lisp). It also changes meta-key recognition to recognise 'alt' as a meta key.

Cheers,

 -E
975,976c975,979
<                     (selection #f)
<                     (control-key (ash 1 33)))    ; notcurses getc returns 32 
bits
---
>                     (selection "")
>                       (previously-selected #f)
>                       (just-selected #f)
>                     (control-key (ash 1 33))
>                       (meta-key (ash 1 34)))    ; notcurses getc returns 32 
> bits
1157,1217c1160,1276
<                 (set! (keymap (char->integer #\escape))
<                       (lambda (c)
<                         ;; these are the Meta key handlers
<                         (let ((k (notcurses_getc nc (c-pointer 0) (c-pointer 
0) ni)))
< 
<                           (case (integer->char k)
<                             ((#\C #\c)
<                              (do ((len (- (eols row) col))
<                                   (cur-line (ncplane_contents ncp row col 1 
(- (eols row) col)))
<                                   (i 0 (+ i 1)))
<                                  ((or (= i len)
<                                       (char-alphabetic? (cur-line i)))
<                                   (when (< i len)
<                                     (set! (cur-line i) (char-upcase (cur-line 
i)))
<                                     (nc-display row col cur-line)
<                                     (notcurses_refresh nc)
<                                     (do ((k (+ i 1) (+ k 1)))
<                                         ((or (>= k len)
<                                              (not (or (char-alphabetic? 
(cur-line k))
<                                                       (char-numeric? 
(cur-line k)))))
<                                          (set! col (min (eols row) (+ col 
k)))))))))
< 
<                             ((#\L #\l)
<                              (do ((len (- (eols row) col))
<                                   (cur-line (ncplane_contents ncp row col 1 
(- (eols row) col)))
<                                   (i 0 (+ i 1)))
<                                  ((or (= i len)
<                                       (char-alphabetic? (cur-line i)))
<                                   (when (< i len)
<                                     (do ((k i (+ k 1)))
<                                         ((or (= k len)
<                                              (not (char-alphabetic? (cur-line 
k))))
<                                          (nc-display row col cur-line)
<                                          (notcurses_refresh nc)
<                                          (set! col (+ col k)))
<                                       (set! (cur-line k) (char-downcase 
(cur-line k))))))))
< 
<                             ((#\U #\u)
<                              (do ((len (- (eols row) col))
<                                   (cur-line (ncplane_contents ncp row col 1 
(- (eols row) col)))
<                                   (i 0 (+ i 1)))
<                                  ((or (= i len)
<                                       (char-alphabetic? (cur-line i)))
<                                   (when (< i len)
<                                     (do ((k i (+ k 1)))
<                                         ((or (= k len)
<                                              (not (char-alphabetic? (cur-line 
k))))
<                                          (nc-display row col cur-line)
<                                          (notcurses_refresh nc)
<                                          (set! col (+ col k)))
<                                       (set! (cur-line k) (char-upcase 
(cur-line k))))))))
< 
<                             ((#\<)
<                              (set-row 0)
<                              (set-col (bols 0)))
< 
<                             ((#\>)
<                              (set-row ncp-max-row)
<                              (set-col (bols ncp-max-row)))
< 
<                             )))) ; end Meta keys
---
>                   (define (prepend-to-selection new-text)
>                     (unless (zero? (length new-text))
>                       (set! selection (if previously-selected (append 
> new-text selection)
>                                         new-text))
>                       (set! just-selected #t)))
>                   (define (append-to-selection new-text)
>                     (unless (zero? (length new-text))
>                       (set! selection (if previously-selected (append 
> selection new-text)
>                                         new-text))
>                       (set! just-selected #t)))
>                   (define (char-alphanumeric? c)
>                     (or (char-alphabetic? c)
>                         (char-numeric? c)))
>                   (define (word-back-x)
>                     (let loop ((col (max (bols row) (- col 1))))
>                       (if (= col (bols row))
>                         col
>                         (if (string=? " " (ncplane_contents ncp row col 1 1))
>                           (loop (- col 1))
>                           (let loop ((col col))
>                             (if (= col (bols row))
>                               col
>                               (if (string=? " " (ncplane_contents ncp row (- 
> col 1) 1 1))
>                                 col
>                                 (loop (- col 1)))))))))
>                   (define (word-forward-x)
>                     (let loop ((col (min (eols row) (+ col 1))))
>                       (if (= col (eols row))
>                         col
>                         (if (string=? " " (ncplane_contents ncp row col 1 1))
>                           (loop (+ col 1))
>                           (let loop ((col col))
>                             (if (= col (eols row))
>                               col
>                               (if (string=? " " (ncplane_contents ncp row col 
> 1 1))
>                                 col
>                                 (loop (+ col 1)))))))))
> 
>                   (set! (keymap (+ meta-key (char->integer #\B)))
>                     (set! (keymap (+ meta-key (char->integer #\b)))
>                       (lambda (c)
>                         (set! col (word-back-x)))))
> 
>                   (set! (keymap (+ meta-key (char->integer #\C)))
>                     (set! (keymap (+ meta-key (char->integer #\c)))
>                       (lambda (c)
>                         (do ((len (- (eols row) col))
>                              (cur-line (ncplane_contents ncp row col 1 (- 
> (eols row) col)))
>                              (i 0 (+ i 1)))
>                           ((or (= i len)
>                                (char-alphabetic? (cur-line i)))
>                            (when (< i len)
>                              (set! (cur-line i) (char-upcase (cur-line i)))
>                              (nc-display row col cur-line)
>                              (notcurses_refresh nc)
>                              (do ((k (+ i 1) (+ k 1)))
>                                ((or (>= k len)
>                                     (not (char-alphanumeric? (cur-line k))))
>                                 (set! col (min (eols row) (+ col k)))))))))))
> 
>                   (set! (keymap (+ meta-key (char->integer #\D)))
>                     (set! (keymap (+ meta-key (char->integer #\d)))
>                       (lambda (c)
>                         (let ((newcol (word-forward-x)))
>                           (append-to-selection (ncplane_contents ncp row col 
> 1 (- newcol col)))
>                           (nc-display row col (ncplane_contents ncp row 
> newcol 1 (- (eols row) newcol)))
>                           (nc-display row (- (eols row) (- newcol col)) 
> (make-string (- newcol col) #\space))
>                           (set! (eols row) (- (eols row) (- newcol col)))))))
> 
>                   (set! (keymap (+ meta-key (char->integer #\F)))
>                     (set! (keymap (+ meta-key (char->integer #\f)))
>                       (lambda (c)
>                         (set! col (word-forward-x)))))
> 
>                   (set! (keymap (+ meta-key (char->integer #\L)))
>                     (set! (keymap (+ meta-key (char->integer #\l)))
>                       (lambda (c)
>                         (do ((len (- (eols row) col))
>                              (cur-line (ncplane_contents ncp row col 1 (- 
> (eols row) col)))
>                              (i 0 (+ i 1)))
>                           ((or (= i len)
>                                (char-alphabetic? (cur-line i)))
>                            (when (< i len)
>                              (do ((k i (+ k 1)))
>                                ((or (= k len)
>                                     (not (char-alphabetic? (cur-line k))))
>                                 (nc-display row col cur-line)
>                                 (notcurses_refresh nc)
>                                 (set! col (+ col k)))
>                                (set! (cur-line k) (char-downcase (cur-line 
> k))))))))))
> 
>                   (set! (keymap (+ meta-key (char->integer #\U)))
>                     (set! (keymap (+ meta-key (char->integer #\u)))
>                       (lambda (c)
>                         (do ((len (- (eols row) col))
>                              (cur-line (ncplane_contents ncp row col 1 (- 
> (eols row) col)))
>                              (i 0 (+ i 1)))
>                           ((or (= i len)
>                                (char-alphabetic? (cur-line i)))
>                            (when (< i len)
>                              (do ((k i (+ k 1)))
>                                ((or (= k len)
>                                     (not (char-alphabetic? (cur-line k))))
>                                 (nc-display row col cur-line)
>                                 (notcurses_refresh nc)
>                                 (set! col (+ col k)))
>                                (set! (cur-line k) (char-upcase (cur-line 
> k))))))))))
> 
>                   (set! (keymap (+ meta-key (char->integer #\<)))
>                     (lambda (c)
>                       (set-row 0)
>                       (set-col (bols 0))))
> 
>                   (set! (keymap (+ meta-key (char->integer #\>)))
>                     (lambda (c)
>                       (set-row ncp-max-row)
>                       (set-col (bols ncp-max-row))))
1268,1272c1327,1331
<                 (set! (keymap (+ control-key (char->integer #\K)))
<                       (lambda (c)
<                         (set! selection (ncplane_contents ncp row col 1 (- 
(eols row) col)))
<                         (nc-display row col (make-string (- (eols row) col) 
#\space))
<                         (set! (eols row) col)))
---
>                   (set! (keymap (+ control-key (char->integer #\K)))
>                     (lambda (c)
>                       (append-to-selection (ncplane_contents ncp row col 1 (- 
> (eols row) col)))
>                       (nc-display row col (make-string (- (eols row) col) 
> #\space))
>                       (set! (eols row) col)))
1340a1400,1416
>                   (set! (keymap (+ control-key (char->integer #\U)))
>                     (lambda (c)
>                       (prepend-to-selection (ncplane_contents ncp row (bols 
> row) 1 (- col (bols row))))
>                       (nc-display row (bols row) (ncplane_contents ncp row 
> col 1 (- (eols row) col)))
>                       (nc-display row (- (eols row) (- col (bols row))) 
> (make-string (- col (bols row)) #\space))
>                       (set! (eols row) (- (eols row) (- col (bols row))))
>                       (set! col (bols row))))
> 
>                   (set! (keymap (+ control-key (char->integer #\W)))
>                     (lambda (c)
>                       (let ((newcol (word-back-x)))
>                         (prepend-to-selection (ncplane_contents ncp row 
> newcol 1 (- col newcol)))
>                         (nc-display row newcol (ncplane_contents ncp row col 
> 1 (- (eols row) col)))
>                         (nc-display row (- (eols row) (- col newcol)) 
> (make-string (- col newcol) #\space))
>                         (set! (eols row) (- (eols row) (- col newcol)))
>                         (set! col newcol))))
> 
1353c1429
<                           (set-col (eols row)))))
---
>                           (set-col (+ col (length selection))))))
1474a1551,1553
>                           (set! previously-selected just-selected)
>                           (set! just-selected #f)
> 
1476c1555,1559
<                                (func (hash-table-ref keymap (if (ncinput_ctrl 
ni) (+ c control-key) c))))
---
>                                  (c (if (= c (char->integer #\escape))
>                                       (logior meta-key (notcurses_getc nc 
> (c-pointer 0) (c-pointer 0) ni))
>                                       c))
>                                (func (hash-table-ref keymap (logior c (if 
> (ncinput_ctrl ni) control-key 0)
>                                                                         (if 
> (ncinput_alt ni) meta-key 0)))))
_______________________________________________
Cmdist mailing list
[email protected]
https://cm-mail.stanford.edu/mailman/listinfo/cmdist

Reply via email to