|
@@ -9894,118 +9894,118 @@ active region."
|
|
|
(call-interactively 'org-store-link))
|
|
|
(move-beginning-of-line 2)
|
|
|
(set-mark (point)))))
|
|
|
- (org-with-limited-levels
|
|
|
- (setq org-store-link-plist nil)
|
|
|
- (let (link cpltxt desc description search
|
|
|
- txt custom-id agenda-link sfuns sfunsn)
|
|
|
- (cond
|
|
|
+ (setq org-store-link-plist nil)
|
|
|
+ (let (link cpltxt desc description search
|
|
|
+ txt custom-id agenda-link sfuns sfunsn)
|
|
|
+ (cond
|
|
|
|
|
|
- ;; Store a link using an external link type
|
|
|
- ((and (not (equal arg '(16)))
|
|
|
- (setq sfuns
|
|
|
- (delq
|
|
|
- nil (mapcar (lambda (f)
|
|
|
- (let (fs) (if (funcall f) (push f fs))))
|
|
|
- (org-store-link-functions)))
|
|
|
- sfunsn (mapcar (lambda (fu) (symbol-name (car fu))) sfuns))
|
|
|
- (or (and (cdr sfuns)
|
|
|
- (funcall (intern
|
|
|
- (completing-read
|
|
|
- "Which function for creating the link? "
|
|
|
- sfunsn nil t (car sfunsn)))))
|
|
|
- (funcall (caar sfuns)))
|
|
|
- (setq link (plist-get org-store-link-plist :link)
|
|
|
- desc (or (plist-get org-store-link-plist
|
|
|
- :description)
|
|
|
- link))))
|
|
|
-
|
|
|
- ;; Store a link from a source code buffer.
|
|
|
- ((org-src-edit-buffer-p)
|
|
|
- (cond
|
|
|
- ((save-excursion
|
|
|
- (beginning-of-line)
|
|
|
- (looking-at (concat (format org-coderef-label-format "\\(.*?\\)")
|
|
|
- "[ \t]*$")))
|
|
|
- (setq link (format "(%s)" (match-string-no-properties 1))))
|
|
|
- ((called-interactively-p 'any)
|
|
|
- (let (label)
|
|
|
- (while (or (not label)
|
|
|
- (org-with-wide-buffer
|
|
|
- (goto-char (point-min))
|
|
|
- (re-search-forward
|
|
|
- (regexp-quote (format org-coderef-label-format label))
|
|
|
- nil t)))
|
|
|
- (when label (message "Label exists already") (sit-for 2))
|
|
|
- (setq label (read-string "Code line label: " label)))
|
|
|
- (end-of-line)
|
|
|
- (setq link (format org-coderef-label-format label))
|
|
|
- (let ((gc (- 79 (length link))))
|
|
|
- (if (< (current-column) gc) (org-move-to-column gc t)
|
|
|
- (insert " ")))
|
|
|
- (insert link)
|
|
|
- (setq link (concat "(" label ")") desc nil)))
|
|
|
- (t (setq link nil))))
|
|
|
-
|
|
|
- ;; We are in the agenda, link to referenced location
|
|
|
- ((equal (bound-and-true-p org-agenda-buffer-name) (buffer-name))
|
|
|
- (let ((m (or (get-text-property (point) 'org-hd-marker)
|
|
|
- (get-text-property (point) 'org-marker))))
|
|
|
- (when m
|
|
|
- (org-with-point-at m
|
|
|
- (setq agenda-link
|
|
|
- (if (called-interactively-p 'any)
|
|
|
- (call-interactively 'org-store-link)
|
|
|
- (org-store-link nil)))))))
|
|
|
-
|
|
|
- ((eq major-mode 'calendar-mode)
|
|
|
- (let ((cd (calendar-cursor-to-date)))
|
|
|
- (setq link
|
|
|
- (format-time-string
|
|
|
- (car org-time-stamp-formats)
|
|
|
- (apply 'encode-time
|
|
|
- (list 0 0 0 (nth 1 cd) (nth 0 cd) (nth 2 cd)
|
|
|
- nil nil nil))))
|
|
|
- (org-store-link-props :type "calendar" :date cd)))
|
|
|
-
|
|
|
- ((eq major-mode 'help-mode)
|
|
|
- (setq link (concat "help:" (save-excursion
|
|
|
- (goto-char (point-min))
|
|
|
- (looking-at "^[^ ]+")
|
|
|
- (match-string 0))))
|
|
|
- (org-store-link-props :type "help"))
|
|
|
-
|
|
|
- ((eq major-mode 'w3-mode)
|
|
|
- (setq cpltxt (if (and (buffer-name)
|
|
|
- (not (string-match "Untitled" (buffer-name))))
|
|
|
- (buffer-name)
|
|
|
- (url-view-url t))
|
|
|
- link (url-view-url t))
|
|
|
- (org-store-link-props :type "w3" :url (url-view-url t)))
|
|
|
-
|
|
|
- ((eq major-mode 'image-mode)
|
|
|
- (setq cpltxt (concat "file:"
|
|
|
- (abbreviate-file-name buffer-file-name))
|
|
|
- link cpltxt)
|
|
|
- (org-store-link-props :type "image" :file buffer-file-name))
|
|
|
-
|
|
|
- ;; In dired, store a link to the file of the current line
|
|
|
- ((derived-mode-p 'dired-mode)
|
|
|
- (let ((file (dired-get-filename nil t)))
|
|
|
- (setq file (if file
|
|
|
- (abbreviate-file-name
|
|
|
- (expand-file-name (dired-get-filename nil t)))
|
|
|
- ;; otherwise, no file so use current directory.
|
|
|
- default-directory))
|
|
|
- (setq cpltxt (concat "file:" file)
|
|
|
- link cpltxt)))
|
|
|
-
|
|
|
- ((setq search (run-hook-with-args-until-success
|
|
|
- 'org-create-file-search-functions))
|
|
|
- (setq link (concat "file:" (abbreviate-file-name buffer-file-name)
|
|
|
- "::" search))
|
|
|
- (setq cpltxt (or description link)))
|
|
|
-
|
|
|
- ((and (buffer-file-name (buffer-base-buffer)) (derived-mode-p 'org-mode))
|
|
|
+ ;; Store a link using an external link type
|
|
|
+ ((and (not (equal arg '(16)))
|
|
|
+ (setq sfuns
|
|
|
+ (delq
|
|
|
+ nil (mapcar (lambda (f)
|
|
|
+ (let (fs) (if (funcall f) (push f fs))))
|
|
|
+ (org-store-link-functions)))
|
|
|
+ sfunsn (mapcar (lambda (fu) (symbol-name (car fu))) sfuns))
|
|
|
+ (or (and (cdr sfuns)
|
|
|
+ (funcall (intern
|
|
|
+ (completing-read
|
|
|
+ "Which function for creating the link? "
|
|
|
+ sfunsn nil t (car sfunsn)))))
|
|
|
+ (funcall (caar sfuns)))
|
|
|
+ (setq link (plist-get org-store-link-plist :link)
|
|
|
+ desc (or (plist-get org-store-link-plist
|
|
|
+ :description)
|
|
|
+ link))))
|
|
|
+
|
|
|
+ ;; Store a link from a source code buffer.
|
|
|
+ ((org-src-edit-buffer-p)
|
|
|
+ (cond
|
|
|
+ ((save-excursion
|
|
|
+ (beginning-of-line)
|
|
|
+ (looking-at (concat (format org-coderef-label-format "\\(.*?\\)")
|
|
|
+ "[ \t]*$")))
|
|
|
+ (setq link (format "(%s)" (match-string-no-properties 1))))
|
|
|
+ ((called-interactively-p 'any)
|
|
|
+ (let (label)
|
|
|
+ (while (or (not label)
|
|
|
+ (org-with-wide-buffer
|
|
|
+ (goto-char (point-min))
|
|
|
+ (re-search-forward
|
|
|
+ (regexp-quote (format org-coderef-label-format label))
|
|
|
+ nil t)))
|
|
|
+ (when label (message "Label exists already") (sit-for 2))
|
|
|
+ (setq label (read-string "Code line label: " label)))
|
|
|
+ (end-of-line)
|
|
|
+ (setq link (format org-coderef-label-format label))
|
|
|
+ (let ((gc (- 79 (length link))))
|
|
|
+ (if (< (current-column) gc) (org-move-to-column gc t)
|
|
|
+ (insert " ")))
|
|
|
+ (insert link)
|
|
|
+ (setq link (concat "(" label ")") desc nil)))
|
|
|
+ (t (setq link nil))))
|
|
|
+
|
|
|
+ ;; We are in the agenda, link to referenced location
|
|
|
+ ((equal (bound-and-true-p org-agenda-buffer-name) (buffer-name))
|
|
|
+ (let ((m (or (get-text-property (point) 'org-hd-marker)
|
|
|
+ (get-text-property (point) 'org-marker))))
|
|
|
+ (when m
|
|
|
+ (org-with-point-at m
|
|
|
+ (setq agenda-link
|
|
|
+ (if (called-interactively-p 'any)
|
|
|
+ (call-interactively 'org-store-link)
|
|
|
+ (org-store-link nil)))))))
|
|
|
+
|
|
|
+ ((eq major-mode 'calendar-mode)
|
|
|
+ (let ((cd (calendar-cursor-to-date)))
|
|
|
+ (setq link
|
|
|
+ (format-time-string
|
|
|
+ (car org-time-stamp-formats)
|
|
|
+ (apply 'encode-time
|
|
|
+ (list 0 0 0 (nth 1 cd) (nth 0 cd) (nth 2 cd)
|
|
|
+ nil nil nil))))
|
|
|
+ (org-store-link-props :type "calendar" :date cd)))
|
|
|
+
|
|
|
+ ((eq major-mode 'help-mode)
|
|
|
+ (setq link (concat "help:" (save-excursion
|
|
|
+ (goto-char (point-min))
|
|
|
+ (looking-at "^[^ ]+")
|
|
|
+ (match-string 0))))
|
|
|
+ (org-store-link-props :type "help"))
|
|
|
+
|
|
|
+ ((eq major-mode 'w3-mode)
|
|
|
+ (setq cpltxt (if (and (buffer-name)
|
|
|
+ (not (string-match "Untitled" (buffer-name))))
|
|
|
+ (buffer-name)
|
|
|
+ (url-view-url t))
|
|
|
+ link (url-view-url t))
|
|
|
+ (org-store-link-props :type "w3" :url (url-view-url t)))
|
|
|
+
|
|
|
+ ((eq major-mode 'image-mode)
|
|
|
+ (setq cpltxt (concat "file:"
|
|
|
+ (abbreviate-file-name buffer-file-name))
|
|
|
+ link cpltxt)
|
|
|
+ (org-store-link-props :type "image" :file buffer-file-name))
|
|
|
+
|
|
|
+ ;; In dired, store a link to the file of the current line
|
|
|
+ ((derived-mode-p 'dired-mode)
|
|
|
+ (let ((file (dired-get-filename nil t)))
|
|
|
+ (setq file (if file
|
|
|
+ (abbreviate-file-name
|
|
|
+ (expand-file-name (dired-get-filename nil t)))
|
|
|
+ ;; otherwise, no file so use current directory.
|
|
|
+ default-directory))
|
|
|
+ (setq cpltxt (concat "file:" file)
|
|
|
+ link cpltxt)))
|
|
|
+
|
|
|
+ ((setq search (run-hook-with-args-until-success
|
|
|
+ 'org-create-file-search-functions))
|
|
|
+ (setq link (concat "file:" (abbreviate-file-name buffer-file-name)
|
|
|
+ "::" search))
|
|
|
+ (setq cpltxt (or description link)))
|
|
|
+
|
|
|
+ ((and (buffer-file-name (buffer-base-buffer)) (derived-mode-p 'org-mode))
|
|
|
+ (org-with-limited-levels
|
|
|
(setq custom-id (org-entry-get nil "CUSTOM_ID"))
|
|
|
(cond
|
|
|
;; Store a link using the target at point
|
|
@@ -10060,53 +10060,53 @@ active region."
|
|
|
"NONE")))))
|
|
|
(when (string-match "::\\'" cpltxt)
|
|
|
(setq cpltxt (substring cpltxt 0 -2)))
|
|
|
- (setq link cpltxt))))
|
|
|
-
|
|
|
- ((buffer-file-name (buffer-base-buffer))
|
|
|
- ;; Just link to this file here.
|
|
|
- (setq cpltxt (concat "file:"
|
|
|
- (abbreviate-file-name
|
|
|
- (buffer-file-name (buffer-base-buffer)))))
|
|
|
- ;; Add a context string.
|
|
|
- (when (org-xor org-context-in-file-links arg)
|
|
|
- (setq txt (if (org-region-active-p)
|
|
|
- (buffer-substring (region-beginning) (region-end))
|
|
|
- (buffer-substring (point-at-bol) (point-at-eol))))
|
|
|
- ;; Only use search option if there is some text.
|
|
|
- (when (string-match "\\S-" txt)
|
|
|
- (setq cpltxt
|
|
|
- (concat cpltxt "::" (org-make-org-heading-search-string txt))
|
|
|
- desc "NONE")))
|
|
|
- (setq link cpltxt))
|
|
|
-
|
|
|
- ((called-interactively-p 'interactive)
|
|
|
- (user-error "No method for storing a link from this buffer"))
|
|
|
-
|
|
|
- (t (setq link nil)))
|
|
|
-
|
|
|
- ;; We're done setting link and desc, clean up
|
|
|
- (when (consp link) (setq cpltxt (car link) link (cdr link)))
|
|
|
- (setq link (or link cpltxt)
|
|
|
- desc (or desc cpltxt))
|
|
|
- (cond ((not desc))
|
|
|
- ((equal desc "NONE") (setq desc nil))
|
|
|
- (t (setq desc
|
|
|
- (replace-regexp-in-string
|
|
|
- org-bracket-link-analytic-regexp
|
|
|
- (lambda (m) (or (match-string 5 m) (match-string 3 m)))
|
|
|
- desc))))
|
|
|
- ;; Return the link
|
|
|
- (if (not (and (or (called-interactively-p 'any)
|
|
|
- executing-kbd-macro)
|
|
|
- link))
|
|
|
- (or agenda-link (and link (org-make-link-string link desc)))
|
|
|
- (push (list link desc) org-stored-links)
|
|
|
- (message "Stored: %s" (or desc link))
|
|
|
- (when custom-id
|
|
|
- (setq link (concat "file:" (abbreviate-file-name
|
|
|
- (buffer-file-name)) "::#" custom-id))
|
|
|
- (push (list link desc) org-stored-links))
|
|
|
- (car org-stored-links))))))
|
|
|
+ (setq link cpltxt)))))
|
|
|
+
|
|
|
+ ((buffer-file-name (buffer-base-buffer))
|
|
|
+ ;; Just link to this file here.
|
|
|
+ (setq cpltxt (concat "file:"
|
|
|
+ (abbreviate-file-name
|
|
|
+ (buffer-file-name (buffer-base-buffer)))))
|
|
|
+ ;; Add a context string.
|
|
|
+ (when (org-xor org-context-in-file-links arg)
|
|
|
+ (setq txt (if (org-region-active-p)
|
|
|
+ (buffer-substring (region-beginning) (region-end))
|
|
|
+ (buffer-substring (point-at-bol) (point-at-eol))))
|
|
|
+ ;; Only use search option if there is some text.
|
|
|
+ (when (string-match "\\S-" txt)
|
|
|
+ (setq cpltxt
|
|
|
+ (concat cpltxt "::" (org-make-org-heading-search-string txt))
|
|
|
+ desc "NONE")))
|
|
|
+ (setq link cpltxt))
|
|
|
+
|
|
|
+ ((called-interactively-p 'interactive)
|
|
|
+ (user-error "No method for storing a link from this buffer"))
|
|
|
+
|
|
|
+ (t (setq link nil)))
|
|
|
+
|
|
|
+ ;; We're done setting link and desc, clean up
|
|
|
+ (when (consp link) (setq cpltxt (car link) link (cdr link)))
|
|
|
+ (setq link (or link cpltxt)
|
|
|
+ desc (or desc cpltxt))
|
|
|
+ (cond ((not desc))
|
|
|
+ ((equal desc "NONE") (setq desc nil))
|
|
|
+ (t (setq desc
|
|
|
+ (replace-regexp-in-string
|
|
|
+ org-bracket-link-analytic-regexp
|
|
|
+ (lambda (m) (or (match-string 5 m) (match-string 3 m)))
|
|
|
+ desc))))
|
|
|
+ ;; Return the link
|
|
|
+ (if (not (and (or (called-interactively-p 'any)
|
|
|
+ executing-kbd-macro)
|
|
|
+ link))
|
|
|
+ (or agenda-link (and link (org-make-link-string link desc)))
|
|
|
+ (push (list link desc) org-stored-links)
|
|
|
+ (message "Stored: %s" (or desc link))
|
|
|
+ (when custom-id
|
|
|
+ (setq link (concat "file:" (abbreviate-file-name
|
|
|
+ (buffer-file-name)) "::#" custom-id))
|
|
|
+ (push (list link desc) org-stored-links))
|
|
|
+ (car org-stored-links)))))
|
|
|
|
|
|
(defun org-store-link-props (&rest plist)
|
|
|
"Store link properties, extract names, addresses and dates."
|