Browse Source

Allow "#" and "%" in tags

Patch largely from Manish, missing points added by Carsten
Manish Sharma 15 years ago
parent
commit
2cf6136523

+ 5 - 5
lisp/org-agenda.el

@@ -4025,11 +4025,11 @@ MATCH is being ignored."
 			  "\\)\\>"))
 			  "\\)\\>"))
 	 (tags (nth 2 org-stuck-projects))
 	 (tags (nth 2 org-stuck-projects))
 	 (tags-re (if (member "*" tags)
 	 (tags-re (if (member "*" tags)
-		      (org-re "^\\*+ .*:[[:alnum:]_@]+:[ \t]*$")
+		      (org-re "^\\*+ .*:[[:alnum:]_@#%]+:[ \t]*$")
 		    (if tags
 		    (if tags
 			(concat "^\\*+ .*:\\("
 			(concat "^\\*+ .*:\\("
 				(mapconcat 'identity tags "\\|")
 				(mapconcat 'identity tags "\\|")
-				(org-re "\\):[[:alnum:]_@:]*[ \t]*$")))))
+				(org-re "\\):[[:alnum:]_@#%:]*[ \t]*$")))))
 	 (gen-re (nth 3 org-stuck-projects))
 	 (gen-re (nth 3 org-stuck-projects))
 	 (re-list
 	 (re-list
 	  (delq nil
 	  (delq nil
@@ -4988,7 +4988,7 @@ Any match of REMOVE-RE will be removed from TXT."
 	  (setq h (/ m 60) m (- m (* h 60)))
 	  (setq h (/ m 60) m (- m (* h 60)))
 	  (setq s2 (format "%02d:%02d" h m))))
 	  (setq s2 (format "%02d:%02d" h m))))
 
 
-      (when (string-match (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@:]+:\\)[ \t]*$")
+      (when (string-match (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$")
 			  txt)
 			  txt)
 	;; Tags are in the string
 	;; Tags are in the string
 	(if (or (eq org-agenda-remove-tags t)
 	(if (or (eq org-agenda-remove-tags t)
@@ -5062,7 +5062,7 @@ Any match of REMOVE-RE will be removed from TXT."
 The modified list may contain inherited tags, and tags matched by
 The modified list may contain inherited tags, and tags matched by
 `org-agenda-hide-tags-regexp' will be removed."
 `org-agenda-hide-tags-regexp' will be removed."
   (when (or add-inherited hide-re)
   (when (or add-inherited hide-re)
-    (if (string-match (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@:]+:\\)[ \t]*$") txt)
+    (if (string-match (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$") txt)
 	(setq txt (substring txt 0 (match-beginning 0))))
 	(setq txt (substring txt 0 (match-beginning 0))))
     (setq tags
     (setq tags
 	  (delq nil
 	  (delq nil
@@ -6728,7 +6728,7 @@ If FORCE-TAGS is non nil, the car of it returns the new tags."
   (let ((inhibit-read-only t) l c)
   (let ((inhibit-read-only t) l c)
     (save-excursion
     (save-excursion
       (goto-char (if line (point-at-bol) (point-min)))
       (goto-char (if line (point-at-bol) (point-min)))
-      (while (re-search-forward (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@:]+:\\)[ \t]*$")
+      (while (re-search-forward (org-re "\\([ \t]+\\)\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$")
 				(if line (point-at-eol) nil) t)
 				(if line (point-at-eol) nil) t)
 	(add-text-properties
 	(add-text-properties
 	 (match-beginning 2) (match-end 2)
 	 (match-beginning 2) (match-end 2)

+ 1 - 1
lisp/org-archive.el

@@ -268,7 +268,7 @@ this heading."
 	      (progn
 	      (progn
 		(if (re-search-forward
 		(if (re-search-forward
 		     (concat "^" (regexp-quote heading)
 		     (concat "^" (regexp-quote heading)
-			     (org-re "[ \t]*\\(:[[:alnum:]_@:]+:\\)?[ \t]*\\($\\|\r\\)"))
+			     (org-re "[ \t]*\\(:[[:alnum:]_@#%:]+:\\)?[ \t]*\\($\\|\r\\)"))
 		     nil t)
 		     nil t)
 		    (goto-char (match-end 0))
 		    (goto-char (match-end 0))
 		  ;; Heading not found, just insert it at the end
 		  ;; Heading not found, just insert it at the end

+ 2 - 2
lisp/org-ascii.el

@@ -400,7 +400,7 @@ publishing directory."
 
 
 			 (if (and (memq org-export-with-tags '(not-in-toc nil))
 			 (if (and (memq org-export-with-tags '(not-in-toc nil))
 				  (string-match
 				  (string-match
-				   (org-re "[ \t]+:[[:alnum:]_@:]+:[ \t]*$")
+				   (org-re "[ \t]+:[[:alnum:]_@#%:]+:[ \t]*$")
 				   txt))
 				   txt))
 			     (setq txt (replace-match "" t t txt)))
 			     (setq txt (replace-match "" t t txt)))
 			 (if (string-match quote-re0 txt)
 			 (if (string-match quote-re0 txt)
@@ -648,7 +648,7 @@ publishing directory."
 	  (insert "\n"))
 	  (insert "\n"))
       (setq char (nth (- umax level) (reverse org-export-ascii-underline)))
       (setq char (nth (- umax level) (reverse org-export-ascii-underline)))
       (unless org-export-with-tags
       (unless org-export-with-tags
-	(if (string-match (org-re "[ \t]+\\(:[[:alnum:]_@:]+:\\)[ \t]*$") title)
+	(if (string-match (org-re "[ \t]+\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$") title)
 	    (setq title (replace-match "" t t title))))
 	    (setq title (replace-match "" t t title))))
       (if org-export-with-section-numbers
       (if org-export-with-section-numbers
 	  (setq title (concat (org-section-number level) " " title)))
 	  (setq title (concat (org-section-number level) " " title)))

+ 1 - 1
lisp/org-capture.el

@@ -1205,7 +1205,7 @@ The template may still contain \"%?\" for cursor positioning."
 			 'org-tags-history)))
 			 'org-tags-history)))
 	      (setq ins (mapconcat 'identity
 	      (setq ins (mapconcat 'identity
 				   (org-split-string
 				   (org-split-string
-				    ins (org-re "[^[:alnum:]_@]+"))
+				    ins (org-re "[^[:alnum:]_@#%]+"))
 				       ":"))
 				       ":"))
 	      (when (string-match "\\S-" ins)
 	      (when (string-match "\\S-" ins)
 		(or (equal (char-before) ?:) (insert ":"))
 		(or (equal (char-before) ?:) (insert ":"))

+ 1 - 1
lisp/org-clock.el

@@ -1863,7 +1863,7 @@ the currently selected interval size."
 	    (when (setq time (get-text-property p :org-clock-minutes))
 	    (when (setq time (get-text-property p :org-clock-minutes))
 	      (save-excursion
 	      (save-excursion
 		(beginning-of-line 1)
 		(beginning-of-line 1)
-		(when (and (looking-at (org-re "\\(\\*+\\)[ \t]+\\(.*?\\)\\([ \t]+:[[:alnum:]_@:]+:\\)?[ \t]*$"))
+		(when (and (looking-at (org-re "\\(\\*+\\)[ \t]+\\(.*?\\)\\([ \t]+:[[:alnum:]_@#%:]+:\\)?[ \t]*$"))
 			   (setq level (org-reduced-level
 			   (setq level (org-reduced-level
 					(- (match-end 1) (match-beginning 1))))
 					(- (match-end 1) (match-beginning 1))))
 			   (<= level maxlevel))
 			   (<= level maxlevel))

+ 1 - 1
lisp/org-colview-xemacs.el

@@ -685,7 +685,7 @@ Where possible, use the standard interface for changing this line."
 	  (txt (match-string 3))
 	  (txt (match-string 3))
 	  (post "")
 	  (post "")
 	  txt2)
 	  txt2)
-      (if (string-match (org-re "[ \t]+:[[:alnum:]:_@]+:[ \t]*$") txt)
+      (if (string-match (org-re "[ \t]+:[[:alnum:]:_@#%]+:[ \t]*$") txt)
 	  (setq post (match-string 0 txt)
 	  (setq post (match-string 0 txt)
 		txt (substring txt 0 (match-beginning 0))))
 		txt (substring txt 0 (match-beginning 0))))
       (setq txt2 (read-string "Edit: " txt))
       (setq txt2 (read-string "Edit: " txt))

+ 1 - 1
lisp/org-colview.el

@@ -519,7 +519,7 @@ Where possible, use the standard interface for changing this line."
 	  (txt (match-string 3))
 	  (txt (match-string 3))
 	  (post "")
 	  (post "")
 	  txt2)
 	  txt2)
-      (if (string-match (org-re "[ \t]+:[[:alnum:]:_@]+:[ \t]*$") txt)
+      (if (string-match (org-re "[ \t]+:[[:alnum:]:_@#%]+:[ \t]*$") txt)
 	  (setq post (match-string 0 txt)
 	  (setq post (match-string 0 txt)
 		txt (substring txt 0 (match-beginning 0))))
 		txt (substring txt 0 (match-beginning 0))))
       (setq txt2 (read-string "Edit: " txt))
       (setq txt2 (read-string "Edit: " txt))

+ 2 - 2
lisp/org-docbook.el

@@ -1249,7 +1249,7 @@ When TITLE is nil, just close all open levels."
       ;; all levels, so the rest is done only if title is given.
       ;; all levels, so the rest is done only if title is given.
       ;;
       ;;
       ;; Format tags: put them into a superscript like format.
       ;; Format tags: put them into a superscript like format.
-      (when (string-match (org-re "\\(:[[:alnum:]_@:]+:\\)[ \t]*$") title)
+      (when (string-match (org-re "\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$") title)
 	(setq title
 	(setq title
 	      (replace-match
 	      (replace-match
 	       (if org-export-with-tags
 	       (if org-export-with-tags
@@ -1273,7 +1273,7 @@ When TITLE is nil, just close all open levels."
 Applies all active conversions.  If there are links in the
 Applies all active conversions.  If there are links in the
 string, don't modify these."
 string, don't modify these."
   (let* ((re (concat org-bracket-link-regexp "\\|"
   (let* ((re (concat org-bracket-link-regexp "\\|"
-		     (org-re "[ \t]+\\(:[[:alnum:]_@:]+:\\)[ \t]*$")))
+		     (org-re "[ \t]+\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$")))
 	 m s l res)
 	 m s l res)
     (while (setq m (string-match re string))
     (while (setq m (string-match re string))
       (setq s (substring string 0 m)
       (setq s (substring string 0 m)

+ 1 - 1
lisp/org-exp.el

@@ -2796,7 +2796,7 @@ If yes remove the column and the special lines."
 (defun org-export-cleanup-toc-line (s)
 (defun org-export-cleanup-toc-line (s)
   "Remove tags and timestamps from lines going into the toc."
   "Remove tags and timestamps from lines going into the toc."
   (when (memq org-export-with-tags '(not-in-toc nil))
   (when (memq org-export-with-tags '(not-in-toc nil))
-    (if (string-match (org-re " +:[[:alnum:]_@:]+: *$") s)
+    (if (string-match (org-re " +:[[:alnum:]_@#%:]+: *$") s)
 	(setq s (replace-match "" t t s))))
 	(setq s (replace-match "" t t s))))
   (when org-export-remove-timestamps-from-toc
   (when org-export-remove-timestamps-from-toc
     (while (string-match org-maybe-keyword-time-regexp s)
     (while (string-match org-maybe-keyword-time-regexp s)

+ 3 - 3
lisp/org-html.el

@@ -1095,7 +1095,7 @@ lang=\"%s\" xml:lang=\"%s\">
 					 (org-search-todo-below
 					 (org-search-todo-below
 					  line lines level))))
 					  line lines level))))
 			  (if (string-match
 			  (if (string-match
-			       (org-re "[ \t]+:\\([[:alnum:]_@:]+\\):[ \t]*$") txt)
+			       (org-re "[ \t]+:\\([[:alnum:]_@#%:]+\\):[ \t]*$") txt)
 			      (setq txt (replace-match  "&nbsp;&nbsp;&nbsp;<span class=\"tag\"> \\1</span>" t nil txt)))
 			      (setq txt (replace-match  "&nbsp;&nbsp;&nbsp;<span class=\"tag\"> \\1</span>" t nil txt)))
 			  (if (string-match quote-re0 txt)
 			  (if (string-match quote-re0 txt)
 			      (setq txt (replace-match "" t t txt)))
 			      (setq txt (replace-match "" t t txt)))
@@ -2164,7 +2164,7 @@ that uses these same face definitions."
   "Prepare STRING for HTML export.  Apply all active conversions.
   "Prepare STRING for HTML export.  Apply all active conversions.
 If there are links in the string, don't modify these."
 If there are links in the string, don't modify these."
   (let* ((re (concat org-bracket-link-regexp "\\|"
   (let* ((re (concat org-bracket-link-regexp "\\|"
-		     (org-re "[ \t]+\\(:[[:alnum:]_@:]+:\\)[ \t]*$")))
+		     (org-re "[ \t]+\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$")))
 	 m s l res)
 	 m s l res)
     (if (string-match "^[ \t]*\\+-[-+]*\\+[ \t]*$" string)
     (if (string-match "^[ \t]*\\+-[-+]*\\+[ \t]*$" string)
 	string
 	string
@@ -2328,7 +2328,7 @@ When TITLE is nil, just close all open levels."
     (when title
     (when title
       ;; If title is nil, this means this function is called to close
       ;; If title is nil, this means this function is called to close
       ;; all levels, so the rest is done only if title is given
       ;; all levels, so the rest is done only if title is given
-	(when (string-match (org-re "\\(:[[:alnum:]_@:]+:\\)[ \t]*$") title)
+	(when (string-match (org-re "\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$") title)
 	  (setq title (replace-match
 	  (setq title (replace-match
 		       (if org-export-with-tags
 		       (if org-export-with-tags
 			   (save-match-data
 			   (save-match-data

+ 1 - 1
lisp/org-latex.el

@@ -1329,7 +1329,7 @@ links, keywords, lists, tables, fixed-width"
 	  (replace-match "")
 	  (replace-match "")
 	(replace-match (format "\\textbf{%s}" (match-string 0)) t t)))
 	(replace-match (format "\\textbf{%s}" (match-string 0)) t t)))
     ;; convert tags
     ;; convert tags
-    (when (re-search-forward "\\(:[a-zA-Z0-9_@]+\\)+:" nil t)
+    (when (re-search-forward "\\(:[a-zA-Z0-9_@#%]+\\)+:" nil t)
       (if (or (not org-export-with-tags)
       (if (or (not org-export-with-tags)
 	      (plist-get remove-list :tags))
 	      (plist-get remove-list :tags))
 	  (replace-match "")
 	  (replace-match "")

+ 1 - 1
lisp/org-remember.el

@@ -574,7 +574,7 @@ to be run from that hook to function properly."
 			   'org-tags-completion-function nil nil nil
 			   'org-tags-completion-function nil nil nil
 			   'org-tags-history)))
 			   'org-tags-history)))
 		(setq ins (mapconcat 'identity
 		(setq ins (mapconcat 'identity
-				     (org-split-string ins (org-re "[^[:alnum:]_@]+"))
+				     (org-split-string ins (org-re "[^[:alnum:]_@#%]+"))
 				     ":"))
 				     ":"))
 		(when (string-match "\\S-" ins)
 		(when (string-match "\\S-" ins)
 		  (or (equal (char-before) ?:) (insert ":"))
 		  (or (equal (char-before) ?:) (insert ":"))

+ 28 - 28
lisp/org.el

@@ -3088,7 +3088,7 @@ points to a file, `org-agenda-diary-entry' will be used instead."
 
 
 (defcustom org-format-latex-options
 (defcustom org-format-latex-options
   '(:foreground default :background default :scale 1.0
   '(:foreground default :background default :scale 1.0
-    :html-foreground "Black" :html-background "Transparent" 
+    :html-foreground "Black" :html-background "Transparent"
     :html-scale 1.0 :matchers ("begin" "$1" "$" "$$" "\\(" "\\["))
     :html-scale 1.0 :matchers ("begin" "$1" "$" "$$" "\\(" "\\["))
   "Options for creating images from LaTeX fragments.
   "Options for creating images from LaTeX fragments.
 This is a property list with the following properties:
 This is a property list with the following properties:
@@ -4377,7 +4377,7 @@ means to push this value onto the list in the variable.")
 	     ((equal e "{") (push '(:startgroup) tgs))
 	     ((equal e "{") (push '(:startgroup) tgs))
 	     ((equal e "}") (push '(:endgroup) tgs))
 	     ((equal e "}") (push '(:endgroup) tgs))
 	     ((equal e "\\n") (push '(:newline) tgs))
 	     ((equal e "\\n") (push '(:newline) tgs))
-	     ((string-match (org-re "^\\([[:alnum:]_@]+\\)(\\(.\\))$") e)
+	     ((string-match (org-re "^\\([[:alnum:]_@#%]+\\)(\\(.\\))$") e)
 	      (push (cons (match-string 1 e)
 	      (push (cons (match-string 1 e)
 			  (string-to-char (match-string 2 e)))
 			  (string-to-char (match-string 2 e)))
 		    tgs))
 		    tgs))
@@ -4421,7 +4421,7 @@ means to push this value onto the list in the variable.")
 	    (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
 	    (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
 		    (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
 		    (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
 		    "\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)"
 		    "\\)\\>\\)?\\(?:[ \t]*\\(\\[#.\\]\\)\\)?[ \t]*\\(.*?\\)"
-		    "\\(?:[ \t]+\\(:[[:alnum:]_@:]+:\\)\\)?[ \t]*$")
+		    "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ \t]*$")
 	    org-complex-heading-regexp-format
 	    org-complex-heading-regexp-format
 	    (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
 	    (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
 		    (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
 		    (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
@@ -4430,7 +4430,7 @@ means to push this value onto the list in the variable.")
 		    "\\(?:[ \t]*\\(?:\\[[0-9%%/]+\\]\\)\\)?" ;; stats cookie
 		    "\\(?:[ \t]*\\(?:\\[[0-9%%/]+\\]\\)\\)?" ;; stats cookie
 		    "[ \t]*\\(%s\\)"
 		    "[ \t]*\\(%s\\)"
 		    "\\(?:[ \t]*\\(?:\\[[0-9%%/]+\\]\\)\\)?" ;; stats cookie
 		    "\\(?:[ \t]*\\(?:\\[[0-9%%/]+\\]\\)\\)?" ;; stats cookie
-		    "\\(?:[ \t]+\\(:[[:alnum:]_@:]+:\\)\\)?[ \t]*$")
+		    "\\(?:[ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ \t]*$")
 	    org-nl-done-regexp
 	    org-nl-done-regexp
 	    (concat "\n\\*+[ \t]+"
 	    (concat "\n\\*+[ \t]+"
 		    "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|")
 		    "\\(?:" (mapconcat 'regexp-quote org-done-keywords "\\|")
@@ -4439,7 +4439,7 @@ means to push this value onto the list in the variable.")
 	    (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
 	    (concat "^\\(\\*+\\)[ \t]+\\(?:\\("
 		    (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
 		    (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
 		    (org-re
 		    (org-re
-		     "\\)\\>\\)? *\\(.*?\\([ \t]:[[:alnum:]:_@]+:[ \t]*\\)?$\\)"))
+		     "\\)\\>\\)? *\\(.*?\\([ \t]:[[:alnum:]:_@#%]+:[ \t]*\\)?$\\)"))
 	    org-looking-at-done-regexp
 	    org-looking-at-done-regexp
 	    (concat "^" "\\(?:"
 	    (concat "^" "\\(?:"
 		    (mapconcat 'regexp-quote org-done-keywords "\\|") "\\)"
 		    (mapconcat 'regexp-quote org-done-keywords "\\|") "\\)"
@@ -5353,7 +5353,7 @@ between words."
 	"\\)\\>")))
 	"\\)\\>")))
 
 
 (defun org-activate-tags (limit)
 (defun org-activate-tags (limit)
-  (if (re-search-forward (org-re "^\\*+.*[ \t]\\(:[[:alnum:]_@:]+:\\)[ \r\n]") limit t)
+  (if (re-search-forward (org-re "^\\*+.*[ \t]\\(:[[:alnum:]_@#%:]+:\\)[ \r\n]") limit t)
       (progn
       (progn
 	(org-remove-flyspell-overlays-in (match-beginning 1) (match-end 1))
 	(org-remove-flyspell-overlays-in (match-beginning 1) (match-end 1))
 	(add-text-properties (match-beginning 1) (match-end 1)
 	(add-text-properties (match-beginning 1) (match-end 1)
@@ -6711,7 +6711,7 @@ This is important for non-interactive uses of the command."
 	      (when hide-previous
 	      (when hide-previous
 		(show-children)
 		(show-children)
 		(org-show-entry))
 		(org-show-entry))
-	      (looking-at ".*?\\([ \t]+\\(:[[:alnum:]_@:]+:\\)\\)?[ \t]*$")
+	      (looking-at ".*?\\([ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ \t]*$")
 	      (setq tags (and (match-end 2) (match-string 2)))
 	      (setq tags (and (match-end 2) (match-string 2)))
 	      (and (match-end 1)
 	      (and (match-end 1)
 		   (delete-region (match-beginning 1) (match-end 1)))
 		   (delete-region (match-beginning 1) (match-end 1)))
@@ -6747,7 +6747,7 @@ This is important for non-interactive uses of the command."
     (org-back-to-heading t)
     (org-back-to-heading t)
     (if (looking-at
     (if (looking-at
 	 (if no-tags
 	 (if no-tags
-	     (org-re "\\*+[ \t]+\\([^\n\r]*?\\)\\([ \t]+:[[:alnum:]:_@]+:[ \t]*\\)?$")
+	     (org-re "\\*+[ \t]+\\([^\n\r]*?\\)\\([ \t]+:[[:alnum:]:_@#%]+:[ \t]*\\)?$")
 	   "\\*+[ \t]+\\([^\r\n]*\\)"))
 	   "\\*+[ \t]+\\([^\r\n]*\\)"))
 	(match-string 1) "")))
 	(match-string 1) "")))
 
 
@@ -8441,7 +8441,7 @@ according to FMT (default from `org-email-link-description-format')."
       ;; We are using a headline, clean up garbage in there.
       ;; We are using a headline, clean up garbage in there.
       (if (string-match org-todo-regexp s)
       (if (string-match org-todo-regexp s)
 	  (setq s (replace-match "" t t s)))
 	  (setq s (replace-match "" t t s)))
-      (if (string-match (org-re ":[[:alnum:]_@:]+:[ \t]*$") s)
+      (if (string-match (org-re ":[[:alnum:]_@#%:]+:[ \t]*$") s)
 	  (setq s (replace-match "" t t s)))
 	  (setq s (replace-match "" t t s)))
       (setq s (org-trim s))
       (setq s (org-trim s))
       (if (string-match (concat "^\\(" org-quote-string "\\|"
       (if (string-match (concat "^\\(" org-quote-string "\\|"
@@ -9057,7 +9057,7 @@ application the system uses for this file type."
 	    (setq type (match-string 1) path (match-string 2))
 	    (setq type (match-string 1) path (match-string 2))
 	    (throw 'match t)))
 	    (throw 'match t)))
 	(save-excursion
 	(save-excursion
-	  (when (org-in-regexp (org-re "\\(:[[:alnum:]_@:]+\\):[ \t]*$"))
+	  (when (org-in-regexp (org-re "\\(:[[:alnum:]_@#%:]+\\):[ \t]*$"))
 	    (setq type "tags"
 	    (setq type "tags"
 		  path (match-string 1))
 		  path (match-string 1))
 	    (while (string-match ":" path)
 	    (while (string-match ":" path)
@@ -9411,7 +9411,7 @@ in all files.  If AVOID-POS is given, ignore matches near that position."
       (when (equal (string-to-char s) ?*)
       (when (equal (string-to-char s) ?*)
 	;; Anchor on headlines, post may include tags.
 	;; Anchor on headlines, post may include tags.
 	(setq pre "^\\*+[ \t]+\\(?:\\sw+\\)?[ \t]*"
 	(setq pre "^\\*+[ \t]+\\(?:\\sw+\\)?[ \t]*"
-	      post (org-re "[ \t]*\\(?:[ \t]+:[[:alnum:]_@:+]:[ \t]*\\)?$")
+	      post (org-re "[ \t]*\\(?:[ \t]+:[[:alnum:]_@#%:+]:[ \t]*\\)?$")
 	      s (substring s 1)))
 	      s (substring s 1)))
       (remove-text-properties
       (remove-text-properties
        0 (length s)
        0 (length s)
@@ -10591,7 +10591,7 @@ At all other locations, this simply calls the value of
      (let* ((a nil)
      (let* ((a nil)
 	    (end (point))
 	    (end (point))
 	    (beg1 (save-excursion
 	    (beg1 (save-excursion
-		    (skip-chars-backward (org-re "[:alnum:]_@"))
+		    (skip-chars-backward (org-re "[:alnum:]_@#%"))
 		    (point)))
 		    (point)))
 	    (beg (save-excursion
 	    (beg (save-excursion
 		   (skip-chars-backward "a-zA-Z0-9_:$")
 		   (skip-chars-backward "a-zA-Z0-9_:$")
@@ -12218,7 +12218,7 @@ only lines with a TODO keyword are included in the output."
   (let* ((re (concat "^" outline-regexp " *\\(\\<\\("
   (let* ((re (concat "^" outline-regexp " *\\(\\<\\("
 		     (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
 		     (mapconcat 'regexp-quote org-todo-keywords-1 "\\|")
 		     (org-re
 		     (org-re
-		      "\\>\\)\\)? *\\(.*?\\)\\(:[[:alnum:]_@:]+:\\)?[ \t]*$")))
+		      "\\>\\)\\)? *\\(.*?\\)\\(:[[:alnum:]_@#%:]+:\\)?[ \t]*$")))
 	 (props (list 'face 'default
 	 (props (list 'face 'default
 		      'done-face 'org-agenda-done
 		      'done-face 'org-agenda-done
 		      'undone-face 'default
 		      'undone-face 'default
@@ -12418,7 +12418,7 @@ also TODO lines."
 
 
   ;; Parse the string and create a lisp form
   ;; Parse the string and create a lisp form
   (let ((match0 match)
   (let ((match0 match)
-	(re (org-re "^&?\\([-+:]\\)?\\({[^}]+}\\|LEVEL\\([<=>]\\{1,2\\}\\)\\([0-9]+\\)\\|\\(\\(?:[[:alnum:]_]+\\(?:\\\\-\\)*\\)+\\)\\([<>=]\\{1,2\\}\\)\\({[^}]+}\\|\"[^\"]*\"\\|-?[.0-9]+\\(?:[eE][-+]?[0-9]+\\)?\\)\\|[[:alnum:]_@]+\\)"))
+	(re (org-re "^&?\\([-+:]\\)?\\({[^}]+}\\|LEVEL\\([<=>]\\{1,2\\}\\)\\([0-9]+\\)\\|\\(\\(?:[[:alnum:]_]+\\(?:\\\\-\\)*\\)+\\)\\([<>=]\\{1,2\\}\\)\\({[^}]+}\\|\"[^\"]*\"\\|-?[.0-9]+\\(?:[eE][-+]?[0-9]+\\)?\\)\\|[[:alnum:]_@#%]+\\)"))
 	minus tag mm
 	minus tag mm
 	tagsmatch todomatch tagsmatcher todomatcher kwd matcher
 	tagsmatch todomatch tagsmatcher todomatcher kwd matcher
 	orterms term orlist re-p str-p level-p level-op time-p
 	orterms term orlist re-p str-p level-p level-op time-p
@@ -12448,7 +12448,7 @@ also TODO lines."
 			   (equal (match-string 1 term) "-"))
 			   (equal (match-string 1 term) "-"))
 		tag (save-match-data (replace-regexp-in-string
 		tag (save-match-data (replace-regexp-in-string
 				      "\\\\-" "-"
 				      "\\\\-" "-"
-				      (match-string 2 term)))				      
+				      (match-string 2 term)))
 		re-p (equal (string-to-char tag) ?{)
 		re-p (equal (string-to-char tag) ?{)
 		level-p (match-end 4)
 		level-p (match-end 4)
 		prop-p (match-end 5)
 		prop-p (match-end 5)
@@ -12627,7 +12627,7 @@ ignore inherited ones."
 		    (while (not (equal lastpos (point)))
 		    (while (not (equal lastpos (point)))
 		      (setq lastpos (point))
 		      (setq lastpos (point))
 		      (when (looking-at
 		      (when (looking-at
-			     (org-re "[^\r\n]+?:\\([[:alnum:]_@:]+\\):[ \t]*$"))
+			     (org-re "[^\r\n]+?:\\([[:alnum:]_@#%:]+\\):[ \t]*$"))
 			(setq ltags (org-split-string
 			(setq ltags (org-split-string
 				     (org-match-string-no-properties 1) ":"))
 				     (org-match-string-no-properties 1) ":"))
 			(when parent
 			(when parent
@@ -12654,7 +12654,7 @@ If ONOFF is `on' or `off', don't toggle but set to this state."
   (let (res current)
   (let (res current)
     (save-excursion
     (save-excursion
       (org-back-to-heading t)
       (org-back-to-heading t)
-      (if (re-search-forward (org-re "[ \t]:\\([[:alnum:]_@:]+\\):[ \t]*$")
+      (if (re-search-forward (org-re "[ \t]:\\([[:alnum:]_@#%:]+\\):[ \t]*$")
 			     (point-at-eol) t)
 			     (point-at-eol) t)
 	  (progn
 	  (progn
 	    (setq current (match-string 1))
 	    (setq current (match-string 1))
@@ -12684,7 +12684,7 @@ If ONOFF is `on' or `off', don't toggle but set to this state."
   ;; Assumes that this is a headline
   ;; Assumes that this is a headline
   (let ((pos (point)) (col (current-column)) ncol tags-l p)
   (let ((pos (point)) (col (current-column)) ncol tags-l p)
     (beginning-of-line 1)
     (beginning-of-line 1)
-    (if	(and (looking-at (org-re ".*?\\([ \t]+\\)\\(:[[:alnum:]_@:]+:\\)[ \t]*$"))
+    (if	(and (looking-at (org-re ".*?\\([ \t]+\\)\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$"))
 	     (< pos (match-beginning 2)))
 	     (< pos (match-beginning 2)))
 	(progn
 	(progn
 	  (setq tags-l (- (match-end 2) (match-beginning 2)))
 	  (setq tags-l (- (match-end 2) (match-beginning 2)))
@@ -12804,7 +12804,7 @@ With prefix ARG, realign all tags in headings in the current buffer."
 
 
       (if org-tags-sort-function
       (if org-tags-sort-function
       	  (setq tags (mapconcat 'identity
       	  (setq tags (mapconcat 'identity
-      				(sort (org-split-string tags (org-re "[^[:alnum:]_@]+"))
+      				(sort (org-split-string tags (org-re "[^[:alnum:]_@#%]+"))
       				      org-tags-sort-function) ":")))
       				      org-tags-sort-function) ":")))
 
 
       (if (string-match "\\`[\t ]*\\'" tags)
       (if (string-match "\\`[\t ]*\\'" tags)
@@ -12961,7 +12961,7 @@ Returns the new tags string, or nil to not change the current settings."
     (save-excursion
     (save-excursion
       (beginning-of-line 1)
       (beginning-of-line 1)
       (if (looking-at
       (if (looking-at
-	   (org-re ".*[ \t]\\(:[[:alnum:]_@:]+:\\)[ \t]*$"))
+	   (org-re ".*[ \t]\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$"))
 	  (setq ov-start (match-beginning 1)
 	  (setq ov-start (match-beginning 1)
 		ov-end (match-end 1)
 		ov-end (match-end 1)
 		ov-prefix "")
 		ov-prefix "")
@@ -13111,7 +13111,7 @@ Returns the new tags string, or nil to not change the current settings."
 		(org-fast-tag-insert "Current" current c-face)
 		(org-fast-tag-insert "Current" current c-face)
 		(org-set-current-tags-overlay current ov-prefix)
 		(org-set-current-tags-overlay current ov-prefix)
 		(while (re-search-forward
 		(while (re-search-forward
-			(org-re "\\[.\\] \\([[:alnum:]_@]+\\)") nil t)
+			(org-re "\\[.\\] \\([[:alnum:]_@#%]+\\)") nil t)
 		  (setq tg (match-string 1))
 		  (setq tg (match-string 1))
 		  (add-text-properties
 		  (add-text-properties
 		   (match-beginning 1) (match-end 1)
 		   (match-beginning 1) (match-end 1)
@@ -13132,7 +13132,7 @@ Returns the new tags string, or nil to not change the current settings."
     (error "Not on a heading"))
     (error "Not on a heading"))
   (save-excursion
   (save-excursion
     (beginning-of-line 1)
     (beginning-of-line 1)
-    (if (looking-at (org-re ".*[ \t]\\(:[[:alnum:]_@:]+:\\)[ \t]*$"))
+    (if (looking-at (org-re ".*[ \t]\\(:[[:alnum:]_@#%:]+:\\)[ \t]*$"))
 	(org-match-string-no-properties 1)
 	(org-match-string-no-properties 1)
       "")))
       "")))
 
 
@@ -13146,7 +13146,7 @@ Returns the new tags string, or nil to not change the current settings."
     (save-excursion
     (save-excursion
       (goto-char (point-min))
       (goto-char (point-min))
       (while (re-search-forward
       (while (re-search-forward
-	      (org-re "[ \t]:\\([[:alnum:]_@:]+\\):[ \t\r\n]") nil t)
+	      (org-re "[ \t]:\\([[:alnum:]_@#%:]+\\):[ \t\r\n]") nil t)
 	(when (equal (char-after (point-at-bol 0)) ?*)
 	(when (equal (char-after (point-at-bol 0)) ?*)
 	  (mapc (lambda (x) (add-to-list 'tags x))
 	  (mapc (lambda (x) (add-to-list 'tags x))
 		(org-split-string (org-match-string-no-properties 1) ":")))))
 		(org-split-string (org-match-string-no-properties 1) ":")))))
@@ -15984,14 +15984,14 @@ Some of the options can be changed using the variable
 	      (unless checkdir ; make sure the directory exists
 	      (unless checkdir ; make sure the directory exists
 		(setq checkdir t)
 		(setq checkdir t)
 		(or (file-directory-p todir) (make-directory todir t)))
 		(or (file-directory-p todir) (make-directory todir t)))
-	      
+
 	      (unless executables-checked
 	      (unless executables-checked
 		(org-check-external-command
 		(org-check-external-command
 		 "latex" "needed to convert LaTeX fragments to images")
 		 "latex" "needed to convert LaTeX fragments to images")
 		(org-check-external-command
 		(org-check-external-command
 		 "dvipng" "needed to convert LaTeX fragments to images")
 		 "dvipng" "needed to convert LaTeX fragments to images")
 		(setq executables-checked t))
 		(setq executables-checked t))
-	      
+
 	      (unless (file-exists-p movefile)
 	      (unless (file-exists-p movefile)
 		(org-create-formula-image
 		(org-create-formula-image
 		 txt movefile opt forbuffer))
 		 txt movefile opt forbuffer))
@@ -17306,7 +17306,7 @@ See the individual commands for more information."
     (call-interactively 'org-open-at-point))
     (call-interactively 'org-open-at-point))
    ((and (org-at-heading-p)
    ((and (org-at-heading-p)
 	 (looking-at
 	 (looking-at
-	  (org-re "\\([ \t]+\\(:[[:alnum:]_@:]+:\\)\\)[ \t]*$")))
+	  (org-re "\\([ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)[ \t]*$")))
     (org-show-entry)
     (org-show-entry)
     (end-of-line 1)
     (end-of-line 1)
     (newline))
     (newline))
@@ -18867,7 +18867,7 @@ beyond the end of the headline."
 	       (t 'end-of-line)))
 	       (t 'end-of-line)))
       (let ((pos (point)))
       (let ((pos (point)))
 	(beginning-of-line 1)
 	(beginning-of-line 1)
-	(if (looking-at (org-re ".*?\\(?:\\([ \t]*\\)\\(:[[:alnum:]_@:]+:\\)?[ \t]*\\)?$"))
+	(if (looking-at (org-re ".*?\\(?:\\([ \t]*\\)\\(:[[:alnum:]_@#%:]+:\\)?[ \t]*\\)?$"))
 	    (if (eq special t)
 	    (if (eq special t)
 		(if (or (< pos (match-beginning 1))
 		(if (or (< pos (match-beginning 1))
 			(= pos (match-end 0)))
 			(= pos (match-end 0)))
@@ -18921,7 +18921,7 @@ depending on context."
 		(not (y-or-n-p "Kill hidden subtree along with headline? ")))
 		(not (y-or-n-p "Kill hidden subtree along with headline? ")))
 	    (error "C-k aborted - would kill hidden subtree")))
 	    (error "C-k aborted - would kill hidden subtree")))
     (call-interactively 'kill-line))
     (call-interactively 'kill-line))
-   ((looking-at (org-re ".*?\\S-\\([ \t]+\\(:[[:alnum:]_@:]+:\\)\\)[ \t]*$"))
+   ((looking-at (org-re ".*?\\S-\\([ \t]+\\(:[[:alnum:]_@#%:]+:\\)\\)[ \t]*$"))
     (kill-region (point) (match-beginning 1))
     (kill-region (point) (match-beginning 1))
     (org-set-tags nil t))
     (org-set-tags nil t))
    (t (kill-region (point) (point-at-eol)))))
    (t (kill-region (point) (point-at-eol)))))