Replace all uses of the old `defadvice` with the new `advice-add`

* 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`.

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.
This commit is contained in:
Stefan Monnier 2022-04-01 07:50:01 +02:00 committed by Bastien
parent d7cae14953
commit 6d73cd34a0
8 changed files with 98 additions and 122 deletions

View File

@ -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)
(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))))
(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

View File

@ -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)

View File

@ -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,7 +896,9 @@ 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)
(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))
@ -902,7 +906,7 @@ This means, between the beginning of line and the point."
((assq :item-bullet context)
(let ((org-cycle-include-plain-lists t)) (org-cycle)))
((org-footnote-at-reference-p) nil)
(t ad-do-it))))))
(t (apply orig-fun args)))))
(defun org-mouse-move-tree-start (_event)
(interactive "e")

View File

@ -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)

View File

@ -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)
(cl-mapcan (lambda (x)
(let ((c (split-string x "=")))
(list (intern (concat ":" (car c))) (cadr c))))
(split-string plus-decoded "&"))))))
(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:

View File

@ -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,7 +101,7 @@ 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
(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.
@ -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))

View File

@ -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)
(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)
((not (derived-mode-p 'org-mode)) (apply orig-fun args))
((eq this-command 'cdlatex-math-symbol)
(setq ad-return-value t
texmathp-why '("cdlatex-math-symbol in org-mode" . 0)))
(setq texmathp-why '("cdlatex-math-symbol in org-mode" . 0))
t)
(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)))))))))
(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))

View File

@ -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.