mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-10 16:20:17 -08:00
New commands: find-library-other-window, find-library-other-frame
* lisp/emacs-lisp/find-func.el (find-library-other-window) (find-library-other-frame): New commands to complement the existing 'find-library' command. (Bug#26712) (read-library-name): New function to read a library name. * etc/NEWS: Mention 'find-library-other-window' and 'find-library-other-frame'.
This commit is contained in:
parent
1cbbecee66
commit
021430f4b4
2 changed files with 60 additions and 35 deletions
3
etc/NEWS
3
etc/NEWS
|
|
@ -356,6 +356,9 @@ use the local Emacs to edit remote files via Tramp. See the node
|
||||||
** The new variable 'eval-expression-print-maximum-character' prevents
|
** The new variable 'eval-expression-print-maximum-character' prevents
|
||||||
large integers from being displayed as characters.
|
large integers from being displayed as characters.
|
||||||
|
|
||||||
|
** Two new commands for finding the source code of Emacs Lisp
|
||||||
|
libraries: 'find-library-other-window' and 'find-library-other-frame'.
|
||||||
|
|
||||||
|
|
||||||
* Editing Changes in Emacs 26.1
|
* Editing Changes in Emacs 26.1
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -271,43 +271,65 @@ TYPE should be nil to find a function, or `defvar' to find a variable."
|
||||||
(cons (current-buffer) (match-beginning 0))))
|
(cons (current-buffer) (match-beginning 0))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun find-library (library &optional other-window)
|
(defun find-library (library)
|
||||||
"Find the Emacs Lisp source of LIBRARY.
|
"Find the Emacs Lisp source of LIBRARY.
|
||||||
LIBRARY should be a string (the name of the library). If the
|
|
||||||
optional OTHER-WINDOW argument (i.e., the command argument) is
|
Interactively, prompt for LIBRARY using the one at or near point."
|
||||||
specified, pop to a different window before displaying the
|
(interactive (list (read-library-name)))
|
||||||
buffer."
|
|
||||||
(interactive
|
|
||||||
(let* ((dirs (or find-function-source-path load-path))
|
|
||||||
(suffixes (find-library-suffixes))
|
|
||||||
(table (apply-partially 'locate-file-completion-table
|
|
||||||
dirs suffixes))
|
|
||||||
(def (if (eq (function-called-at-point) 'require)
|
|
||||||
;; `function-called-at-point' may return 'require
|
|
||||||
;; with `point' anywhere on this line. So wrap the
|
|
||||||
;; `save-excursion' below in a `condition-case' to
|
|
||||||
;; avoid reporting a scan-error here.
|
|
||||||
(condition-case nil
|
|
||||||
(save-excursion
|
|
||||||
(backward-up-list)
|
|
||||||
(forward-char)
|
|
||||||
(forward-sexp 2)
|
|
||||||
(thing-at-point 'symbol))
|
|
||||||
(error nil))
|
|
||||||
(thing-at-point 'symbol))))
|
|
||||||
(when (and def (not (test-completion def table)))
|
|
||||||
(setq def nil))
|
|
||||||
(list
|
|
||||||
(completing-read (if def
|
|
||||||
(format "Library name (default %s): " def)
|
|
||||||
"Library name: ")
|
|
||||||
table nil nil nil nil def)
|
|
||||||
current-prefix-arg)))
|
|
||||||
(prog1
|
(prog1
|
||||||
(funcall (if other-window
|
(switch-to-buffer (find-file-noselect (find-library-name library)))
|
||||||
'pop-to-buffer
|
(run-hooks 'find-function-after-hook)))
|
||||||
'pop-to-buffer-same-window)
|
|
||||||
(find-file-noselect (find-library-name library)))
|
(defun read-library-name ()
|
||||||
|
"Read and return a library name, defaulting to the one near point.
|
||||||
|
|
||||||
|
A library name is the filename of an Emacs Lisp library located
|
||||||
|
in a directory under `load-path' (or `find-function-source-path',
|
||||||
|
if non-nil)."
|
||||||
|
(let* ((dirs (or find-function-source-path load-path))
|
||||||
|
(suffixes (find-library-suffixes))
|
||||||
|
(table (apply-partially 'locate-file-completion-table
|
||||||
|
dirs suffixes))
|
||||||
|
(def (if (eq (function-called-at-point) 'require)
|
||||||
|
;; `function-called-at-point' may return 'require
|
||||||
|
;; with `point' anywhere on this line. So wrap the
|
||||||
|
;; `save-excursion' below in a `condition-case' to
|
||||||
|
;; avoid reporting a scan-error here.
|
||||||
|
(condition-case nil
|
||||||
|
(save-excursion
|
||||||
|
(backward-up-list)
|
||||||
|
(forward-char)
|
||||||
|
(forward-sexp 2)
|
||||||
|
(thing-at-point 'symbol))
|
||||||
|
(error nil))
|
||||||
|
(thing-at-point 'symbol))))
|
||||||
|
(when (and def (not (test-completion def table)))
|
||||||
|
(setq def nil))
|
||||||
|
(completing-read (if def
|
||||||
|
(format "Library name (default %s): " def)
|
||||||
|
"Library name: ")
|
||||||
|
table nil nil nil nil def)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun find-library-other-window (library)
|
||||||
|
"Find the Emacs Lisp source of LIBRARY in another window.
|
||||||
|
|
||||||
|
See `find-library' for more details."
|
||||||
|
(interactive (list (read-library-name)))
|
||||||
|
(prog1
|
||||||
|
(switch-to-buffer-other-window (find-file-noselect
|
||||||
|
(find-library-name library)))
|
||||||
|
(run-hooks 'find-function-after-hook)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun find-library-other-frame (library)
|
||||||
|
"Find the Emacs Lisp source of LIBRARY in another frame.
|
||||||
|
|
||||||
|
See `find-library' for more details."
|
||||||
|
(interactive (list (read-library-name)))
|
||||||
|
(prog1
|
||||||
|
(switch-to-buffer-other-frame (find-file-noselect
|
||||||
|
(find-library-name library)))
|
||||||
(run-hooks 'find-function-after-hook)))
|
(run-hooks 'find-function-after-hook)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue