Skip to content

Instantly share code, notes, and snippets.

@kristianhellquist
Created July 10, 2012 09:50
Show Gist options
  • Save kristianhellquist/3082383 to your computer and use it in GitHub Desktop.
Save kristianhellquist/3082383 to your computer and use it in GitHub Desktop.
Emacs, copy current file and line number to clipboard
(defun copy-current-line-position-to-clipboard ()
"Copy current line in file to clipboard as '</path/to/file>:<line-number>'"
(interactive)
(let ((path-with-line-number
(concat (buffer-file-name) ":" (number-to-string (line-number-at-pos)))))
(x-select-text path-with-line-number)
(message (concat path-with-line-number " copied to clipboard"))))
(define-key global-map (kbd "M-l") 'copy-current-line-position-to-clipboard)
@logc
Copy link

logc commented Aug 22, 2023

I did another minor change to kill the file path and line number in the same format as expected by Org for an external link. Renamed the function to be able to keep both.

This way, you can paste it into an org buffer and org-open-at-point on the link will work ...

(defun copy-file-link-to-clipboard ()
  "Copy current line in file to clipboard as 'file:</path/to/file>::<line-number>'."
  (interactive)
  (let ((path-with-line-number
         (concat "file:" (buffer-file-name) "::" (number-to-string (line-number-at-pos)))))
    (kill-new path-with-line-number)
    (message (concat path-with-line-number " copied to clipboard"))))

@anuvyklack
Copy link

I add option to replace $HOME with ~ only if C-u argument was passed:

(defun copy-current-line-position-to-clipboard ()
  "Copy current line in file to clipboard as '</path/to/file>:<line-number>'."
  (interactive)
  (let* ((path (if (equal current-prefix-arg '(4))
                   (string-replace (getenv "HOME") "~" (buffer-file-name))
                 (buffer-file-name)))
         (path-with-line-number (concat path ":" (number-to-string (line-number-at-pos)))))
    (kill-new path-with-line-number)
    (message (concat path-with-line-number " copied to clipboard"))))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment