浏览代码

New option to create unique, random labels for footnotes.

* lisp/org-footnote.el: (org-footnote-auto-label): New random option
* lisp/org-footnote.el: (org-footnote-new): Create random footnote
  labels with unique ids
Matt Lundin 14 年之前
父节点
当前提交
743bb4e14f
共有 1 个文件被更改,包括 12 次插入4 次删除
  1. 12 4
      lisp/org-footnote.el

+ 12 - 4
lisp/org-footnote.el

@@ -113,12 +113,14 @@ t          create unique labels of the form [fn:1], [fn:2], ...
 confirm    like t, but let the user edit the created value.  In particular,
 confirm    like t, but let the user edit the created value.  In particular,
            the label can be removed from the minibuffer, to create
            the label can be removed from the minibuffer, to create
            an anonymous footnote.
            an anonymous footnote.
+random	   Automatically generate a unique, random label.
 plain      Automatically create plain number labels like [1]"
 plain      Automatically create plain number labels like [1]"
   :group 'org-footnote
   :group 'org-footnote
   :type '(choice
   :type '(choice
 	  (const :tag "Prompt for label" nil)
 	  (const :tag "Prompt for label" nil)
 	  (const :tag "Create automatic [fn:N]" t)
 	  (const :tag "Create automatic [fn:N]" t)
 	  (const :tag "Offer automatic [fn:N] for editing" confirm)
 	  (const :tag "Offer automatic [fn:N] for editing" confirm)
+	  (const :tag "Create a random label" random)
 	  (const :tag "Create automatic [N]" plain)))
 	  (const :tag "Create automatic [N]" plain)))
 
 
 (defcustom org-footnote-auto-adjust nil
 (defcustom org-footnote-auto-adjust nil
@@ -253,16 +255,22 @@ This command prompts for a label.  If this is a label referencing an
 existing label, only insert the label.  If the footnote label is empty
 existing label, only insert the label.  If the footnote label is empty
 or new, let the user edit the definition of the footnote."
 or new, let the user edit the definition of the footnote."
   (interactive)
   (interactive)
-  (let* ((labels (org-footnote-all-labels))
+  (let* ((labels (and (not (equal org-footnote-auto-label 'random))
+		      (org-footnote-all-labels)))
 	 (propose (org-footnote-unique-label labels))
 	 (propose (org-footnote-unique-label labels))
 	 (label
 	 (label
-	  (if (member org-footnote-auto-label '(t plain))
-	      propose
+	  (cond 
+	   ((member org-footnote-auto-label '(t plain))
+	    propose)
+	   ((equal org-footnote-auto-label 'random)
+	    (require 'org-id)
+	    (substring (org-id-uuid) 0 8))
+	   (t
 	    (completing-read
 	    (completing-read
 	     "Label (leave empty for anonymous): "
 	     "Label (leave empty for anonymous): "
 	     (mapcar 'list labels) nil nil
 	     (mapcar 'list labels) nil nil
 	     (if (eq org-footnote-auto-label 'confirm) propose nil)
 	     (if (eq org-footnote-auto-label 'confirm) propose nil)
-	     'org-footnote-label-history))))
+	     'org-footnote-label-history)))))
     (setq label (org-footnote-normalize-label label))
     (setq label (org-footnote-normalize-label label))
     (cond
     (cond
      ((equal label "")
      ((equal label "")