diff options
Diffstat (limited to 'lisp/org/ox.el')
-rw-r--r-- | lisp/org/ox.el | 322 |
1 files changed, 140 insertions, 182 deletions
diff --git a/lisp/org/ox.el b/lisp/org/ox.el index 797efb90b79..6dd2cd4a089 100644 --- a/lisp/org/ox.el +++ b/lisp/org/ox.el @@ -172,12 +172,6 @@ All these properties should be back-end agnostic. Back-end specific properties are set through `org-export-define-backend'. Properties redefined there have precedence over these.") -(defconst org-export-special-keywords '("FILETAGS" "SETUPFILE" "OPTIONS") - "List of in-buffer keywords that require special treatment. -These keywords are not directly associated to a property. The -way they are handled must be hard-coded into -`org-export--get-inbuffer-options' function.") - (defconst org-export-filters-alist '((:filter-body . org-export-filter-body-functions) (:filter-bold . org-export-filter-bold-functions) @@ -1474,104 +1468,57 @@ Assume buffer is in Org mode. Narrowing, if any, is ignored." ;; Priority is given to back-end specific options. (org-export-get-all-options backend) org-export-options-alist)) - (regexp (format "^[ \t]*#\\+%s:" - (regexp-opt (nconc (delq nil (mapcar #'cadr options)) - org-export-special-keywords)))) plist to-parse) - (letrec ((find-properties - (lambda (keyword) - ;; Return all properties associated to KEYWORD. - (let (properties) - (dolist (option options properties) - (when (equal (nth 1 option) keyword) - (cl-pushnew (car option) properties)))))) - (get-options - (lambda (&optional files) - ;; Recursively read keywords in buffer. FILES is - ;; a list of files read so far. PLIST is the current - ;; property list obtained. - (org-with-wide-buffer - (goto-char (point-min)) - (while (re-search-forward regexp nil t) - (let ((element (org-element-at-point))) - (when (eq (org-element-type element) 'keyword) - (let ((key (org-element-property :key element)) - (val (org-element-property :value element))) - (cond - ;; Options in `org-export-special-keywords'. - ((equal key "SETUPFILE") - (let* ((uri (org-strip-quotes (org-trim val))) - (uri-is-url (org-file-url-p uri)) - (uri (if uri-is-url - uri - (expand-file-name uri)))) - ;; Avoid circular dependencies. - (unless (member uri files) - (with-temp-buffer - (unless uri-is-url - (setq default-directory - (file-name-directory uri))) - (insert (org-file-contents uri 'noerror)) - (let ((org-inhibit-startup t)) (org-mode)) - (funcall get-options (cons uri files)))))) - ((equal key "OPTIONS") - (setq plist - (org-combine-plists - plist - (org-export--parse-option-keyword - val backend)))) - ((equal key "FILETAGS") - (setq plist - (org-combine-plists - plist - (list :filetags - (org-uniquify - (append - (org-split-string val ":") - (plist-get plist :filetags))))))) - (t - ;; Options in `org-export-options-alist'. - (dolist (property (funcall find-properties key)) - (setq - plist - (plist-put - plist property - ;; Handle value depending on specified - ;; BEHAVIOR. - (cl-case (nth 4 (assq property options)) - (parse - (unless (memq property to-parse) - (push property to-parse)) - ;; Even if `parse' implies `space' - ;; behavior, we separate line with - ;; "\n" so as to preserve - ;; line-breaks. However, empty - ;; lines are forbidden since `parse' - ;; doesn't allow more than one - ;; paragraph. - (let ((old (plist-get plist property))) - (cond ((not (org-string-nw-p val)) old) - (old (concat old "\n" val)) - (t val)))) - (space - (if (not (plist-get plist property)) - (org-trim val) - (concat (plist-get plist property) - " " - (org-trim val)))) - (newline - (org-trim - (concat (plist-get plist property) - "\n" - (org-trim val)))) - (split `(,@(plist-get plist property) - ,@(split-string val))) - ((t) val) - (otherwise - (if (not (plist-member plist property)) val - (plist-get plist property))))))))))))))))) + (let ((find-properties + (lambda (keyword) + ;; Return all properties associated to KEYWORD. + (let (properties) + (dolist (option options properties) + (when (equal (nth 1 option) keyword) + (cl-pushnew (car option) properties))))))) ;; Read options in the current buffer and return value. - (funcall get-options (and buffer-file-name (list buffer-file-name))) + (dolist (entry (org-collect-keywords + (nconc (delq nil (mapcar #'cadr options)) + '("FILETAGS" "OPTIONS")))) + (pcase entry + (`("OPTIONS" . ,values) + (setq plist + (apply #'org-combine-plists + plist + (mapcar (lambda (v) + (org-export--parse-option-keyword v backend)) + values)))) + (`("FILETAGS" . ,values) + (setq plist + (plist-put plist + :filetags + (org-uniquify + (cl-mapcan (lambda (v) (org-split-string v ":")) + values))))) + (`(,keyword . ,values) + (dolist (property (funcall find-properties keyword)) + (setq plist + (plist-put + plist property + ;; Handle value depending on specified BEHAVIOR. + (cl-case (nth 4 (assq property options)) + (parse + (unless (memq property to-parse) + (push property to-parse)) + ;; Even if `parse' implies `space' behavior, we + ;; separate line with "\n" so as to preserve + ;; line-breaks. + (mapconcat #'identity values "\n")) + (space + (mapconcat #'identity values " ")) + (newline + (mapconcat #'identity values "\n")) + (split + (cl-mapcan (lambda (v) (split-string v)) values)) + ((t) + (org-last values)) + (otherwise + (car values))))))))) ;; Parse properties in TO-PARSE. Remove newline characters not ;; involved in line breaks to simulate `space' behavior. ;; Finally return options. @@ -1633,44 +1580,10 @@ process." Also look for BIND keywords in setup files. The return value is an alist where associations are (VARIABLE-NAME VALUE)." (when org-export-allow-bind-keywords - (letrec ((collect-bind - (lambda (files alist) - ;; Return an alist between variable names and their - ;; value. FILES is a list of setup files names read - ;; so far, used to avoid circular dependencies. ALIST - ;; is the alist collected so far. - (let ((case-fold-search t)) - (org-with-wide-buffer - (goto-char (point-min)) - (while (re-search-forward - "^[ \t]*#\\+\\(BIND\\|SETUPFILE\\):" nil t) - (let ((element (org-element-at-point))) - (when (eq (org-element-type element) 'keyword) - (let ((val (org-element-property :value element))) - (if (equal (org-element-property :key element) - "BIND") - (push (read (format "(%s)" val)) alist) - ;; Enter setup file. - (let* ((uri (org-strip-quotes val)) - (uri-is-url (org-file-url-p uri)) - (uri (if uri-is-url - uri - (expand-file-name uri)))) - ;; Avoid circular dependencies. - (unless (member uri files) - (with-temp-buffer - (unless uri-is-url - (setq default-directory - (file-name-directory uri))) - (let ((org-inhibit-startup t)) (org-mode)) - (insert (org-file-contents uri 'noerror)) - (setq alist - (funcall collect-bind - (cons uri files) - alist)))))))))) - alist))))) - ;; Return value in appropriate order of appearance. - (nreverse (funcall collect-bind nil nil))))) + (pcase (org-collect-keywords '("BIND")) + (`(("BIND" . ,values)) + (mapcar (lambda (v) (read (format "(%s)" v))) + values))))) ;; defsubst org-export-get-parent must be defined before first use, ;; was originally defined in the topology section @@ -3461,15 +3374,16 @@ Move point after the link." (goto-char (org-element-property :end link)) (let ((new-path (file-relative-name (expand-file-name path file-dir) includer-dir)) - (new-link (org-element-copy link)) - (contents (and (org-element-property :contents-begin link) - (buffer-substring - (org-element-property :contents-begin link) - (org-element-property :contents-end link))))) + (new-link (org-element-copy link))) (org-element-put-property new-link :path new-path) + (when (org-element-property :contents-begin link) + (org-element-adopt-elements new-link + (buffer-substring + (org-element-property :contents-begin link) + (org-element-property :contents-end link)))) (delete-region (org-element-property :begin link) (org-element-property :end link)) - (insert (org-element-link-interpreter new-link contents)))))) + (insert (org-element-interpret-data new-link)))))) (defun org-export--prepare-file-contents (file &optional lines ind minlevel id footnotes includer) @@ -4184,8 +4098,8 @@ meant to be translated with `org-export-data' or alike." (org-define-error 'org-link-broken "Unable to resolve link; aborting") -(defun org-export-custom-protocol-maybe (link desc backend) - "Try exporting LINK with a dedicated function. +(defun org-export-custom-protocol-maybe (link desc backend &optional info) + "Try exporting LINK object with a dedicated function. DESC is its description, as a string, or nil. BACKEND is the back-end used for export, as a symbol. @@ -4196,14 +4110,20 @@ A custom protocol has precedence over regular back-end export. The function ignores links with an implicit type (e.g., \"custom-id\")." (let ((type (org-element-property :type link))) - (unless (or (member type '("coderef" "custom-id" "fuzzy" "radio")) + (unless (or (member type '("coderef" "custom-id" "fuzzy" "radio" nil)) (not backend)) - (let ((protocol (org-link-get-parameter type :export))) + (let ((protocol (org-link-get-parameter type :export)) + (path (org-element-property :path link))) (and (functionp protocol) - (funcall protocol - (org-element-property :path link) - desc - backend)))))) + (condition-case nil + (funcall protocol path desc backend info) + ;; XXX: The function used (< Org 9.4) to accept only + ;; three mandatory arguments. Type-specific `:export' + ;; functions in the wild may not handle current + ;; signature. Provide backward compatibility support + ;; for them. + (wrong-number-of-arguments + (funcall protocol path desc backend)))))))) (defun org-export-get-coderef-format (path desc) "Return format string for code reference link. @@ -4332,7 +4252,7 @@ ignores white spaces and statistics cookies, if applicable." (`headline (let ((title (split-string (replace-regexp-in-string - "\\[[0-9]*\\(?:%\\|/[0-9]*\\)\\]" "" + "\\[[0-9]*\\(?:%\\|/[0-9]*\\)\\]" " " (org-element-property :raw-value datum))))) (delq nil (list @@ -4805,9 +4725,6 @@ code." ;; `org-export-table-row-is-special-p' are predicates used to look for ;; meta-information about the table structure. ;; -;; `org-table-has-header-p' tells when the rows before the first rule -;; should be considered as table's header. -;; ;; `org-export-table-cell-width', `org-export-table-cell-alignment' ;; and `org-export-table-cell-borders' extract information from ;; a table-cell element. @@ -5243,7 +5160,8 @@ rows (resp. columns)." (lambda (row) (when (eq (org-element-property :type row) 'standard) (cl-incf rows) - (unless first-row (setq first-row row)))) info) + (unless first-row (setq first-row row)))) + info) ;; Set number of columns. (org-element-map first-row 'table-cell (lambda (_) (cl-incf columns)) info) ;; Return value. @@ -5459,7 +5377,7 @@ transcoding it." (apostrophe :utf-8 "’" :html "’")) ("da" ;; one may use: »...«, "...", ›...‹, or '...'. - ;; http://sproget.dk/raad-og-regler/retskrivningsregler/retskrivningsregler/a7-40-60/a7-58-anforselstegn/ + ;; https://sproget.dk/raad-og-regler/retskrivningsregler/retskrivningsregler/a7-40-60/a7-58-anforselstegn/ ;; LaTeX quotes require Babel! (primary-opening :utf-8 "»" :html "»" :latex ">>" :texinfo "@guillemetright{}") @@ -5552,8 +5470,19 @@ transcoding it." (secondary-opening :utf-8 "‘" :html "‘" :latex "`" :texinfo "`") (secondary-closing :utf-8 "’" :html "’" :latex "'" :texinfo "'") (apostrophe :utf-8 "’" :html "’")) + ("ro" + (primary-opening + :utf-8 "„" :html "„" :latex "\"`" :texinfo "@quotedblbase{}") + (primary-closing :utf-8 "”" :html "”" :latex "''" :texinfo "''") + (secondary-opening + :utf-8 "«" :html "«" :latex "\\guillemotleft{}" + :texinfo "@guillemetleft{}") + (secondary-closing + :utf-8 "»" :html "»" :latex "\\guillemotright{}" + :texinfo "@guillemetright{}") + (apostrophe :utf-8 "’" :html "’")) ("ru" - ;; http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B2%D1%8B%D1%87%D0%BA%D0%B8#.D0.9A.D0.B0.D0.B2.D1.8B.D1.87.D0.BA.D0.B8.2C_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D0.B5.D0.BC.D1.8B.D0.B5_.D0.B2_.D1.80.D1.83.D1.81.D1.81.D0.BA.D0.BE.D0.BC_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B5 + ;; https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B2%D1%8B%D1%87%D0%BA%D0%B8#.D0.9A.D0.B0.D0.B2.D1.8B.D1.87.D0.BA.D0.B8.2C_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D1.83.D0.B5.D0.BC.D1.8B.D0.B5_.D0.B2_.D1.80.D1.83.D1.81.D1.81.D0.BA.D0.BE.D0.BC_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B5 ;; http://www.artlebedev.ru/kovodstvo/sections/104/ (primary-opening :utf-8 "«" :html "«" :latex "{}<<" :texinfo "@guillemetleft{}") @@ -5812,6 +5741,7 @@ them." ("nn" :default "Forfattar") ("pl" :default "Autor") ("pt_BR" :default "Autor") + ("ro" :default "Autor") ("ru" :html "Автор" :utf-8 "Автор") ("sl" :default "Avtor") ("sv" :html "Författare") @@ -5829,6 +5759,7 @@ them." ("nl" :default "Vervolg van vorige pagina") ("pt" :default "Continuação da página anterior") ("pt_BR" :html "Continuação da página anterior" :ascii "Continuacao da pagina anterior" :default "Continuação da página anterior") + ("ro" :default "Continuare de pe pagina precedentă") ("ru" :html "(Продолжение)" :utf-8 "(Продолжение)") ("sl" :default "Nadaljevanje s prejšnje strani")) @@ -5843,12 +5774,15 @@ them." ("nl" :default "Vervolg op volgende pagina") ("pt" :default "Continua na página seguinte") ("pt_BR" :html "Continua na próxima página" :ascii "Continua na proxima pagina" :default "Continua na próxima página") + ("ro" :default "Continuare pe pagina următoare") ("ru" :html "(Продолжение следует)" :utf-8 "(Продолжение следует)") ("sl" :default "Nadaljevanje na naslednji strani")) ("Created" ("cs" :default "Vytvořeno") + ("nl" :default "Gemaakt op") ;; must be followed by a date or date+time ("pt_BR" :default "Criado em") + ("ro" :default "Creat") ("sl" :default "Ustvarjeno")) ("Date" ("ar" :default "بتاريخ") @@ -5869,6 +5803,7 @@ them." ("nb" :default "Dato") ("nn" :default "Dato") ("pl" :default "Data") + ("ro" :default "Data") ("pt_BR" :default "Data") ("ru" :html "Дата" :utf-8 "Дата") ("sl" :default "Datum") @@ -5886,10 +5821,12 @@ them." ("fr" :ascii "Equation" :default "Équation") ("is" :default "Jafna") ("ja" :default "方程式") + ("nl" :default "Vergelijking") ("no" :default "Ligning") ("nb" :default "Ligning") ("nn" :default "Likning") ("pt_BR" :html "Equação" :default "Equação" :ascii "Equacao") + ("ro" :default "Ecuația") ("ru" :html "Уравнение" :utf-8 "Уравнение") ("sl" :default "Enačba") @@ -5905,10 +5842,12 @@ them." ("is" :default "Mynd") ("it" :default "Figura") ("ja" :default "図" :html "図") + ("nl" :default "Figuur") ("no" :default "Illustrasjon") ("nb" :default "Illustrasjon") ("nn" :default "Illustrasjon") ("pt_BR" :default "Figura") + ("ro" :default "Imaginea") ("ru" :html "Рисунок" :utf-8 "Рисунок") ("sv" :default "Illustration") ("zh-CN" :html "图" :utf-8 "图")) @@ -5923,10 +5862,12 @@ them." ("is" :default "Mynd %d") ("it" :default "Figura %d:") ("ja" :default "図%d: " :html "図%d: ") + ("nl" :default "Figuur %d:" :html "Figuur %d:") ("no" :default "Illustrasjon %d") ("nb" :default "Illustrasjon %d") ("nn" :default "Illustrasjon %d") ("pt_BR" :default "Figura %d:") + ("ro" :default "Imaginea %d:") ("ru" :html "Рис. %d.:" :utf-8 "Рис. %d.:") ("sl" :default "Slika %d") ("sv" :default "Illustration %d") @@ -5952,6 +5893,7 @@ them." ("nn" :default "Fotnotar") ("pl" :default "Przypis") ("pt_BR" :html "Notas de Rodapé" :default "Notas de Rodapé" :ascii "Notas de Rodape") + ("ro" :default "Note de subsol") ("ru" :html "Сноски" :utf-8 "Сноски") ("sl" :default "Opombe") ("sv" :default "Fotnoter") @@ -5968,6 +5910,7 @@ them." ("et" :default "Loendite nimekiri") ("fr" :default "Liste des programmes") ("ja" :default "ソースコード目次") + ("nl" :default "Lijst van programma's") ("no" :default "Dataprogrammer") ("nb" :default "Dataprogrammer") ("pt_BR" :html "Índice de Listagens" :default "Índice de Listagens" :ascii "Indice de Listagens") @@ -5986,10 +5929,12 @@ them." ("is" :default "Töfluskrá" :html "Töfluskrá") ("it" :default "Indice delle tabelle") ("ja" :default "表目次") + ("nl" :default "Lijst van tabellen") ("no" :default "Tabeller") ("nb" :default "Tabeller") ("nn" :default "Tabeller") ("pt_BR" :html "Índice de Tabelas" :default "Índice de Tabelas" :ascii "Indice de Tabelas") + ("ro" :default "Tabele") ("ru" :html "Список таблиц" :utf-8 "Список таблиц") ("sl" :default "Seznam tabel") @@ -6005,9 +5950,11 @@ them." ("fr" :default "Programme" :html "Programme") ("it" :default "Listato") ("ja" :default "ソースコード") + ("nl" :default "Programma") ("no" :default "Dataprogram") ("nb" :default "Dataprogram") ("pt_BR" :default "Listagem") + ("ro" :default "Lista") ("ru" :html "Распечатка" :utf-8 "Распечатка") ("sl" :default "Izpis programa") @@ -6022,8 +5969,10 @@ them." ("fr" :default "Programme %d :" :html "Programme %d :") ("it" :default "Listato %d :") ("ja" :default "ソースコード%d:") + ("nl" :default "Programma %d:" :html "Programma %d:") ("no" :default "Dataprogram %d") ("nb" :default "Dataprogram %d") + ("ro" :default "Lista %d") ("pt_BR" :default "Listagem %d:") ("ru" :html "Распечатка %d.:" :utf-8 "Распечатка %d.:") @@ -6036,20 +5985,28 @@ them." ("es" :default "Referencias") ("fr" :ascii "References" :default "Références") ("it" :default "Riferimenti") + ("nl" :default "Bronverwijzingen") ("pt_BR" :html "Referências" :default "Referências" :ascii "Referencias") + ("ro" :default "Bibliografie") ("sl" :default "Reference")) ("See figure %s" ("cs" :default "Viz obrázek %s") ("fr" :default "cf. figure %s" :html "cf. figure %s" :latex "cf.~figure~%s") ("it" :default "Vedi figura %s") + ("nl" :default "Zie figuur %s" + :html "Zie figuur %s" :latex "Zie figuur~%s") ("pt_BR" :default "Veja a figura %s") + ("ro" :default "Vezi figura %s") ("sl" :default "Glej sliko %s")) ("See listing %s" ("cs" :default "Viz program %s") ("fr" :default "cf. programme %s" :html "cf. programme %s" :latex "cf.~programme~%s") + ("nl" :default "Zie programma %s" + :html "Zie programma %s" :latex "Zie programma~%s") ("pt_BR" :default "Veja a listagem %s") + ("ro" :default "Vezi tabelul %s") ("sl" :default "Glej izpis programa %s")) ("See section %s" ("ar" :default "انظر قسم %s") @@ -6061,8 +6018,11 @@ them." ("fr" :default "cf. section %s") ("it" :default "Vedi sezione %s") ("ja" :default "セクション %s を参照") + ("nl" :default "Zie sectie %s" + :html "Zie sectie %s" :latex "Zie sectie~%s") ("pt_BR" :html "Veja a seção %s" :default "Veja a seção %s" :ascii "Veja a secao %s") + ("ro" :default "Vezi secțiunea %s") ("ru" :html "См. раздел %s" :utf-8 "См. раздел %s") ("sl" :default "Glej poglavje %d") @@ -6072,7 +6032,10 @@ them." ("fr" :default "cf. tableau %s" :html "cf. tableau %s" :latex "cf.~tableau~%s") ("it" :default "Vedi tabella %s") + ("nl" :default "Zie tabel %s" + :html "Zie tabel %s" :latex "Zie tabel~%s") ("pt_BR" :default "Veja a tabela %s") + ("ro" :default "Vezi tabelul %s") ("sl" :default "Glej tabelo %s")) ("Table" ("ar" :default "جدول") @@ -6084,7 +6047,9 @@ them." ("is" :default "Tafla") ("it" :default "Tabella") ("ja" :default "表" :html "表") + ("nl" :default "Tabel") ("pt_BR" :default "Tabela") + ("ro" :default "Tabel") ("ru" :html "Таблица" :utf-8 "Таблица") ("zh-CN" :html "表" :utf-8 "表")) @@ -6099,10 +6064,12 @@ them." ("is" :default "Tafla %d") ("it" :default "Tabella %d:") ("ja" :default "表%d:" :html "表%d:") + ("nl" :default "Tabel %d:" :html "Tabel %d:") ("no" :default "Tabell %d") ("nb" :default "Tabell %d") ("nn" :default "Tabell %d") ("pt_BR" :default "Tabela %d:") + ("ro" :default "Tabel %d") ("ru" :html "Таблица %d.:" :utf-8 "Таблица %d.:") ("sl" :default "Tabela %d") @@ -6129,6 +6096,7 @@ them." ("nn" :default "Innhald") ("pl" :html "Spis treści") ("pt_BR" :html "Índice" :utf8 "Índice" :ascii "Indice") + ("ro" :default "Cuprins") ("ru" :html "Содержание" :utf-8 "Содержание") ("sl" :default "Kazalo") @@ -6145,7 +6113,9 @@ them." ("fr" :ascii "Destination inconnue" :default "Référence inconnue") ("it" :default "Riferimento sconosciuto") ("ja" :default "不明な参照先") + ("nl" :default "Onbekende verwijzing") ("pt_BR" :html "Referência desconhecida" :default "Referência desconhecida" :ascii "Referencia desconhecida") + ("ro" :default "Referință necunoscută") ("ru" :html "Неизвестная ссылка" :utf-8 "Неизвестная ссылка") ("sl" :default "Neznana referenca") @@ -6877,10 +6847,12 @@ back to standard interface." (with-current-buffer "*Org Export Dispatcher*" ;; Refresh help. Maintain display continuity by re-visiting ;; previous window position. - (let ((pos (window-start))) + (let ((pt (point)) + (wstart (window-start))) (erase-buffer) (insert help) - (set-window-start nil pos))) + (goto-char pt) + (set-window-start nil wstart))) (org-fit-window-to-buffer) (org-export--dispatch-action standard-prompt allowed-keys entries options first-key expertp)))) @@ -6903,24 +6875,10 @@ options as CDR." ;; C-p, SPC, DEL). (while (and (setq key (read-char-exclusive prompt)) (not expertp) - (memq key '(14 16 ?\s ?\d))) - (cl-case key - (14 (if (not (pos-visible-in-window-p (point-max))) - (ignore-errors (scroll-up 1)) - (message "End of buffer") - (sit-for 1))) - (16 (if (not (pos-visible-in-window-p (point-min))) - (ignore-errors (scroll-down 1)) - (message "Beginning of buffer") - (sit-for 1))) - (?\s (if (not (pos-visible-in-window-p (point-max))) - (scroll-up nil) - (message "End of buffer") - (sit-for 1))) - (?\d (if (not (pos-visible-in-window-p (point-min))) - (scroll-down nil) - (message "Beginning of buffer") - (sit-for 1))))) + ;; FIXME: Don't use C-v (22) here, as it is used as a + ;; modifier key in the export dispatch. + (memq key '(14 16 ?\s ?\d 134217846))) + (org-scroll key t)) (cond ;; Ignore undefined associations. ((not (memq key allowed-keys)) @@ -6929,7 +6887,7 @@ options as CDR." (org-export--dispatch-ui options first-key expertp)) ;; q key at first level aborts export. At second level, cancel ;; first key instead. - ((eq key ?q) (if (not first-key) (error "Export aborted") + ((eq key ?q) (if (not first-key) (user-error "Export aborted") (org-export--dispatch-ui options nil expertp))) ;; Help key: Switch back to standard interface if expert UI was ;; active. |