Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
;; This file: ;; http://anggtwu.net/elisp/find-wget-jan-2024.el.html ;; http://anggtwu.net/elisp/find-wget-jan-2024.el ;; (find-angg "elisp/find-wget-jan-2024.el") ;; Author: Eduardo Ochs <eduardoochs@gmail.com> ;; See: https://lists.gnu.org/archive/html/help-gnu-emacs/2024-01/msg00033.html ;; https://lists.gnu.org/archive/html/help-gnu-emacs/2024-01/threads.html#00033 ;; Version: 2024jan14 ;; License: GPL3. ;; This is a simplified version of the `find-wget' from eev: ;; ;; http://anggtwu.net/eev-current/eev-plinks.el.html#find-wget ;; (find-eev "eev-plinks.el" "find-wget") ;; ;; Most functions were copied from the source code of eev without ;; changes; only the ones that are marked as "dummified" were replaced ;; by trivial versions. (defvar ee-wget-program "wget") (defvar ee-find-callprocess00-exit-status nil) ;; Dummified versions (defun ee-expand (fname) fname) (defun ee-goto-rest (list) ()) (defun ee-goto-position (&optional pos-spec &rest rest) ()) (defun find-ebuffer (buffer &rest pos-spec-list) "Hyperlink to an Emacs buffer (existing or not)." (interactive "bBuffer: ") (switch-to-buffer buffer) (apply 'ee-goto-position pos-spec-list)) (defun ee-split (str) "If STR is a string, split it on whitespace and return the resulting list. If STR if a list, return it unchanged." (if (stringp str) (split-string str "[ \t\n]+") str)) (defun find-callprocess00-ne (program-and-args) (let ((argv (ee-split program-and-args))) (with-output-to-string (with-current-buffer standard-output (setq ee-find-callprocess00-exit-status (apply 'call-process (car argv) nil t nil (cdr argv))))))) (defun find-wget (url &rest pos-spec-list) "Download URL with \"wget -q -O - URL\" and display the output. If a buffer named \"*wget: URL*\" already exists then this function visits it instead of running wget again. If wget can't download URL then this function runs `error'." (let* ((eurl (ee-expand url)) (wgetprogandargs (list ee-wget-program "-q" "-O" "-" eurl)) (wgetbufname (format "*wget: %s*" eurl))) (if (get-buffer wgetbufname) (apply 'find-ebuffer wgetbufname pos-spec-list) ;; ;; If the buffer wgetbufname doesn't exist, then: (let* ((wgetoutput (find-callprocess00-ne wgetprogandargs)) (wgetstatus ee-find-callprocess00-exit-status)) ;; (if (not (equal wgetstatus 0)) ;; See: (find-node "(wget)Exit Status") (error "wget can't download: %s" eurl)) ;; (find-ebuffer wgetbufname) ; create buffer (insert wgetoutput) (goto-char (point-min)) (apply 'ee-goto-position pos-spec-list))))) ;; Test: (eval-buffer) ;; (find-wget "http://anggtwu.net/LUA/Dang1.lua") ;; ;; When we run the test above on Debian the double angle brackets in ;; the line 12 of Dang1.lua are displayed correctly as single ;; characters - and when we run `M-x hexlify-buffer' we see that they ;; take are encoded in two bytes each - c2ab and c2bb. From ;; /usr/share/unicode/UnicodeData.txt: ;; ;; 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;; ;; 00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;; ;; ;; When we run the `find-wget' above in Emacs 29 for Windows the ;; resulting buffer is put in the encoding "iso-latin-1-dos". `M-x ;; hexlify-buffer' shows that they are still two bytes each - c2ab and ;; c2bb - but they are displayed as two characters each, preceded by ;; "c2"s:: ;; ;; 00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; ;; ;; The wget that I am using on Windows was extracted from this zip: ;; ;; https://eternallybored.org/misc/wget/releases/wget-1.21.2-win64.zip ;; Local Variables: ;; coding: utf-8-unix ;; End: