- make the completion mechanism use the new unparser

- fix a crash: Check if a plugin actually offers a completion function
This commit is contained in:
eknauel 2005-08-19 12:30:37 +00:00
parent 2476b86e0b
commit eefce5d839
4 changed files with 25 additions and 52 deletions

View File

@ -143,7 +143,7 @@
(define (complete-executables/path partial-name)
(complete-with-filesystem-objects
(lambda (file)
(lambda (file)
(call-with-current-continuation
(lambda (esc)
(with-handler
@ -156,41 +156,10 @@
partial-name))
(define (complete-files/path partial-name)
(debug-message "complete-files/path " partial-name)
(complete-with-filesystem-objects
(lambda (file) #t) partial-name))
;; insert the completion into the command line
(define (assemble-redirection replacer redir)
(make-redirection
(redirection-op redir)
(replacer (redirection-dest redir))))
(define (assemble-command replacer cmd)
(let ((assemble-redirection
(lambda (obj) (assemble-redirection replacer obj))))
(make-command
(replacer (command-executable cmd))
(map replacer (command-args cmd))
(map assemble-redirection (command-redirections cmd)))))
(define (assemble-command-line replacer cmdln)
(let ((assemble-command
(lambda (cmd) (assemble-command replacer cmd))))
(make-command-line
(assemble-command (command-line-first-cmd cmdln))
(map (lambda (p)
(cons (car p) (assemble-command (cdr p))))
(command-line-combinator/cmds cmdln))
(command-line-job-ctrl cmdln))))
(define (assemble-with-completion cmdln to-complete completion)
(assemble-command-line (lambda (obj)
(if (eq? obj to-complete)
completion
obj))
cmdln))
;; the main part
(define (find-plugin-completer cmd)
@ -199,13 +168,14 @@
((find (lambda (p)
(string=? (command-plugin-command p) cmd-name))
(command-plugin-list))
=> command-plugin-completer)
=> (lambda (plugin)
(or (command-plugin-completer plugin)
find-completions-for-arg)))
(else find-completions-for-arg))))
(define (find-completer type . args)
(let-optionals args
((cmd #f))
(debug-message "find-completer " type "," cmd)
(case type
((command) find-completions-for-command)
((redir-dest) find-completions-for-redir)
@ -230,12 +200,13 @@
(let ((completions ((find-completer type cmd) cmd to-complete)))
(cond
((= (length completions) 1)
(list (unparse-command-line
(assemble-with-completion parsed to-complete
(car completions)))
(calculate-cursor-index to-complete
(car completions))
to-complete parsed))
(call-with-values
(lambda ()
(unparse-command-line
parsed (lambda (to-complete)
(display (car completions)))))
(lambda (completed-line cursor-index)
(list completed-line cursor-index parsed))))
(else
(list completions cursor-index to-complete parsed))))))))

View File

@ -726,7 +726,7 @@
(- (buffer-pos-col (command-buffer)) 2))
(define (offer-completions command)
(debug-message "offer-completions '" command "'")
(debug-message "offer-completions '" command "' " (current-cursor-index))
(let ((completion-info (complete command (current-cursor-index))))
(if (not completion-info)
(begin
@ -765,11 +765,14 @@
(select-list-selected-entry select-list)))
(focus-command-buffer!)
;; #### No, I will not comment on this.
(display-completed-line
(unparse-command-line
(assemble-with-completion
cmdln to-complete completion))
(+ 2 (calculate-cursor-index to-complete completion)))
(call-with-values
(lambda ()
(unparse-command-line cmdln
(lambda (to-complete)
(display completion))))
(lambda (completed-line new-cursor-pos)
(display-completed-line completed-line
(+ 2 new-cursor-pos))))
#f))
((or (select-list-navigation-key? key)
(select-list-marking-key? key))

View File

@ -467,9 +467,7 @@
(define-interface completer-interface
(export init-executables-completion-set!
complete
calculate-cursor-index
assemble-with-completion))
complete))
(define-structure completer completer-interface
(open scheme
@ -672,14 +670,15 @@
command-line-absyn-interface
command-line-absyn-constructors-interface)))
(open scheme
(subset scsh (with-current-output-port))
extended-ports
define-record-types
(subset srfi-1 (filter drop-right))
srfi-6
srfi-8
(subset srfi-13 (string-join))
srfi-14
let-opt
cells
silly
conditions
signals

View File

@ -107,7 +107,7 @@
;; some common commands
(define no-completer (lambda args #f))
(define no-completer #f)
;; Parse options for ls command using args-fold (SRFI 37)
;; We don't care for options that format the output.