From c80b4a6c24b63b132fa29dcde4340a2e0655b4f5 Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Fri, 26 Dec 2008 17:50:09 +0100 Subject: [PATCH] Coderefs: Supporting functionality This patch adds support functionality for the new code references. It makes sure that `C-c C-o' will follow a code reference correctly. It also extends the command org-store-link to actually create a new code reference cookie when used in a source code temporary buffer created with "C-c '". The new link will be stored, so that it can be inserted with `C-c C-l'. When inserting such a link, no description will be prompted for, because these coderef links should best not have a description part. --- lisp/org.el | 50 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index c86ad6543..08b3b04a1 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -6228,6 +6228,23 @@ For file links, arg negates `org-context-in-file-links'." (setq link (plist-get org-store-link-plist :link) desc (or (plist-get org-store-link-plist :description) link))) + ((equal (buffer-name) "*Org Edit Src Example*") + (let (label gc) + (while (or (not label) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (re-search-forward (concat "((" label "))") nil t)))) + (when label (message "Label exists already") (sit-for 2)) + (setq label (read-string "Code line label: " label))) + (end-of-line 1) + (setq link (format "((%s))" label)) + (setq gc (- 79 (length link))) + (if (< (current-column) gc) (org-move-to-column gc t) (insert " ")) + (insert link) + (setq desc nil))) + ((eq major-mode 'calendar-mode) (let ((cd (calendar-cursor-to-date))) (setq link @@ -6640,23 +6657,25 @@ used as the link location instead of reading one interactively." (reverse org-stored-links) "\n")))) (let ((cw (selected-window))) (select-window (get-buffer-window "*Org Links*")) - (org-fit-window-to-buffer) (setq truncate-lines t) + (org-fit-window-to-buffer) (select-window cw)) ;; Fake a link history, containing the stored links. (setq tmphist (append (mapcar 'car org-stored-links) org-insert-link-history)) (unwind-protect - (setq link (org-completing-read - "Link: " - (append - (mapcar (lambda (x) (list (concat (car x) ":"))) - (append org-link-abbrev-alist-local org-link-abbrev-alist)) - (mapcar (lambda (x) (list (concat x ":"))) - org-link-types)) - nil nil nil - 'tmphist - (or (car (car org-stored-links))))) + (setq link + (let ((org-completion-use-ido nil)) + (org-completing-read + "Link: " + (append + (mapcar (lambda (x) (list (concat (car x) ":"))) + (append org-link-abbrev-alist-local org-link-abbrev-alist)) + (mapcar (lambda (x) (list (concat x ":"))) + org-link-types)) + nil nil nil + 'tmphist + (or (car (car org-stored-links)))))) (set-window-configuration wcf) (kill-buffer "*Org Links*")) (setq entry (assoc link org-stored-links)) @@ -7118,6 +7137,15 @@ in all files. If AVOID-POS is given, ignore matches near that position." pos (match-beginning 0)))) ;; There is an exact target for this (goto-char pos)) + ((and (string-match "^((.*))$" s0) + (save-excursion + (goto-char (point-min)) + (and + (re-search-forward (concat "[^[]" (regexp-quote s0)) nil t) + (setq type 'dedicated + pos (1+ (match-beginning 0)))))) + ;; There is a coderef target for this + (goto-char pos)) ((string-match "^/\\(.*\\)/$" s) ;; A regular expression (cond -- 2.11.4.GIT