diff options
Diffstat (limited to 'lisp/org/org-footnote.el')
-rw-r--r-- | lisp/org/org-footnote.el | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/lisp/org/org-footnote.el b/lisp/org/org-footnote.el index a9ba8d7510b..3aaa44b7ac3 100644 --- a/lisp/org/org-footnote.el +++ b/lisp/org/org-footnote.el @@ -57,6 +57,7 @@ (declare-function org-mark-ring-push "org" (&optional pos buffer)) (declare-function org-show-context "org" (&optional key)) (declare-function org-trim "org" (s)) +(declare-function org-skip-whitespace "org" ()) (declare-function outline-next-heading "outline") (declare-function org-skip-whitespace "org" ()) @@ -277,9 +278,7 @@ otherwise." (concat org-outline-regexp-bol "\\|" org-footnote-definition-re "\\|" "^[ \t]*$") bound 'move)) - (progn (goto-char (match-beginning 0)) - (org-skip-whitespace) - (point-at-bol)) + (match-beginning 0) (point))))) (list label beg end (org-trim (buffer-substring-no-properties beg-def end))))))))) @@ -362,7 +361,7 @@ Return a non-nil value when a definition has been found." (looking-at (format "\\[%s\\]\\|\\[%s:" label label)) (goto-char (match-end 0)) (org-show-context 'link-search) - (when (eq major-mode 'org-mode) + (when (derived-mode-p 'org-mode) (message "Edit definition and go back with `C-c &' or, if unique, with `C-c C-c'.")) t))) @@ -451,7 +450,8 @@ or new, let the user edit the definition of the footnote." (error "Cannot insert a footnote here")) (let* ((lbls (and (not (equal org-footnote-auto-label 'random)) (org-footnote-all-labels))) - (propose (org-footnote-unique-label lbls)) + (propose (and (not (equal org-footnote-auto-label 'random)) + (org-footnote-unique-label lbls))) (label (org-footnote-normalize-label (cond @@ -489,7 +489,7 @@ or new, let the user edit the definition of the footnote." (let ((label (org-footnote-normalize-label label))) (cond ;; In an Org file. - ((eq major-mode 'org-mode) + ((derived-mode-p 'org-mode) ;; If `org-footnote-section' is defined, find it, or create it ;; at the end of the buffer. (when org-footnote-section @@ -553,7 +553,7 @@ or new, let the user edit the definition of the footnote." (backward-char) ;; Only notify user about next possible action when in an Org ;; buffer, as the bindings may have different meanings otherwise. - (when (eq major-mode 'org-mode) + (when (derived-mode-p 'org-mode) (message "Edit definition and go back with `C-c &' or, if unique, with `C-c C-c'.")))) @@ -713,7 +713,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ;; 2. Find and remove the footnote section, if any. Also ;; determine where footnotes shall be inserted (INS-POINT). (cond - ((and org-footnote-section (eq major-mode 'org-mode)) + ((and org-footnote-section (derived-mode-p 'org-mode)) (goto-char (point-min)) (if (re-search-forward (concat "^\\*[ \t]+" (regexp-quote org-footnote-section) @@ -729,7 +729,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ;; of the section containing their first reference. ;; Nevertheless, in an export situation, set insertion point to ;; `point-max' by default. - ((eq major-mode 'org-mode) + ((derived-mode-p 'org-mode) (when export-props (goto-char (point-max)) (skip-chars-backward " \r\t\n") @@ -790,7 +790,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ;; No footnote: exit. ((not ref-table)) ;; Cases when footnotes should be inserted in one place. - ((or (not (eq major-mode 'org-mode)) + ((or (not (derived-mode-p 'org-mode)) org-footnote-section export-props) ;; Insert again the section title, if any. Ensure that title, @@ -799,7 +799,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': ;; separate section with a blank line, unless explicitly ;; stated in `org-blank-before-new-entry'. (cond - ((not (eq major-mode 'org-mode)) + ((not (derived-mode-p 'org-mode)) (skip-chars-backward " \t\n\r") (delete-region (point) ins-point) (unless (bolp) (newline)) @@ -845,7 +845,7 @@ Additional note on `org-footnote-insert-pos-for-preprocessor': (beginning-of-line 0) (while (and (not (bobp)) (= (char-after) ?#)) (beginning-of-line 0)) - (if (looking-at "[ \t]*#\\+TBLFM:") (beginning-of-line 2)) + (if (let ((case-fold-search t)) (looking-at "[ \t]*#\\+tblfm:")) (beginning-of-line 2)) (end-of-line 1) (skip-chars-backward "\n\r\t ") (forward-line)) @@ -872,7 +872,11 @@ Return the number of footnotes removed." (while (re-search-forward def-re nil t) (let ((full-def (org-footnote-at-definition-p))) (when full-def - (delete-region (nth 1 full-def) (nth 2 full-def)) + ;; Remove the footnote, and all blank lines before it. + (goto-char (nth 1 full-def)) + (skip-chars-backward " \r\t\n") + (unless (bolp) (forward-line)) + (delete-region (point) (nth 2 full-def)) (incf ndef)))) ndef))) @@ -888,7 +892,7 @@ If LABEL is non-nil, delete that footnote instead." (label (cond ;; LABEL is provided as argument. (label) - ;; Footnote reference at point. If the footnote is + ;; Footnote reference at point. If the footnote is ;; anonymous, delete it and exit instead. ((setq x (org-footnote-at-reference-p)) (or (car x) |