added new files / removed a few (actually, that doesn't seem to work with the darcs2cvs-sync.scm)
This commit is contained in:
parent
ada69eb0ce
commit
29ff444f3b
|
@ -1,262 +0,0 @@
|
|||
(define key-m 109)
|
||||
(define key-u 117)
|
||||
(define key-return 10)
|
||||
|
||||
(define (add-marks-to-special-file file-name fs-object)
|
||||
(let ((info (fs-object-info fs-object)))
|
||||
(cond
|
||||
((not info)
|
||||
(string-append " " file-name ": error during file-info!"))
|
||||
((file-info-directory? info)
|
||||
(string-append " " file-name "/"))
|
||||
((file-info-executable? info)
|
||||
(string-append "*" file-name))
|
||||
((file-info-symlink? info)
|
||||
(string-append "@" file-name))
|
||||
(else
|
||||
(string-append " " file-name)))))
|
||||
|
||||
(define (have-permission? mode perm-mask)
|
||||
(not (zero? (bitwise-and mode perm-mask))))
|
||||
|
||||
(define (format-permissions mode)
|
||||
(apply string-append
|
||||
(map (lambda (mask.symbol)
|
||||
(if (have-permission? mode (car mask.symbol))
|
||||
(cdr mask.symbol)
|
||||
"-"))
|
||||
'((#o0400 . "r") ;; owner read
|
||||
(#o0200 . "w") ;; owner write
|
||||
(#o0100 . "x") ;; owner exec
|
||||
(#o0040 . "r") ;; group read
|
||||
(#o0020 . "w") ;; group write
|
||||
(#o0010 . "x") ;; group exec
|
||||
(#o0004 . "r") ;; others read
|
||||
(#o0002 . "w") ;; others write
|
||||
(#o0001 . "x"))))) ;; others exec
|
||||
|
||||
(define (digits-left-of-comma-as-string float)
|
||||
(string-drop-right
|
||||
(number->string (truncate float)) 1))
|
||||
|
||||
(define (format-size/unit float unit)
|
||||
(string-append (digits-left-of-comma-as-string float) " " unit))
|
||||
|
||||
(define (format-size bytes)
|
||||
(let* ((kbyte 1024.0)
|
||||
(mbyte (* 1024 kbyte))
|
||||
(gbyte (* 1024 mbyte)))
|
||||
(cond
|
||||
((>= bytes gbyte)
|
||||
(format-size/unit (/ bytes gbyte) "GB"))
|
||||
((>= bytes mbyte)
|
||||
(format-size/unit (/ bytes mbyte) "MB"))
|
||||
((>= bytes kbyte)
|
||||
(format-size/unit (/ bytes kbyte) "KB"))
|
||||
(else
|
||||
(number->string bytes)))))
|
||||
|
||||
(define (format-user/group fi)
|
||||
(fill-up-string 17
|
||||
(string-append
|
||||
(cut-to-size 8 (->username (file-info:uid fi)))
|
||||
":"
|
||||
(cut-to-size 8 (group-info:name
|
||||
(group-info (file-info:gid fi)))))))
|
||||
|
||||
;; leave one line for the heading
|
||||
(define (calculate-number-of-lines result-buffer)
|
||||
(- (result-buffer-num-lines result-buffer)
|
||||
1))
|
||||
|
||||
(define (layout-fsobject parent-dir-len fsobject num-cols)
|
||||
(let ((file-name (combine-path (string-drop
|
||||
(fs-object-path fsobject)
|
||||
parent-dir-len)
|
||||
(fs-object-name fsobject)))
|
||||
(fi (fs-object-info fsobject)))
|
||||
(cut-to-size num-cols
|
||||
(string-append
|
||||
(fill-up-string
|
||||
30 (add-marks-to-special-file file-name fsobject))
|
||||
" "
|
||||
(fill-up-string
|
||||
7 (format-size (file-info:size fi)))
|
||||
" "
|
||||
(format-user/group fi)
|
||||
" "
|
||||
(format-permissions
|
||||
(file-info:mode fi))))))
|
||||
|
||||
(define (make-file-select-list fsobjects parent-dir num-lines num-cols)
|
||||
(let ((parent-dir-len (string-length parent-dir)))
|
||||
(make-select-list
|
||||
(cons (make-unmarked-element 'parent-dir #f " ..")
|
||||
(map (lambda (fs-object)
|
||||
(make-unmarked-element
|
||||
fs-object #t (layout-fsobject parent-dir-len
|
||||
fs-object num-cols)))
|
||||
fsobjects))
|
||||
num-lines)))
|
||||
|
||||
;;; lacks some coolness
|
||||
(define (abbrev-path path length)
|
||||
(if (< (string-length path) length)
|
||||
path
|
||||
(string-copy path
|
||||
(- (string-length path) length))))
|
||||
|
||||
(define header-line-path
|
||||
"Paths relative to ")
|
||||
|
||||
(define (make-header-line wdir width)
|
||||
(string-append
|
||||
header-line-path
|
||||
(if wdir
|
||||
(abbrev-path
|
||||
wdir (- width (string-length header-line-path)))
|
||||
"<unknown>")))
|
||||
|
||||
(define (paint-browser select-list wdir win buffer have-focus?)
|
||||
(wattron win (A-BOLD))
|
||||
(mvwaddstr win 0 0
|
||||
(make-header-line
|
||||
wdir (result-buffer-num-cols buffer)))
|
||||
(wattrset win (A-NORMAL))
|
||||
(paint-selection-list-at select-list 1 2 win
|
||||
buffer have-focus?))
|
||||
|
||||
(define (find-common-parent paths)
|
||||
(if (null? paths)
|
||||
""
|
||||
(let lp ((paths (cdr paths))
|
||||
(common (car paths))
|
||||
(common-len (string-length (car paths))))
|
||||
(if (null? paths)
|
||||
common
|
||||
(let ((prefix-len (string-prefix-length common (car paths))))
|
||||
(cond
|
||||
((= 0 prefix-len) (error "no prefix??" common (car paths)))
|
||||
((= 1 prefix-len) "/") ; search ends here
|
||||
((= prefix-len common-len) ; short cut
|
||||
(lp (cdr paths)
|
||||
common
|
||||
common-len))
|
||||
(else
|
||||
(lp (cdr paths)
|
||||
(substring common
|
||||
0
|
||||
prefix-len)
|
||||
prefix-len))))))))
|
||||
|
||||
(define (make-browser-for-dir dir buffer)
|
||||
(with-cwd dir
|
||||
(make-fsobjects-viewer (directory-files)
|
||||
buffer
|
||||
(cwd))))
|
||||
|
||||
(define (make-fsobjects-viewer fs-objects buffer . maybe-parent)
|
||||
(let-optionals maybe-parent
|
||||
((working-dir (find-common-parent
|
||||
(map fs-object-path fs-objects))))
|
||||
(let ((fs-objects fs-objects)
|
||||
(buffer buffer)
|
||||
(select-list
|
||||
(make-file-select-list
|
||||
fs-objects working-dir
|
||||
;; we need one line for the header
|
||||
(- (result-buffer-num-lines buffer) 1)
|
||||
(result-buffer-num-cols buffer))))
|
||||
|
||||
(define (handle-return-key self selected-entry num-lines)
|
||||
(cond
|
||||
((eq? selected-entry 'parent-dir)
|
||||
(let* ((maybe-parent (file-name-directory working-dir))
|
||||
(parent (if (string=? maybe-parent "") "/" maybe-parent)))
|
||||
(make-browser-for-dir parent buffer)))
|
||||
(else
|
||||
(let ((fi (fs-object-info selected-entry)))
|
||||
(if (and fi (file-info-directory? fi))
|
||||
(with-errno-handler
|
||||
((errno packet)
|
||||
(else
|
||||
(display packet)
|
||||
(newline)
|
||||
self))
|
||||
(make-browser-for-dir (fs-object-complete-path selected-entry)
|
||||
buffer))
|
||||
self)))))
|
||||
|
||||
(define (handle-key-press self key)
|
||||
(cond
|
||||
((= key key-return)
|
||||
(handle-return-key
|
||||
self (select-list-selected-entry select-list)
|
||||
(calculate-number-of-lines buffer)))
|
||||
(else
|
||||
(set! select-list
|
||||
(select-list-handle-key-press select-list key))
|
||||
self)))
|
||||
|
||||
(define (prepare-selection-for-scheme-mode file-names)
|
||||
(string-append "'" (write-to-string file-names)))
|
||||
|
||||
;; FIXME: quote file names containing space etc
|
||||
(define (prepare-selection-for-command-mode file-names)
|
||||
(string-join file-names))
|
||||
|
||||
(define (get-selection-as-text self for-scheme-mode? focus-object-table)
|
||||
(let* ((marked (select-list-get-marked select-list))
|
||||
(file-names
|
||||
(map fs-object-complete-path
|
||||
(if (null? marked)
|
||||
(list (select-list-selected-entry select-list))
|
||||
marked))))
|
||||
((if for-scheme-mode?
|
||||
prepare-selection-for-scheme-mode
|
||||
prepare-selection-for-command-mode)
|
||||
file-names)))
|
||||
|
||||
(define (get-selection-as-ref self focus-object-table)
|
||||
(let ((marked (select-list-get-marked select-list))
|
||||
(make-reference (lambda (obj)
|
||||
(make-focus-object-reference
|
||||
focus-object-table obj))))
|
||||
(if (null? marked)
|
||||
(write-to-string
|
||||
(make-reference (select-list-selected-entry select-list)))
|
||||
(string-append
|
||||
"(list "
|
||||
(string-join (map write-to-string (map make-reference marked)))
|
||||
")"))))
|
||||
|
||||
(lambda (message)
|
||||
(cond
|
||||
((eq? message 'paint)
|
||||
(lambda (self . args)
|
||||
(apply paint-browser
|
||||
(append (list select-list working-dir) args))))
|
||||
|
||||
((eq? message 'key-press)
|
||||
(lambda (self key control-x-pressed?)
|
||||
(handle-key-press self key)))
|
||||
|
||||
((eq? message 'get-selection-as-text)
|
||||
get-selection-as-text)
|
||||
|
||||
((eq? message 'get-selection-as-ref)
|
||||
get-selection-as-ref)
|
||||
|
||||
(else
|
||||
(error "fsobjects-viewer unknown message" message)))))))
|
||||
|
||||
(define (list-of-fs-objects? thing)
|
||||
(and (proper-list? thing)
|
||||
(every fs-object? thing)))
|
||||
|
||||
(register-plugin!
|
||||
(make-view-plugin make-fsobjects-viewer
|
||||
(lambda (thing)
|
||||
(or (fs-object? thing)
|
||||
(list-of-fs-objects? thing)))))
|
||||
|
|
@ -1,339 +0,0 @@
|
|||
;;This addition provides the capability of displaying a list.
|
||||
;;There is only one list-item per line - if the item is too long for one
|
||||
;;single line it's symbolic representation is seperated into more
|
||||
;;than one lines.
|
||||
;;The user can scroll up and down in the list and he can select the items
|
||||
;;and later paste this newly-created list into the upper buffer.
|
||||
|
||||
|
||||
;;Result-Object-Data-Type
|
||||
(define-record-type browse-list-res-obj browse-list-res-obj
|
||||
(make-browse-list-res-obj pos-y
|
||||
pos-x
|
||||
line
|
||||
col-in-line
|
||||
list
|
||||
result-text
|
||||
width
|
||||
marked-items
|
||||
marked-pos
|
||||
c-x-pressed)
|
||||
browse-list-res-obj?
|
||||
(pos-y browse-list-res-obj-pos-y)
|
||||
(pos-x browse-list-res-obj-pos-x)
|
||||
(line browse-list-res-obj-line)
|
||||
(col-in-line browse-list-res-obj-col-in-line)
|
||||
(list browse-list-res-obj-file-list)
|
||||
(result-text browse-list-res-obj-result-text)
|
||||
(width browse-list-res-obj-width)
|
||||
(marked-items browse-list-res-obj-marked-items)
|
||||
(marked-pos browse-list-res-obj-marked-pos)
|
||||
(c-x-pressed browse-list-res-obj-c-x-pressed))
|
||||
|
||||
|
||||
;;The layout-function
|
||||
;;All lines are seperated
|
||||
(define layout-result-browse-list
|
||||
(lambda (lst width)
|
||||
(let loop ((pos-list 0)
|
||||
(buffer '()))
|
||||
(if (= pos-list (length lst))
|
||||
buffer
|
||||
(loop (+ pos-list 1)
|
||||
(append buffer
|
||||
(seperated-line (list-ref lst pos-list) width)))))))
|
||||
|
||||
;;seperate one line -> return a list of the single lines
|
||||
(define seperated-line
|
||||
(lambda (el width)
|
||||
(let loop ((old el)
|
||||
(new '()))
|
||||
(if (<= (string-length old) 0)
|
||||
new
|
||||
(if (>= (string-length old) width)
|
||||
(let* ((old-cut (substring old width (string-length old)))
|
||||
(new-app (string-append " " (substring old 0 width))))
|
||||
(loop old-cut (append new (list new-app))))
|
||||
(append new (list (string-append " " old))))))))
|
||||
|
||||
;;compute where the Cursor has to be put.
|
||||
;;The cursor is always located in the last line of one item of the list
|
||||
(define compute-pos-y
|
||||
(lambda (pos lst width)
|
||||
(let* ((before-pos (sublist lst 0 pos))
|
||||
(seperated-before (layout-result-browse-list before-pos width))
|
||||
(pos-before (length seperated-before)))
|
||||
pos-before)))
|
||||
|
||||
;;Find out which lines of the buffer are to highlight.
|
||||
;;Only those lines are highlighted, which contain the active item.
|
||||
(define get-highlighted-browse-list
|
||||
(lambda (line lst pos-y width)
|
||||
(let* ((act-line (list-ref lst (- line 1)))
|
||||
(seperated (seperated-line act-line width))
|
||||
(length-seperated (length seperated))
|
||||
(first-pos (- pos-y length-seperated)))
|
||||
(let loop ((count 1)
|
||||
(res '()))
|
||||
(if (> count length-seperated)
|
||||
res
|
||||
(loop (+ count 1)
|
||||
(append res (list (+ count first-pos)))))))))
|
||||
|
||||
;;find out which lines are to be marked. Lines are marked if they have
|
||||
;;recently been selected
|
||||
(define get-marked-pos-browse
|
||||
(lambda (marked lst width)
|
||||
(let loop ((m marked)
|
||||
(new '()))
|
||||
(if (null? m)
|
||||
new
|
||||
(let* ((pos (car m)))
|
||||
(loop (cdr m)
|
||||
(append (get-marked-browse-list pos lst width)
|
||||
new )))))))
|
||||
|
||||
(define get-marked-browse-list
|
||||
(lambda (pos lst width)
|
||||
(let* ((act-line (list-ref lst (- pos 1)))
|
||||
(seperated (seperated-line act-line width))
|
||||
(length-seperated (length seperated))
|
||||
(before-pos (sublist lst 0 pos))
|
||||
(seperated-before (layout-result-browse-list before-pos width))
|
||||
(length-before (- (length seperated-before) length-seperated)))
|
||||
(let loop ((res '())
|
||||
(count 1))
|
||||
(if (> count length-seperated)
|
||||
res
|
||||
(loop (cons (+ length-before count) res)
|
||||
(+ count 1)))))))
|
||||
|
||||
|
||||
;;Receiving-Function, that answers to incomming messages and changes state
|
||||
;;of the passed "browse-list-res-obj"
|
||||
(define browse-list-receiver
|
||||
(lambda (message)
|
||||
(cond
|
||||
((next-command-message? message)
|
||||
(let* ((command (next-command-string message))
|
||||
(parameters (next-command-message-parameters message))
|
||||
(result #f)
|
||||
(width (next-command-message-width message)))
|
||||
(if (< (length parameters) 1)
|
||||
(begin
|
||||
(set! result (list "forgot parameter?"))
|
||||
(let* ((text
|
||||
(layout-result-standard "forgot parameters?"
|
||||
result width))
|
||||
(browse-obj
|
||||
(make-browse-list-res-obj 1 1 1 1 result text
|
||||
width '() '() #f)))
|
||||
browse-obj))
|
||||
|
||||
(let ((lst (list-ref parameters 0)))
|
||||
(if (not (null? lst))
|
||||
(let*
|
||||
((result-string (map exp->string lst))
|
||||
(text
|
||||
(layout-result-browse-list result-string
|
||||
(- width 1)))
|
||||
(sep-line-1 (seperated-line
|
||||
(exp->string (list-ref lst 0)) width))
|
||||
(pos-y (length sep-line-1))
|
||||
(browse-obj
|
||||
(make-browse-list-res-obj pos-y 1 1 1 lst text width
|
||||
'() '() #f)))
|
||||
browse-obj)
|
||||
(let
|
||||
((browse-obj
|
||||
(make-browse-list-res-obj 1 1 1 1 '("") '("") width
|
||||
'() '() #f)))
|
||||
browse-obj))))))
|
||||
|
||||
((print-message? message)
|
||||
(let* ((model (message-result-object message))
|
||||
(pos-y (browse-list-res-obj-pos-y model))
|
||||
(pos-x (browse-list-res-obj-pos-x model))
|
||||
(text (browse-list-res-obj-result-text model))
|
||||
(line (browse-list-res-obj-line model))
|
||||
(lst (map exp->string (browse-list-res-obj-file-list model)))
|
||||
(width (browse-list-res-obj-width model))
|
||||
(marked (browse-list-res-obj-marked-items model))
|
||||
(marked-pos (browse-list-res-obj-marked-pos model))
|
||||
(real-marked-pos (get-marked-pos-browse
|
||||
marked-pos
|
||||
lst
|
||||
width))
|
||||
(highlighted (get-highlighted-browse-list line lst pos-y width)))
|
||||
(make-print-object pos-y pos-x text highlighted real-marked-pos)))
|
||||
|
||||
((key-pressed-message? message)
|
||||
(let* ((model (message-result-object message))
|
||||
(key (key-pressed-message-key message))
|
||||
(c-x-pressed (browse-list-res-obj-c-x-pressed model)))
|
||||
|
||||
|
||||
(if c-x-pressed
|
||||
|
||||
(cond
|
||||
;;Ctrl+x s ->selection
|
||||
((= key 115)
|
||||
(let* ((marked-items (browse-list-res-obj-marked-items model))
|
||||
(actual-pos (browse-list-res-obj-line model))
|
||||
(all-items (browse-list-res-obj-file-list model)))
|
||||
(if (< actual-pos 1)
|
||||
model
|
||||
(let* ((actual-item (list-ref all-items (- actual-pos 1))))
|
||||
(begin
|
||||
(if (member actual-item marked-items)
|
||||
model
|
||||
(let*
|
||||
((new-marked-items (append marked-items
|
||||
(list actual-item)))
|
||||
(new-marked-pos (append
|
||||
(list actual-pos)
|
||||
(browse-list-res-obj-marked-pos
|
||||
model)))
|
||||
(new-model (make-browse-list-res-obj
|
||||
(browse-list-res-obj-pos-y model)
|
||||
(browse-list-res-obj-pos-x model)
|
||||
(browse-list-res-obj-line model)
|
||||
(browse-list-res-obj-col-in-line
|
||||
model)
|
||||
(browse-list-res-obj-file-list
|
||||
model)
|
||||
(browse-list-res-obj-result-text
|
||||
model)
|
||||
(browse-list-res-obj-width model)
|
||||
new-marked-items
|
||||
new-marked-pos
|
||||
#f)))
|
||||
new-model)))))))
|
||||
|
||||
|
||||
;;Ctrl+x u -> unselect
|
||||
((= key 117)
|
||||
(let* ((marked-items (browse-list-res-obj-marked-items model))
|
||||
(marked-pos (browse-list-res-obj-marked-pos model))
|
||||
(actual-pos (browse-list-res-obj-line model))
|
||||
(all-items (browse-list-res-obj-file-list model)))
|
||||
(if (< actual-pos 1)
|
||||
model
|
||||
(let* ((actual-item (list-ref all-items (- actual-pos 1)))
|
||||
(rest (member actual-item marked-items))
|
||||
(rest-pos (member actual-pos marked-pos)))
|
||||
(if (not rest)
|
||||
model
|
||||
(let* ((after-item (length rest))
|
||||
(after-marked (length rest-pos))
|
||||
(all-items (length marked-items))
|
||||
(all-marked (length marked-pos))
|
||||
(before-item (sublist marked-items
|
||||
0
|
||||
(- all-items
|
||||
after-item )))
|
||||
(before-marked (sublist marked-pos
|
||||
0
|
||||
(- all-marked
|
||||
after-marked)))
|
||||
(new-marked-items (append before-item
|
||||
(list-tail rest 1)))
|
||||
(new-marked-pos (append before-marked
|
||||
(list-tail rest-pos 1)))
|
||||
(new-model (make-browse-list-res-obj
|
||||
(browse-list-res-obj-pos-y model)
|
||||
(browse-list-res-obj-pos-x model)
|
||||
(browse-list-res-obj-line model)
|
||||
(browse-list-res-obj-col-in-line
|
||||
model)
|
||||
(browse-list-res-obj-file-list
|
||||
model)
|
||||
(browse-list-res-obj-result-text
|
||||
model)
|
||||
(browse-list-res-obj-width model)
|
||||
new-marked-items
|
||||
new-marked-pos
|
||||
#f)))
|
||||
new-model))))))
|
||||
|
||||
(else
|
||||
(make-browse-list-res-obj
|
||||
(browse-list-res-obj-pos-y model)
|
||||
(browse-list-res-obj-pos-x model)
|
||||
(browse-list-res-obj-line model)
|
||||
(browse-list-res-obj-col-in-line
|
||||
model)
|
||||
(browse-list-res-obj-file-list
|
||||
model)
|
||||
(browse-list-res-obj-result-text
|
||||
model)
|
||||
(browse-list-res-obj-width model)
|
||||
(browse-list-res-obj-marked-items model)
|
||||
(browse-list-res-obj-marked-pos model)
|
||||
#f)))
|
||||
|
||||
(cond
|
||||
|
||||
;;ctrl+x
|
||||
((= key 24)
|
||||
(make-browse-list-res-obj
|
||||
(browse-list-res-obj-pos-y model)
|
||||
(browse-list-res-obj-pos-x model)
|
||||
(browse-list-res-obj-line model)
|
||||
(browse-list-res-obj-col-in-line
|
||||
model)
|
||||
(browse-list-res-obj-file-list
|
||||
model)
|
||||
(browse-list-res-obj-result-text
|
||||
model)
|
||||
(browse-list-res-obj-width model)
|
||||
(browse-list-res-obj-marked-items model)
|
||||
(browse-list-res-obj-marked-pos model)
|
||||
#t))
|
||||
|
||||
|
||||
((= key key-up)
|
||||
(let ((line (browse-list-res-obj-line model))
|
||||
(lst (map exp->string (browse-list-res-obj-file-list model)))
|
||||
(width (browse-list-res-obj-width model)))
|
||||
(if (<= line 1)
|
||||
model
|
||||
(let* ((new-line (- line 1))
|
||||
(pos-y (compute-pos-y new-line lst width)))
|
||||
(make-browse-list-res-obj
|
||||
pos-y 1 new-line 1
|
||||
(browse-list-res-obj-file-list model)
|
||||
(browse-list-res-obj-result-text model)
|
||||
(browse-list-res-obj-width model)
|
||||
(browse-list-res-obj-marked-items model)
|
||||
(browse-list-res-obj-marked-pos model)
|
||||
#f)))))
|
||||
|
||||
((= key key-down)
|
||||
(let ((line (browse-list-res-obj-line model))
|
||||
(lst (map exp->string (browse-list-res-obj-file-list model)))
|
||||
(width (browse-list-res-obj-width model)))
|
||||
(if (>= line (length lst))
|
||||
model
|
||||
(let* ((new-line (+ line 1))
|
||||
(pos-y (compute-pos-y new-line lst width)))
|
||||
(make-browse-list-res-obj
|
||||
pos-y 1 new-line 1
|
||||
(browse-list-res-obj-file-list model)
|
||||
(browse-list-res-obj-result-text model)
|
||||
(browse-list-res-obj-width model)
|
||||
(browse-list-res-obj-marked-items model)
|
||||
(browse-list-res-obj-marked-pos model)
|
||||
#f)))))
|
||||
|
||||
(else model)))))
|
||||
|
||||
|
||||
((selection-message? message)
|
||||
(let* ((model (message-result-object message))
|
||||
(marked-items (browse-list-res-obj-marked-items model)))
|
||||
(string-append "'" (exp->string marked-items))))
|
||||
|
||||
)))
|
||||
|
||||
;(register-plugin! (make-plugin "browse-list" browse-list-receiver))
|
|
@ -0,0 +1,33 @@
|
|||
(define (init-evaluation-environment package)
|
||||
(let ((structure (reify-structure package)))
|
||||
(load-structure structure)
|
||||
(rt-structure->environment structure)))
|
||||
|
||||
(define *evaluation-environment*)
|
||||
|
||||
(define (set-evaluation-package! package-name)
|
||||
(set! *evaluation-environment*
|
||||
(init-evaluation-environment package-name)))
|
||||
|
||||
(define (evaluation-environment)
|
||||
*evaluation-environment*)
|
||||
|
||||
(define (read-sexp-from-string string)
|
||||
(let ((string-port (open-input-string string)))
|
||||
(read string-port)))
|
||||
|
||||
(define (eval-string str)
|
||||
(with-fatal-and-capturing-error-handler
|
||||
(lambda (condition raw-continuation continuation decline)
|
||||
raw-continuation)
|
||||
(lambda ()
|
||||
(eval (read-sexp-from-string str)
|
||||
(evaluation-environment)))))
|
||||
|
||||
(define (eval-s-expr s-expr)
|
||||
(with-fatal-and-capturing-error-handler
|
||||
(lambda (condition raw-continuation continuation decline)
|
||||
raw-continuation)
|
||||
(lambda ()
|
||||
(eval s-expr (evaluation-environment)))))
|
||||
|
|
@ -1,93 +0,0 @@
|
|||
;;find
|
||||
;;This extension uses the unix-tool "find". You can only use this command in
|
||||
;;if "find" is present in your environment.
|
||||
;;This addition uses the capabilities defined in browse-directory-list
|
||||
|
||||
|
||||
|
||||
|
||||
(define-record-type find-res-obj find-res-obj
|
||||
(make-find-res-obj browse-obj)
|
||||
find-res-obj?
|
||||
(browse-obj find-res-obj-browse-obj))
|
||||
|
||||
|
||||
|
||||
(define find-receiver
|
||||
(lambda (message)
|
||||
(cond
|
||||
((next-command-message? message)
|
||||
(let* ((width (next-command-message-width message))
|
||||
(parameter (next-command-message-parameters message)))
|
||||
|
||||
(if (null? parameter)
|
||||
(let* ((result (list "Forgot parameters!"))
|
||||
(text
|
||||
(layout-result-standard "Forgot parameters!"
|
||||
result width))
|
||||
(browse-obj
|
||||
(make-browse-list-res-obj 1 1 1 1 result text
|
||||
width '() '() #f)))
|
||||
(make-find-res-obj browse-obj))
|
||||
|
||||
(let*
|
||||
((parameters (get-param-as-str parameter))
|
||||
(result (evaluate
|
||||
(string-append "(run/sexps (find" parameters "))")))
|
||||
(result-string (map exp->string result))
|
||||
(list-str (string-append "'" (exp->string result-string)))
|
||||
(browse-next-command-message
|
||||
(make-next-command-message "browse-list"
|
||||
(cons list-str
|
||||
(list "\"/\""))
|
||||
width)))
|
||||
|
||||
(make-find-res-obj (browse-list-receiver
|
||||
browse-next-command-message))))))
|
||||
((print-message? message)
|
||||
(let* ((model (message-result-object message))
|
||||
(width (print-message-width message))
|
||||
(browser (find-res-obj-browse-obj model))
|
||||
(browse-print-message
|
||||
(make-print-message "browse-list"
|
||||
browser
|
||||
width)))
|
||||
(browse-list-receiver browse-print-message)))
|
||||
((key-pressed-message? message)
|
||||
(let* ((model (message-result-object message))
|
||||
(key (key-pressed-message-key message))
|
||||
(browser (find-res-obj-browse-obj model))
|
||||
(browse-key-message
|
||||
(make-key-pressed-message "browse-list"
|
||||
browser
|
||||
key)))
|
||||
(make-find-res-obj (browse-list-receiver
|
||||
browse-key-message))))
|
||||
|
||||
((restore-message? message)
|
||||
(let* ((model (message-result-object message))
|
||||
(browser (find-res-obj-browse-obj model))
|
||||
(browse-restore-message
|
||||
(make-restore-message "browse-ist"
|
||||
browser)))
|
||||
(browse-list-receiver browse-restore-message)))
|
||||
((selection-message? message)
|
||||
(let* ((model (message-result-object message))
|
||||
(browser (find-res-obj-browse-obj model))
|
||||
(browse-sel-message
|
||||
(make-selection-message "browse-list"
|
||||
browser)))
|
||||
(browse-list-receiver browse-sel-message)))
|
||||
)))
|
||||
|
||||
|
||||
(define slash-away
|
||||
(lambda (path)
|
||||
(if (> (string-length path) 0)
|
||||
(substring path 1 (string-length path))
|
||||
path)))
|
||||
|
||||
|
||||
(define find-rec (make-receiver "find" find-receiver))
|
||||
|
||||
(set! receivers (cons find-rec receivers))
|
|
@ -0,0 +1,27 @@
|
|||
(define command-prefix #\,)
|
||||
|
||||
(define (split-scheme-command-line command-line)
|
||||
(let ((tokens (string-tokenize command-line)))
|
||||
(values (string->symbol (string-drop (car tokens) 1))
|
||||
(cdr tokens))))
|
||||
|
||||
(define (scheme-command-line? command-line)
|
||||
(char=? (string-ref (string-trim command-line) 0)
|
||||
command-prefix))
|
||||
|
||||
(define (eval-scheme-command command args)
|
||||
(case command
|
||||
((in)
|
||||
(set-evaluation-package! (string->symbol (car args)))
|
||||
(string-append "moved to package " (car args)))
|
||||
((open)
|
||||
(package-open!
|
||||
(evaluation-environment)
|
||||
(lambda ()
|
||||
(environment-ref
|
||||
(config-package) (string->symbol (car args)))))
|
||||
(string-append "opened package " (car args)))
|
||||
((user)
|
||||
(set-evaluation-package! 'nuit-eval)
|
||||
"moved to package nuit-eval")
|
||||
(else (error "unknwon scheme command"))))
|
|
@ -0,0 +1,77 @@
|
|||
;(define-record-type element
|
||||
; (make-element markable? marked? value text)
|
||||
; element?
|
||||
; (markable? element-markable?)
|
||||
; (marked? element-marked?)
|
||||
; (value element-value)
|
||||
; (text element-text))
|
||||
|
||||
;(define-record-discloser :element
|
||||
; (lambda (r)
|
||||
; `(element ,(element-marked? r) ,(element-text r))))
|
||||
|
||||
;(define (make-unmarked-element value markable? text)
|
||||
; (make-element markable? #f value text))
|
||||
|
||||
;(define (make-marked-element value markable? text)
|
||||
; (make-element markable? #t value text))
|
||||
|
||||
(define (element-value x) x)
|
||||
(define (element-text x) x)
|
||||
|
||||
(define-record-type select-line :select-line
|
||||
(really-make-select-line elements cursor-index num-cols)
|
||||
select-line?
|
||||
(elements select-line-elements)
|
||||
(cursor-index select-line-cursor-index set-select-line-cursor-index!)
|
||||
(num-cols select-line-num-cols))
|
||||
|
||||
(define (make-select-line elements)
|
||||
(really-make-select-line elements 0 (length elements)))
|
||||
|
||||
(define (select-line-handle-key-press! select-line key)
|
||||
(cond
|
||||
((= key key-right)
|
||||
(move-cursor-right! select-line))
|
||||
((= key key-left)
|
||||
(move-cursor-left! select-line))
|
||||
(else #f)))
|
||||
|
||||
(define (move-cursor-left! select-line)
|
||||
(let ((old-col (select-line-cursor-index select-line)))
|
||||
(if (and (> old-col 0)
|
||||
(> (select-line-num-cols select-line) 1))
|
||||
(set-select-line-cursor-index! select-line (- old-col 1)))))
|
||||
|
||||
(define (move-cursor-right! select-line)
|
||||
(let ((old-col (select-line-cursor-index select-line)))
|
||||
(if (< old-col (- (select-line-num-cols select-line) 1))
|
||||
(set-select-line-cursor-index! select-line (+ old-col 1)))))
|
||||
|
||||
(define (paint-select-line select-line win result-buffer have-focus?)
|
||||
(paint-select-line-at select-line 0 0 win result-buffer have-focus?))
|
||||
|
||||
(define (paint-select-line-at select-line x y win result-buffer have-focus?)
|
||||
(let ((cursor-col (select-line-cursor-index select-line)))
|
||||
(let lp ((elts (select-line-elements select-line))
|
||||
(i 0)
|
||||
(x x))
|
||||
(cond ((null? elts)
|
||||
(values))
|
||||
((= i cursor-col)
|
||||
(let ((text (element-text (car elts))))
|
||||
(wattron win (A-REVERSE))
|
||||
(mvwaddstr win y x text)
|
||||
(wattrset win (A-NORMAL))
|
||||
(lp (cdr elts) (+ i 1) (+ x (string-length text)))))
|
||||
(else
|
||||
(let ((text (element-text (car elts))))
|
||||
(mvwaddstr win y x text)
|
||||
(lp (cdr elts) (+ i 1) (+ x (string-length text)))))))))
|
||||
|
||||
(define (select-line-selected-entry select-line)
|
||||
(element-value
|
||||
(list-ref (select-line-elements select-line)
|
||||
(select-line-cursor-index select-line))))
|
||||
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
(define (display-to-string val)
|
||||
(let ((exp-port (open-output-string)))
|
||||
(display exp exp-port)
|
||||
(get-output-string exp-port)))
|
||||
|
||||
;;expression as string
|
||||
(define (write-to-string exp)
|
||||
(let ((exp-port (open-output-string)))
|
||||
(write exp exp-port)
|
||||
(get-output-string exp-port)))
|
||||
|
||||
(define (on/off-option-processor name)
|
||||
(lambda (option arg-name arg ops)
|
||||
(cons (cons name #t) ops)))
|
||||
|
Loading…
Reference in New Issue