From mboxrd@z Thu Jan 1 00:00:00 1970 From: John Kitchin Subject: Re: Insert org-id Link at Point via Outline Path Completion Date: Sat, 01 Aug 2015 15:03:42 -0400 Message-ID: References: <20150801090706.GA3296@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:58388) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZLc4W-0004q4-2B for emacs-orgmode@gnu.org; Sat, 01 Aug 2015 15:03:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZLc4R-0004CE-BN for emacs-orgmode@gnu.org; Sat, 01 Aug 2015 15:03:51 -0400 Received: from mail-qg0-x231.google.com ([2607:f8b0:400d:c04::231]:33110) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZLc4R-0004BZ-6M for emacs-orgmode@gnu.org; Sat, 01 Aug 2015 15:03:47 -0400 Received: by qged69 with SMTP id d69so66219631qge.0 for ; Sat, 01 Aug 2015 12:03:46 -0700 (PDT) In-reply-to: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Xebar Saram Cc: org mode , Dominic Surano usually it is pretty easy to add new functions in helm, but it is less easy in this case because the source is dynamically generated from a function. So, in this case I think we have to just redefine the function that generates the source. here is an example that I think makes an id link as a new action. #+BEGIN_SRC emacs-lisp (defun helm-org-insert-id-link-to-heading-at-marker (marker) (with-current-buffer (marker-buffer marker) (let ((file-name (buffer-file-name)) (id (save-excursion (goto-char (marker-position marker)) (org-id-get-create) (org-id-store-link)))) (with-helm-current-buffer (org-insert-link file-name id))))) (cl-defun helm-source-org-headings-for-files (filenames &optional (min-depth 1) (max-= depth 8)) (helm-build-sync-source "Org Headings" :candidates (helm-org-get-candidates filenames min-depth max-depth) :action '(("Go to line" . helm-org-goto-marker) ("Refile to this heading" . helm-org-heading-refile) ("Insert link to this heading" . helm-org-insert-link-to-heading-at-marker) ("Insert id link to this heading" . helm-org-insert-id-link-to-heading-at-marker)))) #+END_SRC Xebar Saram writes: > Hi again > > so excited over this had to ask 2 more questions ;-) > > 1.can that function include/link to org-id (so that it can keep the links > even if the headers move around in/out of the files) > 2.i saw there are 3 options to that helm function. can this be customized > to add more commands (can really think of which ones know but could see > potential in future :)) > > thx so much John as always you rock ;-) > > Z > > On Sat, Aug 1, 2015 at 8:36 PM, Xebar Saram wrote: > >> John, this is superb! >> >> thx so much it answers all my needs, what a great find :) >> >> kind regards >> >> Z >> >> On Sat, Aug 1, 2015 at 7:33 PM, John Kitchin >> wrote: >> >>> (helm-org-agenda-files-headings) seems to do this already for all >>> headlines in your agenda files. the third action is to insert a link to >>> the selected headline. >>> >>> You can use let to temporarily define the org-agenda-files list to what >>> you want, and just use the (helm-org-agenda-files-headings) command for >>> non-agenda files. >>> >>> e.g. >>> >>> #+BEGIN_SRC emacs-lisp >>> (defun insert-heading-link (dir) >>> "select a headline from org-files in dir and insert a link to it." >>> (interactive (list (read-directory-name "Directory: "))) >>> (let ((org-agenda-files (f-entries >>> dir >>> (lambda (f) >>> (string=3D >>> "org" >>> (file-name-extension f))) >>> t))) >>> (helm-org-agenda-files-headings))) >>> #+END_SRC >>> >>> gives me a helm buffer to select headlines from org-files in the >>> directory I select and when I press f3 (for the third >>> action), it inserts a link to the selected headline. It does the file >>> finding recursively, so you might not want to run this on / ;) >>> >>> You could bind it to a key for easy use. >>> >>> Xebar Saram writes: >>> >>> > Thx so much Bernhard >>> > >>> > this looks really promising. i never had luck with either company or >>> > auto-complete t o get it to work reliably (it often stops working even >>> > though its still in the mod bar). >>> > anyway i tried it and added this to my config (after cloning from git= ): >>> > >>> > (add-to-list 'load-path "/home/zeltak/.emacs.g/company-org-headings") >>> > (add-hook 'org-mode-hook >>> > (lambda () (set (make-local-variable 'company-backends) >>> > '((company-org-headings))))) >>> > >>> > i dont see it completes on org heading, is there any keys i need to >>> press >>> > or anything else in need to config? does this work only when you try = to >>> > insert a link? >>> > >>> > best and thx so much, this look awesome >>> > >>> > P.S have you considered Helm for this as well? >>> > >>> > best >>> > >>> > Z >>> > >>> > >>> > >>> > On Sat, Aug 1, 2015 at 12:07 PM, Bernhard Pr=C3=B6ll >>> > wrote: >>> > >>> >> Hi Saram, >>> >> >>> >> I've been in the same boat and decided to write a company-backend for >>> >> this purpose. So if you're already using company-mode, this may be >>> worth >>> >> looking into: >>> >> >>> >> https://github.com/mutbuerger/company-org-headings >>> >> >>> >> Keep in mind that I'm in the process of learning Elisp and >>> >> there has been little to no testing done on the package. Furthermore= it >>> >> uses org-store-link instead of org-id-store-link. >>> >> >>> >> Regards, >>> >> Bernhard Pr=C3=B6ll >>> >> >>> >> >>> >> On Fri, 31. Jul 09:43, Xebar Saram wrote: >>> >> >>> >>> i also have a similar workflow and would love to hear Dominic if you >>> >>> found a >>> >>> solution for this or if anyone on the list has other suggestions? >>> >>> >>> >>> best >>> >>> >>> >>> Z >>> >>> >>> >>> On Tue, May 12, 2015 at 10:57 PM, Dominic Surano >> > >>> >>> wrote: >>> >>> >>> >>> Hello, >>> >>> >>> >>> I use org-mode a lot like a wiki so links to other org-mode >>> headings >>> >>> are >>> >>> very common. Currently, I navigate to the heading or pull it up = in >>> an >>> >>> agenda view, store the link with C-l, going back to where I want= to >>> >>> insert the link, then insert the link with C-c C-l RET. This is a >>> bit >>> >>> time consuming. >>> >>> >>> >>> Instead, I would prefer to map a key that allows me to insert a >>> link at >>> >>> the current point using tab completion similar to org-refile (C-c >>> C-w). >>> >>> Looking through org-id.el, it seems like >>> org-id-get-with-outline-path >>> >>> completion was designed for this purpose. I tried: >>> >>> >>> >>> (global-set-key "\C-ci" (lambda () (interactive) (org-id-get-with >>> >>> outline-path-completion))) >>> >>> >>> >>> but it didn't work as intended. Anyone have any ideas? >>> >>> >>> >>> Thanks! >>> >>> -D >>> >>> >>> >>> For reference, I have the following set in my configuration: >>> >>> >>> >>> ;; Use global IDs >>> >>> (require 'org-id) >>> >>> (setq org-id-link-to-org-use-id t) >>> >>> >>> >>> ;; Update ID file .org-id-locations on startup >>> >>> (org-id-update-id-locations) >>> >>> >>> >>> ;; Targets include this file and any file contributing to the >>> agenda - >>> >>> up to 9 levels deep >>> >>> (setq org-refile-targets (quote ((nil :maxlevel . 9) >>> >>> (org-agenda-files :maxlevel . >>> 9)))) >>> >>> (setq org-refile-use-outline-path 'file) >>> >>> (setq org-outline-path-complete-in-steps t) >>> >>> (setq org-refile-allow-creating-parent-nodes t) >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> -- >>> Professor John Kitchin >>> Doherty Hall A207F >>> Department of Chemical Engineering >>> Carnegie Mellon University >>> Pittsburgh, PA 15213 >>> 412-268-7803 >>> @johnkitchin >>> http://kitchingroup.cheme.cmu.edu >>> >> >> -- Professor John Kitchin Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu