From: Dov Grobgeld <dov.grobgeld@gmail.com>
To: emacs-orgmode <emacs-orgmode@gnu.org>
Subject: Fast linking to files in private git repos through a hyperlink
Date: Thu, 19 Apr 2012 14:24:23 +0300 [thread overview]
Message-ID: <CA++fsGFW6_8sWyLYXUfSg-i5cTTBPaTy04GX3+cu59gkeJP6WQ@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 2007 bytes --]
I thought I would share the following hack that I did with git.
In my org-mode notebook I often find myself references files that reside in
various private git repos. So far I have referenced these either by just
writing their name or giving a full path. But giving the full path is
disruptive and if the repo moves it will no longer work. So I added a hack
to make the following hyperlink work git:myrepo::myfile . When opening it
the following happens:
- myrepo is looked up in the emacs hash my-git-repos and mapped to the path
of a git repo root.
- git-find-file-in-repo searches for the the file myfile in the the repo
repo
Here's the code for org-git-hyperlink.el:
(require 'org)
(org-add-link-type "git" 'org-git-hyperlink-open)
(defun org-git-hyperlink-open (path)
"Visit the file in learning-git"
(let* ((parts (split-string path "::"))
(repo-name (car parts))
(filename (cadr parts))
(repo (gethash repo-name my-git-repos))
)
(git-find-file-in-repo repo filename)))
(org-git-hyperlink-open "learning::PointPatternMatching.py")
;;; org-learning.el ends here
(provide 'org-git-hyperlink)
;;; org-git-hyperlink.el ends here
The code for git-find-file-in-repo is here:
https://github.com/hjz/emacs/blob/master/jz/git-find-file.el
with the following addition:
(defun git-find-file-in-repo (root file-name)
"Prompt with a completing list of all files in the project to find one."
(interactive)
(let* ((project-files (ffip-project-files root))
(files (delete-dups (mapcar 'car project-files)))
(file-paths (delq 'nil (mapcar '(lambda (file-cons)
(when (string= file-name (car
file-cons))
(cdr file-cons)))
project-files)))
(file-path (if (cdr file-paths)
(ffip-completing-read "Disambiguate: " file-paths)
(car file-paths))))
(find-file (concat root file-path))))
Regards,
Dov
[-- Attachment #2: Type: text/html, Size: 2602 bytes --]
next reply other threads:[~2012-04-19 11:24 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-19 11:24 Dov Grobgeld [this message]
2012-04-19 18:49 ` Fast linking to files in private git repos through a hyperlink Karl Voit
2012-04-20 12:01 ` Bastien
2012-04-21 21:19 ` Dov Grobgeld
2012-04-26 14:00 ` Bastien
2012-04-26 18:06 ` Dov Grobgeld
2012-04-26 18:32 ` Samuel Wales
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CA++fsGFW6_8sWyLYXUfSg-i5cTTBPaTy04GX3+cu59gkeJP6WQ@mail.gmail.com \
--to=dov.grobgeld@gmail.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.