Last active
December 30, 2015 21:09
-
-
Save dagezi/7885966 to your computer and use it in GitHub Desktop.
Create URL from current buffer and insert to kill-ring.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defun github-url-decompose (file &optional partial) | |
(cond | |
((file-directory-p (expand-file-name ".git" file)) (cons file partial)) | |
((equal "/" file) nil) | |
(t (github-url-decompose (directory-file-name (file-name-directory file)) | |
(if partial | |
(concat (file-name-nondirectory file) "/" partial) | |
(file-name-nondirectory file)))))) | |
(defun github-url-get-origin (dir) | |
(with-temp-buffer | |
(insert-file-contents (expand-file-name ".git/config" dir)) | |
(save-match-data | |
(search-forward "[remote \"origin\"]") | |
(let ((end (save-excursion (re-search-forward "^\\[" nil 'to-end) (point)))) | |
(and (re-search-forward "url *= *git@github\\.com:\\(.*\\)\\.git\\>" end) | |
(match-string 1)))))) | |
(defun github-url (start end) | |
(interactive "r") | |
(let ((g (github-url-decompose (buffer-file-name))) | |
rootdir file origin url start-line end-line) | |
(unless g | |
(error "Not managed by git: %s" default-directory)) | |
(setq rootdir (car g) | |
file (cdr g)) | |
(setq origin (github-url-get-origin rootdir)) | |
(setq start-line (line-number-at-pos start)) | |
(setq end-line (line-number-at-pos end)) | |
(setq url (format "http://github.com/%s/blob/master/%s#L%d-L%d" | |
origin file start-line end-line)) | |
(message "URL: %s" url) | |
(kill-new url))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment