emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Samuel Wales <samologist@gmail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Bastien <bzg@gnu.org>, emacs-orgmode@gnu.org
Subject: Re: Drop defadvice from Org
Date: Thu, 31 Mar 2022 16:17:57 -0700	[thread overview]
Message-ID: <CAJcAo8tCcEk_VKqmaXsWUJAURP8HVE8QbjRWh_sne5n7Tk+ujw@mail.gmail.com> (raw)
In-Reply-To: <jwv1qyic8rj.fsf-monnier+emacs@gnu.org>

thank you.  just an idle question.  is it common/desirable for built
in packages to use advice instead of hooks and such?

also, merely as a plea from a user, i hope defadvice will stick around
for all that user and non-built-in and abandoned code.

On 3/31/22, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> 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  <monnier@iro.umontreal.ca>
>
>     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
> \"<KEY\"."
>  In particular, check if the Org 9.2 format is used as opposed to
>  previous format."
>    (let ((elm (cl-remove-if-not (lambda (x) (listp (cdr x)))
> -			       (or (eval checklist)
> +			       (or (symbol-value checklist)
>  				   org-structure-template-alist))))
>      (when elm
>        (org-display-warning
> @@ -12804,7 +12805,7 @@ a *different* entry, you cannot use these
> techniques."
>  	    ;; Get the right scope
>  	    (cond
>  	     ((and scope (listp scope) (symbolp (car scope)))
> -	      (setq scope (eval scope)))
> +	      (setq scope (eval scope t)))
>  	     ((eq scope 'agenda)
>  	      (setq scope (org-agenda-files t)))
>  	     ((eq scope 'agenda-with-archives)
> @@ -14625,7 +14626,7 @@ Unless KEEPDATE is non-nil, update `org-ans2' to the
> cursor date."
>    (let ((sf (selected-frame))
>  	(sw (selected-window)))
>      (select-window (get-buffer-window "*Calendar*" t))
> -    (eval form)
> +    (eval form t)
>      (when (and (not keepdate) (calendar-cursor-to-date))
>        (let* ((date (calendar-cursor-to-date))
>  	     (time (encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date))))
> @@ -15039,9 +15040,9 @@ D may be an absolute day number, or a calendar-type
> list (month day year)."
>    (let* ((sexp `(let ((entry ,entry)
>  		      (date ',d))
>  		  ,(car (read-from-string sexp))))
> -	 (result (if calendar-debug-sexp (eval sexp)
> +	 (result (if calendar-debug-sexp (eval sexp t)
>  		   (condition-case nil
> -		       (eval sexp)
> +		       (eval sexp t)
>  		     (error
>  		      (beep)
>  		      (message "Bad sexp at line %d in %s: %s"
> @@ -15974,25 +15975,29 @@ in Org mode.
>      (cdlatex-compute-tables))
>    (unless org-cdlatex-texmathp-advice-is-done
>      (setq org-cdlatex-texmathp-advice-is-done t)
> -    (defadvice texmathp (around org-math-always-on activate)
> -      "Always return t in Org buffers.
> +    (advice-add 'texmathp :around #'org--math-always-on)))
> +
> +(defun org--math-always-on (orig-fun &rest args)
> +  "Always return t in Org buffers.
>  This is because we want to insert math symbols without dollars even
> outside
>  the LaTeX math segments.  If Org mode thinks that point is actually inside
>  an embedded LaTeX fragment, let `texmathp' do its job.
>  `\\[org-cdlatex-mode-map]'"
> -      (interactive)
> -      (let (p)
> -	(cond
> -	 ((not (derived-mode-p 'org-mode)) ad-do-it)
> -	 ((eq this-command 'cdlatex-math-symbol)
> -	  (setq ad-return-value t
> -		texmathp-why '("cdlatex-math-symbol in org-mode" . 0)))
> -	 (t
> -	  (let ((p (org-inside-LaTeX-fragment-p)))
> -	    (if (and p (member (car p) (plist-get org-format-latex-options
> :matchers)))
> -		(setq ad-return-value t
> -		      texmathp-why '("Org mode embedded math" . 0))
> -	      (when p ad-do-it)))))))))
> +  (interactive)
> +  (cond
> +   ((not (derived-mode-p 'org-mode)) (apply orig-fun args))
> +   ((eq this-command 'cdlatex-math-symbol)
> +    (setq texmathp-why '("cdlatex-math-symbol in org-mode" . 0))
> +    t)
> +   (t
> +    (let ((p (org-inside-LaTeX-fragment-p)))
> +      (when p ;; FIXME: Shouldn't we return t when `p' is nil?
> +	(if (member (car p)
> +	            (plist-get org-format-latex-options :matchers))
> +	    (progn
> +	      (setq texmathp-why '("Org mode embedded math" . 0))
> +	      t)
> +	  (apply orig-fun args)))))))
>
>  (defun turn-on-org-cdlatex ()
>    "Unconditionally turn on `org-cdlatex-mode'."
> @@ -16952,8 +16957,8 @@ overwritten, and the table is not marked as
> requiring realignment."
>        (call-interactively org-speed-command))
>       ((functionp org-speed-command)
>        (funcall org-speed-command))
> -     ((and org-speed-command (listp org-speed-command))
> -      (eval org-speed-command))
> +     ((consp org-speed-command)
> +      (eval org-speed-command t))
>       (t (let (org-use-speed-commands)
>  	  (call-interactively 'org-self-insert-command)))))
>     ((and
> @@ -18781,7 +18786,8 @@ such private information before sending the
> email.")
>  			    (string-match "\\(-hook\\|-function\\)\\'" (symbol-name v)))
>  		       (and
>  			(get v 'custom-type) (get v 'standard-value)
> -			(not (equal (symbol-value v) (eval (car (get v 'standard-value)))))))
> +			(not (equal (symbol-value v)
> +			            (eval (car (get v 'standard-value)) t)))))
>  		   (push v list)))))
>  	 (kill-buffer (get-buffer "*Warn about privacy*"))
>  	 list))
> diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el
> index 7f2e8ba47f..aa6e901223 100644
> --- a/lisp/ox-odt.el
> +++ b/lisp/ox-odt.el
> @@ -362,7 +362,6 @@ When this option is turned on, `indent-region' is run on
> all
>  component xml buffers before they are saved.  Turn this off for
>  regular use.  Turn this on if you need to examine the xml
>  visually."
> -  :group 'org-export-odt
>    :version "24.1"
>    :type 'boolean)
>
> @@ -399,7 +398,6 @@ with GNU ELPA tar or standard Emacs distribution."
>    :type '(choice
>  	  (const :tag "Not set" nil)
>  	  (directory :tag "Schema directory"))
> -  :group 'org-export-odt
>    :version "24.1"
>    :set
>    (lambda (var value)
> @@ -437,7 +435,6 @@ If unspecified, the file named
> \"OrgOdtContentTemplate.xml\"
>  under `org-odt-styles-dir' is used."
>    :type '(choice (const nil)
>  		 (file))
> -  :group 'org-export-odt
>    :version "24.3")
>
>  (defcustom org-odt-styles-file nil
> @@ -471,7 +468,6 @@ a per-file basis.  For example,
>
>  #+ODT_STYLES_FILE: \"/path/to/styles.xml\" or
>  #+ODT_STYLES_FILE: (\"/path/to/file.ott\" (\"styles.xml\"
> \"image/hdr.png\"))."
> -  :group 'org-export-odt
>    :version "24.1"
>    :type
>    '(choice
> @@ -486,7 +482,6 @@ a per-file basis.  For example,
>
>  (defcustom org-odt-display-outline-level 2
>    "Outline levels considered for enumerating captioned entities."
> -  :group 'org-export-odt
>    :version "24.4"
>    :package-version '(Org . "8.0")
>    :type 'integer)
> @@ -516,7 +511,6 @@ specifiers are interpreted as below:
>  %d output dir in full
>  %D output dir as a URL.
>  %x extra options as set in `org-odt-convert-capabilities'."
> -  :group 'org-export-odt
>    :version "24.1"
>    :type
>    '(choice
> @@ -529,7 +523,6 @@ specifiers are interpreted as below:
>    "Use this converter to convert from \"odt\" format to other formats.
>  During customization, the list of converter names are populated
>  from `org-odt-convert-processes'."
> -  :group 'org-export-odt
>    :version "24.1"
>    :type '(choice :convert-widget
>  		 (lambda (w)
> @@ -591,7 +584,6 @@ format) to be converted to any of the export formats
> associated
>  with that class.
>
>  See default setting of this variable for a typical configuration."
> -  :group 'org-export-odt
>    :version "24.1"
>    :type
>    '(choice
> @@ -618,7 +610,6 @@ variable, the list of valid values are populated based
> on
>
>  You can set this option on per-file basis using file local
>  values.  See Info node `(emacs) File Variables'."
> -  :group 'org-export-odt
>    :version "24.1"
>    :type '(choice :convert-widget
>  		 (lambda (w)
> @@ -644,7 +635,6 @@ The function must accept two parameters:
>  The function should return the string to be exported.
>
>  The default value simply returns the value of CONTENTS."
> -  :group 'org-export-odt
>    :version "26.1"
>    :package-version '(Org . "8.3")
>    :type 'function)
> @@ -664,7 +654,6 @@ TEXT      the main headline text (string).
>  TAGS      the tags string, separated with colons (string or nil).
>
>  The function result will be used as headline text."
> -  :group 'org-export-odt
>    :version "26.1"
>    :package-version '(Org . "8.3")
>    :type 'function)
> @@ -685,7 +674,6 @@ The function must accept six parameters:
>    CONTENTS  the contents of the inlinetask, as a string.
>
>  The function should return the string to be exported."
> -  :group 'org-export-odt
>    :version "26.1"
>    :package-version '(Org . "8.3")
>    :type 'function)
> @@ -712,7 +700,6 @@ nil            Ignore math snippets.
>                 be loaded.
>
>  Any other symbol is a synonym for `mathjax'."
> -  :group 'org-export-odt
>    :version "24.4"
>    :package-version '(Org . "8.0")
>    :type '(choice
> @@ -732,7 +719,6 @@ Any other symbol is a synonym for `mathjax'."
>  A rule consists in an association whose key is the type of link
>  to consider, and value is a regexp that will be matched against
>  link's path."
> -  :group 'org-export-odt
>    :version "24.4"
>    :package-version '(Org . "8.0")
>    :type '(alist :key-type (string :tag "Type")
> @@ -745,7 +731,6 @@ link's path."
>  A rule consists in an association whose key is the type of link
>  to consider, and value is a regexp that will be matched against
>  link's path."
> -  :group 'org-export-odt
>    :version "26.1"
>    :package-version '(Org . "8.3")
>    :type '(alist :key-type (string :tag "Type")
> @@ -756,7 +741,6 @@ link's path."
>  Use this for sizing of embedded images.  See Info node `(org)
>  Images in ODT export' for more information."
>    :type 'float
> -  :group 'org-export-odt
>    :version "24.4"
>    :package-version '(Org . "8.1"))
>
> @@ -778,7 +762,6 @@ styles.xml already contains needed styles for colorizing
> to work.
>
>  This variable is effective only if `org-odt-fontify-srcblocks' is
>  turned on."
> -  :group 'org-export-odt
>    :version "24.1"
>    :type 'boolean)
>
> @@ -788,7 +771,6 @@ Turn this option on if you want to colorize the source
> code
>  blocks in the exported file.  For colorization to work, you need
>  to make available an enhanced version of `htmlfontify' library."
>    :type 'boolean
> -  :group 'org-export-odt
>    :version "24.1")
>
>
> @@ -873,7 +855,6 @@ implementation filed under
> `org-odt-get-table-cell-styles'.
>  The TABLE-STYLE-NAME \"OrgEquation\" is used internally for
>  formatting of numbered display equations.  Do not delete this
>  style from the list."
> -  :group 'org-export-odt
>    :version "24.1"
>    :type '(choice
>            (const :tag "None" nil)
> @@ -918,7 +899,6 @@ document by setting the default language and country
> either using
>  the application UI or through a custom styles file.
>
>  See `org-odt--build-date-styles' for implementation details."
> -  :group 'org-export-odt
>    :version "24.4"
>    :package-version '(Org . "8.0")
>    :type 'boolean)
> @@ -2005,14 +1985,16 @@ information."
>
>  ;;;; Latex Environment
>
> -
>  ;; (eval-after-load 'ox-odt '(ad-deactivate 'org-format-latex-as-mathml))
> -;; (defadvice org-format-latex-as-mathml	; FIXME
> -;;   (after org-odt-protect-latex-fragment activate)
> +;; (advice-add 'org-format-latex-as-mathml	; FIXME
> +;;   :around #'org--odt-protect-latex-fragment)
> +;; (defun org--odt-protect-latex-fragment (orig-fun latex-frag &rest args)
>  ;;   "Encode LaTeX fragment as XML.
>  ;; Do this when translation to MathML fails."
> -;;   (unless (> (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.
>
>
>


-- 
The Kafka Pandemic

A blog about science, health, human rights, and misopathy:
https://thekafkapandemic.blogspot.com


  reply	other threads:[~2022-03-31 23:18 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <jwv8rtpptrk.fsf-monnier+emacs@gnu.org>
     [not found] ` <jwvpmn1od82.fsf-monnier+emacs@gnu.org>
     [not found]   ` <87a6drnsv6.fsf@gnu.org>
     [not found]     ` <jwvo827au9m.fsf-monnier+emacs@gnu.org>
     [not found]       ` <87a6dq46kd.fsf@gnu.org>
2022-03-31 17:55         ` Drop defadvice from Org Stefan Monnier
2022-03-31 23:17           ` Samuel Wales [this message]
2022-03-31 23:59             ` Stefan Monnier
2022-04-01  6:29               ` Samuel Wales
2022-04-01 13:20                 ` Stefan Monnier
2022-04-01  5:55           ` Bastien Guerry
2022-04-07  4:11             ` Ihor Radchenko
2022-04-07 13:09               ` Bastien

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

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAJcAo8tCcEk_VKqmaXsWUJAURP8HVE8QbjRWh_sne5n7Tk+ujw@mail.gmail.com \
    --to=samologist@gmail.com \
    --cc=bzg@gnu.org \
    --cc=emacs-orgmode@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).