diff options
Diffstat (limited to 'wiki-utils.el')
-rw-r--r-- | wiki-utils.el | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/wiki-utils.el b/wiki-utils.el new file mode 100644 index 0000000..80680b7 --- /dev/null +++ b/wiki-utils.el @@ -0,0 +1,60 @@ +;;; wiki-utils.el -- wiki utility functions -*- lexical-binding: t -*- + +;; Copyright (C) 2023 Free Software Foundation. + +;; Author: Yuchen Pei <id@ypei.org> +;; Package-Requires: ((emacs "28.2")) + +;; This file is part of wiki.el. + +;; wiki.el is free software: you can redistribute it and/or modify it under +;; the terms of the GNU Affero General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; wiki.el is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General +;; Public License for more details. + +;; You should have received a copy of the GNU Affero General Public +;; License along with wiki.el. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; wiki utility functions. + +;;; Code: +(defvar wiki-download-dir "~/Downloads") + +(defun wiki-fetch-url (url) + "Fetch url and returns the buffer." + (interactive "sURL: ") + (let ((file-name (expand-file-name (wiki-make-file-name-from-url url) + wiki-download-dir))) + (url-retrieve url 'wiki-fetch-url-save-and-switch (list file-name))) + ) + +(defun wiki-fetch-url-save-and-switch (status file-name) + (unless (plist-get status :error) + (wiki-delete-http-header) + (write-file file-name) + (let ((coding-system-for-read 'utf-8)) + (revert-buffer t t)) + (switch-to-buffer (current-buffer)))) + +(defun wiki-delete-http-header () + (delete-region (point-min) (progn (wiki-skip-http-header) (point)))) + +(defun wiki-skip-http-header () + (goto-char (point-min)) + (re-search-forward "\r?\n\r?\n")) + +(defun wiki-make-file-name-from-url (url) + (file-name-nondirectory + (directory-file-name + (car (url-path-and-query (url-generic-parse-url + (url-unhex-string url))))))) + +(provide 'wiki-utils) +;;; wiki-utils.el ends here |