summaryrefslogtreecommitdiff
path: root/lib/tools
diff options
context:
space:
mode:
authorKjell Winblad <kjellwinblad@gmail.com>2019-10-17 14:58:08 +0200
committerKjell Winblad <kjellwinblad@gmail.com>2019-10-17 15:19:39 +0200
commit8157710f0f5216f5280b4bdfa37f1b1b228b8a6a (patch)
tree4c33846804e3d484310a732bd53cc11ab750aa0e /lib/tools
parent9a7a38539fa3a311ab454f6ab17253e198372bae (diff)
downloaderlang-8157710f0f5216f5280b4bdfa37f1b1b228b8a6a.tar.gz
Erlang emacs-mode: Store URL together with downloaded man pages
The commit makes sure that the download URL gets stored in a file after man pages have been downloaded by the erlang-mode. The interactive Emacs lisp function erlang-man-download will check the URL that is stored in this file and re-download the man pages if the URL has changed (i.e., the value of the variable erlang-man-download-url has changed or the user has typed another URL after a call to erlang-man-download-ask). Thanks to @johanclaesson (Johan Claesson) for suggesting this functionality. This commit also fixes a bug that caused the man menu items under the Erlang Emacs menu to not get displayed when the erlang-root-dir variable was nil even when man pages existed in the cache.
Diffstat (limited to 'lib/tools')
-rw-r--r--lib/tools/emacs/erlang.el34
1 files changed, 20 insertions, 14 deletions
diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el
index 6f1b190854..6e94520cab 100644
--- a/lib/tools/emacs/erlang.el
+++ b/lib/tools/emacs/erlang.el
@@ -1928,8 +1928,7 @@ The format is described in the documentation of `erlang-man-dirs'."
(while dir-list
(setq dir (cond ((nth 2 (car dir-list))
;; Relative to `erlang-root-dir'.
- (and (stringp erlang-root-dir)
- (erlang-man-dir (nth 1 (car dir-list)) t)))
+ (erlang-man-dir (nth 1 (car dir-list)) t))
(t
;; Absolute
(nth 1 (car dir-list)))))
@@ -1967,26 +1966,33 @@ Emacs directory, if the man pages haven't been downloaded
already. The URL from which the man pages are downloaded can be
configured with the variable \"erlang-man-download-url\""
(interactive)
- (let ((download-url (or download-url-param erlang-man-download-url))
- (downloaded-man-dir (erlang-man-user-local-emacs-dir))
- (downloaded-man-check-dir (concat
- (file-name-as-directory (erlang-man-user-local-emacs-dir))
- (file-name-as-directory "man"))))
- (if (file-directory-p downloaded-man-check-dir)
+ (let* ((download-url (or download-url-param erlang-man-download-url))
+ (downloaded-man-dir (erlang-man-user-local-emacs-dir))
+ (downloaded-man-url-file (concat
+ (file-name-as-directory downloaded-man-dir)
+ "erlang_man_download_url")))
+ (if (and (file-exists-p downloaded-man-url-file)
+ (string= download-url (with-temp-buffer
+ (insert-file-contents downloaded-man-url-file)
+ (buffer-string))))
downloaded-man-dir
(let ((man-file (concat (file-name-as-directory downloaded-man-dir) "man.tar.gz")))
(message "Downloading: %s to %s" download-url man-file)
(require 'url)
(mkdir downloaded-man-dir t)
(url-copy-file download-url man-file t)
- ; url-copy-file unpacks the
- ; zip archive (at least on my
- ; system) but this behavior is
- ; undocumented so do a tar
- ; with the z flag as well
+ ;; Write the download URL to a file so that future calls to
+ ;; erlang-man-download can check if the man cache should be
+ ;; updated
+ (write-region download-url nil downloaded-man-url-file)
+ ;; url-copy-file unpacks the zip archive (at least on my
+ ;; system) but this behavior is undocumented so do a tar with
+ ;; the z flag as well
(message "Note that %s will only be unpacked automatically if your system has the tar tool in its path" man-file)
(shell-command (format "tar -x -z -f %s -C %s" man-file downloaded-man-dir))
(message "The error message above can be ignored if everything works fine")
+ (message "Unpacking man pages using the command \"%s\""
+ (format "tar -x -f %s -C %s" man-file downloaded-man-dir))
(shell-command (format "tar -x -f %s -C %s" man-file downloaded-man-dir))
(message "Restarting erlang-mode")
(erlang-mode)
@@ -2024,7 +2030,7 @@ user."
default-man-dir
(if (and erlang-root-dir (file-directory-p alt-man-dir))
alt-man-dir
- (if (file-directory-p downloaded-man-dir)
+ (if (file-directory-p (concat (directory-file-name downloaded-man-dir) subdir))
(concat (directory-file-name downloaded-man-dir) subdir)
(and (not no-download) (erlang-man-download-ask subdir)))))))