emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] Changes to emacs/lisp/progmodes/idlw-help.el,v


From: John-David T. Smith
Subject: [Emacs-diffs] Changes to emacs/lisp/progmodes/idlw-help.el,v
Date: Mon, 20 Nov 2006 21:39:38 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     John-David T. Smith <jdsmith>   06/11/20 21:39:38

Index: idlw-help.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/progmodes/idlw-help.el,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- idlw-help.el        20 Apr 2006 19:45:16 -0000      1.15
+++ idlw-help.el        20 Nov 2006 21:39:38 -0000      1.16
@@ -6,7 +6,7 @@
 ;; Authors: J.D. Smith <address@hidden>
 ;;          Carsten Dominik <address@hidden>
 ;; Maintainer: J.D. Smith <address@hidden>
-;; Version: 6.0_em22
+;; Version: 6.1_em22
 
 ;; This file is part of GNU Emacs.
 
@@ -307,10 +307,12 @@
                           (> (length idlwave-html-help-location) 0)
                           idlwave-html-help-location)
                      (getenv "IDLWAVE_HELP_LOCATION"))))
-    (if (file-directory-p syshelp-dir) 
+    (if (and syshelp-dir (file-directory-p syshelp-dir))
        syshelp-dir
+      (if help-dir 
+         (progn
       (setq help-dir (expand-file-name "idl_html_help" help-dir))
-      (if (file-directory-p help-dir) help-dir))))
+           (if (file-directory-p help-dir) help-dir))))))
       
 (defvar idlwave-help-assistant-available nil) 
 
@@ -319,6 +321,7 @@
   (let ((sys-dir (idlwave-sys-dir))
        (help-loc (idlwave-html-help-location)))
     (if (or (not (file-directory-p sys-dir))
+           (not help-loc)
            (not (file-directory-p help-loc)))
        (message
         "HTML help location not found: try setting `idlwave-system-directory' 
and/or `idlwave-html-help-location'."))
@@ -1239,8 +1242,8 @@
 (defun idlwave-help-assistant-command ()
   (expand-file-name idlwave-help-assistant-command (idlwave-sys-dir)))
 
-(defun idlwave-help-assistant-start (&optional link)
-  "Start the IDL Assistant, loading LINK, if passed."
+(defun idlwave-help-assistant-start (&optional full-link)
+  "Start the IDL Assistant, loading link FULL-LINK, if passed."
   (when (or (not idlwave-help-assistant-socket)
            (not (eq (process-status idlwave-help-assistant-socket) 'open)))
     (let* ((help-loc (idlwave-html-help-location))
@@ -1249,8 +1252,7 @@
            (nconc
             (if (memq system-type '(ms-dos windows-nt))
                 `("-profile" ,(expand-file-name "idl.adp" help-loc)))
-            (if link 
-                `("-file" ,(expand-file-name link help-loc)))))
+            (if full-link `("-file" ,full-link))))
           port)
       (if idlwave-help-assistant-socket 
          (delete-process idlwave-help-assistant-socket))
@@ -1271,8 +1273,10 @@
              (open-network-stream "IDL_ASSISTANT_SOCK" 
                                   nil "localhost" port))
        (if (eq (process-status idlwave-help-assistant-socket) 'open)
+           (progn
            (process-send-string  idlwave-help-assistant-socket
                                  (concat "setHelpPath " help-loc "\n"))
+             t)
          (idlwave-help-assistant-close)
          (error "Cannot communicate with IDL_ASSISTANT"))))))
 
@@ -1282,17 +1286,57 @@
 
 (defun idlwave-help-assistant-open-link (&optional link)
   ;; Open a link (file name with anchor, no leading path) in the assistant.
-  (if link 
-      (let ((file (expand-file-name link (idlwave-html-help-location))))
-       (idlwave-help-assistant-start link)
+  (let ((help-loc (idlwave-html-help-location))
+       topic anchor file just-started exists full-link)
+    
+    (if (string-match "\.html" link)
+       (setq topic (substring link 0 (match-beginning 0))
+             anchor (substring link (match-end 0)))
+      (error "Malformed help link."))
+    
+    (setq file (expand-file-name (concat topic ".html") help-loc))
+    (if (file-exists-p file)
+       (setq exists t)
+      (setq file (expand-file-name 
+                 (concat (upcase topic) ".html") help-loc))
+      (setq exists (file-exists-p file)))
+    
+    (setq full-link    (concat file anchor)
+         just-started (idlwave-help-assistant-start (if exists full-link)))
+    (if exists
+       (progn
+         (if (not just-started)
+             (process-send-string idlwave-help-assistant-socket
+                                  (concat "openLink " full-link "\n")))
        (process-send-string idlwave-help-assistant-socket
-                            (concat "openLink " file "\n"))
-       (string-match "\.html" link)
+                              (concat "searchIndexNoOpen " topic "\n")))
        (process-send-string idlwave-help-assistant-socket
-                            (concat "searchIndexNoOpen " 
-                                    (substring link 0 (match-beginning 0))
-                                    "\n")))
-    (idlwave-help-assistant-raise)))
+                          (concat "searchIndexAndOpen " topic "\n"))))
+  (idlwave-help-assistant-raise))
+
+(defvar idlwave-help-assistant-help-with-topic-history nil
+  "The history of help topics selected with the minibuffer.")
+
+(defun idlwave-help-assistant-help-with-topic (&optional topic)
+  "Prompt for and provide help with TOPIC."
+  (interactive)
+  (let (list)
+    (unless topic
+      (idlwave-routines)
+      (setq list (append (mapcar (lambda (x)
+                                  (concat (nth 2 x) (car x)))
+                                idlwave-system-routines)
+                        (mapcar (lambda (x)
+                                  (concat "." (car x)))
+                                idlwave-executive-commands-alist)
+                        idlwave-system-class-info))
+      (setq topic 
+           (idlwave-completing-read 
+            "Help Topic: " list
+            nil nil nil
+            'idlwave-help-assistant-help-with-topic-history)))
+    (if (and topic (not (string= topic "")))
+       (idlwave-help-assistant-open-link (concat topic ".html")))))
   
 (defun idlwave-help-assistant-close ()
   (when (and idlwave-help-assistant-process




reply via email to

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