From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1.migadu.com ([2001:41d0:303:e224::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms13.migadu.com with LMTPS id wPvqIcLajmebVQAA62LTzQ:P1 (envelope-from ) for ; Mon, 20 Jan 2025 23:22:42 +0000 Received: from aspmx1.migadu.com ([2001:41d0:303:e224::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1.migadu.com with LMTPS id wPvqIcLajmebVQAA62LTzQ (envelope-from ) for ; Tue, 21 Jan 2025 00:22:42 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=thaodan.de header.s=mail header.b=WS4krqwR; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=quarantine) header.from=thaodan.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1737415362; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature:autocrypt:autocrypt; bh=/urNLPgIGDYtPZ9IbmDTZg5443KzUh69JgEh8NTTe+c=; b=kQEvy4pk2BuoIjDFPwZcMa26qhymdFJRR0lKGB2eQeGE6i3cR5G0nN0Hh76oXeZdBZo/5Z dnLZQdAxTgqP6/y7+5ODCyEyhH5aeJIQo/Rhd9/0M44FQ5aVzCy9dn3yR7c0MWtjPTP+CG GQkvlcNjOVxU/J/e359n3egomFIjkqbiukfFiTb9I9bAlR6kBRBPocwDAMs9WtFT4Sy3gP mcO77+HUy1ph5amPYPBmym9qsK3C0g7Il8P9dVAs5PbkB0lgvKaiUroB1fynik9WZFV859 4GDO+oIrXCPk5rGwBVVre2DEOJhXGlDkAcyXzlmPD277IQhgU/rnfXa9H3jckA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=thaodan.de header.s=mail header.b=WS4krqwR; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org"; dmarc=pass (policy=quarantine) header.from=thaodan.de ARC-Seal: i=1; s=key1; d=yhetil.org; t=1737415362; a=rsa-sha256; cv=none; b=i/NpUvqukR9MjO5I5sfo2D0QQJlY8EX9pIc1q1x93Xv/9RFbcVzuRLycfW75FkiwY8l+Qz DVVKjMPmAbfKp+p4bq2JtW7og/VJgPwymtf5P9JVz8bHvjdsW3KWyaWGq0ZZ8MfEVJ+bEt 7+ivItLkI3wRrl22I7mOHwoyU5p3zAwbSiqzCmS2kkuvm5be6tY3jpgdI4cGPJft0Up0Rk jjz/HBzHBeXeXxCyCQwXIG7NaFwYdJ5VeOsPE6qtSuNaLCZv9Qsqw+d7zYDFN5h2wvtEyR 9RCuC+9LQJY/Sp9YzpMX8ZstU1BKnUU6rKBvsjdQNvDJGB+enQRFkq2OvseuGA== Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 0168D36497 for ; Tue, 21 Jan 2025 00:22:41 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ta15R-0006Ji-8T; Mon, 20 Jan 2025 18:21:41 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ta15O-0006JS-By for emacs-orgmode@gnu.org; Mon, 20 Jan 2025 18:21:38 -0500 Received: from thaodan.de ([185.216.177.71]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ta15I-0008Jy-9D for emacs-orgmode@gnu.org; Mon, 20 Jan 2025 18:21:38 -0500 Received: from odin (dsl-trebng12-50dc7b-49.dhcp.inet.fi [80.220.123.49]) by thaodan.de (Postfix) with ESMTPSA id 4DDA0D00080 for ; Tue, 21 Jan 2025 01:21:29 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=thaodan.de; s=mail; t=1737415289; bh=kAKWrPrgLRnW84FFJl3RIoWvh0/QyHRCq93R0EfqJ9U=; h=From:To:Subject:Date; b=WS4krqwRF/SH9UT2XvoZ7xKVrYWXmUUlUXBRlztOIjnJY45kVHMkjMCO6BsvQ3k7z VIkQ68qsMrBY9cEH6l3s6Zs2s8FP5SDTgY+LXRdTzbH0HzkPHUtVvgzPDkdj6Mn3hr 2apvCoEhGaC93/kUEN86WAHJu+uyic4Abdaa9FPMqiYDMFpdW3RnQzewlSWRn/vyWJ 90UJfrPZV890YBlWnbgauTt8AU50iyA7Y+b7TGlCUfpDRwwTO64mS7KhaLrIQ4bcVy 4Gkv4xChv6EAxBS2lU2hpBbtFJm7dvRYcNjA2Mds+/HCrwo08R7pSAJUyJQSI7buz5 ogzhgUTmHQ+RLn6snFbjExI3W7f7jx+qBq11PQ1jNgxSKw8tcV6GdJ/bMlW/ELmRYy w5425NTtzmwaF3mMyvks8nUZJOdHlrTK9qI9PrZG2g7rypIGc6Izc3RsuUr6kKMlQ5 t0EBVfXhFMhjmDbjb0NsKdzXB5S0i2g6zEE+SAjk55FmgYupgqV/CyhXWoVC8cR9Ms dLotzWz1GG/h93uJ7DXqSg9zrw7777HBmA1iiOhzgv5CQWpK46s8ge2Ym9PSlD/91z SuQqwuOa6ouN8FHLj3V7Y65+Ui3zrZcet/wuJtH5gjsk2MRVE+ziSdbapuGqPY+/W2 4+90Z3Lr7+rj3TBVZ9AbgdrQ= From: =?utf-8?Q?Bj=C3=B6rn?= Bidar To: emacs-orgmode@gnu.org Subject: [BUG] org-gnus-follow-link tries to select dead frame [9.8-pre (release_9.7.15-163-g3ff21c.dirty @ /home/bidar/.local/etc/emacs/lib/org/lisp/)] Autocrypt: addr=bjorn.bidar@thaodan.de; prefer-encrypt=nopreference; keydata= mDMEZNfpPhYJKwYBBAHaRw8BAQdACBEmr+0xwIIHZfIDlZmm7sa+lHHSb0g9FZrN6qE6ru60JUJq w7ZybiBCaWRhciA8Ympvcm4uYmlkYXJAdGhhb2Rhbi5kZT6IlgQTFgoAPgIbAwULCQgHAgIiAgYV CgkICwIEFgIDAQIeBwIXgBYhBFHxdut1RzAepymoq1wbdKFlHF9oBQJk1/YmAhkBAAoJEFwbdKFl HF9oB9cBAJoIIGQKXm4cpap+Flxc/EGnYl0123lcEyzuduqvlDT0AQC3OlFKm/OiqJ8IMTrzJRZ8 phFssTkSrrFXnM2jm5PYDoiTBBMWCgA7FiEEUfF263VHMB6nKairXBt0oWUcX2gFAmTX6T4CGwMF CwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQXBt0oWUcX2hbCQEAtru7kvM8hi8zo6z9ux2h K+B5xViKuo7Z8K3IXuK5ugwA+wUfKzomzdBPhfxDsqLcEziGRxoyx0Q3ld9aermBUccHtBxCasO2 cm4gQmlkYXIgPG1lQHRoYW9kYW4uZGU+iJMEExYKADsCGwMFCwkIBwICIgIGFQoJCAsCBBYCAwEC HgcCF4AWIQRR8XbrdUcwHqcpqKtcG3ShZRxfaAUCZNf2FQAKCRBcG3ShZRxfaCzSAP4hZ7cSp0YN XYpcjHdsySh2MuBhhoPeLGXs+2kSiqBiOwD/TP8AgPEg/R+SI9GI9on7fBJJ0mp2IT8kZ2rhDOjg gA6IkwQTFgoAOxYhBFHxdut1RzAepymoq1wbdKFlHF9oBQJk1+ntAhsDBQsJCAcCAiICBhUKCQgL AgQWAgMBAh4HAheAAAoJEFwbdKFlHF9oBgwA/iQHwe0VL4Df4GGTYlNjMSHFlIkBmN4UfYGLYj3E TrOUAQC51M+M3cjsL8WHdpBz6VAo6df9d+rVwhQ9vQuFHqevArg4BGTX6T4SCisGAQQBl1UBBQEB B0Cbohc3JEfn005/cm0AOGjSsW1ZxAkgaoVNjbpqk4MgNAMBCAeIeAQYFgoAIBYhBFHxdut1RzAe pymoq1wbdKFlHF9oBQJk1+k+AhsMAAoJEFwbdKFlHF9ooHABAKGmrGBic/Vys3BBrOQiRB3Z7izO HwhqTRpAqFZtXS2nAQDZhp/5aYw1TZjTzkm1KVt9QiYnjd/MvxRE9iaY6x4mDbgzBGTX6T4WCSsG AQQB2kcPAQEHQAgRJq/tMcCCB2XyA5WZpu7GvpRx0m9IPRWazeqhOq7uiO8EGBYKACAWIQRR8Xbr dUcwHqcpqKtcG3ShZRxfaAUCZNf71AIbIgCBCRBcG3ShZRxfaHYgBBkWCgAdFiEEUfF263VHMB6n KairXBt0oWUcX2gFAmTX+9QACgkQXBt0oWUcX2jeSwD6AtWn0cuo8IF35YRo4o3cDRJnUfJnbvJy GxyCDThR+zYBAKG6/jdwmZkBQZKslnDAbMMd2WfiZZT5JW3IWC4EaKMO7HkBAKYPGZ3UbfkRvfFK S+pQ9CgtNfkSJQBtT1Ob7Y6nsacgAQCpyXN7yppmhW/oBgivITPy9Lkg+V4NK9WZYZCU9Q7LBA== Date: Tue, 21 Jan 2025 01:21:27 +0200 Message-ID: <874j1tvzpk.fsf@> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Received-SPF: pass client-ip=185.216.177.71; envelope-from=bjorn.bidar@thaodan.de; helo=thaodan.de X-Spam_score_int: -14 X-Spam_score: -1.5 X-Spam_bar: - X-Spam_report: (-1.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, INVALID_MSGID=0.568, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: emacs-orgmode-bounces+larch=yhetil.org@gnu.org X-Migadu-Flow: FLOW_IN X-Migadu-Country: US X-Migadu-Scanner: mx12.migadu.com X-Migadu-Spam-Score: -3.64 X-Spam-Score: -3.64 X-Migadu-Queue-Id: 0168D36497 X-TUID: 7M9wPJrkZce1 --=-=-= Content-Type: text/plain * Description org-gnus-follow-link tries to select the Gnus frame if the user used gnus-other-frame, the intention is to follow the previous action of the user and now choose that Gnus frame too. However it doesn't check if the frame is alive or not, resulting in (wrong-type-argument frame-live-p #). * Preconditions - gnus-other-frame-object is a dead frame * Steps to preproduce 1. Try to follow org-gnus link 2. Error * Proposed change Use the new org-link-frame-setup activate gnus-other-frame-object if required. The org-gnus-no-news function did not take care of if gnus should be called directly of if should be called using the gnus-other-frame function, i.e. when gnus-other-frame-object is set. Take gnus-other-frame-object into account and call it if gnus-other-frame-object is set or when the user chooses to do so regardless. This ensures that gnus-other-frame-object always contains an alive frame. The side effect is gnus-other-frame is used to ensure that Gnus is called in the correct frame. See attached patch. --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0001-Ensure-that-gnus-other-frame-object-is-alive-before-.patch >From 4f4936aba13fe2156d74465e3f4e8df857cc6754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Bidar?= Date: Tue, 21 Jan 2025 00:55:15 +0200 Subject: [PATCH] Ensure that gnus-other-frame-object is alive before selecting * lisp/ol-gnus.el (org-gnus-follow-link): Ensure that `gnus-other-frame-object' is active before selecting it. Error out in case frame-object is dead, i.e. wasn't activated by `org-link-frame-setup-function'. (org-gnus-no-new-news): Take `gnus-other-frame-object' into account. Call gnus-other-frame with chosen action instead without. Ensures that previous behavior of `org-gnus-follow-link' is kept. (org-gnus-no-new-news-other-frame): New function for users who choose to call `gnus-other-frame' regardless if previous used or not. * lisp/ol.el (org-link-frame-setup): Include new `org-gnus-no-news-other-frame` function. --- lisp/ol-gnus.el | 30 ++++++++++++++++++++++++------ lisp/ol.el | 4 +++- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/lisp/ol-gnus.el b/lisp/ol-gnus.el index 5cddc3790..65d77ea88 100644 --- a/lisp/ol-gnus.el +++ b/lisp/ol-gnus.el @@ -228,7 +228,12 @@ (defun org-gnus-follow-link (&optional group article) "Follow a Gnus link to GROUP and ARTICLE." (require 'gnus) (funcall (org-link-frame-setup-function 'gnus)) - (when gnus-other-frame-object (select-frame gnus-other-frame-object)) + (when gnus-other-frame-object + (if (not (frame-live-p gnus-other-frame-object)) + ;; Error out in case org-link-frame-setup did not take care of setting up + ;; the gnus frame if was activate previously. + (error "Couldn't select \'gnus-other-frame-object\', make sure it is active")) + (select-frame gnus-other-frame-object)) (let ((group (org-no-properties group)) (article (org-no-properties article))) (cond @@ -260,11 +265,24 @@ (defun org-gnus-follow-link (&optional group article) (message "Couldn't follow Gnus link. The linked group is empty.")))) (group (gnus-group-jump-to-group group))))) -(defun org-gnus-no-new-news () - "Like `\\[gnus]' but doesn't check for new news." - (cond ((gnus-alive-p) nil) - (org-gnus-no-server (gnus-no-server)) - (t (gnus)))) +(defun org-gnus-no-new-news (&optional other-frame) + "Like `\\[gnus]' but doesn't check for new news. +In case of OTHER-FRAME or `gnus-other-frame-object' call `gnus-other-frame'. + +Ensures that `gnus-other-frame' is activated correctly if dead." + (let ((action (cond (org-gnus-no-server #'gnus-no-server) + (t #'gnus)))) + (cond ((or other-frame gnus-other-frame-object) + (let ((gnus-other-frame-function action) + (gnus-other-frame-resume-function action)) + (gnus-other-frame))) + (t (if (not (gnus-alive-p)) + (funcall action)))))) + +(defun org-gnus-no-new-news-other-frame () + "Like `org-gnus-no-new-news' but always in another frame." + (org-gnus-no-new-news t)) + (provide 'ol-gnus) diff --git a/lisp/ol.el b/lisp/ol.el index 2365ca802..6cf3d92aa 100644 --- a/lisp/ol.el +++ b/lisp/ol.el @@ -348,6 +348,7 @@ (defcustom org-link-frame-setup `gnus' `gnus-other-frame' `org-gnus-no-new-news' + `org-gnus-no-new-news-other-frame' For FILE, use any of `find-file' `find-file-other-window' @@ -374,7 +375,8 @@ (defcustom org-link-frame-setup (choice (const gnus) (const gnus-other-frame) - (const org-gnus-no-new-news))) + (const org-gnus-no-new-news) + (const org-gnus-no-new-news-other-frame))) (cons (const file) (choice (const find-file) -- 2.45.2 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable * Backtrace Debugger entered--Lisp error: (wrong-type-argument frame-live-p #) select-frame(#) org-gnus-follow-link("nnimap+thaodan.de:Sent" "871pxrjqne.fsf@") org-gnus-open("nnimap+thaodan.de:Sent#871pxrjqne.fsf@" nil) funcall(org-gnus-open "nnimap+thaodan.de:Sent#871pxrjqne.fsf@" nil) (condition-case nil (funcall f path arg) (wrong-number-of-arguments (funcal= l f path))) (progn (condition-case nil (funcall f path arg) (wrong-number-of-arguments = (funcall f path)))) (if (functionp f) (progn (condition-case nil (funcall f path arg) (wrong-nu= mber-of-arguments (funcall f path))))) (let ((f (org-link-get-parameter type :follow))) (if (functionp f) (progn (= condition-case nil (funcall f path arg) (wrong-number-of-arguments (funcall= f path)))))) (let nil (let ((f (org-link-get-parameter type :follow))) (if (functionp f)= (progn (condition-case nil (funcall f path arg) (wrong-number-of-arguments= (funcall f path))))))) (cond ((equal type '"file") (let nil (let* ((option (org-element--property = :search-option link nil nil)) (path (if option (concat path "::" option) pa= th))) (org-link-open-as-file path (let* ((val ...)) (cond (arg ...) (... ..= .) (... ...))))))) ((member type '("radio" "fuzzy" "custom-id" "coderef")) = (let nil (if (run-hook-with-args-until-success 'org-open-link-functions pat= h) nil (if (not arg) (org-mark-ring-push) (switch-to-buffer-other-window (o= rg-link--buffer-for-internals))) (let ((destination (save-excursion ...))) = (if (and (<=3D ... destination) (>=3D ... destination)) nil (widen)) (goto-= char destination))))) (t (let nil (let ((f (org-link-get-parameter type :fo= llow))) (if (functionp f) (progn (condition-case nil (funcall f path arg) (= wrong-number-of-arguments ...)))))))) (let ((type (org-element--property :type link nil nil)) (path (org-element-= -property :path link nil nil))) (cond ((equal type '"file") (let nil (let* = ((option (org-element--property :search-option link nil nil)) (path (if opt= ion ... path))) (org-link-open-as-file path (let* (...) (cond ... ... ...))= )))) ((member type '("radio" "fuzzy" "custom-id" "coderef")) (let nil (if (= run-hook-with-args-until-success 'org-open-link-functions path) nil (if (no= t arg) (org-mark-ring-push) (switch-to-buffer-other-window (org-link--buffe= r-for-internals))) (let ((destination ...)) (if (and ... ...) nil (widen)) = (goto-char destination))))) (t (let nil (let ((f (org-link-get-parameter ty= pe :follow))) (if (functionp f) (progn (condition-case nil ... ...)))))))) org-link-open((link (:standard-properties [42406 nil 42453 42538 42540 0 ni= l nil nil nil nil nil nil nil # nil nil (paragraph (:stan= dard-properties [42396 42396 42396 42541 42541 0 nil nil element t nil nil = nil nil # nil nil (item ...)]))] :type "gnus" :type-expli= cit-p t :path "nnimap+thaodan.de:Sent#871pxrjqne.fsf@" :format bracket :raw= -link "gnus:nnimap+thaodan.de:Sent#871pxrjqne.fsf@" :application nil :searc= h-option nil)) nil) (cond ((not type) (user-error "No link found")) ((memq type '(comment comme= nt-block node-property keyword)) (call-interactively #'org-open-at-point-gl= obal)) ((memq type '(headline inlinetask)) (org-match-line org-complex-head= ing-regexp) (let ((tags-beg (match-beginning 5)) (tags-end (match-end 5))) = (if (and tags-beg (>=3D (point) tags-beg) (< (point) tags-end)) (org-tags-v= iew arg (save-excursion (let* (... ...) (buffer-substring ... ...)))) (let*= ((val (org-offer-links-in-entry ... ... arg))) (if (consp val) (let* (...)= (if ... ... ...))))))) ((or (eq type 'footnote-reference) (and (eq type 'f= ootnote-definition) (save-excursion (skip-chars-forward " \11") (let ((begi= n ...)) (if begin (< ... begin) (=3D ... ...)))))) (org-footnote-action)) (= (and (eq type 'planning) (org-in-regexp org-ts-regexp-both nil t)) (org-fol= low-timestamp-link)) ((and (eq type 'clock) value (>=3D (point) (org-elemen= t-begin value)) (<=3D (point) (org-element-end value))) (org-follow-timesta= mp-link)) ((eq type 'src-block) (org-babel-open-src-block-result)) ((>=3D (= point) (save-excursion (goto-char (org-element-end context)) (skip-chars-ba= ckward " \11") (point))) (user-error "No link found")) ((eq type 'inline-sr= c-block) (org-babel-open-src-block-result)) ((eq type 'timestamp) (org-foll= ow-timestamp-link)) ((eq type 'link) (org-link-open context arg)) ((memq ty= pe '(citation citation-reference)) (org-cite-follow context arg)) (t (user-= error "No link found"))) (let* ((context (org-element-lineage (org-element-context) '(citation citat= ion-reference clock comment comment-block footnote-definition footnote-refe= rence headline inline-src-block inlinetask keyword link node-property plann= ing src-block timestamp) t)) (type (org-element-type context)) (value (org-= element--property :value context nil nil))) (cond ((not type) (user-error "= No link found")) ((memq type '(comment comment-block node-property keyword)= ) (call-interactively #'org-open-at-point-global)) ((memq type '(headline i= nlinetask)) (org-match-line org-complex-heading-regexp) (let ((tags-beg (ma= tch-beginning 5)) (tags-end (match-end 5))) (if (and tags-beg (>=3D (point)= tags-beg) (< (point) tags-end)) (org-tags-view arg (save-excursion (let* .= .. ...))) (let* ((val ...)) (if (consp val) (let* ... ...)))))) ((or (eq ty= pe 'footnote-reference) (and (eq type 'footnote-definition) (save-excursion= (skip-chars-forward " \11") (let (...) (if begin ... ...))))) (org-footnot= e-action)) ((and (eq type 'planning) (org-in-regexp org-ts-regexp-both nil = t)) (org-follow-timestamp-link)) ((and (eq type 'clock) value (>=3D (point)= (org-element-begin value)) (<=3D (point) (org-element-end value))) (org-fo= llow-timestamp-link)) ((eq type 'src-block) (org-babel-open-src-block-resul= t)) ((>=3D (point) (save-excursion (goto-char (org-element-end context)) (s= kip-chars-backward " \11") (point))) (user-error "No link found")) ((eq typ= e 'inline-src-block) (org-babel-open-src-block-result)) ((eq type 'timestam= p) (org-follow-timestamp-link)) ((eq type 'link) (org-link-open context arg= )) ((memq type '(citation citation-reference)) (org-cite-follow context arg= )) (t (user-error "No link found")))) (if (run-hook-with-args-until-success 'org-open-at-point-functions) nil (le= t* ((context (org-element-lineage (org-element-context) '(citation citation= -reference clock comment comment-block footnote-definition footnote-referen= ce headline inline-src-block inlinetask keyword link node-property planning= src-block timestamp) t)) (type (org-element-type context)) (value (org-ele= ment--property :value context nil nil))) (cond ((not type) (user-error "No = link found")) ((memq type '(comment comment-block node-property keyword)) (= call-interactively #'org-open-at-point-global)) ((memq type '(headline inli= netask)) (org-match-line org-complex-heading-regexp) (let ((tags-beg (match= -beginning 5)) (tags-end (match-end 5))) (if (and tags-beg (>=3D ... tags-b= eg) (< ... tags-end)) (org-tags-view arg (save-excursion ...)) (let* (...) = (if ... ...))))) ((or (eq type 'footnote-reference) (and (eq type 'footnote= -definition) (save-excursion (skip-chars-forward " \11") (let ... ...)))) (= org-footnote-action)) ((and (eq type 'planning) (org-in-regexp org-ts-regex= p-both nil t)) (org-follow-timestamp-link)) ((and (eq type 'clock) value (>= =3D (point) (org-element-begin value)) (<=3D (point) (org-element-end value= ))) (org-follow-timestamp-link)) ((eq type 'src-block) (org-babel-open-src-= block-result)) ((>=3D (point) (save-excursion (goto-char (org-element-end c= ontext)) (skip-chars-backward " \11") (point))) (user-error "No link found"= )) ((eq type 'inline-src-block) (org-babel-open-src-block-result)) ((eq typ= e 'timestamp) (org-follow-timestamp-link)) ((eq type 'link) (org-link-open = context arg)) ((memq type '(citation citation-reference)) (org-cite-follow = context arg)) (t (user-error "No link found"))))) org-open-at-point() (let ((warning-suppress-types (cons '(org-element org-element-parser) warni= ng-suppress-types))) (org-open-at-point)) org-open-at-mouse((mouse-2 (# 42477 (524 . 1069)= 2228637244 nil 42477 (43 . 34) nil (8 . 5) (12 . 26)))) funcall-interactively(org-open-at-mouse (mouse-2 (# 42477 (524 . 1069) 2228637244 nil 42477 (43 . 34) nil (8 . 5) (12 . 26)= ))) command-execute(org-open-at-mouse) --=-=-=--