emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Insert org-id Link at Point via Outline Path Completion
@ 2015-05-12 19:57 Dominic Surano
  2015-07-31  6:43 ` Xebar Saram
  0 siblings, 1 reply; 14+ messages in thread
From: Dominic Surano @ 2015-05-12 19:57 UTC (permalink / raw)
  To: emacs-orgmode

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)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-05-12 19:57 Insert org-id Link at Point via Outline Path Completion Dominic Surano
@ 2015-07-31  6:43 ` Xebar Saram
  2015-07-31  7:13   ` Eric Abrahamsen
  2015-08-01  9:07   ` Bernhard Pröll
  0 siblings, 2 replies; 14+ messages in thread
From: Xebar Saram @ 2015-07-31  6:43 UTC (permalink / raw)
  To: Dominic Surano; +Cc: org mode

[-- Attachment #1: Type: text/plain, Size: 1594 bytes --]

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 <sk8ingdom@gmail.com>
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)
>
>
>

[-- Attachment #2: Type: text/html, Size: 2101 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-07-31  6:43 ` Xebar Saram
@ 2015-07-31  7:13   ` Eric Abrahamsen
  2015-08-01  9:07   ` Bernhard Pröll
  1 sibling, 0 replies; 14+ messages in thread
From: Eric Abrahamsen @ 2015-07-31  7:13 UTC (permalink / raw)
  To: emacs-orgmode

Xebar Saram <zeltakc@gmail.com> writes:

> 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?

The function `org-refile-get-targets' is the standard way of producing a
list of all possible headings -- ostensibly to refile to, but you can do
anything you want with them.

If you want to restrict this to Org headings that already have ids
(though I'm not sure why you would), you can use the org-id-locations
hashtable.

I still think you'd have to use one of the above to pick a heading, then
go to the heading in a `save-excursion', call `org-store-link', then
back to your original location, and call `org-insert-link'. I don't
think there's any cleaner way of doing that...

Eric

> On Tue, May 12, 2015 at 10:57 PM, Dominic Surano <sk8ingdom@gmail.com>
> 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)

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-07-31  6:43 ` Xebar Saram
  2015-07-31  7:13   ` Eric Abrahamsen
@ 2015-08-01  9:07   ` Bernhard Pröll
  2015-08-01 13:20     ` Xebar Saram
  1 sibling, 1 reply; 14+ messages in thread
From: Bernhard Pröll @ 2015-08-01  9:07 UTC (permalink / raw)
  To: Xebar Saram; +Cc: org mode, Dominic Surano

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öll

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 <sk8ingdom@gmail.com> 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)
>
>
>
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-01  9:07   ` Bernhard Pröll
@ 2015-08-01 13:20     ` Xebar Saram
  2015-08-01 16:33       ` John Kitchin
  2015-08-02  7:03       ` Bernhard Pröll
  0 siblings, 2 replies; 14+ messages in thread
From: Xebar Saram @ 2015-08-01 13:20 UTC (permalink / raw)
  To: Xebar Saram, Dominic Surano, org mode

[-- Attachment #1: Type: text/plain, Size: 3157 bytes --]

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öll <bmutbuerger@gmail.com>
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öll
>
>
> 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 <sk8ingdom@gmail.com>
>> 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)
>>
>>
>>
>>
>>

[-- Attachment #2: Type: text/html, Size: 4342 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-01 13:20     ` Xebar Saram
@ 2015-08-01 16:33       ` John Kitchin
  2015-08-01 17:36         ` Xebar Saram
  2015-08-02  7:03       ` Bernhard Pröll
  1 sibling, 1 reply; 14+ messages in thread
From: John Kitchin @ 2015-08-01 16:33 UTC (permalink / raw)
  To: Xebar Saram; +Cc: org mode, Dominic Surano

(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=
                              "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öll <bmutbuerger@gmail.com>
> 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öll
>>
>>
>> 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 <sk8ingdom@gmail.com>
>>> 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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-01 16:33       ` John Kitchin
@ 2015-08-01 17:36         ` Xebar Saram
  2015-08-01 17:49           ` Xebar Saram
  0 siblings, 1 reply; 14+ messages in thread
From: Xebar Saram @ 2015-08-01 17:36 UTC (permalink / raw)
  To: John Kitchin; +Cc: org mode, Dominic Surano

[-- Attachment #1: Type: text/plain, Size: 5150 bytes --]

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 <jkitchin@andrew.cmu.edu>
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=
>                               "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öll <bmutbuerger@gmail.com>
> > 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öll
> >>
> >>
> >> 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 <sk8ingdom@gmail.com>
> >>> 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
>

[-- Attachment #2: Type: text/html, Size: 7086 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-01 17:36         ` Xebar Saram
@ 2015-08-01 17:49           ` Xebar Saram
  2015-08-01 19:03             ` John Kitchin
  0 siblings, 1 reply; 14+ messages in thread
From: Xebar Saram @ 2015-08-01 17:49 UTC (permalink / raw)
  To: John Kitchin; +Cc: org mode, Dominic Surano

[-- Attachment #1: Type: text/plain, Size: 5840 bytes --]

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 <zeltakc@gmail.com> 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 <jkitchin@andrew.cmu.edu>
> 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=
>>                               "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öll <bmutbuerger@gmail.com>
>> > 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öll
>> >>
>> >>
>> >> 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 <sk8ingdom@gmail.com
>> >
>> >>> 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
>>
>
>

[-- Attachment #2: Type: text/html, Size: 8097 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-01 17:49           ` Xebar Saram
@ 2015-08-01 19:03             ` John Kitchin
  2015-08-01 19:17               ` Dominic Surano
  2015-08-02 18:20               ` Xebar Saram
  0 siblings, 2 replies; 14+ messages in thread
From: John Kitchin @ 2015-08-01 19:03 UTC (permalink / raw)
  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 <zeltakc@gmail.com> 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 <jkitchin@andrew.cmu.edu>
>> 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=
>>>                               "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öll <bmutbuerger@gmail.com>
>>> > 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öll
>>> >>
>>> >>
>>> >> 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 <sk8ingdom@gmail.com
>>> >
>>> >>> 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

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-01 19:03             ` John Kitchin
@ 2015-08-01 19:17               ` Dominic Surano
  2015-08-02 18:20               ` Xebar Saram
  1 sibling, 0 replies; 14+ messages in thread
From: Dominic Surano @ 2015-08-01 19:17 UTC (permalink / raw)
  To: John Kitchin; +Cc: Xebar Saram, org mode

[-- Attachment #1: Type: text/plain, Size: 9203 bytes --]

Sorry, I meant to get to this yesterday. See my question on Emacs
StackExchange
<http://emacs.stackexchange.com/questions/12391/insert-org-id-link-at-point-via-outline-path-completion>
 and my configuration file
<https://github.com/sk8ingdom/.emacs.d/blob/master/org-mode-config/org-general.el>
where
I added this functionality. Basically, you go to insert a link with C-c
C-l, type id: <ENTER> and then you'll be prompted to find the org-id via
outline completion. I've reproduced the code below for convenience:

#+BEGIN_SRC emacs-lisp
;; Add ID properties to all headlines in the current file which do not
already have one
(defun my/org-add-ids-to-headlines-in-file ()
(interactive)
(org-map-entries 'org-id-get-create))
#+END_SRC

The other responses look good as well. Hope this helps!
-D

On Sat, Aug 1, 2015 at 12:03 PM, John Kitchin <jkitchin@andrew.cmu.edu>
wrote:

> 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 <zeltakc@gmail.com> 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 <jkitchin@andrew.cmu.edu>
> >> 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=
> >>>                               "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öll <
> bmutbuerger@gmail.com>
> >>> > 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öll
> >>> >>
> >>> >>
> >>> >> 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 <
> sk8ingdom@gmail.com
> >>> >
> >>> >>> 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
>



-- 
Dominic Surano
Email is my fastest and preferred method of contact
Phone, address, etc. available upon request

Life should be an adventure <http://xkcd.com/167/>

[-- Attachment #2: Type: text/html, Size: 13525 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-01 13:20     ` Xebar Saram
  2015-08-01 16:33       ` John Kitchin
@ 2015-08-02  7:03       ` Bernhard Pröll
  1 sibling, 0 replies; 14+ messages in thread
From: Bernhard Pröll @ 2015-08-02  7:03 UTC (permalink / raw)
  To: Xebar Saram; +Cc: org mode, Dominic Surano

Hi again,

my guess into the blue: You haven't set the directory as described in
the readme (it defaults to nil).

Since I don't use helm, I haven't considered it.

The purpose of this backend is avoiding the `find-file-noselect' as used
in `org-refile' and the `helm-org-agenda-headings' suggested by John.
It's somewhat in-between using `org-refile' and an indexing with
external tools (recoll for example as recently debated on this list).

Regards,
Bernhard Pröll

On Sat, 01. Aug 16:20, Xebar Saram wrote:
>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öll <bmutbuerger@gmail.com> 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öll
>
>
>    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 <sk8ingdom@gmail.com>
>        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)
>
>
>
>
>
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-01 19:03             ` John Kitchin
  2015-08-01 19:17               ` Dominic Surano
@ 2015-08-02 18:20               ` Xebar Saram
  2015-08-02 18:31                 ` John Kitchin
  1 sibling, 1 reply; 14+ messages in thread
From: Xebar Saram @ 2015-08-02 18:20 UTC (permalink / raw)
  To: John Kitchin; +Cc: org mode, Dominic Surano

[-- Attachment #1: Type: text/plain, Size: 8307 bytes --]

Thx john

i evaled the code yet i cant see it under M-x, am i missing something?

best

Z

On Sat, Aug 1, 2015 at 10:03 PM, John Kitchin <jkitchin@andrew.cmu.edu>
wrote:

> 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 <zeltakc@gmail.com> 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 <jkitchin@andrew.cmu.edu>
> >> 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=
> >>>                               "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öll <
> bmutbuerger@gmail.com>
> >>> > 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öll
> >>> >>
> >>> >>
> >>> >> 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 <
> sk8ingdom@gmail.com
> >>> >
> >>> >>> 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
>

[-- Attachment #2: Type: text/html, Size: 12335 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-02 18:20               ` Xebar Saram
@ 2015-08-02 18:31                 ` John Kitchin
  2015-08-02 18:38                   ` Xebar Saram
  0 siblings, 1 reply; 14+ messages in thread
From: John Kitchin @ 2015-08-02 18:31 UTC (permalink / raw)
  To: Xebar Saram; +Cc: org mode, Dominic Surano

[-- Attachment #1: Type: text/plain, Size: 9159 bytes --]

You are, that code modifies the helm-org-agenda-files-headings function by
adding a new action to it. So, try:

M-x helm-org-agenda-files-headings

select a heading, press tab, and you should see a 4th, new action to insert
an org-id link.

John

-----------------------------------
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


On Sun, Aug 2, 2015 at 2:20 PM, Xebar Saram <zeltakc@gmail.com> wrote:

> Thx john
>
> i evaled the code yet i cant see it under M-x, am i missing something?
>
> best
>
> Z
>
> On Sat, Aug 1, 2015 at 10:03 PM, John Kitchin <jkitchin@andrew.cmu.edu>
> wrote:
>
>> 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 <zeltakc@gmail.com> 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 <jkitchin@andrew.cmu.edu>
>> >> 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=
>> >>>                               "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öll <
>> bmutbuerger@gmail.com>
>> >>> > 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öll
>> >>> >>
>> >>> >>
>> >>> >> 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 <
>> sk8ingdom@gmail.com
>> >>> >
>> >>> >>> 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
>>
>
>

[-- Attachment #2: Type: text/html, Size: 13570 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Insert org-id Link at Point via Outline Path Completion
  2015-08-02 18:31                 ` John Kitchin
@ 2015-08-02 18:38                   ` Xebar Saram
  0 siblings, 0 replies; 14+ messages in thread
From: Xebar Saram @ 2015-08-02 18:38 UTC (permalink / raw)
  To: John Kitchin; +Cc: org mode, Dominic Surano

[-- Attachment #1: Type: text/plain, Size: 9628 bytes --]

Perfect :D

thx so much, as always really appreciate it!

z

On Sun, Aug 2, 2015 at 9:31 PM, John Kitchin <jkitchin@andrew.cmu.edu>
wrote:

> You are, that code modifies the helm-org-agenda-files-headings function by
> adding a new action to it. So, try:
>
> M-x helm-org-agenda-files-headings
>
> select a heading, press tab, and you should see a 4th, new action to
> insert an org-id link.
>
> John
>
> -----------------------------------
> 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
>
>
> On Sun, Aug 2, 2015 at 2:20 PM, Xebar Saram <zeltakc@gmail.com> wrote:
>
>> Thx john
>>
>> i evaled the code yet i cant see it under M-x, am i missing something?
>>
>> best
>>
>> Z
>>
>> On Sat, Aug 1, 2015 at 10:03 PM, John Kitchin <jkitchin@andrew.cmu.edu>
>> wrote:
>>
>>> 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 <zeltakc@gmail.com> 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 <jkitchin@andrew.cmu.edu
>>> >
>>> >> 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=
>>> >>>                               "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öll <
>>> bmutbuerger@gmail.com>
>>> >>> > 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öll
>>> >>> >>
>>> >>> >>
>>> >>> >> 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 <
>>> sk8ingdom@gmail.com
>>> >>> >
>>> >>> >>> 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
>>>
>>
>>
>

[-- Attachment #2: Type: text/html, Size: 14129 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2015-08-02 18:38 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-12 19:57 Insert org-id Link at Point via Outline Path Completion Dominic Surano
2015-07-31  6:43 ` Xebar Saram
2015-07-31  7:13   ` Eric Abrahamsen
2015-08-01  9:07   ` Bernhard Pröll
2015-08-01 13:20     ` Xebar Saram
2015-08-01 16:33       ` John Kitchin
2015-08-01 17:36         ` Xebar Saram
2015-08-01 17:49           ` Xebar Saram
2015-08-01 19:03             ` John Kitchin
2015-08-01 19:17               ` Dominic Surano
2015-08-02 18:20               ` Xebar Saram
2015-08-02 18:31                 ` John Kitchin
2015-08-02 18:38                   ` Xebar Saram
2015-08-02  7:03       ` Bernhard Pröll

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).