diff options
| -rw-r--r-- | elisp/geiser-autodoc.el | 2 | ||||
| -rw-r--r-- | elisp/geiser-base.el | 16 | ||||
| -rw-r--r-- | elisp/geiser-completion.el | 9 | ||||
| -rw-r--r-- | elisp/geiser-syntax.el | 57 | 
4 files changed, 40 insertions, 44 deletions
| diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el index 628b408..bf57187 100644 --- a/elisp/geiser-autodoc.el +++ b/elisp/geiser-autodoc.el @@ -148,7 +148,7 @@ when `geiser-autodoc-display-module-p' is on."          (erase-buffer)          (insert (format "(%s" (geiser-autodoc--id-name proc module)))          (let ((pos (or (cadr desc) 0)) -              (prev (caddr desc))) +              (prev (car (cddr desc))))            (dolist (a args)              (when (not (member a (cdr (member a args))))                (geiser-autodoc--insert-args a pos prev) diff --git a/elisp/geiser-base.el b/elisp/geiser-base.el index 4793616..41fb6fc 100644 --- a/elisp/geiser-base.el +++ b/elisp/geiser-base.el @@ -14,8 +14,6 @@  ;;; Emacs compatibility: -(require 'cl) -  (eval-after-load "ring"    '(when (not (fboundp 'ring-member))       (defun ring-member (ring item) @@ -24,15 +22,6 @@             (when (equal item (ring-ref ring ind))               (throw 'found ind))))))) -(when (not (fboundp 'completion-table-dynamic)) -  (defun completion-table-dynamic (fun) -    (lexical-let ((fun fun)) -      (lambda (string pred action) -        (with-current-buffer (let ((win (minibuffer-selected-window))) -                               (if (window-live-p win) (window-buffer win) -                                 (current-buffer))) -          (complete-with-action action (funcall fun string) string pred)))))) -  (when (not (fboundp 'looking-at-p))    (defsubst looking-at-p (regexp)      (let ((inhibit-changing-match-data t)) @@ -76,6 +65,11 @@  (put 'geiser--save-msg 'lisp-indent-function 0) +(defun geiser--del-dups (lst) +  (let (result) +    (dolist (e lst (nreverse result)) +      (unless (member e result) (push e result))))) +  (provide 'geiser-base)  ;;; geiser-base.el ends here diff --git a/elisp/geiser-completion.el b/elisp/geiser-completion.el index dea4a57..314e749 100644 --- a/elisp/geiser-completion.el +++ b/elisp/geiser-completion.el @@ -17,8 +17,6 @@  (require 'geiser-syntax)  (require 'geiser-base) -(require 'cl) -  ;;; Completions window handling, heavily inspired in slime's: @@ -72,7 +70,7 @@ terminates a current completion."    (remove-hook 'pre-command-hook                 'geiser-completion--maybe-restore-window-cfg)    (condition-case err -      (cond ((find last-command-event "()\"'`,# \r\n:") +      (cond ((memq last-command-event '(?( ?) ?\" ?' ?` ?, ?# ? ?\r ?\n ?:))               (geiser-completion--restore-window-cfg))              ((not (geiser-completion--window-active-p))               (geiser-completion--forget-window-cfg)) @@ -153,10 +151,9 @@ terminates a current completion."             geiser-completion--binding-forms*)))  (defun geiser-completion--symbol-list (prefix) -  (delete-duplicates +  (geiser--del-dups     (append (all-completions prefix (geiser-completion--locals)) -           (geiser-eval--send/result `(:eval ((:ge completions) ,prefix)))) -   :test 'string=)) +           (geiser-eval--send/result `(:eval ((:ge completions) ,prefix))))))  (defsubst geiser-completion--module-list (prefix)    (geiser-eval--send/result `(:eval ((:ge module-completions) ,prefix)))) diff --git a/elisp/geiser-syntax.el b/elisp/geiser-syntax.el index 551ee6a..ae6c072 100644 --- a/elisp/geiser-syntax.el +++ b/elisp/geiser-syntax.el @@ -17,6 +17,8 @@  (require 'scheme) +(eval-when-compile (require 'cl)) +  ;;; Indentation: @@ -248,34 +250,37 @@  (defsubst geiser-syntax--binding-form*-p (sbfs f)    (or (eq 'let* f) (memq f sbfs))) +(defsubst geiser-syntax--if-symbol (x) (and (symbolp x) x)) +(defsubst geiser-syntax--if-list (x) (and (listp x) x)) +(defsubst geiser-syntax--normalize (vars) +  (mapcar (lambda (i) (if (listp i) (car i) i)) vars)) +  (defun geiser-syntax--scan-locals (bfs sbfs form partial locals) -  (flet ((if-symbol (x) (and (symbolp x) x)) -         (if-list (x) (and (listp x) x)) -         (normalize (vars) (mapcar (lambda (i) (if (listp i) (car i) i)) vars))) -    (let ((form (if (listp form) (normalize form) form))) -      (cond ((or (null form) (not (listp form))) (normalize locals)) -            ((not (geiser-syntax--binding-form-p bfs sbfs (car form))) +  (let ((form (if (listp form) (geiser-syntax--normalize form) form))) +    (cond ((or (null form) (not (listp form))) +           (geiser-syntax--normalize locals)) +          ((not (geiser-syntax--binding-form-p bfs sbfs (car form))) +           (geiser-syntax--scan-locals bfs sbfs +                                       (car (last form)) partial locals)) +          (t +           (let* ((head (car form)) +                  (name (geiser-syntax--if-symbol (cadr form))) +                  (names (if name (geiser-syntax--if-list (caddr form)) +                           (geiser-syntax--if-list (cadr form)))) +                  (rest (if name (cdddr form) (cddr form))) +                  (use-names (or rest +                                 (not partial) +                                 (geiser-syntax--binding-form*-p sbfs +                                                                 head)))) +             (when name (push name locals)) +             (when use-names (dolist (n names) (push n locals))) +             (dolist (f (butlast rest)) +               (when (and (listp f) (eq (car f) 'define)) +                 (push (cadr f) locals)))               (geiser-syntax--scan-locals bfs sbfs -                                         (car (last form)) partial locals)) -            (t -             (let* ((head (car form)) -                    (name (if-symbol (cadr form))) -                    (names (if name (if-list (caddr form)) -                             (if-list (cadr form)))) -                    (rest (if name (cdddr form) (cddr form))) -                    (use-names (or rest -                                   (not partial) -                                   (geiser-syntax--binding-form*-p sbfs -                                                                   head)))) -               (when name (push name locals)) -               (when use-names (dolist (n names) (push n locals))) -               (dolist (f (butlast rest)) -                 (when (and (listp f) (eq (car f) 'define)) -                   (push (cadr f) locals))) -               (geiser-syntax--scan-locals bfs sbfs -                                           (car (last (or rest names))) -                                           partial -                                           locals))))))) +                                         (car (last (or rest names))) +                                         partial +                                         locals))))))  (defun geiser-syntax--locals-around-point (bfs sbfs)    (when (eq major-mode 'scheme-mode) | 
