branch: externals/idlwave
commit 2fc143f3c4bb8a10d5d6758aca4580d36646de2d
Author: jdsmith <jdsmith>
Commit: jdsmith <jdsmith>
- Separate html-system-help-location, to allow old, non system-provided
help to work as always.
- Check help locations and report something hopefully useful.
- Check if assistant available.
---
idlw-help.el | 81 ++++++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 57 insertions(+), 24 deletions(-)
diff --git a/idlw-help.el b/idlw-help.el
index b681c8c018..08a14a0828 100644
--- a/idlw-help.el
+++ b/idlw-help.el
@@ -61,11 +61,19 @@
(defvar idlwave-html-link-sep
(if idlwave-html-help-pre-v6 "#" "#wp"))
+(defcustom idlwave-html-system-help-location "help/online_help/"
+ "The directory, relative to idlwave-system-directory, where the idl
+HTML help files live, for IDL 6.2 and later. This location, if found,
+is used in preference to the old idlwave-html-help-location."
+ :group 'idlwave-online-help
+ :type 'directory)
+
(defcustom idlwave-html-help-location
- "help/online_help/"
- "The complete directory where the idl HTML help files live.
-If not an absolute path, it is considered relative to
-idlwave-system-directory."
+ (if (memq system-type '(ms-dos windows-nt))
+ nil
+ "/usr/local/etc/")
+ "The directory where the idl_html_help/ dir lives. Obsolete for IDL
+6.2 or later (see idlwave-html-system-help-location)."
:group 'idlwave-online-help
:type 'directory)
@@ -88,6 +96,8 @@ Defaults to `browse-url-browser-function', which see."
:group 'idlwave-online-help
:type 'string)
+(defvar browse-url-generic-args)
+
(defcustom idlwave-help-browser-generic-args
(if (boundp 'browse-url-generic-args)
browse-url-generic-args "")
@@ -192,8 +202,6 @@ support."
(t (:weight bold)))
"Face for highlighting links into IDLWAVE online help."
:group 'idlwave-online-help)
-;; backward-compatibility alias
-(put 'idlwave-help-link-face 'face-alias 'idlwave-help-link)
(defvar idlwave-help-activate-links-aggressively nil
"Obsolete variable.")
@@ -292,13 +300,32 @@ Here are all keybindings.
(defun idlwave-html-help-location ()
"Return the help directory where HTML files are, or nil if that is unknown."
- (let ((help-dir (or (and (stringp idlwave-html-help-location)
+ (let ((syshelp-dir (expand-file-name
+ idlwave-html-system-help-location (idlwave-sys-dir)))
+ (help-dir (or (and (stringp idlwave-html-help-location)
(> (length idlwave-html-help-location) 0)
idlwave-html-help-location)
(getenv "IDLWAVE_HELP_LOCATION"))))
- (if (file-name-absolute-p help-dir)
- help-dir
- (expand-file-name help-dir (idlwave-sys-dir)))))
+ (cond
+ (syshelp-dir)
+ (help-dir))))
+
+(defun idlwave-help-check-locations ()
+ ;; Check help locations and assistant.
+ (let ((sys-dir (idlwave-sys-dir))
+ (help-loc (idlwave-html-help-location)))
+ (if (or (not (file-directory-p sys-dir))
+ (not (file-directory-p help-loc)))
+ (message
+ "HTML help location not found: try setting `idlwave-system-directory'
and/or `idlwave-html-help-location'.")
+ ;; Got a location, see if we have the assistant
+ (when (and idlwave-help-use-assistant
+ (not (idlwave-help-assistant-available)))
+ (message "Cannot locate IDL Assistant, enabling default
browse-browser.")
+ (setq idlwave-help-use-assistant nil)
+ (unless idlwave-help-browse-url-available
+ (error "browse-url is not available; install it or IDL Assistant to
use HTML help."))))))
+
(defvar idlwave-current-obj_new-class)
(defvar idlwave-help-diagnostics)
@@ -762,26 +789,23 @@ see if a link is set for it. Try extra help functions if
necessary."
(browse-url-generic-program idlwave-help-browser-generic-program)
;(browse-url-generic-args idlwave-help-browser-generic-args)
full-link)
-
- (unless idlwave-help-browse-url-available
- (error "browse-url is not available -- install it to use HTML help."))
;; Just a regular file name (+ anchor name)
(unless (and (stringp help-loc)
(file-directory-p help-loc))
- (error
- "Invalid help location; customize `idlwave-html-help-location'."))
- (setq full-link (concat "file://" (expand-file-name link help-loc)))
+ (error "Invalid help location."))
+ (setq full-link (browse-url-file-url (expand-file-name link help-loc)))
- ;; Check for a local browser
+ ;; Select the browser
(cond
+ (idlwave-help-use-assistant
+ (idlwave-help-assistant-open-link link))
+
((or idlwave-help-browser-is-local
(string-match "w3" (symbol-name idlwave-help-browser-function)))
(idlwave-help-display-help-window '(lambda () (browse-url full-link))))
- (idlwave-help-use-assistant
- (idlwave-help-assistant-open-link link))
- (t
- (browse-url full-link)))))
+
+ (t (browse-url full-link)))))
;; A special help routine for source-level syntax help in files.
(defvar idlwave-help-fontify-source-code)
@@ -829,8 +853,8 @@ This function can be used as `idlwave-extra-help-function'."
(if in-buf
(progn
(setq file (buffer-file-name in-buf))
- (erase-buffer)
- (insert-buffer in-buf))
+ (erase-buffer)
+ (insert-buffer-substring in-buf))
(if (file-exists-p file) ;; otherwise just load the file
(progn
(erase-buffer)
@@ -1199,11 +1223,20 @@ Useful when source code is displayed as help. See the
option
"The command, rooted at idlwave-system-directory, which invokes the
IDL assistant.")
+(defvar idlwave-help-assistant-available nil)
+(defun idlwave-help-assistant-available ()
+ (if idlwave-help-assistant-available
+ (eq idlwave-help-assistant-available t)
+ (setq idlwave-help-assistant-available
+ (if (file-executable-p (idlwave-help-assistant-command))
+ t
+ 'not-available))))
+
(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, paging to LINK, if passed."
+ "Start the IDL Assistant, loading 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))