Browse Source

Implement completion for some export structure elements.

This is an experimental feature and does not really fit
into Org, so it may go away in the future.
Carsten Dominik 17 years ago
parent
commit
ed25bd08fa
3 changed files with 36 additions and 15 deletions
  1. 6 0
      ChangeLog
  2. 2 2
      lisp/org-exp.el
  3. 28 13
      lisp/org.el

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2008-05-07  Carsten Dominik  <dominik@science.uva.nl>
+
+	* lisp/org.el (org-complete-expand-structure-template): New,
+	experimental function.
+	(org-structure-template-alist): New, experimental option.
+	(org-complete): Call `org-complete-expand-structure-template'.
 
 2008-05-06  Bastien Guerry  <bzg@altern.org>
 

+ 2 - 2
lisp/org-exp.el

@@ -2350,7 +2350,7 @@ PUB-DIR is set, use this as the publishing directory."
 	 table-buffer table-orig-buffer
 	 ind item-type starter didclose
 	 rpl path desc descp desc1 desc2 link
-	 snumber fnc
+	 snumber fnc item-tag
 	 )
 
     (let ((inhibit-read-only t))
@@ -2760,7 +2760,7 @@ lang=\"%s\" xml:lang=\"%s\">
 		    starter (if (match-beginning 2)
 				(substring (match-string 2 line) 0 -1))
 		    line (substring line (match-beginning 5))
-		    item-tag)
+		    item-tag nil)
 	      (if (string-match "\\(.*?\\) ::[ \t]*" line)
 		  (setq item-type "d"
 			item-tag (match-string 1 line)

+ 28 - 13
lisp/org.el

@@ -7581,24 +7581,31 @@ This function can be used in a hook."
 
 (defcustom org-structure-template-alist
   '(
-    ("s" "#+begin_src ?\n\n#+end_src" "#+<src lang=\"?\">\n\n</src>")
-    ("e" "#+begin_example\n?\n#+end_example" "<example>\n?\n</example>")
-    ("q" "#+begin_quote\n?\n#+end_quote" "<quote>\n?\n</quote>")
-    ("v" "#+begin_verse\n?\n#+end_verse" "<verse>\n?\n</verse>")
-    ("l" "#+begin_latex\n?\n#+end_latex" "<literal style=\"latex\">\n?\n</literal>")
-    ("L" "#+latex: " "<literal style=\"latex\">?</literal>")
-    ("h" "#+begin_html\n?\n#+end_html" "<literal style=\"latex\">\n?\n</literal>")
-    ("H" "#+html: " "<literal style=\"latex\">?</literal>")
+    ("s" "#+begin_src ?\n\n#+end_src")
+    ("e" "#+begin_example\n?\n#+end_example")
+    ("q" "#+begin_quote\n?\n#+end_quote")
+    ("v" "#+begin_verse\n?\n#+end_verse")
+    ("l" "#+begin_latex\n?\n#+end_latex")
+    ("L" "#+latex: ")
+    ("h" "#+begin_html\n?\n#+end_html")
+    ("H" "#+html: ")
     ("a" "#+begin_ascii\n?\n#+end_ascii")
     ("A" "#+ascii: ")
-    ("i" "#+include: " "<include file=\"?\">")
+    ("i" "#+include: %file ?")
     )
-  "FIXME"
-  :group 'org ;?????????????????
-  :type 'sexp)
+  "Structure completion elements.
+This is a list of abbreviation keys and values.  The value gets inserted
+it you type @samp{.} followed by the key and then the completion key,
+usually `M-TAB'.  %file will be replaced by a file name after prompting
+for the file uning completion.
+This is an experimental feature, it is undecided if it is going to stay in."
+  :group 'org-completion
+  :type '(repeat
+	  (string :tag "Key") (string :tag "Template")))
 
 (defun org-complete-expand-structure-template (start cell)
-  (let ((rpl (cdr cell)))
+  "Expand a structure template."
+  (let ((rpl (nth 1 cell)))
     (delete-region start (point))
     (when (string-match "\\`#\\+" rpl)
       (cond
@@ -7607,6 +7614,14 @@ This function can be used in a hook."
 	(delete-region (point-at-bol) (point)))
        (t (newline))))
     (setq start (point))
+    (if (string-match "%file" rpl)
+	(setq rpl (replace-match 
+		   (concat
+		    "\""
+		    (save-match-data
+		      (abbreviate-file-name (read-file-name "Include file: ")))
+		    "\"")
+		   t t rpl)))
     (insert rpl)
     (if (re-search-backward "\\?" start t) (delete-char 1))))