new features for selection-lists: list length is now adjustable, may
be placed at arbitrary position in the result buffer
This commit is contained in:
parent
0447ccfa3e
commit
83909af4ac
|
@ -148,7 +148,8 @@
|
|||
(let ((fs-objects (init-with-result-message-result message)))
|
||||
(init-with-list-of-files
|
||||
(map fs-object-name fs-objects) (cwd)
|
||||
(init-with-result-message-width message))))
|
||||
(result-buffer-num-cols
|
||||
(init-with-result-message-buffer message)))))
|
||||
|
||||
((next-command-message? message)
|
||||
(init-with-list-of-files (directory-files) (cwd)))
|
||||
|
|
|
@ -518,13 +518,13 @@
|
|||
(values
|
||||
(post-message plugin
|
||||
(make-init-with-result-message
|
||||
result (buffer-num-cols command-buffer)))
|
||||
result result-buffer))
|
||||
plugin)))
|
||||
(else
|
||||
(values
|
||||
(post-message standard-view-plugin
|
||||
(make-init-with-result-message
|
||||
result (buffer-num-cols command-buffer)))
|
||||
result result-buffer))
|
||||
standard-view-plugin))))
|
||||
|
||||
;;Extracts the name of the function and its parameters
|
||||
|
@ -742,7 +742,8 @@
|
|||
1 1
|
||||
(layout-result-standard
|
||||
(exp->string (init-with-result-message-result message))
|
||||
(init-with-result-message-width message))
|
||||
(result-buffer-num-cols
|
||||
(init-with-result-message-buffer message)))
|
||||
(init-with-result-message-result message)))
|
||||
((next-command-message? message)
|
||||
(let* ((result (eval-expression (message-command-string message)))
|
||||
|
|
|
@ -70,6 +70,7 @@
|
|||
|
||||
pps
|
||||
plugin
|
||||
layout
|
||||
select-list
|
||||
tty-debug)
|
||||
(files process))
|
||||
|
@ -114,19 +115,19 @@
|
|||
(define-interface select-list-interface
|
||||
(export make-select-list
|
||||
select-list?
|
||||
select-list-cursor-index
|
||||
select-list-cursor-y
|
||||
select-list-handle-key-press
|
||||
unmark-current-line
|
||||
mark-current-line
|
||||
move-cursor-up
|
||||
move-cursor-down
|
||||
paint-selection-list))
|
||||
paint-selection-list
|
||||
paint-selection-list-at))
|
||||
|
||||
(define-structure select-list select-list-interface
|
||||
(open scheme
|
||||
srfi-1
|
||||
define-record-types
|
||||
let-opt
|
||||
|
||||
tty-debug
|
||||
plugin
|
||||
|
@ -188,7 +189,7 @@
|
|||
|
||||
init-with-result-message?
|
||||
init-with-result-message-result
|
||||
init-with-result-message-width
|
||||
init-with-result-message-buffer
|
||||
|
||||
key-pressed-message?
|
||||
key-pressed-message-result-buffer
|
||||
|
|
|
@ -41,10 +41,10 @@
|
|||
(width next-command-message-width))
|
||||
|
||||
(define-record-type init-with-result-message :init-with-result-message
|
||||
(make-init-with-result-message result width)
|
||||
(make-init-with-result-message result buffer)
|
||||
init-with-result-message?
|
||||
(result init-with-result-message-result)
|
||||
(width init-with-result-message-width))
|
||||
(buffer init-with-result-message-buffer))
|
||||
|
||||
;;key pressed
|
||||
;;The object and the key are send to the user-code, who returns the
|
||||
|
|
|
@ -32,20 +32,24 @@
|
|||
process-info-command-line))))
|
||||
width))
|
||||
|
||||
(define (make-process-selection-list width processes)
|
||||
(let ((layout (lambda (p) (layout-process width p))))
|
||||
(define (make-process-selection-list num-cols num-lines processes)
|
||||
(let ((layout (lambda (p) (layout-process num-cols p))))
|
||||
(make-select-list
|
||||
(zip processes (map layout processes)))))
|
||||
(zip processes (map layout processes))
|
||||
num-lines)))
|
||||
|
||||
(define (pps-receiver message)
|
||||
(debug-message "pps-receiver " message)
|
||||
(cond
|
||||
|
||||
((init-with-result-message? message)
|
||||
(let ((processes (init-with-result-message-result message))
|
||||
(width (init-with-result-message-width message)))
|
||||
(let* ((processes (init-with-result-message-result message))
|
||||
(buffer (init-with-result-message-buffer message))
|
||||
(num-cols (result-buffer-num-cols buffer))
|
||||
(num-lines (result-buffer-num-lines buffer)))
|
||||
(make-plugin-state
|
||||
processes (make-process-selection-list width processes) 1)))
|
||||
processes
|
||||
(make-process-selection-list num-cols num-lines processes) 1)))
|
||||
|
||||
((print-message? message)
|
||||
(paint-selection-list
|
||||
|
|
|
@ -13,25 +13,25 @@
|
|||
(make-element #f value text))
|
||||
|
||||
(define-record-type select-list :select-list
|
||||
(really-make-select-list elements view-index cursor-index cursor-y)
|
||||
(really-make-select-list elements view-index cursor-index num-lines)
|
||||
select-list?
|
||||
(elements select-list-elements)
|
||||
(view-index select-list-view-index)
|
||||
(cursor-index select-list-cursor-index)
|
||||
(cursor-y select-list-cursor-y))
|
||||
(num-lines select-list-num-lines))
|
||||
|
||||
(define-record-discloser :select-list
|
||||
(lambda (r)
|
||||
`(select-list (index ,(select-list-cursor-index r))
|
||||
(view-index ,(select-list-view-index r))
|
||||
(y ,(select-list-cursor-y r)))))
|
||||
(num-lines ,(select-list-num-lines r)))))
|
||||
|
||||
(define (make-select-list value/text-tuples)
|
||||
(define (make-select-list value/text-tuples num-lines)
|
||||
(really-make-select-list
|
||||
(map (lambda (value/text)
|
||||
(apply make-unmarked-element value/text))
|
||||
value/text-tuples)
|
||||
0 0 1))
|
||||
0 0 num-lines))
|
||||
|
||||
(define key-m 109)
|
||||
|
||||
|
@ -46,9 +46,9 @@
|
|||
((= key key-u)
|
||||
(unmark-current-line select-list))
|
||||
((= key key-up)
|
||||
(move-cursor-up select-list result-buffer))
|
||||
(move-cursor-up select-list))
|
||||
((= key key-down)
|
||||
(move-cursor-down select-list result-buffer))
|
||||
(move-cursor-down select-list))
|
||||
(else
|
||||
select-list))))
|
||||
|
||||
|
@ -68,7 +68,7 @@
|
|||
result)))
|
||||
'() (zip elements (iota (length elements))))
|
||||
(select-list-view-index select-list)
|
||||
index (select-list-cursor-y select-list)))))
|
||||
index (select-list-num-lines select-list)))))
|
||||
|
||||
(define unmark-current-line
|
||||
(mark/unmark-current-line-maker #f))
|
||||
|
@ -77,24 +77,24 @@
|
|||
(mark/unmark-current-line-maker #t))
|
||||
|
||||
;; returns: y cursor-index view-index
|
||||
(define (calculate-view index-move cursor-move
|
||||
elements view-index cursor-index
|
||||
num-lines y)
|
||||
(define (calculate-view index-move elements
|
||||
view-index cursor-index
|
||||
num-lines)
|
||||
(let ((new-index (index-move cursor-index))
|
||||
(max-index (- (length elements) 1)))
|
||||
(cond
|
||||
((< new-index 0)
|
||||
(values 0 0 view-index))
|
||||
(values 0 view-index))
|
||||
((> new-index max-index)
|
||||
(values y max-index view-index))
|
||||
(values max-index view-index))
|
||||
((and (>= (- new-index view-index) num-lines)
|
||||
(> new-index cursor-index))
|
||||
(values 1 new-index (+ view-index num-lines)))
|
||||
(values new-index (+ view-index num-lines)))
|
||||
((and (< new-index cursor-index)
|
||||
(>= view-index cursor-index))
|
||||
(values num-lines new-index (- view-index num-lines)))
|
||||
(values new-index (- view-index num-lines)))
|
||||
(else
|
||||
(values (cursor-move y) (index-move cursor-index) view-index)))))
|
||||
(values (index-move cursor-index) view-index)))))
|
||||
|
||||
(define (copy-element-list elements)
|
||||
(fold-right
|
||||
|
@ -106,63 +106,64 @@
|
|||
result))
|
||||
'() elements))
|
||||
|
||||
(define (move-cursor-maker index-move cursor-move)
|
||||
(lambda (select-list result-buffer)
|
||||
(define (move-cursor-maker index-move)
|
||||
(lambda (select-list)
|
||||
(let* ((elements (select-list-elements select-list))
|
||||
(old-index (select-list-cursor-index select-list)))
|
||||
(old-index (select-list-cursor-index select-list))
|
||||
(num-lines (select-list-num-lines select-list)))
|
||||
(call-with-values
|
||||
(lambda ()
|
||||
(calculate-view index-move cursor-move
|
||||
(calculate-view index-move
|
||||
elements
|
||||
(select-list-view-index select-list)
|
||||
old-index
|
||||
(result-buffer-num-lines result-buffer)
|
||||
(select-list-cursor-y select-list)))
|
||||
(lambda (y cursor-index view-index)
|
||||
num-lines))
|
||||
(lambda (cursor-index view-index)
|
||||
(really-make-select-list
|
||||
(copy-element-list elements)
|
||||
view-index
|
||||
cursor-index
|
||||
y))))))
|
||||
num-lines))))))
|
||||
|
||||
(define move-cursor-up
|
||||
(let ((sub-one (lambda (y) (- y 1))))
|
||||
(move-cursor-maker sub-one sub-one)))
|
||||
(move-cursor-maker (lambda (y) (- y 1))))
|
||||
|
||||
(define move-cursor-down
|
||||
(let ((add-one (lambda (y) (+ y 1))))
|
||||
(move-cursor-maker add-one add-one)))
|
||||
(move-cursor-maker (lambda (y) (+ y 1))))
|
||||
|
||||
(define (take-max lst num)
|
||||
(if (>= num (length lst))
|
||||
lst
|
||||
(take lst num)))
|
||||
|
||||
(define (select-visible-elements select-list result-buffer)
|
||||
(let ((num-lines (result-buffer-num-lines result-buffer)))
|
||||
(take-max (drop (select-list-elements select-list)
|
||||
(select-list-view-index select-list))
|
||||
(+ 1 num-lines)))) ;;; wtf? why this
|
||||
(define (select-visible-elements select-list num-lines)
|
||||
(take-max (drop (select-list-elements select-list)
|
||||
(select-list-view-index select-list))
|
||||
(+ 1 num-lines)))
|
||||
|
||||
(define (paint-selection-list select-list)
|
||||
(paint-selection-list-at select-list 0 0))
|
||||
|
||||
(define (paint-selection-list-at select-list x y)
|
||||
(lambda (win result-buffer have-focus?)
|
||||
(let lp ((elts
|
||||
(select-visible-elements select-list result-buffer))
|
||||
(y 0)
|
||||
(i (select-list-view-index select-list)))
|
||||
(cond
|
||||
((null? elts)
|
||||
(values))
|
||||
((= i (select-list-cursor-index select-list))
|
||||
(wattron win (A-REVERSE))
|
||||
(mvwaddstr win y 0 (element-text (car elts)))
|
||||
(wattrset win (A-NORMAL))
|
||||
(lp (cdr elts) (+ y 1) (+ i 1)))
|
||||
((element-marked? (car elts))
|
||||
(wattron win (A-BOLD))
|
||||
(mvwaddstr win y 0 (element-text (car elts)))
|
||||
(wattrset win (A-NORMAL))
|
||||
(lp (cdr elts) (+ y 1) (+ i 1)))
|
||||
(else
|
||||
(mvwaddstr win y 0 (element-text (car elts)))
|
||||
(lp (cdr elts) (+ y 1) (+ i 1)))))))
|
||||
(let ((num-lines (select-list-num-lines select-list)))
|
||||
(let lp ((elts
|
||||
(select-visible-elements select-list num-lines))
|
||||
(y y)
|
||||
(i (select-list-view-index select-list)))
|
||||
(cond
|
||||
((null? elts)
|
||||
(values))
|
||||
((= i (select-list-cursor-index select-list))
|
||||
(wattron win (A-REVERSE))
|
||||
(mvwaddstr win y x (element-text (car elts)))
|
||||
(wattrset win (A-NORMAL))
|
||||
(lp (cdr elts) (+ y 1) (+ i 1)))
|
||||
((element-marked? (car elts))
|
||||
(wattron win (A-BOLD))
|
||||
(mvwaddstr win y x (element-text (car elts)))
|
||||
(wattrset win (A-NORMAL))
|
||||
(lp (cdr elts) (+ y 1) (+ i 1)))
|
||||
(else
|
||||
(mvwaddstr win y x (element-text (car elts)))
|
||||
(lp (cdr elts) (+ y 1) (+ i 1))))))))
|
||||
|
|
Loading…
Reference in New Issue