Add a shadow-mode for load-path shadows.

* lisp/emacs-lisp/shadow.el (shadow-font-lock-keywords): New variable.
(shadow-mode): New mode.
(shadow-find-file): New button.
(list-load-path-shadows): Use shadow-mode and buttons.
This commit is contained in:
Glenn Morris 2010-10-06 19:37:39 -07:00
parent 52da218259
commit 7b9235ad95
2 changed files with 46 additions and 8 deletions

View file

@ -1,5 +1,10 @@
2010-10-07 Glenn Morris <rgm@gnu.org> 2010-10-07 Glenn Morris <rgm@gnu.org>
* emacs-lisp/shadow.el (shadow-font-lock-keywords): New variable.
(shadow-mode): New mode.
(shadow-find-file): New button.
(list-load-path-shadows): Use shadow-mode and buttons.
* iimage.el (iimage-version): Remove. * iimage.el (iimage-version): Remove.
(iimage-mode-image-search-path, iimage-mode-image-regex-alist): (iimage-mode-image-search-path, iimage-mode-image-regex-alist):
Turn into defcustoms. Turn into defcustoms.

View file

@ -151,6 +151,34 @@ See the documentation for `list-load-path-shadows' for further information."
(and (= (nth 7 (file-attributes f1)) (and (= (nth 7 (file-attributes f1))
(nth 7 (file-attributes f2))) (nth 7 (file-attributes f2)))
(eq 0 (call-process "cmp" nil nil nil "-s" f1 f2)))))))) (eq 0 (call-process "cmp" nil nil nil "-s" f1 f2))))))))
(defvar shadow-font-lock-keywords
`((,(format "hides \\(%s.*\\)"
(file-name-directory (locate-library "simple.el")))
. (1 font-lock-warning-face)))
"Keywords to highlight in `shadow-mode'.")
(define-derived-mode shadow-mode fundamental-mode "Shadow"
"Major mode for load-path shadows buffer."
(set (make-local-variable 'font-lock-defaults)
'((shadow-font-lock-keywords)))
(setq buffer-undo-list t
buffer-read-only t))
;; TODO use text-properties instead, a la dired.
(require 'button)
(define-button-type 'shadow-find-file
'follow-link t
;; 'face 'default
'action (lambda (button)
(let ((file (concat (button-get button 'shadow-file) ".el")))
(or (file-exists-p file)
(setq file (concat file ".gz")))
(if (file-readable-p file)
(pop-to-buffer (find-file-noselect file))
(error "Cannot read file"))))
'help-echo "mouse-2, RET: find this file")
;;;###autoload ;;;###autoload
(defun list-load-path-shadows (&optional stringp) (defun list-load-path-shadows (&optional stringp)
@ -234,14 +262,20 @@ function, `find-emacs-lisp-shadows'."
;; Create the *Shadows* buffer and display shadowings there. ;; Create the *Shadows* buffer and display shadowings there.
(let ((string (buffer-string))) (let ((string (buffer-string)))
(with-current-buffer (get-buffer-create "*Shadows*") (with-current-buffer (get-buffer-create "*Shadows*")
(fundamental-mode) ;run after-change-major-mode-hook.
(display-buffer (current-buffer)) (display-buffer (current-buffer))
(setq buffer-undo-list t (shadow-mode) ; run after-change-major-mode-hook
buffer-read-only nil) (let ((inhibit-read-only t))
(erase-buffer) (erase-buffer)
(insert string) (insert string)
(insert msg "\n") (insert msg "\n")
(setq buffer-read-only t))) (while (re-search-backward "\\(^.*\\) hides \\(.*$\\)"
nil t)
(dotimes (i 2)
(make-button (match-beginning (1+ i))
(match-end (1+ i))
'type 'shadow-find-file 'shadow-file
(match-string (1+ i)))))
(goto-char (point-max)))))
;; We are non-interactive, print shadows via message. ;; We are non-interactive, print shadows via message.
(unless (zerop n) (unless (zerop n)
(message "This site has duplicate Lisp libraries with the same name. (message "This site has duplicate Lisp libraries with the same name.
@ -259,5 +293,4 @@ version unless you know what you are doing.\n")
(provide 'shadow) (provide 'shadow)
;; arch-tag: 0480e8a7-62ed-4a12-a9f6-f44ded9b0830
;;; shadow.el ends here ;;; shadow.el ends here