]> git.eshelyaron.com Git - emacs.git/commitdiff
James Wright <james at chumsley.org>
authorGlenn Morris <rgm@gnu.org>
Fri, 31 Aug 2007 08:11:26 +0000 (08:11 +0000)
committerGlenn Morris <rgm@gnu.org>
Fri, 31 Aug 2007 08:11:26 +0000 (08:11 +0000)
(eshell/info): New function.

etc/NEWS
lisp/ChangeLog
lisp/eshell/em-unix.el

index 4f9204c7b75f8e4e176c3cd34785898262c28c5b..175a908a9db89e8f90a33269e4ccfd9f660c1496 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -191,6 +191,8 @@ on the corresponding remote system.
 and C-x C-q in wdired-mode exits it with asking a question about
 saving changes.
 
+*** The new command `eshell/info' runs info in an eshell buffer.
+
 \f
 * Changes in Emacs 23.1 on non-free operating systems
 
index 390fd60555a2e52e2f1344048368c11edd3211ef..2108434813983ea7aa2c1a718f0e98187115d9bb 100644 (file)
@@ -1,3 +1,7 @@
+2007-08-31  James Wright  <james@chumsley.org>
+
+       * eshell/em-unix.el (eshell/info): New function.
+
 2007-08-31  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * frame.el (frame-initialize, make-frame):
index 6dc02517ec10cce268be1d46dc24d7229af2ba40..ae65c7205b1efeeac8a0e6545b60be8325401e06 100644 (file)
@@ -168,6 +168,35 @@ Otherwise, Emacs will attempt to use rsh to invoke du on the remote machine."
 
 (put 'eshell/man 'eshell-no-numeric-conversions t)
 
+(defun eshell/info (&rest args)
+  "Runs the info command in-frame with the same behaviour as command-line `info', ie:
+  'info'           => goes to top info window
+  'info arg1'      => IF arg1 is a file, then visits arg1
+  'info arg1'      => OTHERWISE goes to top info window and then menu item arg1
+  'info arg1 arg2' => does action for arg1 (either visit-file or menu-item) and then menu item arg2
+  etc."
+  (require 'info)
+  (let ((file (cond
+                ((not (stringp (car args)))
+                 nil)
+                ((file-exists-p (expand-file-name (car args)))
+                 (expand-file-name (car args)))
+                ((file-exists-p (concat (expand-file-name (car args)) ".info"))
+                 (concat (expand-file-name (car args)) ".info")))))
+
+    ;; If the first arg is a file, then go to that file's Top node
+    ;; Otherwise, go to the global directory
+    (if file
+      (progn
+        (setq args (cdr args))
+        (Info-find-node file "Top"))
+      (Info-directory))
+
+    ;; Treat all remaining args as menu references
+    (while args
+      (Info-menu (car args))
+      (setq args (cdr args)))))
+
 (defun eshell-remove-entries (path files &optional top-level)
   "From PATH, remove all of the given FILES, perhaps interactively."
   (while files