From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id CMsWNDHsRWJpAQAAgWs5BA (envelope-from ) for ; Thu, 31 Mar 2022 20:00:17 +0200 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id qAx0MTHsRWJJDgAA9RJhRA (envelope-from ) for ; Thu, 31 Mar 2022 20:00:17 +0200 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 719C61899F for ; Thu, 31 Mar 2022 20:00:16 +0200 (CEST) Received: from localhost ([::1]:50342 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nZz5j-0004vW-1d for larch@yhetil.org; Thu, 31 Mar 2022 14:00:15 -0400 Received: from eggs.gnu.org ([209.51.188.92]:41490) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nZz1m-0007qE-IN for emacs-orgmode@gnu.org; Thu, 31 Mar 2022 13:56:10 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:7586) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nZz1h-0005OZ-13; Thu, 31 Mar 2022 13:56:09 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 6250F442C9E; Thu, 31 Mar 2022 13:56:02 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 8A6D3442C9A; Thu, 31 Mar 2022 13:55:56 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1648749356; bh=ovgc/mOTlrVGNciG7TPrx0bxEZyLIzJ3MysT4VHs1qs=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=dRg8JeYAj6IaoHZ/b0lOo11pst/EgRXwco0IEOfiriR+YM0MmqPvbAI4p3g+cfZ1s rISL3zq4dPnQJC9unTWrrNZngcd+aBwHTVpy/sFMpsf8bE6GfZVlJnK1zE1mDhaicX DuUpO9hPMwg+ViS7xQjfq1agfYaqJmyG7UTUsE1eXt/VyiA/B+l8/5XOJLj/eL974A r6LNYLh9MA4wJYLYSZF1QA+2ZoTomUVgOr34RvCH4fSbNmugxlPDUun18Vii4EcEW0 VVd3B/X+2yc8Xw3DRsn5CtwBhA51yEKR7+9DWNT4IF1qEkO0KYY/uKuUnEsTWrGuVf dnGCVi/FAjwLg== Received: from alfajor (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 6390C120334; Thu, 31 Mar 2022 13:55:56 -0400 (EDT) From: Stefan Monnier To: emacs-orgmode@gnu.org Cc: Bastien Subject: Drop defadvice from Org Message-ID: References: <87a6drnsv6.fsf@gnu.org> <87a6dq46kd.fsf@gnu.org> Date: Thu, 31 Mar 2022 13:55:55 -0400 In-Reply-To: <87a6dq46kd.fsf@gnu.org> (Bastien's message of "Wed, 16 Mar 2022 09:58:42 +0100") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain Received-SPF: pass client-ip=132.204.25.50; envelope-from=monnier@iro.umontreal.ca; helo=mailscanner.iro.umontreal.ca X-Spam_score_int: -42 X-Spam_score: -4.3 X-Spam_bar: ---- X-Spam_report: (-4.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1648749617; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=ysZ6aBMeDj2c69Q4dKsHT+MExTCQ5LSyApZcEtIGf3w=; b=U6YGzS/deca2mWuaurW9lTwMcKKjtdCAAlStdhr7y+hpGateyaYHOeN5sUE3NDB2DDfWCT 03s8zOx7bQTrfEIydv6me/8UpLDEZDbPBicdC1caBXmlcjT3n2F6LdSlXi44q6Zt17xGld 6707Jb3ewzDan58mIwOObwwTsS2O2EKFhbcZOYbzYVatHIQxEaQMGTTkNSyJgutzxTdDzj ewaR8buKhjApxo3YRWwYEFxSp1QpXyBEkrZ58WLgT0150TGeVaW/xuqj6eP13LBVTcw2Mu 3bZ4v24iLUskzVqZJusODCwHiZlbhRj41UpaOr0OZVLHEp544qtchfs4s9mHfQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1648749617; a=rsa-sha256; cv=none; b=nz16Y5pB6wnNO/XZ86Ndm+SdRICGrDafaz8cqAn58bhUkDex4Abe2wBz202IWf2QrE7eOW e/+UIEQ6NMdr0An2MQd5YIzsbAFFMA98kqNiA5PJ9HMU2V+oocmozp04zIYKsBJUEZyoMS NSMMXiWtHVIs5zmHjnSiLVZ7tRDNh4FqzSBoe4Mx3zm1TlGTJjuqDz3G0ERfdnlknaKdm2 z+GLFIw1AjRKDOKLUO3uNv8RfbG5yZVR2LGKM8wza+CarKcuqtZIEAXZKhJLE9541wpUPQ +15XciCeduENGjDZZe3hQvbtuhf33beUYngBPGd6WySKbRf+AWR1FMtbaaFbLA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=iro.umontreal.ca header.s=mail header.b=dRg8JeYA; dmarc=pass (policy=quarantine) header.from=iro.umontreal.ca; 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" X-Migadu-Spam-Score: -6.17 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=iro.umontreal.ca header.s=mail header.b=dRg8JeYA; dmarc=pass (policy=quarantine) header.from=iro.umontreal.ca; 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" X-Migadu-Queue-Id: 719C61899F X-Spam-Score: -6.17 X-Migadu-Scanner: scn0.migadu.com X-TUID: dgfAmqB+mOWp The patch below gets rid of the old `defadvice`, replacing it with `advice-add`. It also includes some FIXMEs about things I found along the way which look suspicious (they're not directly related to the patch, tho, nor are they affected by it AFAICT). Stefan 2022-03-31 Stefan Monnier Replace all uses of the old `defadvice` with the new `advice-add`. Along the way, remove some redundant `:group` args (redundant because they specify the same group as would be used by default anyway) and make a few other simplifications. Also don't bother putting `advice-add` within an eval-after-load since the advice machinery already takes care of handling it. * lisp/org.el (org-run-like-in-org-mode): Strength reduce `eval` to `cl-progv`. (org--check-org-structure-template-alist): Strength reduce `eval` to `symbol-value`. (org-map-entries, org-eval-in-calendar, org-diary-sexp-entry): Make sure we use the new lexically scoped dialect. (org--math-always-on): New function, extracted from advice. (org-cdlatex-mode): Use it with `advice-add`. (org-self-insert-command): Simplify `and`+`listp` into `consp`. (org-submit-bug-report): Make sure we use the new lexically scoped dialect. * lisp/org-protocol.el (org-protocol-convert-query-to-plist): Use `cl-mapcan`. (org--protocol-detect-protocol-server): New function, extracted from advice. (server-visit-files): Use it with `advice-add`. * lisp/org-mouse.el (org--mouse-dnd-insert-text): New function, extracted from advice. (dnd-insert-text): Use it with `advice-add`. (org--mouse-dnd-open-file): New function, extracted from advice. (dnd-open-file): Use it with `advice-add`. (org--mouse-open-at-point): New function, extracted from advice. (org-mode-hook): Advise `org-open-at-point` with `advice-add`. * lisp/org-ctags.el (org--ctags-load-tag-list): New function, extracted from advice. (visit-tags-table): Use it with `advice-add`. (org--ctags-set-org-mark-before-finding-tag): New function, extracted from advice. (xref-find-definitions): Use it with `advice-add`. * lisp/org-compat.el (org-bookmark-jump-unhide): Accept (unused) args. (save-place-find-file-hook): Use `advice-add`. (org--ecb-show-context): New function, extracted from advice. (ecb-method-clicked): Use it with `advice-add`. (org-mark-jump-unhide): Accept (unused) args. (pop-to-mark-command, exchange-point-and-mark, pop-global-mark): Use `advice-add`. diff --git a/lisp/org-compat.el b/lisp/org-compat.el index 38d330de6d..f768a8233b 100644 --- a/lisp/org-compat.el +++ b/lisp/org-compat.el @@ -901,7 +901,6 @@ attention to case differences." (defcustom org-imenu-depth 2 "The maximum level for Imenu access to Org headlines. This also applied for speedbar access." - :group 'org-imenu-and-speedbar :type 'integer) ;;;; Imenu @@ -1114,7 +1113,7 @@ ELEMENT is the element at point." ;;;; Bookmark -(defun org-bookmark-jump-unhide () +(defun org-bookmark-jump-unhide (&rest _) "Unhide the current position, to show the bookmark location." (and (derived-mode-p 'org-mode) (or (org-invisible-p) @@ -1123,7 +1122,7 @@ ELEMENT is the element at point." (org-show-context 'bookmark-jump))) ;; Make `bookmark-jump' shows the jump location if it was hidden. -(add-hook 'bookmark-after-jump-hook 'org-bookmark-jump-unhide) +(add-hook 'bookmark-after-jump-hook #'org-bookmark-jump-unhide) ;;;; Calendar @@ -1176,42 +1175,29 @@ key." ;;;; Saveplace ;; Make sure saveplace shows the location if it was hidden -(eval-after-load 'saveplace - '(defadvice save-place-find-file-hook (after org-make-visible activate) - "Make the position visible." - (org-bookmark-jump-unhide))) +(advice-add 'save-place-find-file-hook :after #'org-bookmark-jump-unhide) ;;;; Ecb ;; Make sure ecb shows the location if it was hidden -(eval-after-load 'ecb - '(defadvice ecb-method-clicked (after esf/org-show-context activate) - "Make hierarchy visible when jumping into location from ECB tree buffer." - (when (derived-mode-p 'org-mode) - (org-show-context)))) +(advice-add 'ecb-method-clicked :after #'org--ecb-show-context) +(defun org--ecb-show-context (&rest _) + "Make hierarchy visible when jumping into location from ECB tree buffer." + (when (derived-mode-p 'org-mode) + (org-show-context))) ;;;; Simple -(defun org-mark-jump-unhide () +(defun org-mark-jump-unhide (&rest _) "Make the point visible with `org-show-context' after jumping to the mark." (when (and (derived-mode-p 'org-mode) (org-invisible-p)) (org-show-context 'mark-goto))) -(eval-after-load 'simple - '(defadvice pop-to-mark-command (after org-make-visible activate) - "Make the point visible with `org-show-context'." - (org-mark-jump-unhide))) +(advice-add 'pop-to-mark-command :after #'org-mark-jump-unhide) -(eval-after-load 'simple - '(defadvice exchange-point-and-mark (after org-make-visible activate) - "Make the point visible with `org-show-context'." - (org-mark-jump-unhide))) - -(eval-after-load 'simple - '(defadvice pop-global-mark (after org-make-visible activate) - "Make the point visible with `org-show-context'." - (org-mark-jump-unhide))) +(advice-add 'exchange-point-and-mark :after #'org-mark-jump-unhide) +(advice-add 'pop-global-mark :after #'org-mark-jump-unhide) ;;;; Session diff --git a/lisp/org-ctags.el b/lisp/org-ctags.el index 6fc97ca399..59a08d0b54 100644 --- a/lisp/org-ctags.el +++ b/lisp/org-ctags.el @@ -157,7 +157,6 @@ See the ctags documentation for more information.") (defcustom org-ctags-path-to-ctags (if (executable-find "ctags-exuberant") "ctags-exuberant" "ctags") "Name of the ctags executable file." - :group 'org-ctags :version "24.1" :type 'file) @@ -166,7 +165,6 @@ See the ctags documentation for more information.") org-ctags-ask-rebuild-tags-file-then-find-tag org-ctags-ask-append-topic) "List of functions to be prepended to ORG-OPEN-LINK-FUNCTIONS by ORG-CTAGS." - :group 'org-ctags :version "24.1" :type 'hook :options '(org-ctags-find-tag @@ -188,7 +186,6 @@ Created as a local variable in each buffer.") "Text to insert when creating a new org file via opening a hyperlink. The following patterns are replaced in the string: `%t' - replaced with the capitalized title of the hyperlink" - :group 'org-ctags :version "24.1" :type 'string) @@ -207,7 +204,8 @@ The following patterns are replaced in the string: (visit-tags-table tags-filename)))))) -(defadvice visit-tags-table (after org-ctags-load-tag-list activate compile) +(advice-add 'visit-tags-table :after #'org--ctags-load-tag-list) +(defun org--ctags-load-tag-list (&rest _) (when (and org-ctags-enabled-p tags-file-name) (setq-local org-ctags-tag-list (org-ctags-all-tags-in-current-tags-table)))) @@ -295,8 +293,9 @@ The new topic will be titled NAME (or TITLE if supplied)." ;;;; Misc interoperability with etags system ================================= -(defadvice xref-find-definitions - (before org-ctags-set-org-mark-before-finding-tag activate compile) +(advice-add 'xref-find-definitions :before + #'org--ctags-set-org-mark-before-finding-tag) +(defun org--ctags-set-org-mark-before-finding-tag (&rest _) "Before trying to find a tag, save our current position on org mark ring." (save-excursion (when (and (derived-mode-p 'org-mode) org-ctags-enabled-p) diff --git a/lisp/org-mouse.el b/lisp/org-mouse.el index 20c20acc32..2d8136b752 100644 --- a/lisp/org-mouse.el +++ b/lisp/org-mouse.el @@ -580,15 +580,17 @@ This means, between the beginning of line and the point." (insert text) (beginning-of-line)) -(defadvice dnd-insert-text (around org-mouse-dnd-insert-text activate) +(advice-add 'dnd-insert-text :around #'org--mouse-dnd-insert-text) +(defun org--mouse-dnd-insert-text (orig-fun window action text &rest args) (if (derived-mode-p 'org-mode) (org-mouse-insert-item text) - ad-do-it)) + (apply orig-fun window action text args))) -(defadvice dnd-open-file (around org-mouse-dnd-open-file activate) +(advice-add 'dnd-open-file :around #'org--mouse-dnd-open-file) +(defun org--mouse-dnd-open-file (orig-fun uri &rest args) (if (derived-mode-p 'org-mode) (org-mouse-insert-item uri) - ad-do-it)) + (apply orig-fun uri args))) (defun org-mouse-match-closure (function) (let ((match (match-data t))) @@ -894,15 +896,17 @@ This means, between the beginning of line and the point." (1 `(face nil keymap ,org-mouse-map mouse-face highlight) prepend))) t)) - (defadvice org-open-at-point (around org-mouse-open-at-point activate) - (let ((context (org-context))) - (cond - ((assq :headline-stars context) (org-cycle)) - ((assq :checkbox context) (org-toggle-checkbox)) - ((assq :item-bullet context) - (let ((org-cycle-include-plain-lists t)) (org-cycle))) - ((org-footnote-at-reference-p) nil) - (t ad-do-it)))))) + (advice-add 'org-open-at-point :around #'org--mouse-open-at-point))) + +(defun org--mouse-open-at-point (orig-fun &rest args) + (let ((context (org-context))) + (cond + ((assq :headline-stars context) (org-cycle)) + ((assq :checkbox context) (org-toggle-checkbox)) + ((assq :item-bullet context) + (let ((org-cycle-include-plain-lists t)) (org-cycle))) + ((org-footnote-at-reference-p) nil) + (t (apply orig-fun args))))) (defun org-mouse-move-tree-start (_event) (interactive "e") diff --git a/lisp/org-persist.el b/lisp/org-persist.el index 3b6a2d330a..dc14af817e 100644 --- a/lisp/org-persist.el +++ b/lisp/org-persist.el @@ -179,7 +179,6 @@ cache-dir)) "org-persist/")) "Directory where the data is stored." - :group 'org-persist :type 'directory) (defcustom org-persist-remote-files 100 @@ -931,8 +930,8 @@ Also, remove containers associated with non-existing files." (message "Missing write access rights to org-persist-directory: %S" org-persist-directory) (add-hook 'kill-emacs-hook #'org-persist-write-all) - ;; `org-persist-gc' should run before `org-persist-write-all'. So we are adding the - ;; hook after `org-persist-write-all'. + ;; `org-persist-gc' should run before `org-persist-write-all'. + ;; So we are adding the hook after `org-persist-write-all'. (add-hook 'kill-emacs-hook #'org-persist-gc))) (add-hook 'after-init-hook #'org-persist-load-all) diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el index 7c4de03bc2..1969f51fe3 100644 --- a/lisp/org-protocol.el +++ b/lisp/org-protocol.el @@ -174,7 +174,6 @@ The filenames passed on the command line are passed to the emacs-server in reverse order. Set to t (default) to re-reverse the list, i.e. use the sequence on the command line. If nil, the sequence of the filenames is unchanged." - :group 'org-protocol :type 'boolean) (defcustom org-protocol-project-alist nil @@ -233,7 +232,6 @@ Example: Consider using the interactive functions `org-protocol-create' and `org-protocol-create-for-org' to help you filling this variable with valid contents." - :group 'org-protocol :type 'alist) (defcustom org-protocol-protocol-alist nil @@ -284,20 +282,17 @@ Here is an example: (\"your-protocol\" :protocol \"your-protocol\" :function your-protocol-handler-function)))" - :group 'org-protocol :type '(alist)) (defcustom org-protocol-default-template-key nil "The default template key to use. This is usually a single character string but can also be a string with two characters." - :group 'org-protocol :type '(choice (const nil) (string))) (defcustom org-protocol-data-separator "/+\\|\\?" "The default data separator to use. This should be a single regexp string." - :group 'org-protocol :version "24.4" :package-version '(Org . "8.0") :type 'regexp) @@ -309,7 +304,8 @@ This should be a single regexp string." Emacsclient compresses double and triple slashes." (when (string-match "^\\([a-z]+\\):/" uri) (let* ((splitparts (split-string uri "/+"))) - (setq uri (concat (car splitparts) "//" (mapconcat 'identity (cdr splitparts) "/"))))) + (setq uri (concat (car splitparts) "//" + (mapconcat #'identity (cdr splitparts) "/"))))) uri) (defun org-protocol-split-data (data &optional unhexify separator) @@ -549,10 +545,10 @@ Now template ?b will be used." "Convert QUERY key=value pairs in the URL to a property list." (when query (let ((plus-decoded (replace-regexp-in-string "\\+" " " query t t))) - (apply 'append (mapcar (lambda (x) - (let ((c (split-string x "="))) - (list (intern (concat ":" (car c))) (cadr c)))) - (split-string plus-decoded "&")))))) + (cl-mapcan (lambda (x) + (let ((c (split-string x "="))) + (list (intern (concat ":" (car c))) (cadr c)))) + (split-string plus-decoded "&"))))) (defun org-protocol-open-source (fname) "Process an org-protocol://open-source?url= style URL with FNAME. @@ -641,7 +637,7 @@ Old-style links such as \"protocol://sub-protocol://param1/param2\" are also recognized. If a matching protocol is found, the protocol is stripped from -fname and the result is passed to the protocol function as the +FNAME and the result is passed to the protocol function as the first parameter. The second parameter will be non-nil if FNAME uses key=val&key2=val2-type arguments, or nil if FNAME uses val/val2-type arguments. If the function returns nil, the @@ -687,12 +683,12 @@ to deal with new-style links.") (throw 'fname t)))))))) fname))) -(defadvice server-visit-files (before org-protocol-detect-protocol-server activate) +(advice-add 'server-visit-files :around #'org--protocol-detect-protocol-server) +(defun org--protocol-detect-protocol-server (orig-fun files client &rest args) "Advice server-visit-flist to call `org-protocol-modify-filename-for-protocol'." (let ((flist (if org-protocol-reverse-list-of-files - (reverse (ad-get-arg 0)) - (ad-get-arg 0))) - (client (ad-get-arg 1))) + (reverse files) + files))) (catch 'greedy (dolist (var flist) ;; `\' to `/' on windows. FIXME: could this be done any better? @@ -701,11 +697,16 @@ to deal with new-style links.") fname (member var flist) client)) (if (eq fname t) ;; greedy? We need the t return value. (progn - (ad-set-arg 0 nil) + ;; FIXME: Doesn't this just ignore all the files before + ;; this one (the remaining ones have been passed to + ;; `org-protocol-check-filename-for-protocol' but not + ;; the ones before). + (setq files nil) (throw 'greedy t)) (if (stringp fname) ;; probably filename (setcar var fname) - (ad-set-arg 0 (delq var (ad-get-arg 0)))))))))) + (setq files (delq var files))))))) + (apply orig-fun files client args))) ;;; Org specific functions: diff --git a/lisp/org-tempo.el b/lisp/org-tempo.el index b34007bf78..ed71431751 100644 --- a/lisp/org-tempo.el +++ b/lisp/org-tempo.el @@ -67,7 +67,6 @@ just like `org-structure-template-alist'. The tempo snippet Do not use \"I\" as a KEY, as it is reserved for expanding \"#+include\"." - :group 'org-tempo :type '(repeat (cons (string :tag "Key") (string :tag "Keyword"))) :package-version '(Org . "9.2")) @@ -102,8 +101,8 @@ Tempo templates will be added." Go through `org-structure-template-alist' and `org-tempo-keywords-alist' and update tempo templates." - (mapc 'org--check-org-structure-template-alist '(org-structure-template-alist - org-tempo-keywords-alist)) + (mapc #'org--check-org-structure-template-alist '(org-structure-template-alist + org-tempo-keywords-alist)) (let ((keys (org-tempo--keys))) ;; Check for duplicated snippet keys and warn if any are found. (when (> (length keys) (length (delete-dups keys))) @@ -176,8 +175,8 @@ didn't succeed." ;; Org Tempo is set up with each new Org buffer and potentially in the ;; current Org buffer. -(add-hook 'org-mode-hook 'org-tempo-setup) -(add-hook 'org-tab-before-tab-emulation-hook 'org-tempo-complete-tag) +(add-hook 'org-mode-hook #'org-tempo-setup) +(add-hook 'org-tab-before-tab-emulation-hook #'org-tempo-complete-tag) ;; Enable Org Tempo in all open Org buffers. (dolist (b (org-buffer-list 'files)) diff --git a/lisp/org.el b/lisp/org.el index 5e3d0b3339..59714c1713 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -8577,14 +8577,15 @@ This will temporarily bind local variables that are typically bound in Org mode to the values they have in Org mode, and then interactively call CMD." (org-load-modules-maybe) - (let (binds) + (let (vars vals) (dolist (var (org-get-local-variables)) (when (or (not (boundp (car var))) (eq (symbol-value (car var)) (default-value (car var)))) - (push (list (car var) `(quote ,(cadr var))) binds))) - (eval `(let ,binds - (call-interactively (quote ,cmd)))))) + (push (car var) vars) + (push (cadr var) vals))) + (cl-progv vars vals + (call-interactively cmd)))) (defun org-get-category (&optional pos force-refresh) "Get the category applying to position POS." @@ -9513,7 +9514,7 @@ block can be inserted by pressing TAB after the string \" (length ad-return-value) 0) -;; (setq ad-return-value (org-odt--encode-plain-text (ad-get-arg 0))))) +;; (let ((retval (apply orig-fun latex-frag args))) +;; (if (> (length retval) 0) +;; retval +;; (org-odt--encode-plain-text latex-frag)))) (defun org-odt-latex-environment (latex-environment _contents info) "Transcode a LATEX-ENVIRONMENT element from Org to ODT.