emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 021430f: New commands: find-library-other-window, f


From: Eli Zaretskii
Subject: [Emacs-diffs] master 021430f: New commands: find-library-other-window, find-library-other-frame
Date: Sat, 20 May 2017 07:44:16 -0400 (EDT)

branch: master
commit 021430f4b48ceb43a443fe805cfe0b21e7829760
Author: Charles A. Roelli <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    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'.
---
 etc/NEWS                     |  3 ++
 lisp/emacs-lisp/find-func.el | 92 +++++++++++++++++++++++++++-----------------
 2 files changed, 60 insertions(+), 35 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index aa579b1..2a4b701 100644
--- a/etc/NEWS
+++ b/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
 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
 
diff --git a/lisp/emacs-lisp/find-func.el b/lisp/emacs-lisp/find-func.el
index d0acc14..9b98f05 100644
--- a/lisp/emacs-lisp/find-func.el
+++ b/lisp/emacs-lisp/find-func.el
@@ -271,43 +271,65 @@ TYPE should be nil to find a function, or `defvar' to 
find a variable."
     (cons (current-buffer) (match-beginning 0))))
 
 ;;;###autoload
-(defun find-library (library &optional other-window)
+(defun find-library (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
-specified, pop to a different window before displaying the
-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)))
+
+Interactively, prompt for LIBRARY using the one at or near point."
+  (interactive (list (read-library-name)))
+  (prog1
+      (switch-to-buffer (find-file-noselect (find-library-name library)))
+    (run-hooks 'find-function-after-hook)))
+
+(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
-      (funcall (if other-window
-                   'pop-to-buffer
-                 'pop-to-buffer-same-window)
-               (find-file-noselect (find-library-name library)))
+      (switch-to-buffer-other-frame (find-file-noselect
+                                     (find-library-name library)))
     (run-hooks 'find-function-after-hook)))
 
 ;;;###autoload



reply via email to

[Prev in Thread] Current Thread [Next in Thread]