Package: emacs;
Reported by: dick.r.chiang <at> gmail.com
Date: Thu, 5 Aug 2021 16:48:01 UTC
Severity: normal
Tags: patch
Found in version 28.0.50
Fixed in version 28.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 49897 in the body.
You can then email your comments to 49897 AT debbugs.gnu.org in the normal way.
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#49897
; Package emacs
.
(Thu, 05 Aug 2021 16:48:01 GMT) Full text and rfc822 format available.dick.r.chiang <at> gmail.com
:bug-gnu-emacs <at> gnu.org
.
(Thu, 05 Aug 2021 16:48:01 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: dick.r.chiang <at> gmail.com To: bug-gnu-emacs <at> gnu.org Subject: 28.0.50; [PATCH] Make sense of url-retrieve-synchronously Date: Thu, 05 Aug 2021 12:46:59 -0400
[0001-Rationalize-url-retrieve-synchronously.patch (text/x-diff, inline)]
From b560aa029810dcfdee278b4b3614c938d996fa6c Mon Sep 17 00:00:00 2001 From: dickmao <none> Date: Thu, 5 Aug 2021 12:41:39 -0400 Subject: [PATCH] Rationalize url-retrieve-synchronously It's impossible to reason about this function without the conveniences of throw-catch and unwind-protect. Related bug#49861. * lisp/url/url.el (url-retrieve-synchronously): Accept-process-output on a null process. That is the safer, more conventional way of achieving non-blocking sleep-for. --- lisp/url/url.el | 125 ++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 79 deletions(-) diff --git a/lisp/url/url.el b/lisp/url/url.el index a6565e2cdb..be66510dd8 100644 --- a/lisp/url/url.el +++ b/lisp/url/url.el @@ -235,85 +235,52 @@ url-retrieve-synchronously TIMEOUT is passed, it should be a number that says (in seconds) how long to wait for a response before giving up." (url-do-setup) - - (let ((retrieval-done nil) - (start-time (current-time)) - (url-asynchronous nil) - (asynch-buffer nil) - (timed-out nil)) - (setq asynch-buffer - (url-retrieve url (lambda (&rest ignored) - (url-debug 'retrieval "Synchronous fetching done (%S)" (current-buffer)) - (setq retrieval-done t - asynch-buffer (current-buffer))) - nil silent inhibit-cookies)) - (if (null asynch-buffer) - ;; We do not need to do anything, it was a mailto or something - ;; similar that takes processing completely outside of the URL - ;; package. - nil - (let ((proc (get-buffer-process asynch-buffer))) - ;; If the access method was synchronous, `retrieval-done' should - ;; hopefully already be set to t. If it is nil, and `proc' is also - ;; nil, it implies that the async process is not running in - ;; asynch-buffer. This happens e.g. for FTP files. In such a case - ;; url-file.el should probably set something like a `url-process' - ;; buffer-local variable so we can find the exact process that we - ;; should be waiting for. In the mean time, we'll just wait for any - ;; process output. - (while (and (not retrieval-done) - (or (not timeout) - (not (setq timed-out - (time-less-p timeout - (time-since start-time)))))) - (url-debug 'retrieval - "Spinning in url-retrieve-synchronously: %S (%S)" - retrieval-done asynch-buffer) - (if (buffer-local-value 'url-redirect-buffer asynch-buffer) - (setq proc (get-buffer-process - (setq asynch-buffer - (buffer-local-value 'url-redirect-buffer - asynch-buffer)))) - (if (and proc (memq (process-status proc) - '(closed exit signal failed)) - ;; Make sure another process hasn't been started. - (eq proc (or (get-buffer-process asynch-buffer) proc))) - ;; FIXME: It's not clear whether url-retrieve's callback is - ;; guaranteed to be called or not. It seems that url-http - ;; decides sometimes consciously not to call it, so it's not - ;; clear that it's a bug, but even then we need to decide how - ;; url-http can then warn us that the download has completed. - ;; In the mean time, we use this here workaround. - ;; XXX: The callback must always be called. Any - ;; exception is a bug that should be fixed, not worked - ;; around. - (progn ;; Call delete-process so we run any sentinel now. - (delete-process proc) - (setq retrieval-done t))) - ;; We used to use `sit-for' here, but in some cases it wouldn't - ;; work because apparently pending keyboard input would always - ;; interrupt it before it got a chance to handle process input. - ;; `sleep-for' was tried but it lead to other forms of - ;; hanging. --Stef - (unless (or (with-local-quit - (accept-process-output proc 1)) - (null proc)) - ;; accept-process-output returned nil, maybe because the process - ;; exited (and may have been replaced with another). If we got - ;; a quit, just stop. - (when quit-flag - (delete-process proc)) - (setq proc (and (not quit-flag) - (get-buffer-process asynch-buffer)))))) - ;; On timeouts, make sure we kill any pending processes. - ;; There may be more than one if we had a redirect. - (when timed-out - (when (process-live-p proc) - (delete-process proc)) - (when-let ((aproc (get-buffer-process asynch-buffer))) - (when (process-live-p aproc) - (delete-process aproc)))))) - asynch-buffer)) + (let* (url-asynchronous + data-buffer + (callback (lambda (&rest _args) + (setq data-buffer (current-buffer)) + (url-debug 'retrieval + "Synchronous fetching done (%S)" + data-buffer)))) + (if-let ((start-time (current-time)) + (proc-buffer (url-retrieve url callback nil silent inhibit-cookies))) + (unwind-protect + (catch 'done + (while (not data-buffer) + (when (and timeout (time-less-p timeout (time-since start-time))) + (url-debug 'retrieval "Timed out %s (after %ss)" url + (float-time (time-since start-time))) + (throw 'done 'timeout)) + (url-debug 'retrieval + "Spinning in url-retrieve-synchronously: nil (%S)" + proc-buffer) + (when-let ((redirect-buffer (buffer-local-value + 'url-redirect-buffer + proc-buffer))) + (unless (eq redirect-buffer proc-buffer) + (url-debug 'retrieval + "Redirect in url-retrieve-synchronously: %S -> %S" + proc-buffer redirect-buffer) + (let (kill-buffer-query-functions) + (kill-buffer proc-buffer)) + ;; Accommodate self-admitted hack in commit 55d1d8b + (setq proc-buffer redirect-buffer))) + (when-let ((proc (get-buffer-process proc-buffer))) + (when (memq (process-status proc) + '(closed exit signal failed)) + ;; Process sentinel vagaries occasionally cause + ;; url-retrieve to fail calling callback. + (unless data-buffer + (url-debug 'retrieval "Dead process %s" url) + (throw 'done 'exception)))) + ;; Querying over consumer internet in the US takes 100 ms, + ;; so split the difference. + (accept-process-output nil 0.05))) + (unless (eq data-buffer proc-buffer) + (let (kill-buffer-query-functions) + (kill-buffer proc-buffer)))) + (url-debug 'retrieval "Synchronous fetching unnecessary %s" url)) + data-buffer)) ;; url-mm-callback called from url-mm, which requires mm-decode. (declare-function mm-dissect-buffer "mm-decode" -- 2.26.2
[Message part 2 (text/plain, inline)]
In GNU Emacs 28.0.50 (build 4, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10) of 2021-08-05 built on dick Repository revision: a9709f95a1a9c0f32227f9458bfe6410fccde0aa Repository branch: el-gz Windowing system distributor 'The X.Org Foundation', version 11.0.11906000 System Description: Ubuntu 18.04.4 LTS Configured using: 'configure --prefix=/home/dick/.local PKG_CONFIG_PATH=/home/dick/.local/lib/pkgconfig' Configured features: CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS X11 XDBE XIM XPM GTK3 ZLIB Important settings: value of $LANG: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: Magit Log Minor modes in effect: async-bytecomp-package-mode: t global-git-commit-mode: t magit-auto-revert-mode: t show-paren-mode: t projectile-mode: t flx-ido-mode: t override-global-mode: t shell-dirtrack-mode: t global-hl-line-mode: t winner-mode: t tooltip-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t buffer-read-only: t column-number-mode: t line-number-mode: t transient-mark-mode: t Load-path shadows: /home/dick/ESS/lisp/obsolete/ess-swv hides /home/dick/ESS/lisp/ess-swv /home/dick/ESS/lisp/obsolete/ess-rutils hides /home/dick/ESS/lisp/ess-rutils /home/dick/ESS/lisp/obsolete/ess-noweb hides /home/dick/ESS/lisp/ess-noweb /home/dick/ESS/lisp/obsolete/mouseme hides /home/dick/ESS/lisp/mouseme /home/dick/ESS/lisp/obsolete/ess-mouse hides /home/dick/ESS/lisp/ess-mouse /home/dick/ESS/lisp/obsolete/ess-noweb-mode hides /home/dick/ESS/lisp/ess-noweb-mode /home/dick/ESS/lisp/obsolete/make-regexp hides /home/dick/ESS/lisp/make-regexp /home/dick/ESS/lisp/obsolete/ess-r-a hides /home/dick/ESS/lisp/ess-r-a /home/dick/ESS/lisp/obsolete/ess-noweb-font-lock-mode hides /home/dick/ESS/lisp/ess-noweb-font-lock-mode /home/dick/gomacro-mode/gomacro-mode hides /home/dick/.emacs.d/elpa/gomacro-mode-20200326.1103/gomacro-mode /home/dick/ESS/lisp/julia-mode hides /home/dick/.emacs.d/elpa/julia-mode-20200717.1915/julia-mode /home/dick/ESS/lisp/julia-mode-latexsubs hides /home/dick/.emacs.d/elpa/julia-mode-20200717.1915/julia-mode-latexsubs /home/dick/.emacs.d/elpa/hydra-20170924.2259/lv hides /home/dick/.emacs.d/elpa/lv-20191106.1238/lv /home/dick/.emacs.d/elpa/gnus-5.14pre/ol-gnus hides /home/dick/.emacs.d/elpa/org-9.4.5/ol-gnus /home/dick/org-gcal.el/org-gcal hides /home/dick/.emacs.d/elpa/org-gcal-0.3/org-gcal /home/dick/.emacs.d/lisp/json hides /home/dick/.local/share/emacs/28.0.50/lisp/json /home/dick/.emacs.d/elpa/transient-0.3.6/transient hides /home/dick/.local/share/emacs/28.0.50/lisp/transient /home/dick/.emacs.d/elpa/org-9.4.5/ob-eval hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-eval /home/dick/.emacs.d/elpa/org-9.4.5/ob-perl hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-perl /home/dick/.emacs.d/elpa/org-9.4.5/ob-eshell hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-eshell /home/dick/.emacs.d/elpa/org-9.4.5/ob-abc hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-abc /home/dick/.emacs.d/elpa/org-9.4.5/ob-tangle hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-tangle /home/dick/.emacs.d/elpa/org-9.4.5/ob-vala hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-vala /home/dick/.emacs.d/elpa/org-9.4.5/org-attach-git hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-attach-git /home/dick/.emacs.d/elpa/org-9.4.5/org-ctags hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-ctags /home/dick/.emacs.d/elpa/org-9.4.5/ob-table hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-table /home/dick/.emacs.d/elpa/org-9.4.5/org-element hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-element /home/dick/.emacs.d/elpa/org-9.4.5/org-colview hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-colview /home/dick/.emacs.d/elpa/org-9.4.5/ol-mhe hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-mhe /home/dick/.emacs.d/elpa/org-9.4.5/ob-stan hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-stan /home/dick/.emacs.d/elpa/org-9.4.5/org-table hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-table /home/dick/.emacs.d/elpa/org-9.4.5/org-keys hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-keys /home/dick/.emacs.d/elpa/org-9.4.5/ol hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol /home/dick/.emacs.d/elpa/org-9.4.5/ob-dot hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-dot /home/dick/.emacs.d/elpa/org-9.4.5/ob-js hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-js /home/dick/.emacs.d/elpa/org-9.4.5/ob-clojure hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-clojure /home/dick/.emacs.d/elpa/org-9.4.5/ob-fortran hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-fortran /home/dick/.emacs.d/elpa/org-9.4.5/org-refile hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-refile /home/dick/.emacs.d/elpa/org-9.4.5/org-clock hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-clock /home/dick/.emacs.d/elpa/org-9.4.5/ob-sql hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-sql /home/dick/.emacs.d/elpa/org-9.4.5/ob-exp hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-exp /home/dick/.emacs.d/elpa/org-9.4.5/ob-asymptote hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-asymptote /home/dick/.emacs.d/elpa/org-9.4.5/ob-org hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-org /home/dick/.emacs.d/elpa/org-9.4.5/org-compat hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-compat /home/dick/.emacs.d/elpa/org-9.4.5/ob-python hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-python /home/dick/.emacs.d/elpa/org-9.4.5/ob-ref hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-ref /home/dick/.emacs.d/elpa/org-9.4.5/ox hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox /home/dick/.emacs.d/elpa/org-9.4.5/ob-C hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-C /home/dick/.emacs.d/elpa/org-9.4.5/ol-info hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-info /home/dick/.emacs.d/elpa/org-9.4.5/org-tempo hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-tempo /home/dick/.emacs.d/elpa/org-9.4.5/ox-md hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-md /home/dick/.emacs.d/elpa/org-9.4.5/ob-screen hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-screen /home/dick/.emacs.d/elpa/org-9.4.5/ob-lisp hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-lisp /home/dick/.emacs.d/elpa/org-9.4.5/ob-lua hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-lua /home/dick/.emacs.d/elpa/org-9.4.5/ob-matlab hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-matlab /home/dick/.emacs.d/elpa/org-9.4.5/org-list hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-list /home/dick/.emacs.d/elpa/org-9.4.5/ob-groovy hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-groovy /home/dick/.emacs.d/elpa/org-9.4.5/ol-docview hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-docview /home/dick/.emacs.d/elpa/org-9.4.5/ob-ebnf hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-ebnf /home/dick/.emacs.d/elpa/org-9.4.5/ob-forth hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-forth /home/dick/.emacs.d/elpa/org-9.4.5/ox-html hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-html /home/dick/.emacs.d/elpa/org-9.4.5/ob-io hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-io /home/dick/.emacs.d/elpa/org-9.4.5/org-faces hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-faces /home/dick/.emacs.d/elpa/org-9.4.5/ob-emacs-lisp hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-emacs-lisp /home/dick/.emacs.d/elpa/org-9.4.5/ob-ocaml hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-ocaml /home/dick/.emacs.d/elpa/org-9.4.5/ol-bbdb hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-bbdb /home/dick/.emacs.d/elpa/org-9.4.5/org-lint hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-lint /home/dick/.emacs.d/elpa/org-9.4.5/ob-shen hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-shen /home/dick/.emacs.d/elpa/org-9.4.5/org-loaddefs hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-loaddefs /home/dick/.emacs.d/elpa/org-9.4.5/ob-scheme hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-scheme /home/dick/.emacs.d/elpa/org-9.4.5/org-protocol hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-protocol /home/dick/.emacs.d/elpa/org-9.4.5/ob-maxima hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-maxima /home/dick/.emacs.d/elpa/org-9.4.5/ox-latex hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-latex /home/dick/.emacs.d/elpa/org-9.4.5/ob-mscgen hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-mscgen /home/dick/.emacs.d/elpa/org-9.4.5/ob-R hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-R /home/dick/.emacs.d/elpa/org-9.4.5/ob-sed hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-sed /home/dick/.emacs.d/elpa/org-9.4.5/org hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org /home/dick/.emacs.d/elpa/org-9.4.5/org-plot hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-plot /home/dick/.emacs.d/elpa/org-9.4.5/ox-beamer hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-beamer /home/dick/.emacs.d/elpa/org-9.4.5/org-pcomplete hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-pcomplete /home/dick/.emacs.d/elpa/org-9.4.5/ob-plantuml hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-plantuml /home/dick/.emacs.d/elpa/org-9.4.5/ox-publish hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-publish /home/dick/.emacs.d/elpa/org-9.4.5/ob-java hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-java /home/dick/.emacs.d/elpa/org-9.4.5/ol-eww hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-eww /home/dick/.emacs.d/elpa/org-9.4.5/org-macs hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-macs /home/dick/.emacs.d/elpa/org-9.4.5/ol-eshell hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-eshell /home/dick/.emacs.d/elpa/org-9.4.5/org-src hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-src /home/dick/.emacs.d/elpa/org-9.4.5/ol-rmail hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-rmail /home/dick/.emacs.d/elpa/org-9.4.5/org-datetree hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-datetree /home/dick/.emacs.d/elpa/org-9.4.5/ob-J hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-J /home/dick/.emacs.d/elpa/org-9.4.5/ob-shell hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-shell /home/dick/.emacs.d/elpa/org-9.4.5/org-archive hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-archive /home/dick/.emacs.d/elpa/org-9.4.5/org-habit hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-habit /home/dick/.emacs.d/elpa/org-9.4.5/ob-picolisp hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-picolisp /home/dick/.emacs.d/elpa/org-9.4.5/org-capture hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-capture /home/dick/.emacs.d/elpa/org-9.4.5/ob-core hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-core /home/dick/.emacs.d/elpa/org-9.4.5/ob-octave hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-octave /home/dick/.emacs.d/elpa/org-9.4.5/org-mobile hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-mobile /home/dick/.emacs.d/elpa/org-9.4.5/ol-bibtex hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-bibtex /home/dick/.emacs.d/elpa/org-9.4.5/org-goto hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-goto /home/dick/.emacs.d/elpa/org-9.4.5/ox-odt hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-odt /home/dick/.emacs.d/elpa/org-9.4.5/ob-calc hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-calc /home/dick/.emacs.d/elpa/org-9.4.5/ob-gnuplot hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-gnuplot /home/dick/.emacs.d/elpa/org-9.4.5/org-macro hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-macro /home/dick/.emacs.d/elpa/org-9.4.5/ob hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob /home/dick/.emacs.d/elpa/org-9.4.5/ob-comint hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-comint /home/dick/.emacs.d/elpa/org-9.4.5/ob-ditaa hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-ditaa /home/dick/.emacs.d/elpa/org-9.4.5/org-duration hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-duration /home/dick/.emacs.d/elpa/org-9.4.5/org-entities hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-entities /home/dick/.emacs.d/elpa/org-9.4.5/org-agenda hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-agenda /home/dick/.emacs.d/elpa/org-9.4.5/ox-ascii hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-ascii /home/dick/.emacs.d/elpa/org-9.4.5/org-num hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-num /home/dick/.emacs.d/elpa/org-9.4.5/ob-awk hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-awk /home/dick/.emacs.d/elpa/org-9.4.5/ob-ruby hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-ruby /home/dick/.emacs.d/elpa/org-9.4.5/ox-man hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-man /home/dick/.emacs.d/elpa/org-9.4.5/ob-sqlite hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-sqlite /home/dick/.emacs.d/elpa/gnus-5.14pre/ol-gnus hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-gnus /home/dick/.emacs.d/elpa/org-9.4.5/org-attach hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-attach /home/dick/.emacs.d/elpa/org-9.4.5/org-inlinetask hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-inlinetask /home/dick/.emacs.d/elpa/org-9.4.5/ob-coq hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-coq /home/dick/.emacs.d/elpa/org-9.4.5/org-feed hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-feed /home/dick/.emacs.d/elpa/org-9.4.5/ob-hledger hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-hledger /home/dick/.emacs.d/elpa/org-9.4.5/org-crypt hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-crypt /home/dick/.emacs.d/elpa/org-9.4.5/ol-irc hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-irc /home/dick/.emacs.d/elpa/org-9.4.5/ob-css hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-css /home/dick/.emacs.d/elpa/org-9.4.5/ob-haskell hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-haskell /home/dick/.emacs.d/elpa/org-9.4.5/org-footnote hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-footnote /home/dick/.emacs.d/elpa/org-9.4.5/org-indent hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-indent /home/dick/.emacs.d/elpa/org-9.4.5/ox-icalendar hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-icalendar /home/dick/.emacs.d/elpa/org-9.4.5/ob-processing hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-processing /home/dick/.emacs.d/elpa/org-9.4.5/ob-ledger hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-ledger /home/dick/.emacs.d/elpa/org-9.4.5/org-id hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-id /home/dick/.emacs.d/elpa/org-9.4.5/ox-org hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-org /home/dick/.emacs.d/elpa/org-9.4.5/ob-lob hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-lob /home/dick/.emacs.d/elpa/org-9.4.5/ob-latex hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-latex /home/dick/.emacs.d/elpa/org-9.4.5/ol-w3m hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ol-w3m /home/dick/.emacs.d/elpa/org-9.4.5/org-timer hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-timer /home/dick/.emacs.d/elpa/org-9.4.5/ob-makefile hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-makefile /home/dick/.emacs.d/elpa/org-9.4.5/ob-lilypond hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-lilypond /home/dick/.emacs.d/elpa/org-9.4.5/ox-texinfo hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ox-texinfo /home/dick/.emacs.d/elpa/org-9.4.5/ob-sass hides /home/dick/.local/share/emacs/28.0.50/lisp/org/ob-sass /home/dick/.emacs.d/elpa/org-9.4.5/org-mouse hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-mouse /home/dick/.emacs.d/elpa/org-9.4.5/org-version hides /home/dick/.local/share/emacs/28.0.50/lisp/org/org-version /home/dick/.emacs.d/elpa/gnus-5.14pre/mh-compat hides /home/dick/.local/share/emacs/28.0.50/lisp/mh-e/mh-compat /home/dick/.emacs.d/elpa/gnus-5.14pre/nnmbox hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnmbox /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-notifications hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-notifications /home/dick/.emacs.d/elpa/gnus-5.14pre/spam-stat hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/spam-stat /home/dick/.emacs.d/elpa/gnus-5.14pre/nndraft hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nndraft /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-extern hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-extern /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-util hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-util /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-win hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-win /home/dick/.emacs.d/elpa/gnus-5.14pre/mail-source hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mail-source /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-diary hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-diary /home/dick/.emacs.d/elpa/gnus-5.14pre/nnml hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnml /home/dick/.emacs.d/elpa/gnus-5.14pre/spam-report hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/spam-report /home/dick/.emacs.d/elpa/gnus-5.14pre/nnagent hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnagent /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-cite hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-cite /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-srvr hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-srvr /home/dick/.emacs.d/elpa/gnus-5.14pre/nnrss hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnrss /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-vm hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-vm /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-spec hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-spec /home/dick/.emacs.d/elpa/gnus-5.14pre/nndiary hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nndiary /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-util hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-util /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-fun hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-fun /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-bodies hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-bodies /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-search hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-search /home/dick/.emacs.d/elpa/gnus-5.14pre/nnvirtual hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnvirtual /home/dick/.emacs.d/elpa/gnus-5.14pre/score-mode hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/score-mode /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-ml hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-ml /home/dick/.emacs.d/elpa/gnus-5.14pre/gmm-utils hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gmm-utils /home/dick/.emacs.d/elpa/gnus-5.14pre/message hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/message /home/dick/.emacs.d/elpa/gnus-5.14pre/nnmh hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnmh /home/dick/.emacs.d/elpa/gnus-5.14pre/nnspool hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnspool /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-start hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-start /home/dick/.emacs.d/elpa/gnus-5.14pre/smime hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/smime /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-uu hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-uu /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-draft hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-draft /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-cloud hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-cloud /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-undo hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-undo /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-salt hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-salt /home/dick/.emacs.d/elpa/gnus-5.14pre/canlock hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/canlock /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus /home/dick/.emacs.d/elpa/gnus-5.14pre/gssapi hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gssapi /home/dick/.emacs.d/elpa/gnus-5.14pre/mml-sec hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mml-sec /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-uu hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-uu /home/dick/.emacs.d/elpa/gnus-5.14pre/nnfolder hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnfolder /home/dick/.emacs.d/elpa/gnus-5.14pre/nnmairix hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnmairix /home/dick/.emacs.d/elpa/gnus-5.14pre/nnheader hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnheader /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-dbus hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-dbus /home/dick/.emacs.d/elpa/gnus-5.14pre/nnimap hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnimap /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-bcklg hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-bcklg /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-demon hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-demon /home/dick/.emacs.d/elpa/gnus-5.14pre/nneething hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nneething /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-score hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-score /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-html hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-html /home/dick/.emacs.d/elpa/gnus-5.14pre/mml2015 hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mml2015 /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-async hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-async /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-sum hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-sum /home/dick/.emacs.d/elpa/gnus-5.14pre/mml1991 hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mml1991 /home/dick/.emacs.d/elpa/gnus-5.14pre/nnweb hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnweb /home/dick/.emacs.d/elpa/gnus-5.14pre/mml-smime hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mml-smime /home/dick/.emacs.d/elpa/gnus-5.14pre/nnmail hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnmail /home/dick/.emacs.d/elpa/gnus-5.14pre/nndir hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nndir /home/dick/.emacs.d/elpa/gnus-5.14pre/nndoc hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nndoc /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-art hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-art /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-eform hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-eform /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-cus hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-cus /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-sieve hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-sieve /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-mlspl hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-mlspl /home/dick/.emacs.d/elpa/gnus-5.14pre/nnmaildir hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnmaildir /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-agent hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-agent /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-int hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-int /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-delay hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-delay /home/dick/.emacs.d/elpa/gnus-5.14pre/nnselect hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnselect /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-decode hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-decode /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-rfc1843 hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-rfc1843 /home/dick/.emacs.d/elpa/gnus-5.14pre/spam-wash hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/spam-wash /home/dick/.emacs.d/elpa/gnus-5.14pre/nnoo hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnoo /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-picon hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-picon /home/dick/.emacs.d/elpa/gnus-5.14pre/smiley hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/smiley /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-registry hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-registry /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-range hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-range /home/dick/.emacs.d/elpa/gnus-5.14pre/nnbabyl hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnbabyl /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-archive hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-archive /home/dick/.emacs.d/elpa/gnus-5.14pre/nntp hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nntp /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-icalendar hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-icalendar /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-url hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-url /home/dick/.emacs.d/elpa/gnus-5.14pre/spam hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/spam /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-dup hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-dup /home/dick/.emacs.d/elpa/gnus-5.14pre/nnregistry hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnregistry /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-group hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-group /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-bookmark hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-bookmark /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-mh hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-mh /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-kill hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-kill /home/dick/.emacs.d/elpa/gnus-5.14pre/mml hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mml /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-view hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-view /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-cache hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-cache /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-partial hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-partial /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-msg hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-msg /home/dick/.emacs.d/elpa/gnus-5.14pre/mm-encode hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/mm-encode /home/dick/.emacs.d/elpa/gnus-5.14pre/legacy-gnus-agent hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/legacy-gnus-agent /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-dired hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-dired /home/dick/.emacs.d/elpa/gnus-5.14pre/nnnil hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nnnil /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-gravatar hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-gravatar /home/dick/.emacs.d/elpa/gnus-5.14pre/nngateway hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/nngateway /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-logic hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-logic /home/dick/.emacs.d/elpa/gnus-5.14pre/deuglify hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/deuglify /home/dick/.emacs.d/elpa/gnus-5.14pre/gnus-topic hides /home/dick/.local/share/emacs/28.0.50/lisp/gnus/gnus-topic /home/dick/.emacs.d/elpa/hierarchy-20171221.1151/hierarchy hides /home/dick/.local/share/emacs/28.0.50/lisp/emacs-lisp/hierarchy /home/dick/.emacs.d/elpa/gnus-5.14pre/nnir hides /home/dick/.local/share/emacs/28.0.50/lisp/obsolete/nnir Features: (shadow emacsbug supercite regi bbdb-message sendmail footnote nndoc debbugs-gnu debbugs soap-client rng-xsd rng-dt rng-util xsd-regexp goto-addr magit-extras mule-util magit-patch-changelog magit-patch magit-submodule magit-obsolete magit-popup async-bytecomp async magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func imenu magit-diff git-commit log-edit pcvs-util add-log magit-core magit-autorevert magit-margin magit-transient magit-process with-editor vterm face-remap vterm-module term ehelp eshell esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util server magit-mode transient magit-git magit-section magit-utils tramp-archive tramp-gvfs tramp-cache zeroconf ivy delsel colir ivy-overlay ffap dumb-jump f vc-git vc vc-dispatcher bug-reference cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs shortdoc emms-source-file locate url-about url-dired help-fns radix-tree jka-compr misearch multi-isearch url-queue smerge-mode diff diff-mode qp sort smiley shr-color gnus-async gnus-ml gravatar dns mail-extr gnus-notifications gnus-fun notifications gnus-kill gnus-dup disp-table mm-archive utf-7 gnutls network-stream url-cache nntwitter nntwitter-api nnrss nndiscourse benchmark rbenv nnhackernews nnfolder bbdb-gnus gnus-demon nntp nnmairix nnml nnreddit gnus-topic url-http url-auth url-gw nsm request autorevert filenotify virtualenvwrapper gud s dash json-rpc python tramp-sh tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat ls-lisp gnus-score score-mode gnus-bcklg gnus-srvr gnus-cite anaphora bbdb-mua bbdb-com crm bbdb bbdb-site timezone gnus-delay gnus-draft gnus-cache gnus-agent gnus-msg nnselect gnus-search eieio-opt speedbar ezimage dframe find-func gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum shr svg dom nndraft nnmh gnus-group mm-url gnus-undo use-package use-package-delight use-package-diminish gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source imap rfc2104 utf7 netrc nnoo parse-time iso8601 gnus-spec gnus-int gnus-range gnus-win paredit-ext paredit subed subed-vtt subed-srt subed-common subed-mpv subed-debug subed-config dired-x inf-ruby ruby-mode smie company haskell-interactive-mode haskell-presentation-mode haskell-process haskell-session haskell-compile haskell-mode haskell-cabal haskell-utils haskell-font-lock haskell-indentation haskell-string haskell-sort-imports haskell-lexeme haskell-align-imports haskell-complete-module haskell-ghc-support etags fileloop generator dabbrev haskell-customize hydra lv use-package-ensure paren solarized-theme solarized-definitions projectile skeleton ibuf-macs find-dired ibuf-ext ibuffer ibuffer-loaddefs grep gnus message rx rmc puny dired dired-loaddefs rfc822 mml mml-sec epa epg epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader pcase nnheader gnus-util rmail rmail-loaddefs rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils time-date flx-ido flx google-translate-default-ui google-translate-core-ui facemenu color ido google-translate-core google-translate-tk google-translate-backend use-package-bind-key bind-key auto-complete advice popup cus-edit pp cus-load wid-edit ess-r-mode ess-r-flymake flymake-proc flymake warnings thingatpt ess-r-xref xref ess-trns ess-r-package shell pcomplete ess-r-completion ess-roxy ess-r-syntax ess-rd noutline outline easy-mmode hideshow ess-s-lang ess-help ess-mode ess-inf project format-spec ess-tracebug ess ess-utils ess-custom compile text-property-search comint ansi-color emms-player-mplayer emms-player-simple emms emms-compat cl-extra help-mode use-package-core derived hl-line winner ring edmacro kmacro finder-inf json-reformat-autoloads json-snatcher-autoloads sml-mode-autoloads tornado-template-mode-autoloads info package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib iso-transl tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-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 cl-generic 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 charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 1311187 135586) (symbols 48 55510 4) (strings 32 206640 27720) (string-bytes 1 8554859) (vectors 16 76514) (vector-slots 8 2135257 126708) (floats 8 2336 4198) (intervals 56 5063 1552) (buffers 992 42))
bug-gnu-emacs <at> gnu.org
:bug#49897
; Package emacs
.
(Fri, 06 Aug 2021 11:28:02 GMT) Full text and rfc822 format available.Message #8 received at 49897 <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: dick.r.chiang <at> gmail.com Cc: 49897 <at> debbugs.gnu.org Subject: Re: bug#49897: 28.0.50; [PATCH] Make sense of url-retrieve-synchronously Date: Fri, 06 Aug 2021 13:27:43 +0200
dick.r.chiang <at> gmail.com writes: > It's impossible to reason about this function without the > conveniences of throw-catch and unwind-protect. Related bug#49861. Well, that's a big change here, and the code had a lot of special-casing to handle various edge cases with quit-ing and stuff... which... I agree with you shouldn't be necessary, so I've done some tests and applied your patch (with some trivial changes): > + (if-let ((start-time (current-time)) Doing if-lets on things that can't be nil is mildly confusing, so I moved that up to the surrounding let... > + (proc-buffer (url-retrieve url callback nil silent inhibit-cookies))) ... and the same here, which allowed for less indentation. So now I guess we'll wait for the bug reports to arrive about something subtle not working any more here. :-) -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
Lars Ingebrigtsen <larsi <at> gnus.org>
to control <at> debbugs.gnu.org
.
(Fri, 06 Aug 2021 11:28:02 GMT) Full text and rfc822 format available.bug-gnu-emacs <at> gnu.org
:bug#49897
; Package emacs
.
(Fri, 06 Aug 2021 12:16:02 GMT) Full text and rfc822 format available.Message #13 received at 49897 <at> debbugs.gnu.org (full text, mbox):
From: dick <dick.r.chiang <at> gmail.com> To: Lars Ingebrigtsen <larsi <at> gnus.org> Cc: 49897 <at> debbugs.gnu.org Subject: Re: bug#49897: 28.0.50; [PATCH] Make sense of url-retrieve-synchronously Date: Fri, 06 Aug 2021 08:15:27 -0400
Yes, this is much better. I wonder what came over me to obfuscate things like that.
bug-gnu-emacs <at> gnu.org
:bug#49897
; Package emacs
.
(Fri, 06 Aug 2021 13:10:02 GMT) Full text and rfc822 format available.Message #16 received at 49897 <at> debbugs.gnu.org (full text, mbox):
From: dick <dick.r.chiang <at> gmail.com> To: Lars Ingebrigtsen <larsi <at> gnus.org> Cc: 49897 <at> debbugs.gnu.org Subject: Re: bug#49897: 28.0.50; [PATCH] Make sense of url-retrieve-synchronously Date: Fri, 06 Aug 2021 09:09:32 -0400
I'm sorry to say the rewrite doesn't solve bug#49861 (hanging http GETs) for me. The process filter `url-http-generic-filter` just isn't seeing any data from the remote site, and given the frequency of occurrence, it's not the remote site's fault. There's something off about the C-level network descriptor handling for process filters. While (in my mind) the url lisp code is not culpable, I'm still glad we rewrote url-retrieve-synchronously.
bug-gnu-emacs <at> gnu.org
:bug#49897
; Package emacs
.
(Fri, 06 Aug 2021 13:48:02 GMT) Full text and rfc822 format available.Message #19 received at 49897 <at> debbugs.gnu.org (full text, mbox):
From: Lars Ingebrigtsen <larsi <at> gnus.org> To: dick <dick.r.chiang <at> gmail.com> Cc: 49897 <at> debbugs.gnu.org Subject: Re: bug#49897: 28.0.50; [PATCH] Make sense of url-retrieve-synchronously Date: Fri, 06 Aug 2021 15:47:21 +0200
dick <dick.r.chiang <at> gmail.com> writes: > I'm sorry to say the rewrite doesn't solve bug#49861 (hanging http GETs) for > me. The process filter `url-http-generic-filter` just isn't seeing any data > from the remote site, and given the frequency of occurrence, it's not the > remote site's fault. There's something off about the C-level network > descriptor handling for process filters. Yes, people have been poking away at the process.c code again and again to try to fix these hangs, and they usually seem to be able to fix their own use case... it's pretty maddening. It's always impossible for anybody else to reproduce the problems, which doesn't help. It's not that network connections are complex in themselves, but the Emacs process stuff has grown from a viewpoint of "run a command and output the data in the displayed buffer", and that's grown into real network connections, with coding systems applied and filters and... (And then TLS was added, and then there was that rewrite to make it all asynchronous, which complicated things even further.) So what we have is a slow, convoluted mess in this area, which is a shame. I have for years wanted to redo the network stuff (note -- note the process stuff; they're separate issues) to be efficient and sane. That is: You can push octets to the network, and you get octets back, stashed into a unibyte buffer only. And then it's up to the application level, not the network level, to interpret the octets. But it's that problem of finding the time... -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sat, 04 Sep 2021 11:24:06 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.