]> code.delx.au - gnu-emacs/blobdiff - lisp/org/org-footnote.el
Sync Org 7.9.2 from the commit tagged "release_7.9.2" in Org's Git repo.
[gnu-emacs] / lisp / org / org-footnote.el
index a9ba8d7510baae6262acebeda1a0ba3fbe76267f..3aaa44b7ac37c4128391e6a9cb6e3fdf7164cd17 100644 (file)
@@ -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)