emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* limitation: no tab in my headlines
@ 2012-07-27  8:54 Giovanni Ridolfi
  2012-07-28  9:55 ` Bastien
  0 siblings, 1 reply; 2+ messages in thread
From: Giovanni Ridolfi @ 2012-07-27  8:54 UTC (permalink / raw)
  To: Orgmode

Hello everybody,

Org-mode version 7.8.11 (c8acf8d6957 @ 
GNU Emacs 24.1.1 (i386-mingw-nt6.1.7601) of 2012-06-10 on MARVIN

while killing/yanking text from text files to my org file
I found this limitation: I cannot create a link to a headline
whose text contains a tab.

Editing a file in Org will prevent to insert table in headlines:
(and this is a good thing):

* this is a tab,  press tab
* I get the Message: EMPTY ENTRY 
  this is text I press tab (the text got aligned)

------------------------ let's import a different text file -----
this is file a.txt
this is a tab    tab! (from 13 to 16)
--------------------------------------------------------
copy last line, then transform that line in headline:

** this is a tab    tab! (from 16 to 24)
I transformed the line in a 2nd level headline with C-*
then I try to create a link to the 2nd level headline
C-l
:Messagge: Stored: this is a tab    tab! (from 13 to 16)
Now tab is from 32 to 40, ok

Then I save the link C-c C-l
in the message line I have the link to the headline without tabs, but only with spaces:
file:~/test.org::*this is a tab tab! (from 13 to 16)


However tab is kept in the description part of the link:
[[*this%20is%20a%20tab%20tab!%20(from%2013%20to%2016)][this is a tab    tab! (from 13 to 16)]]

Obviously this link does not refer to the headline
If I click on it, since
 org-link-search-must-match-exact-headline 'query-to-create
Message is:

"No match - create this as a new heading? "

If I customize this variable useing fuzzy search, ("Its value is nil")

the message is:
if: No match

Please, see the backtrace below.


** Substituting tab with %20 does NOT work
as it is now
[[*this%20is%20a%20tab%20tab!%20(from%2013%20to%2016)][this is a tab    tab! (from 13 to 16)]]

** Substituting tab with    does NOT work

[[*this is a tab        tab! (from 13 to 16)][this
 is a tab    tab! (from 13 to 16)]]

** Substituting tab with %09 does NOT work
%09 should be the URL Encode for tab [fn::http://www.tutorialspoint.com/html/html_url_encoding.htm]

[[*this%20is%20a%20tab%09tab!%20(from%2013%20to%2016)][this is a tab    tab! (from 13 to 16)]]

** So 
I know there's not tab in HTML [fn::http://htmltab.kb-creative.net/]

What is the best approach?
- a note in the documentation describing the limitation 

- a patch to enable tabs in links (since it is a corner case I will not
   prod for it)

- a note suggesting to use :ID: property as the link is active
  if it has a :ID:  (see below)

** this is a tab    tab! (from 16 to 24) with wizard-of-ID
:PROPERTIES:
:ID: wizard_of_id
:END:

** link to wizard of id

[[*this%20is%20a%20tab%20tab!%20(from%2016%20to%2024)%20with%20wizard-of-ID][this
 is a tab    tab! (from 16 to 24) with wizard-of-ID]]


  cheers, Giovanni 
---------------------------------------------- Backtrace ---------------------------------


  signal(error ("No match"))
  error("No match")
  (if (or (and (org-search-not-self 1 re0 nil t) (setq type (quote dedicated))) (org-search-not-self 1 re1 nil t) (org-search-not-self 1 re2 nil t) (org-search-not-self 1 re2a nil t) (org-search-not-self 1 re3 nil t) (org-search-not-self 1 re4 nil t) (org-search-not-self 1 re5 nil t)) (goto-char (match-beginning 1)) (goto-char pos) (error "No match"))
  (cond ((eq type (quote org-occur)) (org-occur reall)) ((eq type (quote occur)) (org-do-occur (downcase reall) (quote cleanup))) (t (goto-char (point-min)) (setq type (quote fuzzy)) (if (or (and (org-search-not-self 1 re0 nil t) (setq type (quote dedicated))) (org-search-not-self 1 re1 nil t) (org-search-not-self 1 re2 nil t) (org-search-not-self 1 re2a nil t) (org-search-not-self 1 re3 nil t) (org-search-not-self 1 re4 nil t) (org-search-not-self 1 re5 nil t)) (goto-char (match-beginning 1)) (goto-char pos) (error "No match"))))
  (cond ((run-hook-with-args-until-success (quote org-execute-file-search-functions) s)) ((and (equal (string-to-char s0) 35) (> (length s0) 1) (save-excursion (goto-char (point-min)) (and (re-search-forward (concat "^[     ]*:CUSTOM_ID:[     ]+" (regexp-quote ...) "[     ]*$") nil t) (setq type (quote dedicated) pos (match-beginning 0)))) (goto-char pos) (org-back-to-heading t))) ((save-excursion (goto-char (point-min)) (and (re-search-forward (concat "<<" (regexp-quote s0) ">>") nil t) (setq type (quote dedicated) pos (match-beginning 0)))) (goto-char pos)) ((save-excursion (goto-char (point-min)) (and (re-search-forward (format "^[     ]*#\\+TARGET: %s" (regexp-quote s0)) nil t) (setq type (quote dedicated) pos (match-beginning 0)))) (goto-char pos)) ((save-excursion (goto-char (point-min)) (and (re-search-forward (format "^[     ]*#\\+NAME: %s" (regexp-quote s0)) nil t) (setq type (quote dedicated) pos (match-beginning 0))))
 (goto-char pos)) ((and (string-match "^(\\(.*\\))$" s0) (save-excursion (goto-char (point-min)) (and (re-search-forward (concat "[^[]" (regexp-quote ...)) nil t) (setq type (quote dedicated) pos (1+ (match-beginning 0)))))) (goto-char pos)) ((string-match "^/\\(.*\\)/$" s) (cond ((derived-mode-p (quote org-mode)) (org-occur (match-string 1 s))) (t (org-do-occur (match-string 1 s))))) ((and (derived-mode-p (quote org-mode)) org-link-search-must-match-exact-headline) (and (equal (string-to-char s) 42) (setq s (substring s 1))) (goto-char (point-min)) (cond ((let (case-fold-search) (re-search-forward (format org-complex-heading-regexp-format (regexp-quote s)) nil t)) (setq type (quote dedicated)) (goto-char (match-beginning 0))) ((and (not org-link-search-inhibit-query) (eq org-link-search-must-match-exact-headline (quote query-to-create)) (y-or-n-p "No match - create this as a new heading? ")) (goto-char (point-max)) (or (bolp) (newline)) (insert "* " s
 "\n") (beginning-of-line 0)) (t (goto-char pos) (error "No match")))) (t (when (equal (string-to-char s) 42) (setq pre "^\\*+[     ]+\\(?:\\sw+\\)?[     ]*" post (org-re "[     ]*\\(?:[     ]+:[[:alnum:]_@#%:+]:[     ]*\\)?$") s (substring s 1))) (remove-text-properties 0 (length s) (quote (face nil mouse-face nil keymap nil fontified nil)) s) (setq words (org-split-string s "[ \n
    ]+") re0 (concat "\\(<<" (regexp-quote s0) ">>\\)") re2 (concat markers "\\(" (mapconcat (quote downcase) words "[     ]+") "\\)" markers) re2a_ (concat "\\(" (mapconcat (quote downcase) words "[     
\n]+") "\\)[     
\n]") re2a (concat "[     
\n]" re2a_) re4_ (concat "\\(" (mapconcat (quote downcase) words "[^a-zA-Z_
\n]+") "\\)[^a-zA-Z_]") re4 (concat "[^a-zA-Z_]" re4_) re1 (concat pre re2 post) re3 (concat pre (if pre re4_ re4) post) re5 (concat pre ".*" re4) re2 (concat pre re2) re2a (concat pre (if pre re2a_ re2a)) re4 (concat pre (if pre re4_ re4)) reall (concat "\\(" re0 "\\)\\|\\(" re1 "\\)\\|\\(" re2 "\\)\\|\\(" re3 "\\)\\|\\(" re4 "\\)\\|\\(" re5 "\\)")) (cond ((eq type (quote org-occur)) (org-occur reall)) ((eq type (quote occur)) (org-do-occur (downcase reall) (quote cleanup))) (t (goto-char (point-min)) (setq type (quote fuzzy)) (if (or (and (org-search-not-self 1 re0 nil t) (setq type ...)) (org-search-not-self 1 re1 nil t) (org-search-not-self 1 re2 nil t) (org-search-not-self 1 re2a nil t) (org-search-not-self 1 re3 nil t) (org-search-not-self 1 re4 nil t) (org-search-not-self 1 re5 nil t)) (goto-char (match-beginning 1)) (goto-char pos) (error "No match"))))))
  (let ((case-fold-search t) (s0 (mapconcat (quote identity) (org-split-string s "[     
\n]+") " ")) (markers (concat "\\(?:" (mapconcat (lambda (x) (regexp-quote (car x))) (append (quote (... ... ... ...)) org-emphasis-alist) "\\|") "\\)")) (pos (point)) (pre nil) (post nil) words re0 re1 re2 re3 re4_ re4 re5 re2a re2a_ reall) (cond ((run-hook-with-args-until-success (quote org-execute-file-search-functions) s)) ((and (equal (string-to-char s0) 35) (> (length s0) 1) (save-excursion (goto-char (point-min)) (and (re-search-forward (concat "^[     ]*:CUSTOM_ID:[     ]+" ... "[     ]*$") nil t) (setq type (quote dedicated) pos (match-beginning 0)))) (goto-char pos) (org-back-to-heading t))) ((save-excursion (goto-char (point-min)) (and (re-search-forward (concat "<<" (regexp-quote s0) ">>") nil t) (setq type (quote dedicated) pos (match-beginning 0)))) (goto-char pos)) ((save-excursion (goto-char (point-min)) (and (re-search-forward (format "^[     ]*#\\+TARGET: %s" (regexp-quote s0)) nil t) (setq type (quote dedicated) pos
 (match-beginning 0)))) (goto-char pos)) ((save-excursion (goto-char (point-min)) (and (re-search-forward (format "^[     ]*#\\+NAME: %s" (regexp-quote s0)) nil t) (setq type (quote dedicated) pos (match-beginning 0)))) (goto-char pos)) ((and (string-match "^(\\(.*\\))$" s0) (save-excursion (goto-char (point-min)) (and (re-search-forward (concat "[^[]" ...) nil t) (setq type (quote dedicated) pos (1+ ...))))) (goto-char pos)) ((string-match "^/\\(.*\\)/$" s) (cond ((derived-mode-p (quote org-mode)) (org-occur (match-string 1 s))) (t (org-do-occur (match-string 1 s))))) ((and (derived-mode-p (quote org-mode)) org-link-search-must-match-exact-headline) (and (equal (string-to-char s) 42) (setq s (substring s 1))) (goto-char (point-min)) (cond ((let (case-fold-search) (re-search-forward (format org-complex-heading-regexp-format ...) nil t)) (setq type (quote dedicated)) (goto-char (match-beginning 0))) ((and (not org-link-search-inhibit-query) (eq
 org-link-search-must-match-exact-headline (quote query-to-create)) (y-or-n-p "No match - create this as a new heading? ")) (goto-char (point-max)) (or (bolp) (newline)) (insert "* " s "\n") (beginning-of-line 0)) (t (goto-char pos) (error "No match")))) (t (when (equal (string-to-char s) 42) (setq pre "^\\*+[     ]+\\(?:\\sw+\\)?[     ]*" post (org-re "[     ]*\\(?:[     ]+:[[:alnum:]_@#%:+]:[     ]*\\)?$") s (substring s 1))) (remove-text-properties 0 (length s) (quote (face nil mouse-face nil keymap nil fontified nil)) s) (setq words (org-split-string s "[ \n
    ]+") re0 (concat "\\(<<" (regexp-quote s0) ">>\\)") re2 (concat markers "\\(" (mapconcat (quote downcase) words "[     ]+") "\\)" markers) re2a_ (concat "\\(" (mapconcat (quote downcase) words "[     
\n]+") "\\)[     
\n]") re2a (concat "[     
\n]" re2a_) re4_ (concat "\\(" (mapconcat (quote downcase) words "[^a-zA-Z_
\n]+") "\\)[^a-zA-Z_]") re4 (concat "[^a-zA-Z_]" re4_) re1 (concat pre re2 post) re3 (concat pre (if pre re4_ re4) post) re5 (concat pre ".*" re4) re2 (concat pre re2) re2a (concat pre (if pre re2a_ re2a)) re4 (concat pre (if pre re4_ re4)) reall (concat "\\(" re0 "\\)\\|\\(" re1 "\\)\\|\\(" re2 "\\)\\|\\(" re3 "\\)\\|\\(" re4 "\\)\\|\\(" re5 "\\)")) (cond ((eq type (quote org-occur)) (org-occur reall)) ((eq type (quote occur)) (org-do-occur (downcase reall) (quote cleanup))) (t (goto-char (point-min)) (setq type (quote fuzzy)) (if (or (and ... ...) (org-search-not-self 1 re1 nil t) (org-search-not-self 1 re2 nil t) (org-search-not-self 1 re2a nil t) (org-search-not-self 1 re3 nil t) (org-search-not-self 1 re4 nil t) (org-search-not-self 1 re5 nil t)) (goto-char (match-beginning 1)) (goto-char pos) (error "No match")))))) (and (derived-mode-p (quote org-mode)) (not stealth) (org-show-context (quote link-search))) type)
  org-link-search(#("*this is a tab tab! (from 13 to 16)" 0 35 (org-attr nil)) nil 1243)
  eval((org-link-search #("*this is a tab tab! (from 13 to 16)" 0 35 (org-attr nil)) nil 1243))
  (progn (widen) (eval cmd))
  (condition-case nil (let ((org-link-search-inhibit-query t)) (eval cmd)) (error (progn (widen) (eval cmd))))
  (let ((cmd (\` (org-link-search (\, path) (\, (cond (... ...) (... ...) (t nil))) (\, pos))))) (condition-case nil (let ((org-link-search-inhibit-query t)) (eval cmd)) (error (progn (widen) (eval cmd)))))
  (cond ((assoc type org-link-protocols) (funcall (nth 1 (assoc type org-link-protocols)) path)) ((equal type "mailto") (let ((cmd (car org-link-mailto-program)) (args (cdr org-link-mailto-program)) args1 (address path) (subject "") a) (if (string-match "\\(.*\\)::\\(.*\\)" path) (setq address (match-string 1 path) subject (org-link-escape (match-string 2 path)))) (while args (cond ((not (stringp ...)) (push (pop args) args1)) (t (setq a (pop args)) (if (string-match "%a" a) (setq a ...)) (if (string-match "%s" a) (setq a ...)) (push a args1)))) (apply cmd (nreverse args1)))) ((member type (quote ("http" "https" "ftp" "news"))) (browse-url (concat type ":" (if (org-string-match-p "[[:nonascii:] ]" path) (org-link-escape path org-link-escape-chars-browser) path)))) ((string= type "doi") (browse-url (concat org-doi-server-url (if (org-string-match-p "[[:nonascii:] ]" path) (org-link-escape path org-link-escape-chars-browser) path)))) ((member type (quote
 ("message"))) (browse-url (concat type ":" path))) ((string= type "tags") (org-tags-view arg path)) ((string= type "tree-match") (org-occur (concat "\\[" (regexp-quote path) "\\]"))) ((string= type "file") (if (string-match "::\\([0-9]+\\)\\'" path) (setq line (string-to-number (match-string 1 path)) path (substring path 0 (match-beginning 0))) (if (string-match "::\\(.+\\)\\'" path) (setq search (match-string 1 path) path (substring path 0 (match-beginning 0))))) (if (string-match "[*?{]" (file-name-nondirectory path)) (dired path) (org-open-file path arg line search))) ((string= type "shell") (let ((cmd path)) (if (or (and (not (string= org-confirm-shell-link-not-regexp "")) (string-match org-confirm-shell-link-not-regexp cmd)) (not org-confirm-shell-link-function) (funcall org-confirm-shell-link-function (format "Execute \"%s\" in shell? " (org-add-props cmd nil ... ...)))) (progn (message "Executing %s" cmd) (shell-command cmd)) (error "Abort"))))
 ((string= type "elisp") (let ((cmd path)) (if (or (and (not (string= org-confirm-elisp-link-not-regexp "")) (string-match org-confirm-elisp-link-not-regexp cmd)) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function (format "Execute \"%s\" as elisp? " (org-add-props cmd nil ... ...)))) (message "%s => %s" cmd (if (equal (string-to-char cmd) 40) (eval (read cmd)) (call-interactively (read cmd)))) (error "Abort")))) ((and (string= type "thisfile") (run-hook-with-args-until-success (quote org-open-link-functions) path))) ((string= type "thisfile") (if arg (switch-to-buffer-other-window (org-get-buffer-for-internal-link (current-buffer))) (org-mark-ring-push)) (let ((cmd (\` (org-link-search (\, path) (\, ...) (\, pos))))) (condition-case nil (let ((org-link-search-inhibit-query t)) (eval cmd)) (error (progn (widen) (eval cmd)))))) (t (browse-url-at-point)))
  (save-current-buffer (set-buffer (or reference-buffer (current-buffer))) (if (string-match " +\\'" path) (setq path (replace-match "" t t path))) (if (and org-link-translation-function (fboundp org-link-translation-function)) (let ((tmp (funcall org-link-translation-function type path))) (setq type (car tmp) path (cdr tmp)))) (cond ((assoc type org-link-protocols) (funcall (nth 1 (assoc type org-link-protocols)) path)) ((equal type "mailto") (let ((cmd (car org-link-mailto-program)) (args (cdr org-link-mailto-program)) args1 (address path) (subject "") a) (if (string-match "\\(.*\\)::\\(.*\\)" path) (setq address (match-string 1 path) subject (org-link-escape (match-string 2 path)))) (while args (cond ((not ...) (push ... args1)) (t (setq a ...) (if ... ...) (if ... ...) (push a args1)))) (apply cmd (nreverse args1)))) ((member type (quote ("http" "https" "ftp" "news"))) (browse-url (concat type ":" (if (org-string-match-p "[[:nonascii:] ]" path)
 (org-link-escape path org-link-escape-chars-browser) path)))) ((string= type "doi") (browse-url (concat org-doi-server-url (if (org-string-match-p "[[:nonascii:] ]" path) (org-link-escape path org-link-escape-chars-browser) path)))) ((member type (quote ("message"))) (browse-url (concat type ":" path))) ((string= type "tags") (org-tags-view arg path)) ((string= type "tree-match") (org-occur (concat "\\[" (regexp-quote path) "\\]"))) ((string= type "file") (if (string-match "::\\([0-9]+\\)\\'" path) (setq line (string-to-number (match-string 1 path)) path (substring path 0 (match-beginning 0))) (if (string-match "::\\(.+\\)\\'" path) (setq search (match-string 1 path) path (substring path 0 (match-beginning 0))))) (if (string-match "[*?{]" (file-name-nondirectory path)) (dired path) (org-open-file path arg line search))) ((string= type "shell") (let ((cmd path)) (if (or (and (not ...) (string-match org-confirm-shell-link-not-regexp cmd)) (not
 org-confirm-shell-link-function) (funcall org-confirm-shell-link-function (format "Execute \"%s\" in shell? " ...))) (progn (message "Executing %s" cmd) (shell-command cmd)) (error "Abort")))) ((string= type "elisp") (let ((cmd path)) (if (or (and (not ...) (string-match org-confirm-elisp-link-not-regexp cmd)) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function (format "Execute \"%s\" as elisp? " ...))) (message "%s => %s" cmd (if (equal ... 40) (eval ...) (call-interactively ...))) (error "Abort")))) ((and (string= type "thisfile") (run-hook-with-args-until-success (quote org-open-link-functions) path))) ((string= type "thisfile") (if arg (switch-to-buffer-other-window (org-get-buffer-for-internal-link (current-buffer))) (org-mark-ring-push)) (let ((cmd (\` (org-link-search ... ... ...)))) (condition-case nil (let ((org-link-search-inhibit-query t)) (eval cmd)) (error (progn (widen) (eval cmd)))))) (t (browse-url-at-point))))
  (with-current-buffer (or reference-buffer (current-buffer)) (if (string-match " +\\'" path) (setq path (replace-match "" t t path))) (if (and org-link-translation-function (fboundp org-link-translation-function)) (let ((tmp (funcall org-link-translation-function type path))) (setq type (car tmp) path (cdr tmp)))) (cond ((assoc type org-link-protocols) (funcall (nth 1 (assoc type org-link-protocols)) path)) ((equal type "mailto") (let ((cmd (car org-link-mailto-program)) (args (cdr org-link-mailto-program)) args1 (address path) (subject "") a) (if (string-match "\\(.*\\)::\\(.*\\)" path) (setq address (match-string 1 path) subject (org-link-escape (match-string 2 path)))) (while args (cond ((not ...) (push ... args1)) (t (setq a ...) (if ... ...) (if ... ...) (push a args1)))) (apply cmd (nreverse args1)))) ((member type (quote ("http" "https" "ftp" "news"))) (browse-url (concat type ":" (if (org-string-match-p "[[:nonascii:] ]" path) (org-link-escape
 path org-link-escape-chars-browser) path)))) ((string= type "doi") (browse-url (concat org-doi-server-url (if (org-string-match-p "[[:nonascii:] ]" path) (org-link-escape path org-link-escape-chars-browser) path)))) ((member type (quote ("message"))) (browse-url (concat type ":" path))) ((string= type "tags") (org-tags-view arg path)) ((string= type "tree-match") (org-occur (concat "\\[" (regexp-quote path) "\\]"))) ((string= type "file") (if (string-match "::\\([0-9]+\\)\\'" path) (setq line (string-to-number (match-string 1 path)) path (substring path 0 (match-beginning 0))) (if (string-match "::\\(.+\\)\\'" path) (setq search (match-string 1 path) path (substring path 0 (match-beginning 0))))) (if (string-match "[*?{]" (file-name-nondirectory path)) (dired path) (org-open-file path arg line search))) ((string= type "shell") (let ((cmd path)) (if (or (and (not ...) (string-match org-confirm-shell-link-not-regexp cmd)) (not
 org-confirm-shell-link-function) (funcall org-confirm-shell-link-function (format "Execute \"%s\" in shell? " ...))) (progn (message "Executing %s" cmd) (shell-command cmd)) (error "Abort")))) ((string= type "elisp") (let ((cmd path)) (if (or (and (not ...) (string-match org-confirm-elisp-link-not-regexp cmd)) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function (format "Execute \"%s\" as elisp? " ...))) (message "%s => %s" cmd (if (equal ... 40) (eval ...) (call-interactively ...))) (error "Abort")))) ((and (string= type "thisfile") (run-hook-with-args-until-success (quote org-open-link-functions) path))) ((string= type "thisfile") (if arg (switch-to-buffer-other-window (org-get-buffer-for-internal-link (current-buffer))) (org-mark-ring-push)) (let ((cmd (\` (org-link-search ... ... ...)))) (condition-case nil (let ((org-link-search-inhibit-query t)) (eval cmd)) (error (progn (widen) (eval cmd)))))) (t (browse-url-at-point))))
  (let (type path link line search (pos (point))) (catch (quote match) (save-excursion (skip-chars-forward "^]\n
") (when (org-in-regexp org-bracket-link-regexp 1) (setq link (org-extract-attributes (org-link-unescape (org-match-string-no-properties 1)))) (while (string-match " *\n *" link) (setq link (replace-match " " t t link))) (setq link (org-link-expand-abbrev link)) (cond ((or (file-name-absolute-p link) (string-match "^\\.\\.?/" link)) (setq type "file" path link)) ((string-match org-link-re-with-space3 link) (setq type (match-string 1 link) path (match-string 2 link))) (t (setq type "thisfile" path link))) (throw (quote match) t))) (when (get-text-property (point) (quote org-linked-text)) (setq type "thisfile" pos (if (get-text-property (1+ (point)) (quote org-linked-text)) (1+ (point)) (point)) path (buffer-substring (or (previous-single-property-change pos (quote org-linked-text)) (point-min)) (or (next-single-property-change pos (quote org-linked-text)) (point-max)))) (throw (quote match) t)) (save-excursion (when (or (org-in-regexp org-angle-link-re)
 (org-in-regexp org-plain-link-re)) (setq type (match-string 1) path (org-link-unescape (match-string 2))) (throw (quote match) t))) (save-excursion (when (org-in-regexp (org-re "\\(:[[:alnum:]_@#%:]+\\):[     ]*$")) (setq type "tags" path (match-string 1)) (while (string-match ":" path) (setq path (replace-match "+" t t path))) (throw (quote match) t))) (when (org-in-regexp "<\\([^><\n]+\\)>") (setq type "tree-match" path (match-string 1)) (throw (quote match) t))) (unless path (error "No link found")) (with-current-buffer (or reference-buffer (current-buffer)) (if (string-match " +\\'" path) (setq path (replace-match "" t t path))) (if (and org-link-translation-function (fboundp org-link-translation-function)) (let ((tmp (funcall org-link-translation-function type path))) (setq type (car tmp) path (cdr tmp)))) (cond ((assoc type org-link-protocols) (funcall (nth 1 (assoc type org-link-protocols)) path)) ((equal type "mailto") (let ((cmd (car
 org-link-mailto-program)) (args (cdr org-link-mailto-program)) args1 (address path) (subject "") a) (if (string-match "\\(.*\\)::\\(.*\\)" path) (setq address (match-string 1 path) subject (org-link-escape ...))) (while args (cond (... ...) (t ... ... ... ...))) (apply cmd (nreverse args1)))) ((member type (quote ("http" "https" "ftp" "news"))) (browse-url (concat type ":" (if (org-string-match-p "[[:nonascii:] ]" path) (org-link-escape path org-link-escape-chars-browser) path)))) ((string= type "doi") (browse-url (concat org-doi-server-url (if (org-string-match-p "[[:nonascii:] ]" path) (org-link-escape path org-link-escape-chars-browser) path)))) ((member type (quote ("message"))) (browse-url (concat type ":" path))) ((string= type "tags") (org-tags-view arg path)) ((string= type "tree-match") (org-occur (concat "\\[" (regexp-quote path) "\\]"))) ((string= type "file") (if (string-match "::\\([0-9]+\\)\\'" path) (setq line (string-to-number
 (match-string 1 path)) path (substring path 0 (match-beginning 0))) (if (string-match "::\\(.+\\)\\'" path) (setq search (match-string 1 path) path (substring path 0 ...)))) (if (string-match "[*?{]" (file-name-nondirectory path)) (dired path) (org-open-file path arg line search))) ((string= type "shell") (let ((cmd path)) (if (or (and ... ...) (not org-confirm-shell-link-function) (funcall org-confirm-shell-link-function ...)) (progn (message "Executing %s" cmd) (shell-command cmd)) (error "Abort")))) ((string= type "elisp") (let ((cmd path)) (if (or (and ... ...) (not org-confirm-elisp-link-function) (funcall org-confirm-elisp-link-function ...)) (message "%s => %s" cmd (if ... ... ...)) (error "Abort")))) ((and (string= type "thisfile") (run-hook-with-args-until-success (quote org-open-link-functions) path))) ((string= type "thisfile") (if arg (switch-to-buffer-other-window (org-get-buffer-for-internal-link (current-buffer))) (org-mark-ring-push))
 (let ((cmd (\` ...))) (condition-case nil (let (...) (eval cmd)) (error (progn ... ...))))) (t (browse-url-at-point)))))
  (cond ((and (org-at-heading-p) (not (org-at-timestamp-p t)) (not (org-in-regexp (concat org-plain-link-re "\\|" org-bracket-link-regexp "\\|" org-angle-link-re "\\|" "[     ]:[^     \n]+:[     ]*$"))) (not (get-text-property (point) (quote org-linked-text)))) (or (org-offer-links-in-entry arg) (progn (require (quote org-attach)) (org-attach-reveal (quote if-exists))))) ((run-hook-with-args-until-success (quote org-open-at-point-functions))) ((org-at-timestamp-p t) (org-follow-timestamp-link)) ((and (or (org-footnote-at-reference-p) (org-footnote-at-definition-p)) (not (org-in-regexp org-bracket-link-regexp))) (org-footnote-action)) (t (let (type path link line search (pos (point))) (catch (quote match) (save-excursion (skip-chars-forward "^]\n
") (when (org-in-regexp org-bracket-link-regexp 1) (setq link (org-extract-attributes ...)) (while (string-match " *\n *" link) (setq link ...)) (setq link (org-link-expand-abbrev link)) (cond (... ...) (... ...) (t ...)) (throw (quote match) t))) (when (get-text-property (point) (quote org-linked-text)) (setq type "thisfile" pos (if (get-text-property ... ...) (1+ ...) (point)) path (buffer-substring (or ... ...) (or ... ...))) (throw (quote match) t)) (save-excursion (when (or (org-in-regexp org-angle-link-re) (org-in-regexp org-plain-link-re)) (setq type (match-string 1) path (org-link-unescape ...)) (throw (quote match) t))) (save-excursion (when (org-in-regexp (org-re "\\(:[[:alnum:]_@#%:]+\\):[     ]*$")) (setq type "tags" path (match-string 1)) (while (string-match ":" path) (setq path ...)) (throw (quote match) t))) (when (org-in-regexp "<\\([^><\n]+\\)>") (setq type "tree-match" path (match-string 1)) (throw (quote match) t))) (unless path
 (error "No link found")) (with-current-buffer (or reference-buffer (current-buffer)) (if (string-match " +\\'" path) (setq path (replace-match "" t t path))) (if (and org-link-translation-function (fboundp org-link-translation-function)) (let ((tmp ...)) (setq type (car tmp) path (cdr tmp)))) (cond ((assoc type org-link-protocols) (funcall (nth 1 ...) path)) ((equal type "mailto") (let (... ... args1 ... ... a) (if ... ...) (while args ...) (apply cmd ...))) ((member type (quote ...)) (browse-url (concat type ":" ...))) ((string= type "doi") (browse-url (concat org-doi-server-url ...))) ((member type (quote ...)) (browse-url (concat type ":" path))) ((string= type "tags") (org-tags-view arg path)) ((string= type "tree-match") (org-occur (concat "\\[" ... "\\]"))) ((string= type "file") (if (string-match "::\\([0-9]+\\)\\'" path) (setq line ... path ...) (if ... ...)) (if (string-match "[*?{]" ...) (dired path) (org-open-file path arg line search)))
 ((string= type "shell") (let (...) (if ... ... ...))) ((string= type "elisp") (let (...) (if ... ... ...))) ((and (string= type "thisfile") (run-hook-with-args-until-success ... path))) ((string= type "thisfile") (if arg (switch-to-buffer-other-window ...) (org-mark-ring-push)) (let (...) (condition-case nil ... ...))) (t (browse-url-at-point)))))))
  (if (call-interactively (function org-babel-open-src-block-result)) nil (org-load-modules-maybe) (move-marker org-open-link-marker (point)) (setq org-window-config-before-follow-link (current-window-configuration)) (org-remove-occur-highlights nil nil t) (cond ((and (org-at-heading-p) (not (org-at-timestamp-p t)) (not (org-in-regexp (concat org-plain-link-re "\\|" org-bracket-link-regexp "\\|" org-angle-link-re "\\|" "[     ]:[^     \n]+:[     ]*$"))) (not (get-text-property (point) (quote org-linked-text)))) (or (org-offer-links-in-entry arg) (progn (require (quote org-attach)) (org-attach-reveal (quote if-exists))))) ((run-hook-with-args-until-success (quote org-open-at-point-functions))) ((org-at-timestamp-p t) (org-follow-timestamp-link)) ((and (or (org-footnote-at-reference-p) (org-footnote-at-definition-p)) (not (org-in-regexp org-bracket-link-regexp))) (org-footnote-action)) (t (let (type path link line search (pos (point))) (catch
 (quote match) (save-excursion (skip-chars-forward "^]\n
") (when (org-in-regexp org-bracket-link-regexp 1) (setq link ...) (while ... ...) (setq link ...) (cond ... ... ...) (throw ... t))) (when (get-text-property (point) (quote org-linked-text)) (setq type "thisfile" pos (if ... ... ...) path (buffer-substring ... ...)) (throw (quote match) t)) (save-excursion (when (or ... ...) (setq type ... path ...) (throw ... t))) (save-excursion (when (org-in-regexp ...) (setq type "tags" path ...) (while ... ...) (throw ... t))) (when (org-in-regexp "<\\([^><\n]+\\)>") (setq type "tree-match" path (match-string 1)) (throw (quote match) t))) (unless path (error "No link found")) (with-current-buffer (or reference-buffer (current-buffer)) (if (string-match " +\\'" path) (setq path (replace-match "" t t path))) (if (and org-link-translation-function (fboundp org-link-translation-function)) (let (...) (setq type ... path ...))) (cond ((assoc type org-link-protocols) (funcall ... path)) ((equal type "mailto") (let ... ...
 ... ...)) ((member type ...) (browse-url ...)) ((string= type "doi") (browse-url ...)) ((member type ...) (browse-url ...)) ((string= type "tags") (org-tags-view arg path)) ((string= type "tree-match") (org-occur ...)) ((string= type "file") (if ... ... ...) (if ... ... ...)) ((string= type "shell") (let ... ...)) ((string= type "elisp") (let ... ...)) ((and ... ...)) ((string= type "thisfile") (if arg ... ...) (let ... ...)) (t (browse-url-at-point))))))) (move-marker org-open-link-marker nil) (run-hook-with-args (quote org-follow-link-hook)))
  (unless (call-interactively (function org-babel-open-src-block-result)) (org-load-modules-maybe) (move-marker org-open-link-marker (point)) (setq org-window-config-before-follow-link (current-window-configuration)) (org-remove-occur-highlights nil nil t) (cond ((and (org-at-heading-p) (not (org-at-timestamp-p t)) (not (org-in-regexp (concat org-plain-link-re "\\|" org-bracket-link-regexp "\\|" org-angle-link-re "\\|" "[     ]:[^     \n]+:[     ]*$"))) (not (get-text-property (point) (quote org-linked-text)))) (or (org-offer-links-in-entry arg) (progn (require (quote org-attach)) (org-attach-reveal (quote if-exists))))) ((run-hook-with-args-until-success (quote org-open-at-point-functions))) ((org-at-timestamp-p t) (org-follow-timestamp-link)) ((and (or (org-footnote-at-reference-p) (org-footnote-at-definition-p)) (not (org-in-regexp org-bracket-link-regexp))) (org-footnote-action)) (t (let (type path link line search (pos (point))) (catch
 (quote match) (save-excursion (skip-chars-forward "^]\n
") (when (org-in-regexp org-bracket-link-regexp 1) (setq link ...) (while ... ...) (setq link ...) (cond ... ... ...) (throw ... t))) (when (get-text-property (point) (quote org-linked-text)) (setq type "thisfile" pos (if ... ... ...) path (buffer-substring ... ...)) (throw (quote match) t)) (save-excursion (when (or ... ...) (setq type ... path ...) (throw ... t))) (save-excursion (when (org-in-regexp ...) (setq type "tags" path ...) (while ... ...) (throw ... t))) (when (org-in-regexp "<\\([^><\n]+\\)>") (setq type "tree-match" path (match-string 1)) (throw (quote match) t))) (unless path (error "No link found")) (with-current-buffer (or reference-buffer (current-buffer)) (if (string-match " +\\'" path) (setq path (replace-match "" t t path))) (if (and org-link-translation-function (fboundp org-link-translation-function)) (let (...) (setq type ... path ...))) (cond ((assoc type org-link-protocols) (funcall ... path)) ((equal type "mailto") (let ... ...
 ... ...)) ((member type ...) (browse-url ...)) ((string= type "doi") (browse-url ...)) ((member type ...) (browse-url ...)) ((string= type "tags") (org-tags-view arg path)) ((string= type "tree-match") (org-occur ...)) ((string= type "file") (if ... ... ...) (if ... ... ...)) ((string= type "shell") (let ... ...)) ((string= type "elisp") (let ... ...)) ((and ... ...)) ((string= type "thisfile") (if arg ... ...) (let ... ...)) (t (browse-url-at-point))))))) (move-marker org-open-link-marker nil) (run-hook-with-args (quote org-follow-link-hook)))
  org-open-at-point()
  org-open-at-mouse((mouse-2 (#<window 3 on test.org> 1243 (171 . 50) 5105819 nil 1243 (19 . 3) nil (3 . 2) (8 . 16))))
  call-interactively(org-open-at-mouse nil nil)

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: limitation: no tab in my headlines
  2012-07-27  8:54 limitation: no tab in my headlines Giovanni Ridolfi
@ 2012-07-28  9:55 ` Bastien
  0 siblings, 0 replies; 2+ messages in thread
From: Bastien @ 2012-07-28  9:55 UTC (permalink / raw)
  To: Giovanni Ridolfi; +Cc: Orgmode

Hi Giovanni,

Inserting a tab in a heading is bizarre enough so that we can let
users who dare doing it rely on ids.

Thanks,

-- 
 Bastien

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-07-28  9:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-27  8:54 limitation: no tab in my headlines Giovanni Ridolfi
2012-07-28  9:55 ` Bastien

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).