Package: emacs;
Reported by: Greg Minshall <minshall <at> umich.edu>
Date: Fri, 16 Aug 2024 04:38:01 UTC
Severity: normal
Found in version 31.0.50
To reply to this bug, email your comments to 72652 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#72652
; Package emacs
.
(Fri, 16 Aug 2024 04:38:01 GMT) Full text and rfc822 format available.Greg Minshall <minshall <at> umich.edu>
:bug-gnu-emacs <at> gnu.org
.
(Fri, 16 Aug 2024 04:38:01 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Greg Minshall <minshall <at> umich.edu> To: bug-gnu-emacs <at> gnu.org Subject: 31.0.50; url-retrieve on non-existent domain gives no indication of error Date: Fri, 16 Aug 2024 07:34:08 +0300
if url-retrieve is called with a url for a non-existent domain, it neither returns an error (it returns a buffer, as it is documented to do), nor does it seem to invoke the callback routine passed to it to report any error (or success, or anything else, for that matter). the following code uses example.com. calling - `(mytry 0)` should work, downloading "index.html" - `(mytry 1)` should give a 404 -- no such file "index99.html" - `(mytry 2)` doesn't give anything (but, the code ends after 5 seconds) as there is no such host "x.example.com". with 0 or 1, the callback routine is invoked, but with 2, it isn't. (after 5 seconds the code finishes, displays whatever might be in the buffer url-retrieve uses to return the results.) apologies if i'm missing some channel through which `url-retrieve` is announcing the failure (like a sentinel?). >>>> ;;; ... -*- lexical-binding: t -*- (defun mysage (&rest args) "Like (message), but send ARGS to stdout, even in batch mode. \(In batch mode, (message) sends to stderr; the prin1, etc., send to stdout." (princ (format "%s\n" (apply 'format args)))) (defun mytry (n) "Try url-retrieve on a URL. N is 0, 1, or 2." (let* ((urls '("https://example.com/index.html" "https://example.com/index99.html" "https://x.example.com/index.html")) (buffer (url-retrieve (nth n urls) (lambda (&rest results) (mysage "called back")) nil))) (mysage "url-retrieve returns %s" buffer) (sleep-for 5) (with-current-buffer buffer (mysage "buffer %s contents: %s" buffer (buffer-substring (point-min) (point-max)))))) >>>> In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.42, cairo version 1.18.0) of 2024-08-15 built on archlinuxRepository revision: dcd5b80b09c4679d7cceecc852725dba6a75b5f0 Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12101013 System Description: Arch Linux Configured using: 'configure --with-xwidgets --with-modules --without-dbus CFLAGS=-g3 'LDFLAGS=-L/usr/local/lib -L/lib -L/usr/X11R6/lib'' Configured features: ACL CAIRO FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM XWIDGETS GTK3 ZLIB Important settings: value of $LANG: C.UTF-8 value of $XMODIFIERS: @im=none locale-coding-system: utf-8-unix Major mode: ELisp/l Minor modes in effect: bug-reference-prog-mode: t windmove-mode: t my-global-column-number-mode: t subword-mode: t my-global-subword-mode: t yas-global-mode: t yas-minor-mode: t which-key-mode: t vertico-mode: t sly-symbol-completion-mode: t pulsar-global-mode: t pulsar-mode: t org-roam-db-autosync-mode: t marginalia-mode: t highlight-doxygen-global-mode: t filladapt-mode: t emms-mode-line-mode: t emms-playing-time-display-mode: t emms-playing-time-mode: t csv-field-index-mode: t global-corfu-mode: t corfu-mode: t global-flycheck-mode: t flycheck-mode: t override-global-mode: t straight-use-package-mode: t straight-package-neutering-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t window-divider-mode: t minibuffer-regexp-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/minshall/usr/share/emacs/lisp/misc/middling hides /home/minshall/.emacs.d/straight/build/middling/middling /home/minshall/.emacs.d/straight/build/emacsql/emacsql-sqlite-builtin hides /home/minshall/.emacs.d/straight/build/emacsql-sqlite-builtin/emacsql-sqlite-builtin /home/minshall/usr/share/emacs/lisp/misc/orgtbl-sqlinsert hides /home/minshall/.emacs.d/straight/build/org-contrib/orgtbl-sqlinsert /home/minshall/.emacs.d/straight/build/jsonrpc/jsonrpc hides /usr/local/share/emacs/31.0.50/lisp/jsonrpc /home/minshall/.emacs.d/straight/build/bind-key/bind-key hides /usr/local/share/emacs/31.0.50/lisp/bind-key /home/minshall/.emacs.d/straight/build/transient/transient hides /usr/local/share/emacs/31.0.50/lisp/transient /home/minshall/.emacs.d/straight/build/which-key/which-key hides /usr/local/share/emacs/31.0.50/lisp/which-key /home/minshall/.emacs.d/straight/build/use-package/use-package-diminish hides /usr/local/share/emacs/31.0.50/lisp/use-package/use-package-diminish /home/minshall/.emacs.d/straight/build/use-package/use-package-core hides /usr/local/share/emacs/31.0.50/lisp/use-package/use-package-core /home/minshall/.emacs.d/straight/build/use-package/use-package-delight hides /usr/local/share/emacs/31.0.50/lisp/use-package/use-package-delight /home/minshall/.emacs.d/straight/build/use-package/use-package-ensure hides /usr/local/share/emacs/31.0.50/lisp/use-package/use-package-ensure /home/minshall/.emacs.d/straight/build/use-package/use-package-bind-key hides /usr/local/share/emacs/31.0.50/lisp/use-package/use-package-bind-key /home/minshall/.emacs.d/straight/build/use-package/use-package-lint hides /usr/local/share/emacs/31.0.50/lisp/use-package/use-package-lint /home/minshall/.emacs.d/straight/build/use-package/use-package hides /usr/local/share/emacs/31.0.50/lisp/use-package/use-package /home/minshall/.emacs.d/straight/build/use-package/use-package-jump hides /usr/local/share/emacs/31.0.50/lisp/use-package/use-package-jump /home/minshall/.emacs.d/straight/build/xref/xref hides /usr/local/share/emacs/31.0.50/lisp/progmodes/xref /home/minshall/.emacs.d/straight/build/flymake/flymake hides /usr/local/share/emacs/31.0.50/lisp/progmodes/flymake /home/minshall/.emacs.d/straight/build/eglot/eglot hides /usr/local/share/emacs/31.0.50/lisp/progmodes/eglot /home/minshall/.emacs.d/straight/build/peg/peg hides /usr/local/share/emacs/31.0.50/lisp/progmodes/peg /home/minshall/.emacs.d/straight/build/project/project hides /usr/local/share/emacs/31.0.50/lisp/progmodes/project /home/minshall/.emacs.d/straight/build/org/ol-w3m hides /usr/local/share/emacs/31.0.50/lisp/org/ol-w3m /home/minshall/.emacs.d/straight/build/org/ob-perl hides /usr/local/share/emacs/31.0.50/lisp/org/ob-perl /home/minshall/.emacs.d/straight/build/org/ox-beamer hides /usr/local/share/emacs/31.0.50/lisp/org/ox-beamer /home/minshall/.emacs.d/straight/build/org/org-duration hides /usr/local/share/emacs/31.0.50/lisp/org/org-duration /home/minshall/.emacs.d/straight/build/org/ob-sass hides /usr/local/share/emacs/31.0.50/lisp/org/ob-sass /home/minshall/.emacs.d/straight/build/org/ob-julia hides /usr/local/share/emacs/31.0.50/lisp/org/ob-julia /home/minshall/.emacs.d/straight/build/org/ob-C hides /usr/local/share/emacs/31.0.50/lisp/org/ob-C /home/minshall/.emacs.d/straight/build/org/ob-lilypond hides /usr/local/share/emacs/31.0.50/lisp/org/ob-lilypond /home/minshall/.emacs.d/straight/build/org/org-mouse hides /usr/local/share/emacs/31.0.50/lisp/org/org-mouse /home/minshall/.emacs.d/straight/build/org/oc-csl hides /usr/local/share/emacs/31.0.50/lisp/org/oc-csl /home/minshall/.emacs.d/straight/build/org/ob-lua hides /usr/local/share/emacs/31.0.50/lisp/org/ob-lua /home/minshall/.emacs.d/straight/build/org/org-inlinetask hides /usr/local/share/emacs/31.0.50/lisp/org/org-inlinetask /home/minshall/.emacs.d/straight/build/org/org-macro hides /usr/local/share/emacs/31.0.50/lisp/org/org-macro /home/minshall/.emacs.d/straight/build/org/ob-clojure hides /usr/local/share/emacs/31.0.50/lisp/org/ob-clojure /home/minshall/.emacs.d/straight/build/org/org-macs hides /usr/local/share/emacs/31.0.50/lisp/org/org-macs /home/minshall/.emacs.d/straight/build/org/ol-bbdb hides /usr/local/share/emacs/31.0.50/lisp/org/ol-bbdb /home/minshall/.emacs.d/straight/build/org/ox-md hides /usr/local/share/emacs/31.0.50/lisp/org/ox-md /home/minshall/.emacs.d/straight/build/org/org-num hides /usr/local/share/emacs/31.0.50/lisp/org/org-num /home/minshall/.emacs.d/straight/build/org/ob-matlab hides /usr/local/share/emacs/31.0.50/lisp/org/ob-matlab /home/minshall/.emacs.d/straight/build/org/org-list hides /usr/local/share/emacs/31.0.50/lisp/org/org-list /home/minshall/.emacs.d/straight/build/org/ob-tangle hides /usr/local/share/emacs/31.0.50/lisp/org/ob-tangle /home/minshall/.emacs.d/straight/build/org/ob-plantuml hides /usr/local/share/emacs/31.0.50/lisp/org/ob-plantuml /home/minshall/.emacs.d/straight/build/org/oc-natbib hides /usr/local/share/emacs/31.0.50/lisp/org/oc-natbib /home/minshall/.emacs.d/straight/build/org/ob-awk hides /usr/local/share/emacs/31.0.50/lisp/org/ob-awk /home/minshall/.emacs.d/straight/build/org/ox-texinfo hides /usr/local/share/emacs/31.0.50/lisp/org/ox-texinfo /home/minshall/.emacs.d/straight/build/org/ol-gnus hides /usr/local/share/emacs/31.0.50/lisp/org/ol-gnus /home/minshall/.emacs.d/straight/build/org/oc-biblatex hides /usr/local/share/emacs/31.0.50/lisp/org/oc-biblatex /home/minshall/.emacs.d/straight/build/org/ob-calc hides /usr/local/share/emacs/31.0.50/lisp/org/ob-calc /home/minshall/.emacs.d/straight/build/org/org-loaddefs hides /usr/local/share/emacs/31.0.50/lisp/org/org-loaddefs /home/minshall/.emacs.d/straight/build/org/ol-eww hides /usr/local/share/emacs/31.0.50/lisp/org/ol-eww /home/minshall/.emacs.d/straight/build/org/ob-ditaa hides /usr/local/share/emacs/31.0.50/lisp/org/ob-ditaa /home/minshall/.emacs.d/straight/build/org/org-ctags hides /usr/local/share/emacs/31.0.50/lisp/org/org-ctags /home/minshall/.emacs.d/straight/build/org/ob-sed hides /usr/local/share/emacs/31.0.50/lisp/org/ob-sed /home/minshall/.emacs.d/straight/build/org/org-refile hides /usr/local/share/emacs/31.0.50/lisp/org/org-refile /home/minshall/.emacs.d/straight/build/org/ob-processing hides /usr/local/share/emacs/31.0.50/lisp/org/ob-processing /home/minshall/.emacs.d/straight/build/org/org-pcomplete hides /usr/local/share/emacs/31.0.50/lisp/org/org-pcomplete /home/minshall/.emacs.d/straight/build/org/ox-org hides /usr/local/share/emacs/31.0.50/lisp/org/ox-org /home/minshall/.emacs.d/straight/build/org/ob-comint hides /usr/local/share/emacs/31.0.50/lisp/org/ob-comint /home/minshall/.emacs.d/straight/build/org/ox-ascii hides /usr/local/share/emacs/31.0.50/lisp/org/ox-ascii /home/minshall/.emacs.d/straight/build/org/org-timer hides /usr/local/share/emacs/31.0.50/lisp/org/org-timer /home/minshall/.emacs.d/straight/build/org/ob-groovy hides /usr/local/share/emacs/31.0.50/lisp/org/ob-groovy /home/minshall/.emacs.d/straight/build/org/ox hides /usr/local/share/emacs/31.0.50/lisp/org/ox /home/minshall/.emacs.d/straight/build/org/ob-table hides /usr/local/share/emacs/31.0.50/lisp/org/ob-table /home/minshall/.emacs.d/straight/build/org/ox-latex hides /usr/local/share/emacs/31.0.50/lisp/org/ox-latex /home/minshall/.emacs.d/straight/build/org/ol hides /usr/local/share/emacs/31.0.50/lisp/org/ol /home/minshall/.emacs.d/straight/build/org/org-protocol hides /usr/local/share/emacs/31.0.50/lisp/org/org-protocol /home/minshall/.emacs.d/straight/build/org/org-id hides /usr/local/share/emacs/31.0.50/lisp/org/org-id /home/minshall/.emacs.d/straight/build/org/ob-latex hides /usr/local/share/emacs/31.0.50/lisp/org/ob-latex /home/minshall/.emacs.d/straight/build/org/org-attach hides /usr/local/share/emacs/31.0.50/lisp/org/org-attach /home/minshall/.emacs.d/straight/build/org/ol-info hides /usr/local/share/emacs/31.0.50/lisp/org/ol-info /home/minshall/.emacs.d/straight/build/org/ob-screen hides /usr/local/share/emacs/31.0.50/lisp/org/ob-screen /home/minshall/.emacs.d/straight/build/org/ob-forth hides /usr/local/share/emacs/31.0.50/lisp/org/ob-forth /home/minshall/.emacs.d/straight/build/org/ob-ref hides /usr/local/share/emacs/31.0.50/lisp/org/ob-ref /home/minshall/.emacs.d/straight/build/org/org-src hides /usr/local/share/emacs/31.0.50/lisp/org/org-src /home/minshall/.emacs.d/straight/build/org/ol-mhe hides /usr/local/share/emacs/31.0.50/lisp/org/ol-mhe /home/minshall/.emacs.d/straight/build/org/ob-haskell hides /usr/local/share/emacs/31.0.50/lisp/org/ob-haskell /home/minshall/.emacs.d/straight/build/org/ol-bibtex hides /usr/local/share/emacs/31.0.50/lisp/org/ol-bibtex /home/minshall/.emacs.d/straight/build/org/org-table hides /usr/local/share/emacs/31.0.50/lisp/org/org-table /home/minshall/.emacs.d/straight/build/org/ob-scheme hides /usr/local/share/emacs/31.0.50/lisp/org/ob-scheme /home/minshall/.emacs.d/straight/build/org/ox-publish hides /usr/local/share/emacs/31.0.50/lisp/org/ox-publish /home/minshall/.emacs.d/straight/build/org/ol-irc hides /usr/local/share/emacs/31.0.50/lisp/org/ol-irc /home/minshall/.emacs.d/straight/build/org/ob-org hides /usr/local/share/emacs/31.0.50/lisp/org/ob-org /home/minshall/.emacs.d/straight/build/org/org-crypt hides /usr/local/share/emacs/31.0.50/lisp/org/org-crypt /home/minshall/.emacs.d/straight/build/org/ob-fortran hides /usr/local/share/emacs/31.0.50/lisp/org/ob-fortran /home/minshall/.emacs.d/straight/build/org/org-attach-git hides /usr/local/share/emacs/31.0.50/lisp/org/org-attach-git /home/minshall/.emacs.d/straight/build/org/ob-shell hides /usr/local/share/emacs/31.0.50/lisp/org/ob-shell /home/minshall/.emacs.d/straight/build/org/org-faces hides /usr/local/share/emacs/31.0.50/lisp/org/org-faces /home/minshall/.emacs.d/straight/build/org/ob-js hides /usr/local/share/emacs/31.0.50/lisp/org/ob-js /home/minshall/.emacs.d/straight/build/org/org-datetree hides /usr/local/share/emacs/31.0.50/lisp/org/org-datetree /home/minshall/.emacs.d/straight/build/org/ox-odt hides /usr/local/share/emacs/31.0.50/lisp/org/ox-odt /home/minshall/.emacs.d/straight/build/org/ob-maxima hides /usr/local/share/emacs/31.0.50/lisp/org/ob-maxima /home/minshall/.emacs.d/straight/build/org/org-version hides /usr/local/share/emacs/31.0.50/lisp/org/org-version /home/minshall/.emacs.d/straight/build/org/ol-man hides /usr/local/share/emacs/31.0.50/lisp/org/ol-man /home/minshall/.emacs.d/straight/build/org/org-fold-core hides /usr/local/share/emacs/31.0.50/lisp/org/org-fold-core /home/minshall/.emacs.d/straight/build/org/org-persist hides /usr/local/share/emacs/31.0.50/lisp/org/org-persist /home/minshall/.emacs.d/straight/build/org/org hides /usr/local/share/emacs/31.0.50/lisp/org/org /home/minshall/.emacs.d/straight/build/org/ob-gnuplot hides /usr/local/share/emacs/31.0.50/lisp/org/ob-gnuplot /home/minshall/.emacs.d/straight/build/org/ob-emacs-lisp hides /usr/local/share/emacs/31.0.50/lisp/org/ob-emacs-lisp /home/minshall/.emacs.d/straight/build/org/ob-sqlite hides /usr/local/share/emacs/31.0.50/lisp/org/ob-sqlite /home/minshall/.emacs.d/straight/build/org/ol-rmail hides /usr/local/share/emacs/31.0.50/lisp/org/ol-rmail /home/minshall/.emacs.d/straight/build/org/ob-exp hides /usr/local/share/emacs/31.0.50/lisp/org/ob-exp /home/minshall/.emacs.d/straight/build/org/ob-lob hides /usr/local/share/emacs/31.0.50/lisp/org/ob-lob /home/minshall/.emacs.d/straight/build/org/ob-R hides /usr/local/share/emacs/31.0.50/lisp/org/ob-R /home/minshall/.emacs.d/straight/build/org/org-mobile hides /usr/local/share/emacs/31.0.50/lisp/org/org-mobile /home/minshall/.emacs.d/straight/build/org/ob hides /usr/local/share/emacs/31.0.50/lisp/org/ob /home/minshall/.emacs.d/straight/build/org/ol-doi hides /usr/local/share/emacs/31.0.50/lisp/org/ol-doi /home/minshall/.emacs.d/straight/build/org/org-goto hides /usr/local/share/emacs/31.0.50/lisp/org/org-goto /home/minshall/.emacs.d/straight/build/org/ob-eval hides /usr/local/share/emacs/31.0.50/lisp/org/ob-eval /home/minshall/.emacs.d/straight/build/org/org-lint hides /usr/local/share/emacs/31.0.50/lisp/org/org-lint /home/minshall/.emacs.d/straight/build/org/ob-python hides /usr/local/share/emacs/31.0.50/lisp/org/ob-python /home/minshall/.emacs.d/straight/build/org/org-compat hides /usr/local/share/emacs/31.0.50/lisp/org/org-compat /home/minshall/.emacs.d/straight/build/org/org-indent hides /usr/local/share/emacs/31.0.50/lisp/org/org-indent /home/minshall/.emacs.d/straight/build/org/ob-core hides /usr/local/share/emacs/31.0.50/lisp/org/ob-core /home/minshall/.emacs.d/straight/build/org/ob-eshell hides /usr/local/share/emacs/31.0.50/lisp/org/ob-eshell /home/minshall/.emacs.d/straight/build/org/org-cycle hides /usr/local/share/emacs/31.0.50/lisp/org/org-cycle /home/minshall/.emacs.d/straight/build/org/org-footnote hides /usr/local/share/emacs/31.0.50/lisp/org/org-footnote /home/minshall/.emacs.d/straight/build/org/ol-eshell hides /usr/local/share/emacs/31.0.50/lisp/org/ol-eshell /home/minshall/.emacs.d/straight/build/org/ox-koma-letter hides /usr/local/share/emacs/31.0.50/lisp/org/ox-koma-letter /home/minshall/.emacs.d/straight/build/org/oc hides /usr/local/share/emacs/31.0.50/lisp/org/oc /home/minshall/.emacs.d/straight/build/org/ob-dot hides /usr/local/share/emacs/31.0.50/lisp/org/ob-dot /home/minshall/.emacs.d/straight/build/org/org-capture hides /usr/local/share/emacs/31.0.50/lisp/org/org-capture /home/minshall/.emacs.d/straight/build/org/org-colview hides /usr/local/share/emacs/31.0.50/lisp/org/org-colview /home/minshall/.emacs.d/straight/build/org/ox-icalendar hides /usr/local/share/emacs/31.0.50/lisp/org/ox-icalendar /home/minshall/.emacs.d/straight/build/org/ob-ruby hides /usr/local/share/emacs/31.0.50/lisp/org/ob-ruby /home/minshall/.emacs.d/straight/build/org/ob-octave hides /usr/local/share/emacs/31.0.50/lisp/org/ob-octave /home/minshall/.emacs.d/straight/build/org/org-keys hides /usr/local/share/emacs/31.0.50/lisp/org/org-keys /home/minshall/.emacs.d/straight/build/org/oc-bibtex hides /usr/local/share/emacs/31.0.50/lisp/org/oc-bibtex /home/minshall/.emacs.d/straight/build/org/org-entities hides /usr/local/share/emacs/31.0.50/lisp/org/org-entities /home/minshall/.emacs.d/straight/build/org/org-habit hides /usr/local/share/emacs/31.0.50/lisp/org/org-habit /home/minshall/.emacs.d/straight/build/org/ob-css hides /usr/local/share/emacs/31.0.50/lisp/org/ob-css /home/minshall/.emacs.d/straight/build/org/org-element-ast hides /usr/local/share/emacs/31.0.50/lisp/org/org-element-ast /home/minshall/.emacs.d/straight/build/org/ob-lisp hides /usr/local/share/emacs/31.0.50/lisp/org/ob-lisp /home/minshall/.emacs.d/straight/build/org/org-plot hides /usr/local/share/emacs/31.0.50/lisp/org/org-plot /home/minshall/.emacs.d/straight/build/org/org-clock hides /usr/local/share/emacs/31.0.50/lisp/org/org-clock /home/minshall/.emacs.d/straight/build/org/oc-basic hides /usr/local/share/emacs/31.0.50/lisp/org/oc-basic /home/minshall/.emacs.d/straight/build/org/org-archive hides /usr/local/share/emacs/31.0.50/lisp/org/org-archive /home/minshall/.emacs.d/straight/build/org/org-fold hides /usr/local/share/emacs/31.0.50/lisp/org/org-fold /home/minshall/.emacs.d/straight/build/org/ob-java hides /usr/local/share/emacs/31.0.50/lisp/org/ob-java /home/minshall/.emacs.d/straight/build/org/ox-html hides /usr/local/share/emacs/31.0.50/lisp/org/ox-html /home/minshall/.emacs.d/straight/build/org/org-element hides /usr/local/share/emacs/31.0.50/lisp/org/org-element /home/minshall/.emacs.d/straight/build/org/org-feed hides /usr/local/share/emacs/31.0.50/lisp/org/org-feed /home/minshall/.emacs.d/straight/build/org/org-agenda hides /usr/local/share/emacs/31.0.50/lisp/org/org-agenda /home/minshall/.emacs.d/straight/build/org/ob-makefile hides /usr/local/share/emacs/31.0.50/lisp/org/ob-makefile /home/minshall/.emacs.d/straight/build/org/ob-ocaml hides /usr/local/share/emacs/31.0.50/lisp/org/ob-ocaml /home/minshall/.emacs.d/straight/build/org/ob-sql hides /usr/local/share/emacs/31.0.50/lisp/org/ob-sql /home/minshall/.emacs.d/straight/build/org/ox-man hides /usr/local/share/emacs/31.0.50/lisp/org/ox-man /home/minshall/.emacs.d/straight/build/org/ol-docview hides /usr/local/share/emacs/31.0.50/lisp/org/ol-docview /home/minshall/.emacs.d/straight/build/org/org-tempo hides /usr/local/share/emacs/31.0.50/lisp/org/org-tempo /home/minshall/.emacs.d/straight/build/map/map hides /usr/local/share/emacs/31.0.50/lisp/emacs-lisp/map /home/minshall/.emacs.d/straight/build/compat/compat hides /usr/local/share/emacs/31.0.50/lisp/emacs-lisp/compat /home/minshall/.emacs.d/straight/build/eldoc/eldoc hides /usr/local/share/emacs/31.0.50/lisp/emacs-lisp/eldoc /home/minshall/.emacs.d/straight/build/let-alist/let-alist hides /usr/local/share/emacs/31.0.50/lisp/emacs-lisp/let-alist Features: (shadow mh-identity flyspell mh-tool-bar mh-letter mh-xface mh-utils mh-comp emacsbug mule-util bug-reference disp-table windmove ox-md my-org-grep my-input quail mh-e-extensions mh-show goto-addr gnus-cite mh-folder which-func mh-scan erc erc-backend erc-networks erc-common erc-compat erc-loaddefs mh-mime mh-gnus mh-acros mh-e mh-buffers mh-loaddefs subword-mode-expansions cap-words superword subword doct ytel ytel-autoloads yasnippet yasnippet-autoloads xr xr-autoloads xclip xclip-autoloads wiki-summary wiki-summary-autoloads which-key which-key-autoloads w3m w3m-hist bookmark-w3m w3m-ems w3m-favicon w3m-image w3m-fb tab-line w3m-proc w3m-util w3m-load w3m-autoloads vertico vertico-autoloads vdiff smerge-mode diff hydra lv units-mode units-mode-autoloads tzc timezone tzc-autoloads transient toml toml-autoloads swiper swiper-autoloads spell-fu ispell spell-fu-autoloads sly sly-completion sly-buttons sly-messages sly-common apropos arc-mode archive-mode hyperspec sly-autoloads shrface-autoloads language-detection-autoloads sdcv pos-tip popup showtip sdcv-autoloads pos-tip-autoloads showtip-autoloads scpaste scpaste-autoloads rpn-calc-autoloads popup-autoloads pulsar pulse pulsar-autoloads prettied-diff-autoloads vdiff-autoloads pcsv pcsv-autoloads parse-csv parse-csv-autoloads pacmand-autoloads osm-ol osm-autoloads org-roam-migrate org-roam-log org-roam-mode org-roam-capture org-roam-id org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam org-capture org-attach emacsql-sqlite magit-section cursor-sensor org-roam-bibtex-autoloads org-roam-autoloads org-ref-autoloads ox-pandoc-autoloads citeproc-autoloads string-inflection-autoloads queue-autoloads hydra-autoloads lv-autoloads org-ql peg ts org-habit org-agenda org-duration org-ql-autoloads peg-autoloads ov-autoloads org-super-agenda-autoloads ts-autoloads map-autoloads org-grep org-grep-autoloads org-cliplink-autoloads orderless orderless-autoloads ob-typescript ob-typescript-autoloads names edebug names-autoloads advice ob-ess-julia ess-julia ess-r-mode ess-r-flymake ess-r-xref ess-trns ess-r-package ess-r-completion ess-roxy ess-r-syntax ess-rd hideshow ess-s-lang ess-help ess-mode ess-inf ess-tracebug comp comp-cstr comp-run comp-common ob-ess-julia-autoloads nov recentf tree-widget esxml-query nov-autoloads esxml-autoloads kv-autoloads ol-w3m ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int gnus-range gnus-win ol-docview doc-view jka-compr image-mode exif ol-bibtex ol-bbdb modus-vivendi-theme modus-themes middling middling-autoloads mastodon mastodon-search mastodon-toot facemenu mastodon-iso persist mastodon-http request mastodon-autoloads persist-autoloads request-autoloads markdown-mode markdown-mode-autoloads marginalia marginalia-autoloads magit-autoloads magit-section-autoloads git-commit-autoloads with-editor-autoloads transient-autoloads lua-mode lua-mode-autoloads link-hint-autoloads lex lex-autoloads ob-julia julia-mode julia-mode-latexsubs julia-mode-autoloads js2-mode-expansions js2-mode etags fileloop js2-mode-autoloads json-mode json-snatcher js-mode-expansions js c-ts-common json-mode-autoloads json-snatcher-autoloads htmlize htmlize-autoloads parsebib bibtex ivy-bibtex-autoloads bibtex-completion-autoloads biblio-autoloads biblio-core-autoloads parsebib-autoloads ivy delsel ivy-faces ivy-overlay colir color ivy-autoloads ht ht-autoloads highlight-doxygen highlight-doxygen-autoloads hide-lines hide-lines-autoloads help-fns radix-tree elisp-refs helpful-autoloads elisp-refs-autoloads gnuplot info-look gnuplot-autoloads getopt-autoloads free-keys free-keys-autoloads flycheck-package package-lint let-alist finder package flycheck-package-autoloads package-lint-autoloads filladapt filladapt-autoloads expand-region text-mode-expansions cc-mode-expansions the-org-mode-expansions python-el-fgallina-expansions er-basic-expansions expand-region-core expand-region-custom expand-region-autoloads ess lisp-mnt ess-utils ess-custom ess-autoloads emms-mpris dbus emms-librefm-stream emms-librefm-scrobbler emms-playlist-limit emms-i18n emms-history emms-score emms-stream-info emms-metaplaylist-mode emms-bookmarks emms-cue emms-mode-line-icon emms-browser emms-volume emms-volume-sndioctl emms-volume-mixerctl emms-volume-pulse emms-volume-amixer emms-playlist-sort emms-last-played emms-player-xine emms-player-mpd tq emms-lyrics emms-url emms-streams emms-show-all emms-tag-editor emms-tag-tracktag emms-mark emms-mode-line emms-cache emms-info-exiftool emms-info-tinytag emms-info-metaflac emms-info-opusinfo emms-info-ogginfo emms-info-mp3info emms-playlist-mode emms-player-vlc emms-player-mpv emms-playing-time emms-player-mplayer emms-player-simple emms-source-playlist emms-source-file locate emms-info-native emms-info-native-spc emms-info-native-mp3 emms-info-native-ogg emms-info-native-opus emms-info-native-flac emms-info-native-vorbis emms-info emms-later-do emms-setup emms emms-compat emms-autoloads deadgrep spinner deadgrep-autoloads spinner-autoloads embark-consult-autoloads embark-autoloads emacsql-sqlite-builtin sqlite emacsql-sqlite-common emacsql emacsql-compiler emacsql-sqlite-builtin-autoloads emacsql-autoloads elfeed-org elfeed-org-autoloads elfeed-dashboard elfeed-dashboard-autoloads elfeed-show elfeed-search vc-git diff-mode track-changes vc-dispatcher message sendmail yank-media dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader shr pixel-fill kinsoku svg dom elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db elfeed-lib url-queue url-file browse-url xml-query xml elfeed-autoloads doct-autoloads use-package-ensure eat-autoloads docstr docstr-key docstr-faces docstr-writers docstr-util docstr-autoloads datetime extmap bindat datetime-autoloads extmap-autoloads csv-mode sort csv-mode-autoloads corfu corfu-autoloads consult-recoll consult-recoll-autoloads consult-flycheck flycheck consult-flycheck-autoloads flycheck-autoloads let-alist-autoloads pkg-info-autoloads epl-autoloads consult-eglot consult bookmark eglot array ert ewoc debug backtrace filenotify jsonrpc xref flymake compile imenu consult-eglot-autoloads eglot-autoloads flymake-autoloads project-autoloads xref-autoloads eldoc-autoloads jsonrpc-autoloads consult-autoloads compat-autoloads warnings tramp-cache time-stamp tramp-sh shortdoc s commander-autoloads f-autoloads s-autoloads avy-autoloads finder-inf aurel url-http url-auth mail-parse rfc2231 rfc2047 rfc2045 ietf-drums url-gw nsm puny bui bui-list bui-info bui-entry bui-core bui-history bui-button bui-utils cus-edit pp dash url-handlers url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util url-parse url-vars mailcap aurel-autoloads bui-autoloads dash-autoloads annotate annotate-autoloads adoc-mode tempo adoc-mode-autoloads org-contrib org-contrib-autoloads ob-js ob-gnuplot ox-html table ox-beamer ox-latex ox-ascii ox-publish ox org-element org-persist org-id org-refile org-element-ast inline avl-tree generator ob-shell ob-octave ob-scheme ob-org ob-latex ob-C cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs ob-python python project compat pcase ob-awk ob-ditaa ob-R org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src sh-script smie treesit executable ob-comint org-pcomplete org-list org-footnote org-faces org-entities noutline outline ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs thingatpt find-func cal-menu calendar cal-loaddefs org-version org-compat org-macs edmacro kmacro use-package-bind-key bind-key easy-mmode use-package-core use-package-autoloads info bind-key-autoloads tramp rx trampver tramp-integration files-x tramp-message tramp-compat xdg shell pcomplete comint ansi-osc ring parse-time iso8601 format-spec auth-source eieio eieio-core icons password-cache json map byte-opt ansi-color tramp-loaddefs avoid gnus nnheader gnus-util text-property-search time-date mail-utils range mm-util mail-prsvr wid-edit cus-load straight-autoloads cl-seq cl-extra help-mode straight subr-x cl-macs gv cl-loaddefs cl-lib bytecomp byte-compile rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads xwidget-internal inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo gtk x-toolkit xinput2 x multi-tty move-toolbar make-network-process native-compile emacs) Memory information: ((conses 16 1060905 79018) (symbols 48 111899 5) (strings 32 353188 12178) (string-bytes 1 10900349) (vectors 16 109263) (vector-slots 8 1705705 133280) (floats 8 901 353) (intervals 56 1238 87) (buffers 992 19))
bug-gnu-emacs <at> gnu.org
:bug#72652
; Package emacs
.
(Fri, 16 Aug 2024 06:12:02 GMT) Full text and rfc822 format available.Message #8 received at 72652 <at> debbugs.gnu.org (full text, mbox):
From: Greg Minshall <minshall <at> umich.edu> To: 72652 <at> debbugs.gnu.org Subject: sentinel Date: Fri, 16 Aug 2024 09:11:00 +0300
i guess one can get some notification from a sentinel, though finding the process itself is a bit kludgy: ```` (defun msg-me (process event) (princ (format "Process: %s had the event '%s'" process event))) (let ((uproc (url-retrieve "https://y.example.com/index.html" (lambda (x) (message "callback called: %s" x))))) (with-current-buffer uproc (set-process-sentinel url-http-process 'msg-me))) ```` gives output ```` Contacting host: y.example.com:443 Process: example.com had the event 'connection broken by remote peer ' ```` the message ("broken by remote peer") isn't as helpful as a "host does not exist" message might be. i guess to distinguish a name lookup failure, one could then (or before) use, e.g., `dns-query-asynchronous`: ```` (dns-query-asynchronous "x.example.com" (lambda (x) (message "dns callback: %s" x))) ```` gives ```` dns callback: nil ```` (hope this formatting comes through reasonably...)
bug-gnu-emacs <at> gnu.org
:bug#72652
; Package emacs
.
(Fri, 16 Aug 2024 07:47:01 GMT) Full text and rfc822 format available.Message #11 received at 72652 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Greg Minshall <minshall <at> umich.edu> Cc: 72652 <at> debbugs.gnu.org Subject: Re: bug#72652: 31.0.50; url-retrieve on non-existent domain gives no indication of error Date: Fri, 16 Aug 2024 10:43:30 +0300
> From: Greg Minshall <minshall <at> umich.edu> > Date: Fri, 16 Aug 2024 07:34:08 +0300 > > if url-retrieve is called with a url for a non-existent domain, it > neither returns an error (it returns a buffer, as it is documented to > do), nor does it seem to invoke the callback routine passed to it to > report any error (or success, or anything else, for that matter). > > the following code uses example.com. calling > - `(mytry 0)` should work, downloading "index.html" > - `(mytry 1)` should give a 404 -- no such file "index99.html" > - `(mytry 2)` doesn't give anything (but, the code ends after 5 seconds) > as there is no such host "x.example.com". > > with 0 or 1, the callback routine is invoked, but with 2, it isn't. > (after 5 seconds the code finishes, displays whatever might be in the > buffer url-retrieve uses to return the results.) On MS-Windows (mytry 2) signals an error: Debugger entered--Lisp error: (error "x.example.com/443 No such host is known. ") make-network-process(:name "x.example.com" :buffer #<buffer *url-http-temp*> :host "x.example.com" :service 443 :nowait (:nowait t) :noquery nil :tls-parameters (gnutls-x509pki :priority "NORMAL:%DUMBFW" :hostname "x.example.com" :loglevel 0 :min-prime-bits nil :trustfiles nil :crlfiles nil :keylist nil :verify-flags nil :verify-error nil :pass nil :flags nil :callbacks nil) :coding nil) open-network-stream("x.example.com" #<buffer *url-http-temp*> "x.example.com" 443 :nowait (:nowait t) :tls-parameters (gnutls-x509pki :priority "NORMAL:%DUMBFW" :hostname "x.example.com" :loglevel 0 :min-prime-bits nil :trustfiles nil :crlfiles nil :keylist nil :verify-flags nil :verify-error nil :pass nil :flags nil :callbacks nil) :coding nil) open-gnutls-stream("x.example.com" #<buffer *url-http-temp*> "x.example.com" 443 (:type tls :nowait (:nowait t))) network-stream-open-tls("x.example.com" #<buffer *url-http-temp*> "x.example.com" 443 (:type tls :nowait (:nowait t))) open-network-stream("x.example.com" #<buffer *url-http-temp*> "x.example.com" 443 :type tls :nowait (:nowait t)) url-open-stream("x.example.com" #<buffer *url-http-temp*> "x.example.com" 443 tls) url-http-find-free-connection("x.example.com" 443 tls) url-http(#s(url :type "https" :user nil :password nil :host "x.example.com" :portspec nil :filename "/index.html" :target nil :attributes nil :fullness t :silent nil :use-cookies t :asynchronous t) #f(lambda (&rest results) [t] (mysage "called back")) (nil) nil tls) url-https(#s(url :type "https" :user nil :password nil :host "x.example.com" :portspec nil :filename "/index.html" :target nil :attributes nil :fullness t :silent nil :use-cookies t :asynchronous t) #f(lambda (&rest results) [t] (mysage "called back")) (nil)) url-retrieve-internal("https://x.example.com/index.html" #f(lambda (&rest results) [t] (mysage "called back")) (nil) nil nil) url-retrieve("https://x.example.com/index.html" #f(lambda (&rest results) [t] (mysage "called back")) nil) (let* ((urls '("https://example.com/index.html" "https://example.com/index99.html" "https://x.example.com/index.html")) (buffer (url-retrieve (nth n urls) #'(lambda (&rest results) (mysage "called back")) nil))) (mysage "url-retrieve returns %s" buffer) (sleep-for 5) (save-current-buffer (set-buffer buffer) (mysage "buffer %s contents: %s" buffer (buffer-substring (point-min) (point-max))))) mytry(2) eval((mytry 2) t) #f(compiled-function () #<bytecode 0x127ffea33bfbce22>)() #f(compiled-function () #<bytecode -0x5c06e1955cf31d1>)() handler-bind-1(#f(compiled-function () #<bytecode -0x5c06e1955cf31d1>) (error) eval-expression--debug) eval-expression((mytry 2) nil nil 127) funcall-interactively(eval-expression (mytry 2) nil nil 127) call-interactively(eval-expression nil nil) command-execute(eval-expression) On GNU/Linux, I get this in the echo-area after about 2 sec: Contacting host: x.example.com:443 url-retrieve returns *http x.example.com:443* buffer *http x.example.com:443* contents: "buffer *http x.example.com:443* contents: " IOW, I get an empty buffer. Why is that behavior a problem?
bug-gnu-emacs <at> gnu.org
:bug#72652
; Package emacs
.
(Fri, 16 Aug 2024 19:41:01 GMT) Full text and rfc822 format available.Message #14 received at 72652 <at> debbugs.gnu.org (full text, mbox):
From: Greg Minshall <minshall <at> umich.edu> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 72652 <at> debbugs.gnu.org Subject: Re: bug#72652: 31.0.50; url-retrieve on non-existent domain gives no indication of error Date: Fri, 16 Aug 2024 22:39:11 +0300
hi, Eli, > On MS-Windows (mytry 2) signals an error: i see. possibly the Emacs on windows is using a synchronous DNS resolver (possibly not). but, an error is better than nothing. > On GNU/Linux, I get this in the echo-area after about 2 sec: > > Contacting host: x.example.com:443 > url-retrieve returns *http x.example.com:443* > buffer *http x.example.com:443* contents: > "buffer *http x.example.com:443* contents: > " > > IOW, I get an empty buffer. Why is that behavior a problem? the problem is that there's no indication from url-retrieve that the requested transfer has failed (or has in any way finished). the only reason the message about the buffer was printed out was because the mytry script times out after 5 seconds, prints out whatever might be in the buffer. so, a program that calls url-retrieve for an unknown host is never notified that anything happened. if some sort of error is detected synchronous with the call to url-retrieve (i.e., before url-retrieve returns to its caller), signaling an error seems fine. in the case where the error is detected later, then i think (if possible) url-retrieve should cause a callback to happen, with the `:error` data in the status parameter specifying something like "unknown host". in the case of (mytry 1), there is a callback (to the callback routine specified in the invocation of url-retrieve) which passes an error indication: ---- called back: ((:error (error http 500) ---- (one can modify mytry to print out the status given to the callback routine -- see below.) hth. cheers, Greg ---- modified mytry: prints out status parameter to callback: ---- ;;; ... -*- lexical-binding: t -*- (defun mysage (&rest args) "Like (message), but send ARGS to stdout, even in batch mode. \(In batch mode, (message) sends to stderr; the prin1, etc., send to stdout." (princ (format "%s\n" (apply 'format args)))) (defun mytry (n) "Try url-retrieve on a URL. N is 0, 1, or 2." (let* ((urls '("https://example.com/index.html" "https://example.com/index99.html" "https://x.example.com/index.html")) (buffer (url-retrieve (nth n urls) (lambda (&rest results) (mysage "called back: %s" results)) nil))) (mysage "url-retrieve returns %s" buffer) (sleep-for 5) (with-current-buffer buffer (mysage "buffer %s contents: %s" buffer (buffer-substring (point-min) (point-max))))))
bug-gnu-emacs <at> gnu.org
:bug#72652
; Package emacs
.
(Sat, 17 Aug 2024 05:54:02 GMT) Full text and rfc822 format available.Message #17 received at 72652 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Greg Minshall <minshall <at> umich.edu> Cc: 72652 <at> debbugs.gnu.org Subject: Re: bug#72652: 31.0.50; url-retrieve on non-existent domain gives no indication of error Date: Sat, 17 Aug 2024 08:50:23 +0300
> cc: 72652 <at> debbugs.gnu.org > From: Greg Minshall <minshall <at> umich.edu> > Comments: In-reply-to Eli Zaretskii <eliz <at> gnu.org> > message dated "Fri, 16 Aug 2024 10:43:30 +0300." > Date: Fri, 16 Aug 2024 22:39:11 +0300 > > > On MS-Windows (mytry 2) signals an error: > > i see. possibly the Emacs on windows is using a synchronous DNS > resolver (possibly not). Yes, I think so. > the problem is that there's no indication from url-retrieve that the > requested transfer has failed (or has in any way finished). the only > reason the message about the buffer was printed out was because the > mytry script times out after 5 seconds, prints out whatever might be in > the buffer. > > so, a program that calls url-retrieve for an unknown host is never > notified that anything happened. > > > if some sort of error is detected synchronous with the call to > url-retrieve (i.e., before url-retrieve returns to its caller), > signaling an error seems fine. > > in the case where the error is detected later, then i think (if > possible) url-retrieve should cause a callback to happen, with the > `:error` data in the status parameter specifying something like "unknown > host". > > in the case of (mytry 1), there is a callback (to the callback routine > specified in the invocation of url-retrieve) which passes an error > indication: > ---- > called back: ((:error (error http 500) > ---- > (one can modify mytry to print out the status given to the > callback routine -- see below.) Patches to report an error in the (mytry 2) case are welcome.
bug-gnu-emacs <at> gnu.org
:bug#72652
; Package emacs
.
(Sat, 17 Aug 2024 12:56:02 GMT) Full text and rfc822 format available.Message #20 received at 72652 <at> debbugs.gnu.org (full text, mbox):
From: Greg Minshall <minshall <at> umich.edu> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 72652 <at> debbugs.gnu.org Subject: Re: bug#72652: 31.0.50; url-retrieve on non-existent domain gives no indication of error Date: Sat, 17 Aug 2024 15:54:25 +0300
> Patches to report an error in the (mytry 2) case are welcome. that'd be great. thanks.
bug-gnu-emacs <at> gnu.org
:bug#72652
; Package emacs
.
(Fri, 13 Sep 2024 01:51:02 GMT) Full text and rfc822 format available.Message #23 received at 72652 <at> debbugs.gnu.org (full text, mbox):
From: Dmitry Gutov <dmitry <at> gutov.dev> To: Greg Minshall <minshall <at> umich.edu>, Eli Zaretskii <eliz <at> gnu.org> Cc: 72652 <at> debbugs.gnu.org Subject: Re: bug#72652: 31.0.50; url-retrieve on non-existent domain gives no indication of error Date: Fri, 13 Sep 2024 04:50:08 +0300
On 17/08/2024 15:54, Greg Minshall wrote: >> Patches to report an error in the (mytry 2) case are welcome. > that'd be great. thanks. For those who'd like to try their hand at writing the fix, https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26835#18 might be relevant, or at least point to the problem area.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.