diff options
author | Nicolas Goaziou <n.goaziou@gmail.com> | 2013-02-13 23:52:57 +0100 |
---|---|---|
committer | Bastien Guerry <bzg@altern.org> | 2013-02-14 08:48:18 +0100 |
commit | 19eae5dc00e8c611d6f9e5bae83e908fcfddb61a (patch) | |
tree | 271bd7a082e2e803956b3250495ef59e6cc86aae | |
parent | 791a8d6bcc68a1c5c7ba3389da4c7be844a118bc (diff) | |
download | org-mode-19eae5dc00e8c611d6f9e5bae83e908fcfddb61a.tar.gz |
org-pcomplete: Fix completion for file options
* lisp/org.el (org-options-keywords): Add missing colons.
* lisp/org-macs.el (org-default-options): Removed function.
* lisp/org-pcomplete.el (org-command-at-point): Fix bug with some file
options.
(pcomplete/org-mode/file-option/x): Removed macro.
(pcomplete/org-mode/file-option): Refactor code.
(pcomplete/org-mode/file-option/author,
pcomplete/org-mode/file-option/date,
pcomplete/org-mode/file-option/title,
pcomplete/org-mode/file-option/tags,
pcomplete/org-mode/file-option/select_tags,
pcomplete/org-mode/file-option/priorities,
pcomplete/org-mode/file-option/language,
pcomplete/org-mode/file-option/filetags,
pcomplete/org-mode/file-option/exclude_tags,
pcomplete/org-mode/file-option/email): New functions.
-rw-r--r-- | lisp/org-macs.el | 33 | ||||
-rw-r--r-- | lisp/org-pcomplete.el | 127 | ||||
-rw-r--r-- | lisp/org.el | 2 |
3 files changed, 91 insertions, 71 deletions
diff --git a/lisp/org-macs.el b/lisp/org-macs.el index 9dd80b0..e25deff 100644 --- a/lisp/org-macs.el +++ b/lisp/org-macs.el @@ -398,39 +398,6 @@ the value in cdr." (cons (list (car flat) (cadr flat)) (org-make-parameter-alist (cddr flat))))) -(defvar org-export-default-language) ; Defined in ox.el -(defvar org-export-select-tags) ; Defined in ox.el -(defvar org-export-exclude-tags) ; Defined in ox.el -(defun org-default-options () - "Return a string with default options as keyword options." - (format - "#+TITLE: %s -#+AUTHOR: %s -#+EMAIL: %s -#+DATE: %s -#+LANGUAGE: %s -#+SELECT_TAGS: %s -#+EXCLUDE_TAGS: %s -#+PRIORITIES: %c %c %c -#+TAGS: %s -#+FILETAGS: %s -" - (buffer-name) (user-full-name) user-mail-address - (format-time-string (substring (car org-time-stamp-formats) 1 -1)) - org-export-default-language - (mapconcat 'identity org-export-select-tags " ") - (mapconcat 'identity org-export-exclude-tags " ") - org-highest-priority org-lowest-priority org-default-priority - (or (mapconcat (lambda (x) - (cond - ((equal :startgroup (car x)) "{") - ((equal :endgroup (car x)) "}") - ((equal :newline (car x)) "") - ((cdr x) (format "%s(%c)" (car x) (cdr x))) - (t (car x)))) - (or org-tag-alist (org-get-buffer-tags)) " ") "") - (mapconcat 'identity org-file-tags " "))) - ;;;###autoload (defmacro org-load-noerror-mustsuffix (file) "Load FILE with optional arguments NOERROR and MUSTSUFFIX. Drop the MUSTSUFFIX argument for XEmacs, which doesn't recognize it." diff --git a/lisp/org-pcomplete.el b/lisp/org-pcomplete.el index 1c203a3..60e5c91 100644 --- a/lisp/org-pcomplete.el +++ b/lisp/org-pcomplete.el @@ -108,11 +108,11 @@ When completing for #+STARTUP, for example, this function returns (let ((thing (org-thing-at-point))) (cond ((string= "file-option" (car thing)) - (concat (car thing) "/" (downcase (cdr thing)))) + (concat (car thing) + (and (cdr thing) (concat "/" (downcase (cdr thing)))))) ((string= "block-option" (car thing)) (concat (car thing) "/" (downcase (cdr thing)))) - (t - (car thing))))) + (t (car thing))))) (defun org-parse-arguments () "Parse whitespace separated arguments in the current region." @@ -147,23 +147,73 @@ When completing for #+STARTUP, for example, this function returns "Complete against all valid file options." (pcomplete-here (org-pcomplete-case-double - (mapcar (lambda (x) - (if (= ?: (aref x (1- (length x)))) - (concat x " ") - x)) - (append org-options-keywords - org-element-affiliated-keywords - (let (block-names) - (mapc (lambda (block-name) - (let ((name (car block-name))) - (push (concat "END_" name) block-names) - (push (concat "BEGIN_" name) block-names))) - org-element-block-name-alist) - block-names) - (mapcar (lambda (keyword) (concat keyword ":")) - (org-get-export-keywords))))) + (append (mapcar (lambda (keyword) (concat keyword " ")) + org-options-keywords) + (mapcar (lambda (keyword) (concat keyword ": ")) + org-element-affiliated-keywords) + (let (block-names) + (mapc (lambda (block-name) + (let ((name (car block-name))) + (push (format "END_%s: " name) block-names) + (push (format "BEGIN_%s: " name) block-names))) + org-element-block-name-alist) + block-names) + (mapcar (lambda (keyword) (concat keyword ": ")) + (org-get-export-keywords)))) (substring pcomplete-stub 2))) +(defun pcomplete/org-mode/file-option/author () + "Complete arguments for the #+AUTHOR file option." + (pcomplete-here (list user-full-name))) + +(defvar org-time-stamp-formats) +(defun pcomplete/org-mode/file-option/date () + "Complete arguments for the #+DATE file option." + (pcomplete-here (list (format-time-string (car org-time-stamp-formats))))) + +(defun pcomplete/org-mode/file-option/email () + "Complete arguments for the #+EMAIL file option." + (pcomplete-here (list user-mail-address))) + +(defvar org-export-exclude-tags) +(defun pcomplete/org-mode/file-option/exclude_tags () + "Complete arguments for the #+EXCLUDE_TAGS file option." + (require 'ox) + (pcomplete-here + (and org-export-exclude-tags + (list (mapconcat 'identity org-export-exclude-tags " "))))) + +(defvar org-file-tags) +(defun pcomplete/org-mode/file-option/filetags () + "Complete arguments for the #+FILETAGS file option." + (pcomplete-here (and org-file-tags (mapconcat 'identity org-file-tags " ")))) + +(defvar org-export-default-language) +(defun pcomplete/org-mode/file-option/language () + "Complete arguments for the #+LANGUAGE file option." + (require 'ox) + (pcomplete-here + (pcomplete-uniqify-list + (list org-export-default-language "en")))) + +(defvar org-default-priority) +(defvar org-highest-priority) +(defvar org-lowest-priority) +(defun pcomplete/org-mode/file-option/priorities () + "Complete arguments for the #+PRIORITIES file option." + (pcomplete-here (list (format "%c %c %c" + org-highest-priority + org-lowest-priority + org-default-priority)))) + +(defvar org-export-select-tags) +(defun pcomplete/org-mode/file-option/select_tags () + "Complete arguments for the #+SELECT_TAGS file option." + (require 'ox) + (pcomplete-here + (and org-export-select-tags + (list (mapconcat 'identity org-export-select-tags " "))))) + (defvar org-startup-options) (defun pcomplete/org-mode/file-option/startup () "Complete arguments for the #+STARTUP file option." @@ -178,25 +228,28 @@ When completing for #+STARTUP, for example, this function returns (setq opts (delete "showstars" opts))))) opts)))) -(defmacro pcomplete/org-mode/file-option/x (option) - "Complete arguments for OPTION." - `(while - (pcomplete-here - (pcomplete-uniqify-list - (delq nil - (mapcar (lambda(o) - (when (string-match (concat "^[ \t]*#\\+" - ,option ":[ \t]+\\(.*\\)[ \t]*$") o) - (match-string 1 o))) - (split-string (org-default-options) "\n"))))))) - -(mapc (lambda (o) - (eval `(defun - ,(intern (concat "pcomplete/org-mode/file-option/" (downcase o))) () - ,(format "Complete #+%s option." o) - (pcomplete/org-mode/file-option/x ,o)))) - '("TITLE" "AUTHOR" "EMAIL" "DATE" "LANGUAGE" "TAGS" "FILETAGS" - "SELECT_TAGS" "EXCLUDE_TAGS" "PRIORITIES")) +(defvar org-tag-alist) +(defun pcomplete/org-mode/file-option/tags () + "Complete arguments for the #+TAGS file option." + (pcomplete-here + (list + (mapconcat (lambda (x) + (cond + ((eq :startgroup (car x)) "{") + ((eq :endgroup (car x)) "}") + ((eq :newline (car x)) "\\n") + ((cdr x) (format "%s(%c)" (car x) (cdr x))) + (t (car x)))) + org-tag-alist " ")))) + +(defun pcomplete/org-mode/file-option/title () + "Complete arguments for the #+TITLE file option." + (pcomplete-here + (let ((visited-file (buffer-file-name (buffer-base-buffer)))) + (list (or (and visited-file + (file-name-sans-extension + (file-name-nondirectory visited-file))) + (buffer-name (buffer-base-buffer))))))) (defun pcomplete/org-mode/file-option/options () "Complete arguments for the #+OPTIONS file option." diff --git a/lisp/org.el b/lisp/org.el index f305979..a619857 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -11549,7 +11549,7 @@ keywords relative to each registered export back-end." "DESCRIPTION:" "DRAWERS:" "EMAIL:" "EXCLUDE_TAGS:" "FILETAGS:" "INCLUDE:" "INDEX:" "KEYWORDS:" "LANGUAGE:" "MACRO:" "OPTIONS:" "PROPERTY" "PRIORITIES:" "SELECT_TAGS:" "SEQ_TODO:" "SETUPFILE:" "STARTUP:" "TAGS:" - "TITLE:" "TODO:" "TYP_TODO:" "SELECT_TAGS" "EXCLUDE_TAGS" "INFOJS_OPT")) + "TITLE:" "TODO:" "TYP_TODO:" "SELECT_TAGS:" "EXCLUDE_TAGS:" "INFOJS_OPT:")) (defcustom org-structure-template-alist '(("s" "#+BEGIN_SRC ?\n\n#+END_SRC" |