From: Matt Lundin <mdl@imapmail.org>
To: org-mode Mailing List <emacs-orgmode@gnu.org>
Subject: [Bug] org-open-at-point no longer unescapes shell/elisp links
Date: Mon, 03 Mar 2014 07:52:48 -0600 [thread overview]
Message-ID: <87mwh7o0cv.fsf@fastmail.fm> (raw)
When I create a link with org-insert-link, it automatically escapes
spaces.
E.g.,
C-c C-l shell:ls *.org [RET]
a shell link [RET]
results in
[[shell:ls%20*.org][a shell link]]
The problem is that the recent rewrite of org-open-at-point (commit
fc9ce86cfc1ecf7e86028027a12875a26500e774) removed all invocations of
org-unescape-link.
As a result, if I use org-open-at-point on the link above, it sends the
string "ls%20*.org" to my shell, which complains:
"zsh:1: no matches found: ls%20*.org"
At the bottom of the mail you'll find the backtrack that results when I
call org-open-at-point on an elisp link:
[[elisp:(org-agenda%20"a")][agenda]]
Thanks,
Matt
Debugger entered--Lisp error: (void-function org-agenda%20)
(org-agenda%20 "a")
eval((org-agenda%20 "a"))
(if (eq (string-to-char cmd) 40) (eval (read cmd)) (call-interactively (read cmd)))
(message "%s => %s" cmd (if (eq (string-to-char cmd) 40) (eval (read cmd)) (call-interactively (read cmd))))
(if (or (and (org-string-nw-p org-confirm-elisp-link-not-regexp) (org-string-match-p org-confirm-elisp-link-not-regexp cmd)) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function (format "Execute \"%s\" as elisp? " (org-add-props cmd nil (quote face) (quote org-warning))))) (message "%s => %s" cmd (if (eq (string-to-char cmd) 40) (eval (read cmd)) (call-interactively (read cmd)))) (error "Abort"))
(let ((cmd path)) (if (or (and (org-string-nw-p org-confirm-elisp-link-not-regexp) (org-string-match-p org-confirm-elisp-link-not-regexp cmd)) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function (format "Execute \"%s\" as elisp? " (org-add-props cmd nil (quote face) (quote org-warning))))) (message "%s => %s" cmd (if (eq (string-to-char cmd) 40) (eval (read cmd)) (call-interactively (read cmd)))) (error "Abort")))
(cond ((equal type "file") (if (string-match "[*?{]" (file-name-nondirectory path)) (dired path) (apply (or (let ((app ...)) (nth 1 (assoc ... org-link-protocols))) (function org-open-file)) path arg (let ((option (org-element-property :search-option context))) (cond ((not option) nil) ((org-string-match-p "\\`[0-9]+\\'" option) (list ...)) (t (list nil option))))))) ((assoc type org-link-protocols) (funcall (nth 1 (assoc type org-link-protocols)) path)) ((equal type "help") (let ((f-or-v (intern path))) (cond ((fboundp f-or-v) (describe-function f-or-v)) ((boundp f-or-v) (describe-variable f-or-v)) (t (error "Not a known function or variable"))))) ((equal type "mailto") (let ((cmd (car org-link-mailto-program)) (args (cdr org-link-mailto-program)) (spec (format-spec-make 97 path 115 (let (...) (if ... "" ...)))) final-args) (apply cmd (dolist (arg args (nreverse final-args)) (if (not (stringp arg)) (push arg final-args) (push (format-spec arg spec) final-args)))))) ((member type (quote ("http" "https" "ftp" "news"))) (browse-url (org-link-escape-browser (concat type ":" path)))) ((equal type "doi") (browse-url (org-link-escape-browser (concat org-doi-server-url path)))) ((equal type "message") (browse-url (concat type ":" path))) ((equal type "shell") (let ((buf (generate-new-buffer "*Org Shell Output")) (cmd path)) (if (or (and (org-string-nw-p org-confirm-shell-link-not-regexp) (string-match org-confirm-shell-link-not-regexp cmd)) (not org-confirm-shell-link-function) (funcall org-confirm-shell-link-function (format "Execute \"%s\" in shell? " (org-add-props cmd nil ... ...)))) (progn (message "Executing %s" cmd) (shell-command cmd buf) (when (featurep (quote midnight)) (setq clean-buffer-list-kill-buffer-names (cons buf clean-buffer-list-kill-buffer-names)))) (error "Abort")))) ((equal type "elisp") (let ((cmd path)) (if (or (and (org-string-nw-p org-confirm-elisp-link-not-regexp) (org-string-match-p org-confirm-elisp-link-not-regexp cmd)) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function (format "Execute \"%s\" as elisp? " (org-add-props cmd nil ... ...)))) (message "%s => %s" cmd (if (eq (string-to-char cmd) 40) (eval (read cmd)) (call-interactively (read cmd)))) (error "Abort")))) ((equal type "id") (require (quote ord-id)) (funcall (nth 1 (assoc "id" org-link-protocols)) path)) ((member type (quote ("coderef" "custom-id" "fuzzy" "radio"))) (unless (run-hook-with-args-until-success (quote org-open-link-functions) path) (if (not arg) (org-mark-ring-push) (switch-to-buffer-other-window (org-get-buffer-for-internal-link (current-buffer)))) (let ((cmd (\` (org-link-search ... ... ...)))) (condition-case nil (let ((org-link-search-inhibit-query t)) (eval cmd)) (error (progn (widen) (eval cmd))))))) (t (browse-url-at-point)))
(save-current-buffer (set-buffer (or reference-buffer (current-buffer))) (cond ((equal type "file") (if (string-match "[*?{]" (file-name-nondirectory path)) (dired path) (apply (or (let (...) (nth 1 ...)) (function org-open-file)) path arg (let ((option ...)) (cond (... nil) (... ...) (t ...)))))) ((assoc type org-link-protocols) (funcall (nth 1 (assoc type org-link-protocols)) path)) ((equal type "help") (let ((f-or-v (intern path))) (cond ((fboundp f-or-v) (describe-function f-or-v)) ((boundp f-or-v) (describe-variable f-or-v)) (t (error "Not a known function or variable"))))) ((equal type "mailto") (let ((cmd (car org-link-mailto-program)) (args (cdr org-link-mailto-program)) (spec (format-spec-make 97 path 115 (let ... ...))) final-args) (apply cmd (dolist (arg args (nreverse final-args)) (if (not ...) (push arg final-args) (push ... final-args)))))) ((member type (quote ("http" "https" "ftp" "news"))) (browse-url (org-link-escape-browser (concat type ":" path)))) ((equal type "doi") (browse-url (org-link-escape-browser (concat org-doi-server-url path)))) ((equal type "message") (browse-url (concat type ":" path))) ((equal type "shell") (let ((buf (generate-new-buffer "*Org Shell Output")) (cmd path)) (if (or (and (org-string-nw-p org-confirm-shell-link-not-regexp) (string-match org-confirm-shell-link-not-regexp cmd)) (not org-confirm-shell-link-function) (funcall org-confirm-shell-link-function (format "Execute \"%s\" in shell? " ...))) (progn (message "Executing %s" cmd) (shell-command cmd buf) (when (featurep ...) (setq clean-buffer-list-kill-buffer-names ...))) (error "Abort")))) ((equal type "elisp") (let ((cmd path)) (if (or (and (org-string-nw-p org-confirm-elisp-link-not-regexp) (org-string-match-p org-confirm-elisp-link-not-regexp cmd)) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function (format "Execute \"%s\" as elisp? " ...))) (message "%s => %s" cmd (if (eq ... 40) (eval ...) (call-interactively ...))) (error "Abort")))) ((equal type "id") (require (quote ord-id)) (funcall (nth 1 (assoc "id" org-link-protocols)) path)) ((member type (quote ("coderef" "custom-id" "fuzzy" "radio"))) (unless (run-hook-with-args-until-success (quote org-open-link-functions) path) (if (not arg) (org-mark-ring-push) (switch-to-buffer-other-window (org-get-buffer-for-internal-link (current-buffer)))) (let ((cmd (\` ...))) (condition-case nil (let (...) (eval cmd)) (error (progn ... ...)))))) (t (browse-url-at-point))))
(with-current-buffer (or reference-buffer (current-buffer)) (cond ((equal type "file") (if (string-match "[*?{]" (file-name-nondirectory path)) (dired path) (apply (or (let (...) (nth 1 ...)) (function org-open-file)) path arg (let ((option ...)) (cond (... nil) (... ...) (t ...)))))) ((assoc type org-link-protocols) (funcall (nth 1 (assoc type org-link-protocols)) path)) ((equal type "help") (let ((f-or-v (intern path))) (cond ((fboundp f-or-v) (describe-function f-or-v)) ((boundp f-or-v) (describe-variable f-or-v)) (t (error "Not a known function or variable"))))) ((equal type "mailto") (let ((cmd (car org-link-mailto-program)) (args (cdr org-link-mailto-program)) (spec (format-spec-make 97 path 115 (let ... ...))) final-args) (apply cmd (dolist (arg args (nreverse final-args)) (if (not ...) (push arg final-args) (push ... final-args)))))) ((member type (quote ("http" "https" "ftp" "news"))) (browse-url (org-link-escape-browser (concat type ":" path)))) ((equal type "doi") (browse-url (org-link-escape-browser (concat org-doi-server-url path)))) ((equal type "message") (browse-url (concat type ":" path))) ((equal type "shell") (let ((buf (generate-new-buffer "*Org Shell Output")) (cmd path)) (if (or (and (org-string-nw-p org-confirm-shell-link-not-regexp) (string-match org-confirm-shell-link-not-regexp cmd)) (not org-confirm-shell-link-function) (funcall org-confirm-shell-link-function (format "Execute \"%s\" in shell? " ...))) (progn (message "Executing %s" cmd) (shell-command cmd buf) (when (featurep ...) (setq clean-buffer-list-kill-buffer-names ...))) (error "Abort")))) ((equal type "elisp") (let ((cmd path)) (if (or (and (org-string-nw-p org-confirm-elisp-link-not-regexp) (org-string-match-p org-confirm-elisp-link-not-regexp cmd)) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function (format "Execute \"%s\" as elisp? " ...))) (message "%s => %s" cmd (if (eq ... 40) (eval ...) (call-interactively ...))) (error "Abort")))) ((equal type "id") (require (quote ord-id)) (funcall (nth 1 (assoc "id" org-link-protocols)) path)) ((member type (quote ("coderef" "custom-id" "fuzzy" "radio"))) (unless (run-hook-with-args-until-success (quote org-open-link-functions) path) (if (not arg) (org-mark-ring-push) (switch-to-buffer-other-window (org-get-buffer-for-internal-link (current-buffer)))) (let ((cmd (\` ...))) (condition-case nil (let (...) (eval cmd)) (error (progn ... ...)))))) (t (browse-url-at-point))))
(let ((type (org-element-property :type context)) (path (org-element-property :path context))) (with-current-buffer (or reference-buffer (current-buffer)) (cond ((equal type "file") (if (string-match "[*?{]" (file-name-nondirectory path)) (dired path) (apply (or (let ... ...) (function org-open-file)) path arg (let (...) (cond ... ... ...))))) ((assoc type org-link-protocols) (funcall (nth 1 (assoc type org-link-protocols)) path)) ((equal type "help") (let ((f-or-v (intern path))) (cond ((fboundp f-or-v) (describe-function f-or-v)) ((boundp f-or-v) (describe-variable f-or-v)) (t (error "Not a known function or variable"))))) ((equal type "mailto") (let ((cmd (car org-link-mailto-program)) (args (cdr org-link-mailto-program)) (spec (format-spec-make 97 path 115 ...)) final-args) (apply cmd (dolist (arg args ...) (if ... ... ...))))) ((member type (quote ("http" "https" "ftp" "news"))) (browse-url (org-link-escape-browser (concat type ":" path)))) ((equal type "doi") (browse-url (org-link-escape-browser (concat org-doi-server-url path)))) ((equal type "message") (browse-url (concat type ":" path))) ((equal type "shell") (let ((buf (generate-new-buffer "*Org Shell Output")) (cmd path)) (if (or (and ... ...) (not org-confirm-shell-link-function) (funcall org-confirm-shell-link-function ...)) (progn (message "Executing %s" cmd) (shell-command cmd buf) (when ... ...)) (error "Abort")))) ((equal type "elisp") (let ((cmd path)) (if (or (and ... ...) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function ...)) (message "%s => %s" cmd (if ... ... ...)) (error "Abort")))) ((equal type "id") (require (quote ord-id)) (funcall (nth 1 (assoc "id" org-link-protocols)) path)) ((member type (quote ("coderef" "custom-id" "fuzzy" "radio"))) (unless (run-hook-with-args-until-success (quote org-open-link-functions) path) (if (not arg) (org-mark-ring-push) (switch-to-buffer-other-window (org-get-buffer-for-internal-link ...))) (let ((cmd ...)) (condition-case nil (let ... ...) (error ...))))) (t (browse-url-at-point)))))
(cond ((not context) (user-error "No link found")) ((and (memq type (quote (headline inlinetask))) (progn (save-excursion (beginning-of-line) (looking-at org-complex-heading-regexp)) (or (not (match-beginning 5)) (< (point) (match-beginning 5))))) (let* ((data (org-offer-links-in-entry (current-buffer) (point) arg)) (links (car data)) (links-end (cdr data))) (if links (dolist (link (if (stringp links) (list links) links)) (search-forward link nil links-end) (goto-char (match-beginning 0)) (org-open-at-point)) (require (quote org-attach)) (org-attach-reveal (quote if-exists))))) ((> (point) (save-excursion (goto-char (org-element-property :end context)) (skip-chars-backward " ") (point))) (user-error "No link found")) ((eq type (quote timestamp)) (org-follow-timestamp-link)) ((and (memq type (quote (headline inlinetask))) (progn (save-excursion (beginning-of-line) (looking-at org-complex-heading-regexp)) (and (match-beginning 5) (>= (point) (match-beginning 5))))) (org-tags-view arg (substring (match-string 5) 0 -1))) ((eq type (quote link)) (let ((type (org-element-property :type context)) (path (org-element-property :path context))) (with-current-buffer (or reference-buffer (current-buffer)) (cond ((equal type "file") (if (string-match "[*?{]" ...) (dired path) (apply ... path arg ...))) ((assoc type org-link-protocols) (funcall (nth 1 ...) path)) ((equal type "help") (let (...) (cond ... ... ...))) ((equal type "mailto") (let (... ... ... final-args) (apply cmd ...))) ((member type (quote ...)) (browse-url (org-link-escape-browser ...))) ((equal type "doi") (browse-url (org-link-escape-browser ...))) ((equal type "message") (browse-url (concat type ":" path))) ((equal type "shell") (let (... ...) (if ... ... ...))) ((equal type "elisp") (let (...) (if ... ... ...))) ((equal type "id") (require (quote ord-id)) (funcall (nth 1 ...) path)) ((member type (quote ...)) (unless (run-hook-with-args-until-success ... path) (if ... ... ...) (let ... ...))) (t (browse-url-at-point)))))) ((or (eq type (quote footnote-reference)) (and (eq type (quote footnote-definition)) (save-excursion (skip-chars-forward " ") (let ((begin ...)) (if begin (< ... begin) (= ... ...)))))) (org-footnote-action)) (t (user-error "No link found")))
(let* ((context (org-element-context)) type) (while (and (not (memq (setq type (org-element-type context)) (quote (headline inlinetask link footnote-definition footnote-reference timestamp)))) (setq context (org-element-property :parent context)))) (cond ((not context) (user-error "No link found")) ((and (memq type (quote (headline inlinetask))) (progn (save-excursion (beginning-of-line) (looking-at org-complex-heading-regexp)) (or (not (match-beginning 5)) (< (point) (match-beginning 5))))) (let* ((data (org-offer-links-in-entry (current-buffer) (point) arg)) (links (car data)) (links-end (cdr data))) (if links (dolist (link (if ... ... links)) (search-forward link nil links-end) (goto-char (match-beginning 0)) (org-open-at-point)) (require (quote org-attach)) (org-attach-reveal (quote if-exists))))) ((> (point) (save-excursion (goto-char (org-element-property :end context)) (skip-chars-backward " ") (point))) (user-error "No link found")) ((eq type (quote timestamp)) (org-follow-timestamp-link)) ((and (memq type (quote (headline inlinetask))) (progn (save-excursion (beginning-of-line) (looking-at org-complex-heading-regexp)) (and (match-beginning 5) (>= (point) (match-beginning 5))))) (org-tags-view arg (substring (match-string 5) 0 -1))) ((eq type (quote link)) (let ((type (org-element-property :type context)) (path (org-element-property :path context))) (with-current-buffer (or reference-buffer (current-buffer)) (cond ((equal type "file") (if ... ... ...)) ((assoc type org-link-protocols) (funcall ... path)) ((equal type "help") (let ... ...)) ((equal type "mailto") (let ... ...)) ((member type ...) (browse-url ...)) ((equal type "doi") (browse-url ...)) ((equal type "message") (browse-url ...)) ((equal type "shell") (let ... ...)) ((equal type "elisp") (let ... ...)) ((equal type "id") (require ...) (funcall ... path)) ((member type ...) (unless ... ... ...)) (t (browse-url-at-point)))))) ((or (eq type (quote footnote-reference)) (and (eq type (quote footnote-definition)) (save-excursion (skip-chars-forward " ") (let (...) (if begin ... ...))))) (org-footnote-action)) (t (user-error "No link found"))))
(if (run-hook-with-args-until-success (quote org-open-at-point-functions)) nil (let* ((context (org-element-context)) type) (while (and (not (memq (setq type (org-element-type context)) (quote (headline inlinetask link footnote-definition footnote-reference timestamp)))) (setq context (org-element-property :parent context)))) (cond ((not context) (user-error "No link found")) ((and (memq type (quote (headline inlinetask))) (progn (save-excursion (beginning-of-line) (looking-at org-complex-heading-regexp)) (or (not ...) (< ... ...)))) (let* ((data (org-offer-links-in-entry ... ... arg)) (links (car data)) (links-end (cdr data))) (if links (dolist (link ...) (search-forward link nil links-end) (goto-char ...) (org-open-at-point)) (require (quote org-attach)) (org-attach-reveal (quote if-exists))))) ((> (point) (save-excursion (goto-char (org-element-property :end context)) (skip-chars-backward " ") (point))) (user-error "No link found")) ((eq type (quote timestamp)) (org-follow-timestamp-link)) ((and (memq type (quote (headline inlinetask))) (progn (save-excursion (beginning-of-line) (looking-at org-complex-heading-regexp)) (and (match-beginning 5) (>= ... ...)))) (org-tags-view arg (substring (match-string 5) 0 -1))) ((eq type (quote link)) (let ((type (org-element-property :type context)) (path (org-element-property :path context))) (with-current-buffer (or reference-buffer (current-buffer)) (cond (... ...) (... ...) (... ...) (... ...) (... ...) (... ...) (... ...) (... ...) (... ...) (... ... ...) (... ...) (t ...))))) ((or (eq type (quote footnote-reference)) (and (eq type (quote footnote-definition)) (save-excursion (skip-chars-forward " ") (let ... ...)))) (org-footnote-action)) (t (user-error "No link found")))))
(unless (run-hook-with-args-until-success (quote org-open-at-point-functions)) (let* ((context (org-element-context)) type) (while (and (not (memq (setq type (org-element-type context)) (quote (headline inlinetask link footnote-definition footnote-reference timestamp)))) (setq context (org-element-property :parent context)))) (cond ((not context) (user-error "No link found")) ((and (memq type (quote (headline inlinetask))) (progn (save-excursion (beginning-of-line) (looking-at org-complex-heading-regexp)) (or (not ...) (< ... ...)))) (let* ((data (org-offer-links-in-entry ... ... arg)) (links (car data)) (links-end (cdr data))) (if links (dolist (link ...) (search-forward link nil links-end) (goto-char ...) (org-open-at-point)) (require (quote org-attach)) (org-attach-reveal (quote if-exists))))) ((> (point) (save-excursion (goto-char (org-element-property :end context)) (skip-chars-backward " ") (point))) (user-error "No link found")) ((eq type (quote timestamp)) (org-follow-timestamp-link)) ((and (memq type (quote (headline inlinetask))) (progn (save-excursion (beginning-of-line) (looking-at org-complex-heading-regexp)) (and (match-beginning 5) (>= ... ...)))) (org-tags-view arg (substring (match-string 5) 0 -1))) ((eq type (quote link)) (let ((type (org-element-property :type context)) (path (org-element-property :path context))) (with-current-buffer (or reference-buffer (current-buffer)) (cond (... ...) (... ...) (... ...) (... ...) (... ...) (... ...) (... ...) (... ...) (... ...) (... ... ...) (... ...) (t ...))))) ((or (eq type (quote footnote-reference)) (and (eq type (quote footnote-definition)) (save-excursion (skip-chars-forward " ") (let ... ...)))) (org-footnote-action)) (t (user-error "No link found")))))
(if (call-interactively (function org-babel-open-src-block-result)) nil (org-load-modules-maybe) (move-marker org-open-link-marker (point)) (setq org-window-config-before-follow-link (current-window-configuration)) (org-remove-occur-highlights nil nil t) (unless (run-hook-with-args-until-success (quote org-open-at-point-functions)) (let* ((context (org-element-context)) type) (while (and (not (memq (setq type ...) (quote ...))) (setq context (org-element-property :parent context)))) (cond ((not context) (user-error "No link found")) ((and (memq type (quote ...)) (progn (save-excursion ... ...) (or ... ...))) (let* ((data ...) (links ...) (links-end ...)) (if links (dolist ... ... ... ...) (require ...) (org-attach-reveal ...)))) ((> (point) (save-excursion (goto-char ...) (skip-chars-backward " ") (point))) (user-error "No link found")) ((eq type (quote timestamp)) (org-follow-timestamp-link)) ((and (memq type (quote ...)) (progn (save-excursion ... ...) (and ... ...))) (org-tags-view arg (substring (match-string 5) 0 -1))) ((eq type (quote link)) (let ((type ...) (path ...)) (with-current-buffer (or reference-buffer ...) (cond ... ... ... ... ... ... ... ... ... ... ... ...)))) ((or (eq type (quote footnote-reference)) (and (eq type ...) (save-excursion ... ...))) (org-footnote-action)) (t (user-error "No link found"))))) (move-marker org-open-link-marker nil) (run-hook-with-args (quote org-follow-link-hook)))
(unless (call-interactively (function org-babel-open-src-block-result)) (org-load-modules-maybe) (move-marker org-open-link-marker (point)) (setq org-window-config-before-follow-link (current-window-configuration)) (org-remove-occur-highlights nil nil t) (unless (run-hook-with-args-until-success (quote org-open-at-point-functions)) (let* ((context (org-element-context)) type) (while (and (not (memq (setq type ...) (quote ...))) (setq context (org-element-property :parent context)))) (cond ((not context) (user-error "No link found")) ((and (memq type (quote ...)) (progn (save-excursion ... ...) (or ... ...))) (let* ((data ...) (links ...) (links-end ...)) (if links (dolist ... ... ... ...) (require ...) (org-attach-reveal ...)))) ((> (point) (save-excursion (goto-char ...) (skip-chars-backward " ") (point))) (user-error "No link found")) ((eq type (quote timestamp)) (org-follow-timestamp-link)) ((and (memq type (quote ...)) (progn (save-excursion ... ...) (and ... ...))) (org-tags-view arg (substring (match-string 5) 0 -1))) ((eq type (quote link)) (let ((type ...) (path ...)) (with-current-buffer (or reference-buffer ...) (cond ... ... ... ... ... ... ... ... ... ... ... ...)))) ((or (eq type (quote footnote-reference)) (and (eq type ...) (save-excursion ... ...))) (org-footnote-action)) (t (user-error "No link found"))))) (move-marker org-open-link-marker nil) (run-hook-with-args (quote org-follow-link-hook)))
org-open-at-point(nil)
call-interactively(org-open-at-point)
org-return()
call-interactively(org-return nil nil)
next reply other threads:[~2014-03-03 13:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-03 13:52 Matt Lundin [this message]
2014-03-03 14:12 ` [Bug] org-open-at-point no longer unescapes shell/elisp links Thomas Holst
2014-03-03 14:58 ` Nicolas Goaziou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87mwh7o0cv.fsf@fastmail.fm \
--to=mdl@imapmail.org \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.