changeset 83810:5ad1e235d4fa

James Wright <james at chumsley.org> (eshell/info): New function.
author Glenn Morris <rgm@gnu.org>
date Fri, 31 Aug 2007 08:08:37 +0000
parents 1b3f6edd2612
children 3f3a72ace3c3
files lisp/eshell/em-unix.el
diffstat 1 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/eshell/em-unix.el	Fri Aug 31 07:39:07 2007 +0000
+++ b/lisp/eshell/em-unix.el	Fri Aug 31 08:08:37 2007 +0000
@@ -168,6 +168,35 @@
 
 (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