From 697db63180f49a3c33b440cf80eca74d39335826 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sun, 9 Jul 2023 11:34:57 +1000 Subject: Start work on wiki-engine Adding wiki-engine.el, wiki-utils.el --- wiki-utils.el | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 wiki-utils.el (limited to 'wiki-utils.el') 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 +;; 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 . + +;;; 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 -- cgit v1.2.3