Update of /project/clim-desktop/cvsroot/clim-desktop In directory common-lisp:/tmp/cvs-serv9265
Modified Files: swine-cmds.lisp Log Message: Merged Troels' patch. Of course, the patch didn't like my local changes, so I had to merge it by hand. If anything super-breaks, it was me.
--- /project/clim-desktop/cvsroot/clim-desktop/swine-cmds.lisp 2006/01/06 03:15:45 1.1.1.1 +++ /project/clim-desktop/cvsroot/clim-desktop/swine-cmds.lisp 2006/02/15 05:12:22 1.2 @@ -23,112 +23,111 @@ ;;; of some of the editor-centric functionality of slime ;;; using calls to swank functions.
-(in-package :climacs-gui) +(in-package :climacs-lisp-syntax)
(define-command (com-eval-last-expression :name t :command-table lisp-table) () - (climacs-lisp-syntax::eval-last-expression-with-swank (point (current-window)) - (syntax (buffer (current-window))))) + (eval-last-expression-with-swank (point (current-window)) + (syntax (buffer (current-window)))))
-(set-key 'com-eval-last-expression - 'lisp-table - '((#\c :control) (#\e :control))) +(esa:set-key 'com-eval-last-expression + 'lisp-table + '((#\c :control) (#\e :control)))
(define-command (com-macroexpand-1 :name t :command-table lisp-table) () - (climacs-lisp-syntax::macroexpand-with-swank (point (current-window)) - (syntax (buffer (current-window))))) + (macroexpand-with-swank (point (current-window)) + (syntax (buffer (current-window)))))
-(set-key 'com-macroexpand-1 - 'lisp-table - '((#\c :control) (#\Newline))) +(esa:set-key 'com-macroexpand-1 + 'lisp-table + '((#\c :control) (#\Newline)))
(set-key 'com-macroexpand-1 - 'lisp-table - '((#\c :control) (#\m :control))) + 'lisp-table + '((#\c :control) (#\m :control)))
(define-command (com-macroexpand-all :name t :command-table lisp-table) () - (climacs-lisp-syntax::macroexpand-with-swank (point (current-window)) - (syntax (buffer (current-window))) - t)) - -(set-key 'com-macroexpand-all - 'lisp-table - '((#\c :control) (#\m :meta))) + (macroexpand-with-swank (point (current-window)) + (syntax (buffer (current-window))))) + +(esa:set-key 'com-macroexpand-all + 'lisp-table + '((#\c :control) (#\m :meta)))
(define-command (com-eval-region :name t :command-table lisp-table) () - (climacs-lisp-syntax::eval-region-with-swank (point (current-window)) - (mark (current-window)) - (syntax (buffer (current-window))))) - -(set-key 'com-eval-region - 'lisp-table - '((#\c :control) (#\r :control))) + (eval-region-with-swank (point (current-window)) + (mark (current-window)) + (syntax (buffer (current-window))))) + +(esa:set-key 'com-eval-region + 'lisp-table + '((#\c :control) (#\r :control)))
(define-command (com-compile-definition :name t :command-table lisp-table) () - (climacs-lisp-syntax::compile-defun-with-swank (point (current-window)) - (current-window) - (syntax (buffer (current-window))))) - -(set-key 'com-compile-definition - 'lisp-table - '((#\c :control) (#\c :control))) + (compile-defun-with-swank (point (current-window)) + (current-window) + (syntax (buffer (current-window))))) + +(esa:set-key 'com-compile-definition + 'lisp-table + '((#\c :control) (#\c :control)))
(define-command (com-compile-and-load-file :name t :command-table lisp-table) () - (climacs-lisp-syntax::compile-file-with-swank (buffer (current-window)) t)) + (compile-file-with-swank (buffer (current-window)) t))
-(set-key 'com-compile-and-load-file - 'lisp-table - '((#\c :control) (#\k :control))) +(esa:set-key 'com-compile-and-load-file + 'lisp-table + '((#\c :control) (#\k :control)))
(define-command (com-compile-file :name t :command-table lisp-table) () - (climacs-lisp-syntax::compile-file-with-swank (buffer (current-window)) nil)) + (compile-file-with-swank (buffer (current-window)) nil))
-(set-key 'com-compile-file - 'lisp-table - '((#\c :control) (#\k :meta))) +(esa:set-key 'com-compile-file + 'lisp-table + '((#\c :control) (#\k :meta)))
(define-command (com-goto-location :name t :command-table lisp-table) ((note 'swine-compiler-note)) - (climacs-lisp-syntax::goto-swine-location (climacs-lisp-syntax::location note))) + (goto-swine-location (location note)))
(define-presentation-to-command-translator swine-compiler-note-to-goto-location-translator - (climacs-lisp-syntax::swine-compiler-note com-goto-location lisp-table) + (swine-compiler-note com-goto-location lisp-table) (presentation) (list (presentation-object presentation)))
(define-command (com-goto-xref :name t :command-table lisp-table) ((xref 'swine-xref)) - (climacs-lisp-syntax::goto-swine-location xref)) + (goto-swine-location xref))
(define-presentation-to-command-translator swine-xref-to-goto-location-translator - (climacs-lisp-syntax::swine-xref com-goto-xref lisp-table) - (presentation) - (list (presentation-object presentation))) + (swine-xref com-goto-xref lisp-table) + (presentation) + (list (presentation-object presentation)))
(define-command (com-edit-definition :name t :command-table lisp-table) () - (let ((name (or (climacs-lisp-syntax::symbol-name-at-mark (point (current-window)) - (syntax (buffer (current-window)))) - (accept 'symbol :prompt "Edit symbol")))) - (climacs-lisp-syntax::edit-definition name (syntax (buffer (current-window)))))) - -(set-key 'com-edit-definition - 'lisp-table - '((#. :meta))) + (let ((name (or (symbol-name-at-mark (point (current-window)) + (syntax (buffer (current-window)))) + (accept 'symbol :prompt "Edit symbol")))) + (edit-definition name (syntax (buffer (current-window)))))) + +(esa:set-key 'com-edit-definition + 'lisp-table + '((#. :meta)))
(define-command (com-return-from-definition :name t :command-table lisp-table) () - (climacs-lisp-syntax::pop-find-definition-stack)) + (pop-find-definition-stack))
-(set-key 'com-return-from-definition - 'lisp-table - '((#, :meta))) +(esa:set-key 'com-return-from-definition + 'lisp-table + '((#, :meta)))
(define-command (com-hyperspec-lookup :name t :command-table lisp-table) () - (let* ((name (or (climacs-lisp-syntax::symbol-name-at-mark (point (current-window)) - (syntax (buffer (current-window)))) - (accept 'string :prompt "Hyperspec lookup for symbol"))) - (*standard-output* *debug-io*) - (url (clhs-lookup:spec-lookup name))) - (if (null url) (display-message "Symbol not found.") - (closure:visit url)))) + (let* ((name (or (symbol-name-at-mark (point (current-window)) + (syntax (buffer (current-window)))) + (accept 'string :prompt "Hyperspec lookup for symbol"))) + (*standard-output* *debug-io*) + (url (clhs-lookup:spec-lookup name))) + (if (null url) (display-message "Symbol not found.") + (closure:visit url))))
-(set-key 'com-hyperspec-lookup +(esa:set-key 'com-hyperspec-lookup 'lisp-table '((#\c :control) (#\d :control) (#\h)))
@@ -136,91 +135,106 @@ (defun show-arglist-silent (symbol) (if (fboundp symbol) (let ((arglist (swank::arglist symbol))) - (display-message (format nil "(~A~{ ~A~})" symbol arglist)) + (esa:display-message (format nil "(~A~{ ~A~})" symbol arglist)) t) nil))
(defun show-arglist (symbol name) (unless (show-arglist-silent symbol) - (display-message "Function ~a not found." name))) + (esa:display-message "Function ~a not found." name)))
(define-command (com-arglist-lookup :name t :command-table lisp-table) () - (let* ((name (string-upcase (or (climacs-lisp-syntax::symbol-name-at-mark (point (current-window)) - (syntax (buffer (current-window)))) - (accept 'string :prompt "Arglist lookup for symbol"))))) - (with-slots (package) (syntax (buffer (current-window))) - (let ((function-symbol (let* ((pos2 (position #: name :from-end t)) - (pos1 (if (and pos2 (char= (elt name (1- pos2)) #:)) (1- pos2) pos2) )) - (if pos2 (find-symbol (subseq name (1+ pos2)) (subseq name 0 pos1)) - (find-symbol name (or package *package*)))))) - (show-arglist function-symbol (string-upcase name)))))) + (let* ((name (string-upcase (or (symbol-name-at-mark (point (current-window)) + (syntax (buffer (current-window)))) + (accept 'string :prompt "Arglist lookup for symbol"))))) + (with-slots (package) (syntax (buffer (current-window))) + (let ((function-symbol (let* ((pos2 (position #: name :from-end t)) + (pos1 (if (and pos2 (char= (elt name (1- pos2)) #:)) (1- pos2) pos2) )) + (if pos2 (find-symbol (subseq name (1+ pos2)) (subseq name 0 pos1)) + (find-symbol name (or package *package*)))))) + (show-arglist function-symbol (string-upcase name)))))) + +(esa:set-key 'com-arglist-lookup + 'lisp-table + '((#\c :control) (#\d :control) (#\a))) +
-(set-key 'com-arglist-lookup - 'lisp-table - '((#\c :control) (#\d :control) (#\a)))
(define-command (com-swine-space :name t :command-table lisp-table) - () - (let* ((name (string-upcase (or (climacs-lisp-syntax::enclosing-list-first-word (point (current-window)) - (syntax (buffer (current-window)))) - (climacs-lisp-syntax::symbol-name-at-mark (point (current-window)) - (syntax (buffer (current-window)))))))) - - (when name - (with-slots (package) (syntax (buffer (current-window))) - (let ((function-symbol (let* ((pos2 (position #: name :from-end t)) - (pos1 (if (and pos2 (char= (elt name (1- pos2)) #:)) (1- pos2) pos2) )) - (if pos2 (find-symbol (subseq name (1+ pos2)) (subseq name 0 pos1)) - (find-symbol name (or package *package*)))))) - (show-arglist-silent function-symbol)))) - (insert-character #\Space) - (climacs-lisp-syntax::clear-completions))) - -(set-key 'com-swine-space - 'lisp-table - '((#\Space))) + () + (let ((mark (point (current-window)))) + ;; It is important that the space is inserted before we look up + ;; any symbols, but at the same time, there must not be a space + ;; between the mark and the symbol. + (insert-character #\Space) + (backward-object mark) + (let* ((name (string-upcase (or (enclosing-list-first-word + mark + (syntax (buffer (current-window)))) + (symbol-name-at-mark + mark + (syntax (buffer (current-window)))))))) + (when name + (with-slots (package) (syntax (buffer (current-window))) + (let ((function-symbol (let* ((pos2 (position #: name :from-end t)) + (pos1 (if (and pos2 (char= (elt name (1- pos2)) #:)) (1- pos2) pos2) )) + (handler-case (if pos2 (find-symbol (subseq name (1+ pos2)) (subseq name 0 pos1)) + (find-symbol name (or package *package*))) + (package-error (e) + ;; The specified symbol is in + ;; an invalid package. + (declare (ignore e)) + nil))))) + (show-arglist-silent function-symbol)))) + (forward-object mark) + (clear-completions)))) + +(esa:set-key 'com-swine-space + 'lisp-table + '((#\Space)))
(define-command (com-swine-simple-completion :name t :command-table lisp-table) () - (let* ((point-current-window (point (current-window))) - (name (climacs-lisp-syntax::symbol-name-at-mark point-current-window - (syntax (buffer (current-window)))))) - (when name - (let* ((completion (climacs-lisp-syntax::show-simple-completions name)) - (difference (let ((mismatch (mismatch name completion))) - (if mismatch - (subseq completion mismatch) - "")))) - (insert-sequence point-current-window difference))))) + (let* ((point-current-window (point (current-window))) + (name (symbol-name-at-mark point-current-window + (syntax (buffer (current-window)))))) + (when name + (let* ((completion (show-simple-completions name)) + (difference (let ((mismatch (mismatch name completion))) + (if mismatch + (subseq completion mismatch) + "")))) + (insert-sequence point-current-window difference)))))
(define-command (com-swine-completion :name t :command-table lisp-table) () - (let* ((point-current-window (point (current-window))) - (name (climacs-lisp-syntax::symbol-name-at-mark point-current-window - (syntax (buffer (current-window)))))) - (when name - (let ((completion (climacs-lisp-syntax::show-completions name)) - (mark (clone-mark point-current-window))) - (unless (= (length completion) 0) - (backward-object mark (length name)) - (delete-region mark point-current-window) - (insert-sequence point-current-window completion)))))) + (let* ((point-current-window (point (current-window))) + (name (symbol-name-at-mark point-current-window + (syntax (buffer (current-window)))))) + (when name + (let ((completion (show-completions name)) + (mark (clone-mark point-current-window))) + (unless (= (length completion) 0) + (backward-object mark (length name)) + (delete-region mark point-current-window) + (insert-sequence point-current-window completion))))))
(define-command (com-swine-fuzzy-completion :name t :command-table lisp-table) () - (let* ((point-current-window (point (current-window))) - (name (climacs-lisp-syntax::symbol-name-at-mark point-current-window - (syntax (buffer (current-window)))))) - (when name - (let ((completion (climacs-lisp-syntax::show-fuzzy-completions name)) - (mark (clone-mark point-current-window))) - (unless (= (length completion) 0) - (backward-object mark (length name)) - (delete-region mark point-current-window) - (insert-sequence point-current-window completion)))))) - -(set-key 'com-swine-completion - 'lisp-table - '((#\Tab :meta))) - -(set-key 'com-swine-fuzzy-completion - 'lisp-table - '((#\c :control) (#\i :meta))) + (let* ((point-current-window (point (current-window))) + (name (symbol-name-at-mark point-current-window + (syntax (buffer (current-window)))))) + (when name + (let ((completion (show-fuzzy-completions name)) + (mark (clone-mark point-current-window))) + (unless (= (length completion) 0) + (backward-object mark (length name)) + (delete-region mark point-current-window) + (insert-sequence point-current-window completion)))))) + +(esa:set-key 'com-swine-completion + 'lisp-table + '((#\Tab :meta))) + + +(esa:set-key 'com-swine-fuzzy-completion + 'lisp-table + '((#\c :control) (#\i :meta)))
clim-desktop-cvs@common-lisp.net