From e4cd3dd22be64eea64fa9f2cd7253ab734b441ee Mon Sep 17 00:00:00 2001 From: Aaron Ecay Date: Fri, 6 Nov 2015 12:04:20 +0000 Subject: [PATCH] Remove some home-grown copies of cl-lib functions. * lisp/org.el (org-count, org-remove-if, org-remove-if-not): (org-reduce, org-every, org-some): Obsolete, use cl-lib versions everywhere. (org-sublist): Reimplement in terms of `cl-subseq'; make obsolete. --- contrib/lisp/ob-julia.el | 5 +-- contrib/lisp/ob-stata.el | 5 +-- contrib/lisp/org-contacts.el | 2 +- contrib/lisp/ox-bibtex.el | 2 +- lisp/ob-R.el | 6 +-- lisp/ob-core.el | 23 +++++------ lisp/ob-fortran.el | 4 +- lisp/ob-ref.el | 7 +--- lisp/org-compat.el | 8 ++++ lisp/org-element.el | 3 +- lisp/org-indent.el | 3 +- lisp/org-lint.el | 8 ++-- lisp/org-list.el | 11 +++--- lisp/org-src.el | 4 +- lisp/org-table.el | 12 +++--- lisp/org.el | 74 +++++------------------------------- lisp/ox-beamer.el | 3 +- lisp/ox-html.el | 3 +- lisp/ox-icalendar.el | 5 ++- lisp/ox-publish.el | 2 +- lisp/ox.el | 12 +++--- testing/lisp/test-ox.el | 6 ++- 22 files changed, 80 insertions(+), 128 deletions(-) diff --git a/contrib/lisp/ob-julia.el b/contrib/lisp/ob-julia.el index 4d8deb28f..70265d520 100644 --- a/contrib/lisp/ob-julia.el +++ b/contrib/lisp/ob-julia.el @@ -38,7 +38,6 @@ (declare-function ess-make-buffer-current "ext:ess-inf" ()) (declare-function ess-eval-buffer "ext:ess-inf" (vis)) (declare-function org-number-sequence "org-compat" (from &optional to inc)) -(declare-function org-remove-if-not "org" (predicate seq)) (defconst org-babel-header-args:julia '((width . :any) @@ -150,9 +149,9 @@ This function is called by `org-babel-execute-src-block'." (defun org-babel-julia-assign-elisp (name value colnames-p rownames-p) "Construct julia code assigning the elisp VALUE to a variable named NAME." (if (listp value) - (let ((max (apply #'max (mapcar #'length (org-remove-if-not + (let ((max (apply #'max (mapcar #'length (cl-remove-if-not #'sequencep value)))) - (min (apply #'min (mapcar #'length (org-remove-if-not + (min (apply #'min (mapcar #'length (cl-remove-if-not #'sequencep value)))) (transition-file (org-babel-temp-file "julia-import-"))) ;; ensure VALUE has an orgtbl structure (depth of at least 2) diff --git a/contrib/lisp/ob-stata.el b/contrib/lisp/ob-stata.el index 29aa88d01..d1f5841dd 100644 --- a/contrib/lisp/ob-stata.el +++ b/contrib/lisp/ob-stata.el @@ -50,7 +50,6 @@ (declare-function ess-make-buffer-current "ext:ess-inf" ()) (declare-function ess-eval-buffer "ext:ess-inf" (vis)) (declare-function org-number-sequence "org-compat" (from &optional to inc)) -(declare-function org-remove-if-not "org" (predicate seq)) (defconst org-babel-header-args:stata '((width . :any) @@ -165,9 +164,9 @@ This function is called by `org-babel-execute-src-block'." (defun org-babel-stata-assign-elisp (name value colnames-p rownames-p) "Construct stata code assigning the elisp VALUE to a variable named NAME." (if (listp value) - (let ((max (apply #'max (mapcar #'length (org-remove-if-not + (let ((max (apply #'max (mapcar #'length (cl-remove-if-not #'sequencep value)))) - (min (apply #'min (mapcar #'length (org-remove-if-not + (min (apply #'min (mapcar #'length (cl-remove-if-not #'sequencep value)))) (transition-file (org-babel-temp-file "stata-import-"))) ;; ensure VALUE has an orgtbl structure (depth of at least 2) diff --git a/contrib/lisp/org-contacts.el b/contrib/lisp/org-contacts.el index edc09feb8..c0f054fcd 100644 --- a/contrib/lisp/org-contacts.el +++ b/contrib/lisp/org-contacts.el @@ -593,7 +593,7 @@ description." (defun org-contacts-remove-ignored-property-values (ignore-list list) "Remove all ignore-list's elements from list and you can use regular expressions in the ignore list." - (org-remove-if (lambda (el) + (cl-remove-if (lambda (el) (org-find-if (lambda (x) (string-match-p x el)) ignore-list)) diff --git a/contrib/lisp/ox-bibtex.el b/contrib/lisp/ox-bibtex.el index 071986691..723713df1 100644 --- a/contrib/lisp/ox-bibtex.el +++ b/contrib/lisp/ox-bibtex.el @@ -169,7 +169,7 @@ to `org-bibtex-citation-p' predicate." (outline-previous-visible-heading 1) t))) -(let ((jump-fn (car (org-remove-if-not #'fboundp '(ebib org-bibtex-goto-citation))))) +(let ((jump-fn (car (cl-remove-if-not #'fboundp '(ebib org-bibtex-goto-citation))))) (org-add-link-type "cite" jump-fn)) diff --git a/lisp/ob-R.el b/lisp/ob-R.el index bb058dbf4..7c9b02426 100644 --- a/lisp/ob-R.el +++ b/lisp/ob-R.el @@ -28,7 +28,7 @@ ;;; Code: (require 'ob) -(eval-when-compile (require 'cl)) +(require 'cl-lib) (declare-function orgtbl-to-tsv "org-table" (table params)) (declare-function R "ext:essd-r" (&optional start-args)) @@ -38,8 +38,6 @@ (declare-function ess-wait-for-process "ext:ess-inf" (proc &optional sec-prompt wait force-redisplay)) (declare-function org-number-sequence "org-compat" (from &optional to inc)) -(declare-function org-remove-if-not "org" (predicate seq)) -(declare-function org-every "org" (pred seq)) (defconst org-babel-header-args:R '((width . :any) @@ -234,7 +232,7 @@ This function is called by `org-babel-execute-src-block'." (defun org-babel-R-assign-elisp (name value colnames-p rownames-p) "Construct R code assigning the elisp VALUE to a variable named NAME." (if (listp value) - (let* ((lengths (mapcar 'length (org-remove-if-not 'sequencep value))) + (let* ((lengths (mapcar 'length (cl-remove-if-not 'sequencep value))) (max (if lengths (apply 'max lengths) 0)) (min (if lengths (apply 'min lengths) 0))) ;; Ensure VALUE has an orgtbl structure (depth of at least 2). diff --git a/lisp/ob-core.el b/lisp/ob-core.el index 309b7460a..739bbcdd0 100644 --- a/lisp/ob-core.el +++ b/lisp/ob-core.el @@ -25,6 +25,7 @@ ;;; Code: (eval-when-compile (require 'cl)) +(require 'cl-lib) (require 'ob-eval) (require 'org-macs) (require 'org-compat) @@ -38,9 +39,7 @@ (defvar org-src-lang-modes) (defvar org-babel-library-of-babel) (declare-function outline-show-all "outline" ()) -(declare-function org-every "org" (pred seq)) (declare-function org-remove-indentation "org" (code &optional n)) -(declare-function org-reduce "org" (CL-FUNC CL-SEQ &rest CL-KEYS)) (declare-function org-mark-ring-push "org" (&optional pos buffer)) (declare-function tramp-compat-make-temp-file "tramp-compat" (filename &optional dir-flag)) @@ -90,7 +89,6 @@ (declare-function org-list-struct "org-list" ()) (declare-function org-list-prevs-alist "org-list" (struct)) (declare-function org-list-get-list-end "org-list" (item struct prevs)) -(declare-function org-remove-if "org" (predicate seq)) (declare-function org-completing-read "org" (&rest args)) (declare-function org-escape-code-in-region "org-src" (beg end)) (declare-function org-unescape-code-in-string "org-src" (s)) @@ -100,7 +98,6 @@ (declare-function org-element-type "org-element" (element)) (declare-function org-element-at-point "org-element" ()) (declare-function org-element-property "org-element" (property element)) -(declare-function org-every "org" (pred seq)) (declare-function org-macro-escape-arguments "org-macro" (&rest args)) (defgroup org-babel nil @@ -219,7 +216,7 @@ PARAMS is a quasi-alist of header args, whcih may contain multiple entries for the key `:var'. This function returns a list of the cdr of all the `:var' entries." (mapcar #'cdr - (org-remove-if (lambda (x) (not (eq (car x) :var))) params))) + (cl-remove-if-not (lambda (x) (eq (car x) :var)) params))) (defun org-babel-get-inline-src-block-matches () "Set match data if within body of an inline source block. @@ -526,7 +523,7 @@ their `org-babel-default-header-args:foo' variable. For the format of SAFE-LIST, see `org-babel-safe-header-args'." `(lambda (value) (and (listp value) - (org-every + (cl-every (lambda (pair) (and (consp pair) (org-babel-one-header-arg-safe-p pair ,safe-list))) @@ -812,7 +809,7 @@ arguments and pop open the results in a preview buffer." (let ((header (car arg-pair)) (args (cdr arg-pair))) (setq results - (cons arg-pair (org-remove-if + (cons arg-pair (cl-remove-if (lambda (pair) (equal header (car pair))) results)))))) results)) @@ -1525,7 +1522,7 @@ instances of \"[ \t]:\" set ALTS to '((32 9) . 58)." (let ((last= (lambda (str) (= ch (aref str (1- (length str)))))) (first= (lambda (str) (= ch (aref str 0))))) (reverse - (org-reduce (lambda (acc el) + (cl-reduce (lambda (acc el) (let ((head (car acc))) (if (and head (or (funcall last= head) (funcall first= el))) (cons (concat head el) (cdr acc)) @@ -1597,7 +1594,7 @@ shown below. (cons :result-type (cond ((member "output" result-params) 'output) ((member "value" result-params) 'value) (t 'value)))) - (org-remove-if + (cl-remove-if (lambda (x) (memq (car x) '(:colname-names :rowname-names :result-params :result-type :var))) params)))) @@ -2254,7 +2251,7 @@ INFO may provide the values of these header arguments (in the ;; a table. (and (listp r) (null (cdr (last r))) - (org-every + (cl-every (lambda (e) (or (atom e) (null (cdr (last e))))) result))))) ;; insert results based on type @@ -2280,7 +2277,7 @@ INFO may provide the values of these header arguments (in the ((funcall tabulablep result) (goto-char beg) (insert (concat (orgtbl-to-orgtbl - (if (org-every + (if (cl-every (lambda (e) (or (eq e 'hline) (listp e))) result) @@ -2621,9 +2618,9 @@ parameters when merging lists." (lambda (param) (when (assoc param params) (setf (cdr (assoc param params)) - (org-remove-if (lambda (pair) (equal (car pair) name)) + (cl-remove-if (lambda (pair) (equal (car pair) name)) (cdr (assoc param params)))) - (setf params (org-remove-if (lambda (pair) (and (equal (car pair) param) + (setf params (cl-remove-if (lambda (pair) (and (equal (car pair) param) (null (cdr pair)))) params)))) (list :colname-names :rowname-names))) diff --git a/lisp/ob-fortran.el b/lisp/ob-fortran.el index c402faee5..a04d04897 100644 --- a/lisp/ob-fortran.el +++ b/lisp/ob-fortran.el @@ -29,10 +29,10 @@ ;;; Code: (require 'ob) (require 'cc-mode) +(require 'cl-lib) (declare-function org-entry-get "org" (pom property &optional inherit literal-nil)) -(declare-function org-every "org" (pred seq)) (declare-function org-remove-indentation "org" (code &optional n)) (defvar org-babel-tangle-lang-exts) @@ -145,7 +145,7 @@ of the same value." (format "character(len=%d), parameter :: %S = '%s'\n" (length val) var val)) ;; val is a matrix - ((and (listp val) (org-every #'listp val)) + ((and (listp val) (cl-every #'listp val)) (format "real, parameter :: %S(%d,%d) = transpose( reshape( %s , (/ %d, %d /) ) )\n" var (length val) (length (car val)) (org-babel-fortran-transform-list val) diff --git a/lisp/ob-ref.el b/lisp/ob-ref.el index 49c346d09..8f69c8cfa 100644 --- a/lisp/ob-ref.el +++ b/lisp/ob-ref.el @@ -50,14 +50,12 @@ ;;; Code: (require 'ob-core) -(eval-when-compile - (require 'cl)) +(require 'cl-lib) (declare-function org-at-item-p "org-list" ()) (declare-function org-at-table-p "org" (&optional table-type)) (declare-function org-babel-lob-execute "ob-lob" (info)) (declare-function org-babel-lob-get-info "ob-lob" nil) -(declare-function org-count "org" (cl-item cl-seq)) (declare-function org-element-at-point "org-element" ()) (declare-function org-element-property "org-element" (property element)) (declare-function org-element-type "org-element" (element)) @@ -69,7 +67,6 @@ (declare-function org-narrow-to-subtree "org" ()) (declare-function org-pop-to-buffer-same-window "org-compat" (&optional buffer-or-name norecord label)) -(declare-function org-remove-if-not "org" (predicate seq)) (declare-function org-show-context "org" (&optional key)) @@ -139,7 +136,7 @@ the variable." ;; if ref is indexed grab the indices -- beware nested indices (when (and (string-match "\\[\\([^\\[]+\\)\\]$" ref) (let ((str (substring ref 0 (match-beginning 0)))) - (= (org-count ?( str) (org-count ?) str)))) + (= (cl-count ?( str) (cl-count ?) str)))) (setq index (match-string 1 ref)) (setq ref (substring ref 0 (match-beginning 0)))) ;; assign any arguments to pass to source block diff --git a/lisp/org-compat.el b/lisp/org-compat.el index 1ab39def1..b3a43a539 100644 --- a/lisp/org-compat.el +++ b/lisp/org-compat.el @@ -566,6 +566,14 @@ Implements `define-error' for older emacsen." (put name 'error-conditions (copy-sequence (cons name (get 'error 'error-conditions)))))) +;;; Functions from cl-lib that Org used to have its own implementation of +(define-obsolete-function-alias 'org-count 'cl-count "Org 9.0") +(define-obsolete-function-alias 'org-remove-if 'cl-remove-if "Org 9.0") +(define-obsolete-function-alias 'org-remove-if-not 'cl-remove-if-not "Org 9.0") +(define-obsolete-function-alias 'org-reduce 'cl-reduce "Org 9.0") +(define-obsolete-function-alias 'org-every 'cl-every "Org 9.0") +(define-obsolete-function-alias 'org-some 'cl-some "Org 9.0") + (provide 'org-compat) ;;; org-compat.el ends here diff --git a/lisp/org-element.el b/lisp/org-element.el index f8ffd11b3..37b89f172 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -118,6 +118,7 @@ (require 'org) (require 'avl-tree) +(require 'cl-lib) @@ -333,7 +334,7 @@ This list is checked after translations have been applied. See ;; Regular affiliated keywords. (format "\\(?1:%s\\)" (regexp-opt - (org-remove-if + (cl-remove-if (lambda (k) (member k org-element-dual-keywords)) org-element-affiliated-keywords))) "\\|" diff --git a/lisp/org-indent.el b/lisp/org-indent.el index 80389c7ea..7f0e980b1 100644 --- a/lisp/org-indent.el +++ b/lisp/org-indent.el @@ -41,6 +41,7 @@ (eval-when-compile (require 'cl)) +(require 'cl-lib) (declare-function org-inlinetask-get-task-level "org-inlinetask" ()) (declare-function org-inlinetask-in-task-p "org-inlinetask" ()) @@ -209,7 +210,7 @@ When no more buffer is being watched, the agent suppress itself." (when org-indent-agent-resume-timer (cancel-timer org-indent-agent-resume-timer)) (setq org-indent-agentized-buffers - (org-remove-if-not #'buffer-live-p org-indent-agentized-buffers)) + (cl-remove-if-not #'buffer-live-p org-indent-agentized-buffers)) (cond ;; Job done: kill agent. ((not org-indent-agentized-buffers) (cancel-timer org-indent-agent-timer)) diff --git a/lisp/org-lint.el b/lisp/org-lint.el index ad8950fac..efbffde17 100644 --- a/lisp/org-lint.el +++ b/lisp/org-lint.el @@ -771,7 +771,7 @@ Use :header-args: instead" (lambda (h) (and (org-element-property :footnote-section-p h) (org-element-map (org-element-contents h) - (org-remove-if + (cl-remove-if (lambda (e) (memq e '(comment comment-block footnote-definition property-drawer section))) @@ -1085,7 +1085,7 @@ CHECKERS is the list of checkers used." (interactive) (let ((c (org-lint--current-checker))) (setf tabulated-list-entries - (org-remove-if (lambda (e) (equal c (org-lint--current-checker e))) + (cl-remove-if (lambda (e) (equal c (org-lint--current-checker e))) tabulated-list-entries)) (tabulated-list-print))) @@ -1124,7 +1124,7 @@ ARG can also be a list of checker names, as symbols, to run." "Checker category: " (mapcar #'org-lint-checker-categories org-lint--checkers) nil t))) - (org-remove-if-not + (cl-remove-if-not (lambda (c) (assoc-string (org-lint-checker-categories c) category)) org-lint--checkers))) @@ -1139,7 +1139,7 @@ ARG can also be a list of checker names, as symbols, to run." (when (string= (org-lint-checker-name c) name) (throw 'exit c))))))) ((pred consp) - (org-remove-if-not (lambda (c) (memq (org-lint-checker-name c) arg)) + (cl-remove-if-not (lambda (c) (memq (org-lint-checker-name c) arg)) org-lint--checkers)) (_ (user-error "Invalid argument `%S' for `org-lint'" arg))))) (if (not (org-called-interactively-p)) diff --git a/lisp/org-list.el b/lisp/org-list.el index ab3ffdb38..683a643e9 100644 --- a/lisp/org-list.el +++ b/lisp/org-list.el @@ -78,6 +78,7 @@ (eval-when-compile (require 'cl)) +(require 'cl-lib) (require 'org-macs) (require 'org-compat) @@ -98,7 +99,6 @@ (declare-function org-back-to-heading "org" (&optional invisible-ok)) (declare-function org-before-first-heading-p "org" ()) (declare-function org-combine-plists "org" (&rest plists)) -(declare-function org-count "org" (cl-item cl-seq)) (declare-function org-current-level "org" ()) (declare-function org-element-at-point "org-element" ()) (declare-function org-element-context "org-element" (&optional element)) @@ -124,7 +124,6 @@ (declare-function org-narrow-to-subtree "org" ()) (declare-function org-previous-line-empty-p "org" ()) (declare-function org-reduced-level "org" (L)) -(declare-function org-remove-if "org" (predicate seq)) (declare-function org-show-subtree "org" ()) (declare-function org-sort-remove-invisible "org" (S)) (declare-function org-time-string-to-seconds "org" (s)) @@ -1471,7 +1470,7 @@ This function returns, destructively, the new list structure." (t dest))) (org-M-RET-may-split-line nil) ;; Store inner overlays (to preserve visibility). - (overlays (org-remove-if (lambda (o) (or (< (overlay-start o) item) + (overlays (cl-remove-if (lambda (o) (or (< (overlay-start o) item) (> (overlay-end o) item))) (overlays-in item item-end)))) (cond @@ -2400,7 +2399,7 @@ in subtree, ignoring drawers." (parents (org-list-parents-alist struct)) (prevs (org-list-prevs-alist struct)) (bottom (copy-marker (org-list-get-bottom-point struct))) - (items-to-toggle (org-remove-if + (items-to-toggle (cl-remove-if (lambda (e) (or (< e lim-up) (> e lim-down))) (mapcar #'car struct)))) (mapc (lambda (e) (org-list-set-checkbox @@ -2497,7 +2496,7 @@ With optional prefix argument ALL, do this for the whole buffer." (org-list-get-checkbox e s)) items)))) (incf c-all (length cookies)) - (incf c-on (org-count "[X]" cookies))))))) + (incf c-on (cl-count "[X]" cookies :test #'equal))))))) cookies-list cache) ;; Move to start. (cond (all (goto-char (point-min))) @@ -2675,7 +2674,7 @@ Return t if successful." ;; of the subtree mustn't have a child. (let ((last-item (caar (reverse - (org-remove-if + (cl-remove-if (lambda (e) (>= (car e) end)) struct))))) (org-list-has-child-p last-item struct)))) diff --git a/lisp/org-src.el b/lisp/org-src.el index 8b6f8bd50..b660a2672 100644 --- a/lisp/org-src.el +++ b/lisp/org-src.el @@ -35,6 +35,7 @@ (require 'ob-keys) (require 'ob-comint) (eval-when-compile (require 'cl)) +(require 'cl-lib) (declare-function org-base-buffer "org" (buffer)) (declare-function org-do-remove-indentation "org" (&optional n)) @@ -49,7 +50,6 @@ (declare-function org-get-indentation "org" (&optional line)) (declare-function org-pop-to-buffer-same-window "org-compat" (&optional buffer-or-name norecord label)) -(declare-function org-some "org" (pred seq)) (declare-function org-switch-to-buffer-other-window "org" (&rest args)) (declare-function org-trim "org" (s)) @@ -963,7 +963,7 @@ Throw an error if there is no such buffer." (goto-char beg) (cond ;; Block is hidden; move at start of block. - ((org-some (lambda (o) (eq (overlay-get o 'invisible) 'org-hide-block)) + ((cl-some (lambda (o) (eq (overlay-get o 'invisible) 'org-hide-block)) (overlays-at (point))) (beginning-of-line 0)) (write-back (org-src--goto-coordinates coordinates beg end)))) diff --git a/lisp/org-table.el b/lisp/org-table.el index 17547ab1d..097a191d2 100644 --- a/lisp/org-table.el +++ b/lisp/org-table.el @@ -36,6 +36,7 @@ (eval-when-compile (require 'cl)) +(require 'cl-lib) (require 'org) (declare-function org-element-at-point "org-element" ()) @@ -2790,11 +2791,12 @@ not overwrite the stored one." (replace-match (save-match-data (org-table-make-reference - (org-sublist fields - (+ (if (match-end 2) n0 0) - (string-to-number (match-string 1 form))) - (+ (if (match-end 4) n0 0) - (string-to-number (match-string 3 form)))) + (cl-subseq fields + (+ (if (match-end 2) n0 0) + (string-to-number (match-string 1 form)) + -1) + (+ (if (match-end 4) n0 0) + (string-to-number (match-string 3 form)))) keep-empty numbers lispp)) t t form))) (setq form0 form) diff --git a/lisp/org.el b/lisp/org.el index 69171679d..3b1f5f24e 100755 --- a/lisp/org.el +++ b/lisp/org.el @@ -68,6 +68,8 @@ ;;;; Require other packages +(require 'cl-lib) + (eval-when-compile (require 'cl) (require 'gnus-sum)) @@ -766,7 +768,7 @@ value of the variable, after updating it: (progn (setq org-export-registered-backends - (org-remove-if-not + (cl-remove-if-not (lambda (backend) (let ((name (org-export-backend-name backend))) (or (memq name val) @@ -798,7 +800,7 @@ depends on, if any." ;; a parent of any back-end in the new value) is removed from the ;; list of registered back-ends. (setq org-export-registered-backends - (org-remove-if-not + (cl-remove-if-not (lambda (backend) (let ((name (org-export-backend-name backend))) (or (memq name val) @@ -11320,9 +11322,9 @@ If the file does not exist, an error is thrown." buffer-file-name (substitute-in-file-name (expand-file-name path)))) (file-apps (append org-file-apps (org-default-apps))) - (apps (org-remove-if + (apps (cl-remove-if 'org-file-apps-entry-match-against-dlink-p file-apps)) - (apps-dlink (org-remove-if-not + (apps-dlink (cl-remove-if-not 'org-file-apps-entry-match-against-dlink-p file-apps)) (remp (and (assq 'remote apps) (org-file-remote-p file))) (dirp (unless remp (file-directory-p file))) @@ -18960,7 +18962,7 @@ removed, nil otherwise." (setq org-latex-fragment-image-overlays (let ((beg (or beg (point-min))) (end (or end (point-max)))) - (org-remove-if + (cl-remove-if (lambda (o) (cond ((not (overlay-buffer o)) (delete-overlay o) t) ((and (>= (overlay-start o) beg) @@ -22668,59 +22670,6 @@ The function returns the new ALIST." (setq list (delete (pop elts) list))) list) -(defun org-count (cl-item cl-seq) - "Count the number of occurrences of ITEM in SEQ. -Taken from `count' in cl-seq.el with all keyword arguments removed." - (let ((cl-end (length cl-seq)) (cl-start 0) (cl-count 0) cl-x) - (when (consp cl-seq) (setq cl-seq (nthcdr cl-start cl-seq))) - (while (< cl-start cl-end) - (setq cl-x (if (consp cl-seq) (pop cl-seq) (aref cl-seq cl-start))) - (if (equal cl-item cl-x) (setq cl-count (1+ cl-count))) - (setq cl-start (1+ cl-start))) - cl-count)) - -(defun org-remove-if (predicate seq) - "Remove everything from SEQ that fulfills PREDICATE." - (let (res e) - (while seq - (setq e (pop seq)) - (if (not (funcall predicate e)) (push e res))) - (nreverse res))) - -(defun org-remove-if-not (predicate seq) - "Remove everything from SEQ that does not fulfill PREDICATE." - (let (res e) - (while seq - (setq e (pop seq)) - (if (funcall predicate e) (push e res))) - (nreverse res))) - -(defun org-reduce (cl-func cl-seq &rest cl-keys) - "Reduce two-argument FUNCTION across SEQ. -Taken from `reduce' in cl-seq.el with all keyword arguments but -\":initial-value\" removed." - (let ((cl-accum (cond ((memq :initial-value cl-keys) - (cadr (memq :initial-value cl-keys))) - (cl-seq (pop cl-seq)) - (t (funcall cl-func))))) - (while cl-seq - (setq cl-accum (funcall cl-func cl-accum (pop cl-seq)))) - cl-accum)) - -(defun org-every (pred seq) - "Return true if PREDICATE is true of every element of SEQ. -Adapted from `every' in cl.el." - (catch 'org-every - (mapc (lambda (e) (unless (funcall pred e) (throw 'org-every nil))) seq) - t)) - -(defun org-some (pred seq) - "Return true if PREDICATE is true of any element of SEQ. -Adapted from `some' in cl.el." - (catch 'org-some - (mapc (lambda (e) (when (funcall pred e) (throw 'org-some t))) seq) - nil)) - (defun org-back-over-empty-lines () "Move backwards over whitespace, to the beginning of the first empty line. Returns the number of empty lines passed." @@ -22798,13 +22747,10 @@ so values can contain further %-escapes if they are define later in TABLE." (defun org-sublist (list start end) "Return a section of LIST, from START to END. + Counting starts at 1." - (let (rtn (c start)) - (setq list (nthcdr (1- start) list)) - (while (and list (<= c end)) - (push (pop list) rtn) - (setq c (1+ c))) - (nreverse rtn))) + (cl-subseq list (1- start) end)) +(make-obsolete 'org-sublist "cl-subseq (note the 0-based counting)." "Org 9.0") (defun org-find-base-buffer-visiting (file) "Like `find-buffer-visiting' but always return the base buffer and diff --git a/lisp/ox-beamer.el b/lisp/ox-beamer.el index 78cb3e1b5..7208862dc 100644 --- a/lisp/ox-beamer.el +++ b/lisp/ox-beamer.el @@ -30,6 +30,7 @@ ;;; Code: (eval-when-compile (require 'cl)) +(require 'cl-lib) (require 'ox-latex) ;; Install a default set-up for Beamer export. @@ -955,7 +956,7 @@ value." (save-excursion (org-back-to-heading t) ;; Filter out Beamer-related tags and install environment tag. - (let ((tags (org-remove-if (lambda (x) (string-match "^B_" x)) + (let ((tags (cl-remove-if (lambda (x) (string-match "^B_" x)) (org-get-tags))) (env-tag (and (org-string-nw-p value) (concat "B_" value)))) (org-set-tags-to (if env-tag (cons env-tag tags) tags)) diff --git a/lisp/ox-html.el b/lisp/ox-html.el index 36e7c96fc..effd3874d 100644 --- a/lisp/ox-html.el +++ b/lisp/ox-html.el @@ -34,6 +34,7 @@ (require 'ox-publish) (require 'format-spec) (eval-when-compile (require 'cl) (require 'table nil 'noerror)) +(require 'cl-lib) ;;; Function Declarations @@ -1716,7 +1717,7 @@ INFO is a plist used as a communication channel." info)) charset) "\n" (let ((viewport-options - (org-remove-if-not (lambda (cell) (org-string-nw-p (cadr cell))) + (cl-remove-if-not (lambda (cell) (org-string-nw-p (cadr cell))) (plist-get info :html-viewport)))) (and viewport-options (concat diff --git a/lisp/ox-icalendar.el b/lisp/ox-icalendar.el index e5c393c81..f459d8247 100644 --- a/lisp/ox-icalendar.el +++ b/lisp/ox-icalendar.el @@ -32,6 +32,7 @@ ;;; Code: (eval-when-compile (require 'cl)) +(require 'cl-lib) (require 'ox-ascii) (declare-function org-bbdb-anniv-export-ical "org-bbdb" nil) @@ -834,7 +835,7 @@ external process." ;; Asynchronous export is not interactive, so we will not call ;; `org-check-agenda-file'. Instead we remove any non-existent ;; agenda file from the list. - (let ((files (org-remove-if-not 'file-exists-p (org-agenda-files t)))) + (let ((files (cl-remove-if-not #'file-exists-p (org-agenda-files t)))) (org-export-async-start (lambda (results) (dolist (f results) (org-export-add-to-stack f 'icalendar))) @@ -865,7 +866,7 @@ The file is stored under the name chosen in `org-icalendar-combined-agenda-file'." (interactive) (if async - (let ((files (org-remove-if-not #'file-exists-p (org-agenda-files t)))) + (let ((files (cl-remove-if-not #'file-exists-p (org-agenda-files t)))) (org-export-async-start (lambda (_) (org-export-add-to-stack diff --git a/lisp/ox-publish.el b/lisp/ox-publish.el index 9915456b6..bcdf1edba 100644 --- a/lisp/ox-publish.el +++ b/lisp/ox-publish.el @@ -445,7 +445,7 @@ matching the regexp SKIP-DIR when recursing through BASE-DIR." (let ((all-files (if (not recurse) (directory-files base-dir t match) ;; If RECURSE is non-nil, we want all files ;; matching MATCH and sub-directories. - (org-remove-if-not + (cl-remove-if-not (lambda (file) (or (file-directory-p file) (and match (string-match match file)))) diff --git a/lisp/ox.el b/lisp/ox.el index d4061f24e..92d2f35c1 100644 --- a/lisp/ox.el +++ b/lisp/ox.el @@ -2828,7 +2828,7 @@ not, are considered." ;; Filter out definitions referenced neither in the original ;; tree nor in the external definitions. (let* ((directly-referenced - (org-remove-if-not + (cl-remove-if-not (lambda (d) (member (org-element-property :label d) referenced-labels)) definitions)) @@ -2836,7 +2836,7 @@ not, are considered." (append (funcall collect-labels directly-referenced) referenced-labels))) (setq definitions - (org-remove-if-not + (cl-remove-if-not (lambda (d) (member (org-element-property :label d) all-labels)) definitions))) @@ -3865,7 +3865,7 @@ INFO is a plist holding contextual information." (defun org-export-numbered-headline-p (headline info) "Return a non-nil value if HEADLINE element should be numbered. INFO is a plist used as a communication channel." - (unless (org-some + (unless (cl-some (lambda (head) (org-not-nil (org-element-property :UNNUMBERED head))) (org-element-lineage headline nil t)) (let ((sec-num (plist-get info :section-numbers)) @@ -3902,7 +3902,7 @@ Any tag belonging to this list will also be removed. When optional argument INHERITED is non-nil, tags can also be inherited from parent headlines and FILETAGS keywords." - (org-remove-if + (cl-remove-if (lambda (tag) (or (member tag (plist-get info :select-tags)) (member tag (plist-get info :exclude-tags)) (member tag tags))) @@ -6037,7 +6037,7 @@ stack." ;; Clear stack from exited processes, dead buffers or ;; non-existent files. (setq org-export-stack-contents - (org-remove-if-not + (cl-remove-if-not (lambda (el) (if (processp (nth 2 el)) (buffer-live-p (process-buffer (nth 2 el))) @@ -6052,7 +6052,7 @@ If optional argument SOURCE is non-nil, remove it instead." (interactive) (let ((source (or source (org-export--stack-source-at-point)))) (setq org-export-stack-contents - (org-remove-if (lambda (el) (equal (car el) source)) + (cl-remove-if (lambda (el) (equal (car el) source)) org-export-stack-contents)))) (defun org-export-stack-view (&optional in-emacs) diff --git a/testing/lisp/test-ox.el b/testing/lisp/test-ox.el index cfdd3acbc..72ef068d0 100644 --- a/testing/lisp/test-ox.el +++ b/testing/lisp/test-ox.el @@ -21,6 +21,8 @@ ;;; Code: +(require 'cl-lib) + (unless (featurep 'ox) (signal 'missing-test-dependency "org-export")) @@ -1148,7 +1150,7 @@ Footnotes[fn:2], foot[fn:test], digit only[3], and [fn:inline:anonymous footnote (buffer-string)))) ;; Adjacent INCLUDE-keywords should have the same :minlevel if unspecified. (should - (org-every (lambda (level) (zerop (1- level))) + (cl-every (lambda (level) (zerop (1- level))) (org-test-with-temp-text (concat (format "#+INCLUDE: \"%s/examples/include.org::#ah\"\n" org-test-dir) @@ -2066,7 +2068,7 @@ Footnotes[fn:2], foot[fn:test], digit only[3], and [fn:inline:anonymous footnote :UNNUMBERED: nil :END: *** H3" - (org-every + (cl-every (lambda (h) (not (org-export-numbered-headline-p h info))) (org-element-map tree 'headline #'identity info)))))