Doc, comment, etc updates for increased use of locate-user-emacs-file
[bpt/emacs.git] / lisp / progmodes / idlwave.el
index e58fb2b..8d43206 100644 (file)
@@ -1,6 +1,6 @@
 ;; idlwave.el --- IDL editing mode for GNU Emacs
 
-;; Copyright (C) 1999-201 Free Software Foundation, Inc.
+;; Copyright (C) 1999-2014 Free Software Foundation, Inc.
 
 ;; Authors: J.D. Smith <jdsmith@as.arizona.edu>
 ;;          Carsten Dominik <dominik@science.uva.nl>
@@ -27,7 +27,7 @@
 ;;; Commentary:
 
 ;; IDLWAVE enables feature-rich development and interaction with IDL,
-;; the Interactive Data Language. It provides a compelling,
+;; the Interactive Data Language.  It provides a compelling,
 ;; full-featured alternative to the IDLDE development environment
 ;; bundled with IDL.
 
@@ -381,7 +381,7 @@ current   Scan only the current buffer, but no other buffers."
   :type '(choice
          (const :tag "No buffer" nil)
          (const :tag "All buffers" t)
-         (const :tag "Current buffer only" 'current)))
+         (const :tag "Current buffer only" current)))
 
 (defcustom idlwave-query-shell-for-routine-info t
   "Non-nil means query the shell for info about compiled routines.
@@ -447,8 +447,9 @@ value of `!DIR'.  See also `idlwave-library-path'."
 
 ;; Configuration files
 (defcustom idlwave-config-directory
-  (convert-standard-filename "~/.idlwave")
+  (locate-user-emacs-file "idlwave" ".idlwave")
   "Directory for configuration files and user-library catalog."
+  :version "24.4"                      ; added locate-user-emacs-file
   :group 'idlwave-routine-info
   :type 'file)
 
@@ -776,7 +777,7 @@ spaces are left unchanged."
   :type '(choice
          (const :tag "Pad like assignments" t)
          (const :tag "Remove space near `='" nil)
-         (const :tag "Keep space near `='" 'keep)))
+         (other :tag "Keep space near `='" keep)))
 
 (defcustom idlwave-show-block t
   "Non-nil means point blinks to block beginning for `idlwave-show-begin'."
@@ -5078,11 +5079,14 @@ Cache to disk for quick recovery."
   ;; The sequence here is important because earlier definitions shadow
   ;; later ones.  We assume that if things in the buffers are newer
   ;; then in the shell of the system, they are meant to be different.
-  (setcdr idlwave-last-system-routine-info-cons-cell
-         (append idlwave-buffer-routines
-                 idlwave-compiled-routines
-                 idlwave-library-catalog-routines
-                 idlwave-user-catalog-routines))
+  (let ((temp (append idlwave-buffer-routines
+                     idlwave-compiled-routines
+                     idlwave-library-catalog-routines
+                     idlwave-user-catalog-routines)))
+    ;; Not actually used for anything?
+    (if idlwave-last-system-routine-info-cons-cell
+       (setcdr idlwave-last-system-routine-info-cons-cell temp)
+      (setq idlwave-last-system-routine-info-cons-cell (cons temp nil))))
   (setq idlwave-class-alist nil)
 
   ;; Give a message with information about the number of routines we have.
@@ -5481,30 +5485,21 @@ directories and save the routine info.
     (message "Creating user catalog file...")
     (kill-buffer "*idlwave-scan.pro*")
     (kill-buffer (get-buffer-create "*IDLWAVE Widget*"))
-    (let ((font-lock-maximum-size 0)
-         (auto-mode-alist nil))
-      (find-file idlwave-user-catalog-file))
-    (if (and (boundp 'font-lock-mode)
-            font-lock-mode)
-       (font-lock-mode 0))
-    (erase-buffer)
-    (insert ";; IDLWAVE user catalog file\n")
-    (insert (format ";; Created %s\n\n" (current-time-string)))
-
-    ;; Define the routine info list
-    (insert "\n(setq idlwave-user-catalog-routines\n    '(")
-    (let ((standard-output (current-buffer)))
-      (mapc (lambda (x)
-             (insert "\n    ")
-             (prin1 x)
-             (goto-char (point-max)))
-           idlwave-user-catalog-routines))
-    (insert (format "))\n\n;;; %s ends here\n"
-                   (file-name-nondirectory idlwave-user-catalog-file)))
-    (goto-char (point-min))
-    ;; Save the buffer
-    (save-buffer 0)
-    (kill-buffer (current-buffer)))
+    (with-temp-buffer
+      (insert ";; IDLWAVE user catalog file\n")
+      (insert (format ";; Created %s\n\n" (current-time-string)))
+
+      ;; Define the routine info list
+      (insert "\n(setq idlwave-user-catalog-routines\n    '(")
+      (let ((standard-output (current-buffer)))
+       (mapc (lambda (x)
+               (insert "\n    ")
+               (prin1 x)
+               (goto-char (point-max)))
+             idlwave-user-catalog-routines))
+      (insert (format "))\n\n;;; %s ends here\n"
+                     (file-name-nondirectory idlwave-user-catalog-file)))
+      (write-region nil nil idlwave-user-catalog-file)))
   (message "Creating user catalog file...done")
   (message "Info for %d routines saved in %s"
           (length idlwave-user-catalog-routines)
@@ -5522,31 +5517,23 @@ directories and save the routine info.
 (defun idlwave-write-paths ()
   (interactive)
   (when (and idlwave-path-alist idlwave-system-directory)
-    (let ((font-lock-maximum-size 0)
-         (auto-mode-alist nil))
-      (find-file idlwave-path-file))
-    (if (and (boundp 'font-lock-mode)
-            font-lock-mode)
-       (font-lock-mode 0))
-    (erase-buffer)
-    (insert ";; IDLWAVE paths\n")
-    (insert (format ";; Created %s\n\n" (current-time-string)))
+    (with-temp-buffer
+      (insert ";; IDLWAVE paths\n")
+      (insert (format ";; Created %s\n\n" (current-time-string)))
     ;; Define the variable which knows the value of "!DIR"
-    (insert (format "\n(setq idlwave-system-directory \"%s\")\n"
-                   idlwave-system-directory))
-
-    ;; Define the variable which contains a list of all scanned directories
-    (insert "\n(setq idlwave-path-alist\n    '(")
-    (let ((standard-output (current-buffer)))
-      (mapc (lambda (x)
-             (insert "\n      ")
-             (prin1 x)
-             (goto-char (point-max)))
-           idlwave-path-alist))
-    (insert "))\n")
-    (save-buffer 0)
-    (kill-buffer (current-buffer))))
-
+      (insert (format "\n(setq idlwave-system-directory \"%s\")\n"
+                     idlwave-system-directory))
+
+      ;; Define the variable which contains a list of all scanned directories
+      (insert "\n(setq idlwave-path-alist\n    '(")
+      (let ((standard-output (current-buffer)))
+       (mapc (lambda (x)
+               (insert "\n      ")
+               (prin1 x)
+               (goto-char (point-max)))
+             idlwave-path-alist))
+      (insert "))\n")
+      (write-region nil nil idlwave-path-file))))
 
 (defun idlwave-expand-path (path &optional default-dir)
   ;; Expand parts of path starting with '+' recursively into directory list.
@@ -9055,7 +9042,7 @@ Assumes that point is at the beginning of the unit as found by
 ;; Here we hack func-menu.el in order to support this new mode.
 ;; The latest versions of func-menu.el already have this stuff in, so
 ;; we hack only if it is not already there.
-(when (fboundp 'eval-after-load)
+(when (featurep 'xemacs)
   (eval-after-load "func-menu"
     '(progn
        (or (assq 'idlwave-mode fume-function-name-regexp-alist)
@@ -9309,6 +9296,8 @@ This function was written since `list-abbrevs' looks terrible for IDLWAVE mode."
   (with-current-buffer "*Help*"
     (setq truncate-lines t)))
 
+(declare-function speedbar-add-supported-extension "speedbar" (extension))
+
 ;; Add .pro files to speedbar for support, if it's loaded
 (eval-after-load "speedbar" '(speedbar-add-supported-extension ".pro"))