Changeset 6772 for branches


Ignore:
Timestamp:
Jun 20, 2007, 11:32:47 AM (17 years ago)
Author:
Gary Byers
Message:

strip package when indenting; defindent for cond (wrong!), find first
IN-PACKAGE.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ide-1.0/ccl/hemlock/src/lispmode.lisp

    r6704 r6772  
    858858(defindent "ccase" 1)                     
    859859(defindent "compiler-let" 1)
     860(defindent "cond" 0)
    860861(defindent "ctypecase" 1)
    861862(defindent "defconstant" 1)
     
    965966;;;
    966967(defindent "with-slots" 1)
    967 (defindent "with-slots*" 2) ; obsolete
    968968(defindent "with-accessors" 2)
    969 (defindent "with-accessors*" 2) ; obsolete
    970969(defindent "defclass" 2)
    971970(defindent "print-unreadable-object" 1)
     971(defindent "defmethod" 2)
    972972
    973973;;; System forms.
     
    984984
    985985;;; LISP-INDENTATION -- Internal Interface.
     986
     987(defun strip-package-prefix (string)
     988  (let* ((p (position #\: string :from-end t)))
     989    (if p
     990      (subseq string (1+ p))
     991      string)))
    986992;;;
    987993(defun lisp-indentation (mark)
     
    10061012      (with-mark ((fstart m))
    10071013        (scan-char m :lisp-syntax (not :constituent))
    1008         (let* ((fname (nstring-upcase (region-to-string (region fstart m))))
     1014        (let* ((fname (nstring-upcase
     1015                       (strip-package-prefix (region-to-string (region fstart m)))))
    10091016               (special-args (or (gethash fname *special-forms*)
    10101017                                 (and (> (length fname) 2)
     
    17161723(defmode "Lisp" :major-p t :setup-function 'setup-lisp-mode)
    17171724
     1725
     1726(defun buffer-first-in-package-form (buffer)
     1727  "Returns the package name referenced in the first apparent IN-PACKAGE
     1728   form in buffer, or NIL if it can't find an IN-PACKAGE."
     1729  (let* ((pattern (new-search-pattern :string-insensitive :forward "in-package" nil))
     1730         (mark (copy-mark (buffer-start-mark buffer))))
     1731    (with-mark ((start mark)
     1732                (end mark))
     1733      (loop
     1734        (unless (find-pattern mark pattern)
     1735          (return))
     1736        (pre-command-parse-check mark)
     1737        (when (valid-spot mark t)
     1738          (move-mark end mark)
     1739          (when (form-offset end 1)
     1740            (move-mark start end)
     1741            (when (backward-up-list start)
     1742              (when (scan-char start :lisp-syntax :constituent)
     1743                (let* ((s (nstring-upcase (region-to-string (region start end))))
     1744                       (*package* (find-package "CL-USER")))
     1745                  (unless (eq (ignore-errors (values (read-from-string s)))
     1746                              'in-package)
     1747                    (return)))
     1748                (unless (form-offset end 1) (return))
     1749                (move-mark start end)
     1750                (form-offset start -1)
     1751                (let* ((pkgname (ignore-errors (values (read-from-string (region-to-string (region start end)))))))
     1752                  (return
     1753                    (if pkgname
     1754                      (values (ignore-errors (string pkgname))))))))))))))
     1755
     1756(defun ensure-buffer-package (buffer)
     1757  (or (variable-value 'current-package :buffer buffer)
     1758      (setf (variable-value 'current-package :buffer buffer)
     1759            (buffer-first-in-package-form buffer))))
     1760
     1761
     1762
     1763   
    17181764(defun setup-lisp-mode (buffer)
    17191765  (unless (hemlock-bound-p 'current-package :buffer buffer)
     
    17211767      "The package used for evaluation of Lisp in this buffer."
    17221768      :buffer buffer
    1723       :value "CL-USER"
     1769      :value nil
    17241770      :hooks (list 'package-name-change-hook))))
    17251771
     
    18011847                (return nil)))))))))
    18021848
     1849(defcommand "Set Package Name" (p)
     1850  (variable-value 'current-package :buffer buffer)
    18031851               
Note: See TracChangeset for help on using the changeset viewer.