Re: [O] org-open-link-from-string in a program

2013-08-04 Thread Eric Abrahamsen
Eric Abrahamsen e...@ericabrahamsen.net writes:

 I'm trying to write a small function that programmatically follows a
 link to a gnus message, then calls
 `gnus-summary-wide-reply-with-original' to start a reply to that
 message. It seemed like `org-open-link-from-string' (after extracting
 the address part from the link) would be the right choice, but I'm
 seeing odd behavior.

 When gnus sets up the reply buffer it also adds several hooks and
 actions for restoring windows and marking messages as responded-to, etc,
 and these hooks and actions depend on the value of (current-buffer) when
 the reply was initiated. That's supposed to be the gnus summary buffer.

 When I call all this from a function, however, (current-buffer)
 continues to return the org buffer I started in, even after the link was
 opened, which confuses gnus, and me. What I mean is this:

 (let ((addr the-address-part-of-the-link))
(org-open-link-from-string addr)
(message %s (current-buffer)) ; returns the org buffer I started in
(call-interactively
  'gnus-summary-wide-reply-with-original))

 There must be something I'm misunderstanding about how buffers work when
 you're doing something non-interactive. If I manually eval the
 org-open-link-from-string statement, I end up in the summary buffer,
 obviously, and all works fine.

 What am I not getting?

 Thanks!
 Eric

I think I've got it: when `org-open-link-from-string' calls
`org-open-at-point', it passes the current buffer as an argument.
`org-open-at-point' then wraps the call to `org-link-protocols'
(specifically `org-gnus-open' in this case) in a `with-current-buffer'
that uses that original buffer.

To be honest I'm not really sure if that's the problem -- once
`org-open-link-from-string' returns, I would think that interior
`with-current-buffer' had passed out of scope. Gnus sets up the reply
buffer after open-link-from-string has returned, by which point I would
think it could get new values of `current-buffer'.

Anyway, it works to replace `org-open-link-from-string' with:

(org-gnus-open (org-link-unescape link-address))

So that's what I'll do! Once I've made sure I haven't broken these
functions while messing with them, I'll post code here.

Eric




Re: [O] org-open-link-from-string in a program

2013-08-03 Thread Thorsten Jolitz
Eric Abrahamsen e...@ericabrahamsen.net writes:

 I'm trying to write a small function that programmatically follows a
 link to a gnus message, then calls
 `gnus-summary-wide-reply-with-original' to start a reply to that
 message. It seemed like `org-open-link-from-string' (after extracting
 the address part from the link) would be the right choice, but I'm
 seeing odd behavior.

 When gnus sets up the reply buffer it also adds several hooks and
 actions for restoring windows and marking messages as responded-to, etc,
 and these hooks and actions depend on the value of (current-buffer) when
 the reply was initiated. That's supposed to be the gnus summary buffer.

 When I call all this from a function, however, (current-buffer)
 continues to return the org buffer I started in, even after the link was
 opened, which confuses gnus, and me. What I mean is this:

 (let ((addr the-address-part-of-the-link))
(org-open-link-from-string addr)
(message %s (current-buffer)) ; returns the org buffer I started in
(call-interactively
  'gnus-summary-wide-reply-with-original))

 There must be something I'm misunderstanding about how buffers work when
 you're doing something non-interactive. If I manually eval the
 org-open-link-from-string statement, I end up in the summary buffer,
 obviously, and all works fine.

#+begin_src emacs-lisp
(defun org-open-link-from-string (s optional arg reference-buffer)
  Open a link in the string S, as if it was in Org-mode.
  [...snip...]
(org-open-at-point arg reference-buffer)
#+end_src

,--
| org-open-at-point is an interactive Lisp function in `org.el'.
|
| (org-open-at-point optional ARG REFERENCE-BUFFER)
|
| Open link at or after point.
| If there is no link at point, this function will search forward up to
| the end of the current line.
| Normally, files will be opened by an appropriate application.  If the
| optional prefix argument ARG is non-nil, Emacs will visit the file.
| With a double prefix argument, try to open outside of Emacs, in the
| application the system uses for this file type.
`--

Maybe because you call

,-
| (org-open-link-from-string addr)
`-

without ARG, Emacs is not visiting the file and thus its buffer does not
become current?

Anyway, when you're done - please share, this is quite interesting.

--
cheers,
Thorsten




Re: [O] org-open-link-from-string in a program

2013-08-03 Thread Eric Abrahamsen
Thorsten Jolitz tjol...@gmail.com writes:

 Eric Abrahamsen e...@ericabrahamsen.net writes:

 I'm trying to write a small function that programmatically follows a
 link to a gnus message, then calls
 `gnus-summary-wide-reply-with-original' to start a reply to that
 message. It seemed like `org-open-link-from-string' (after extracting
 the address part from the link) would be the right choice, but I'm
 seeing odd behavior.

 When gnus sets up the reply buffer it also adds several hooks and
 actions for restoring windows and marking messages as responded-to, etc,
 and these hooks and actions depend on the value of (current-buffer) when
 the reply was initiated. That's supposed to be the gnus summary buffer.

 When I call all this from a function, however, (current-buffer)
 continues to return the org buffer I started in, even after the link was
 opened, which confuses gnus, and me. What I mean is this:

 (let ((addr the-address-part-of-the-link))
(org-open-link-from-string addr)
(message %s (current-buffer)) ; returns the org buffer I started in
(call-interactively
  'gnus-summary-wide-reply-with-original))

 There must be something I'm misunderstanding about how buffers work when
 you're doing something non-interactive. If I manually eval the
 org-open-link-from-string statement, I end up in the summary buffer,
 obviously, and all works fine.

 #+begin_src emacs-lisp
 (defun org-open-link-from-string (s optional arg reference-buffer)
   Open a link in the string S, as if it was in Org-mode.
   [...snip...]
   (org-open-at-point arg reference-buffer)
 #+end_src

 ,--
 | org-open-at-point is an interactive Lisp function in `org.el'.
 |
 | (org-open-at-point optional ARG REFERENCE-BUFFER)
 |
 | Open link at or after point.
 | If there is no link at point, this function will search forward up to
 | the end of the current line.
 | Normally, files will be opened by an appropriate application.  If the
 | optional prefix argument ARG is non-nil, Emacs will visit the file.
 | With a double prefix argument, try to open outside of Emacs, in the
 | application the system uses for this file type.
 `--

 Maybe because you call

 ,-
 | (org-open-link-from-string addr)
 `-

 without ARG, Emacs is not visiting the file and thus its buffer does not
 become current?

Huh, interesting -- I had looked at that function, and assumed that the
what the arg did was to force a file that might otherwise be opened by
an external process to be opened in emacs. I still think that's what it
means (and adding a '(4) doesn't solve the problem), but there's other
stuff in there that might lead to a solution.

 Anyway, when you're done - please share, this is quite interesting.

I will! It's pretty much done, except for this one little bug.




Re: [O] org-open-link-from-string in a program

2013-08-03 Thread Thorsten Jolitz
Eric Abrahamsen e...@ericabrahamsen.net writes:

 Thorsten Jolitz tjol...@gmail.com writes:

 Eric Abrahamsen e...@ericabrahamsen.net writes:

 I'm trying to write a small function that programmatically follows a
 link to a gnus message, then calls
 `gnus-summary-wide-reply-with-original' to start a reply to that
 message. It seemed like `org-open-link-from-string' (after extracting
 the address part from the link) would be the right choice, but I'm
 seeing odd behavior.

[...]

 #+begin_src emacs-lisp
 (defun org-open-link-from-string (s optional arg reference-buffer)
   Open a link in the string S, as if it was in Org-mode.
   [...snip...]
  (org-open-at-point arg reference-buffer)
 #+end_src

 ,--
 | org-open-at-point is an interactive Lisp function in `org.el'.
 |
 | (org-open-at-point optional ARG REFERENCE-BUFFER)
 |
 | Open link at or after point.
 | If there is no link at point, this function will search forward up to
 | the end of the current line.
 | Normally, files will be opened by an appropriate application.  If the
 | optional prefix argument ARG is non-nil, Emacs will visit the file.
 | With a double prefix argument, try to open outside of Emacs, in the
 | application the system uses for this file type.
 `--

 Maybe because you call

 ,-
 | (org-open-link-from-string addr)
 `-

 without ARG, Emacs is not visiting the file and thus its buffer does not
 become current?

 Huh, interesting -- I had looked at that function, and assumed that the
 what the arg did was to force a file that might otherwise be opened by
 an external process to be opened in emacs. I still think that's what it
 means (and adding a '(4) doesn't solve the problem), but there's other
 stuff in there that might lead to a solution.

Yes, you are right about the meaning of ARG, I should have looked twice. 

 Anyway, when you're done - please share, this is quite interesting.

 I will! It's pretty much done, except for this one little bug.

I can imagine that this is very useful for managing phonecalls to be
made in the future...

-- 
cheers,
Thorsten




Re: [O] org-open-link-from-string in a program

2013-08-03 Thread Eric Abrahamsen
Thorsten Jolitz tjol...@gmail.com writes:

 Eric Abrahamsen e...@ericabrahamsen.net writes:

 Thorsten Jolitz tjol...@gmail.com writes:

 Eric Abrahamsen e...@ericabrahamsen.net writes:

 I'm trying to write a small function that programmatically follows a
 link to a gnus message, then calls
 `gnus-summary-wide-reply-with-original' to start a reply to that
 message. It seemed like `org-open-link-from-string' (after extracting
 the address part from the link) would be the right choice, but I'm
 seeing odd behavior.

 [...]

 #+begin_src emacs-lisp
 (defun org-open-link-from-string (s optional arg reference-buffer)
   Open a link in the string S, as if it was in Org-mode.
   [...snip...]
 (org-open-at-point arg reference-buffer)
 #+end_src

 ,--
 | org-open-at-point is an interactive Lisp function in `org.el'.
 |
 | (org-open-at-point optional ARG REFERENCE-BUFFER)
 |
 | Open link at or after point.
 | If there is no link at point, this function will search forward up to
 | the end of the current line.
 | Normally, files will be opened by an appropriate application.  If the
 | optional prefix argument ARG is non-nil, Emacs will visit the file.
 | With a double prefix argument, try to open outside of Emacs, in the
 | application the system uses for this file type.
 `--

 Maybe because you call

 ,-
 | (org-open-link-from-string addr)
 `-

 without ARG, Emacs is not visiting the file and thus its buffer does not
 become current?

 Huh, interesting -- I had looked at that function, and assumed that the
 what the arg did was to force a file that might otherwise be opened by
 an external process to be opened in emacs. I still think that's what it
 means (and adding a '(4) doesn't solve the problem), but there's other
 stuff in there that might lead to a solution.

 Yes, you are right about the meaning of ARG, I should have looked twice. 

 Anyway, when you're done - please share, this is quite interesting.

 I will! It's pretty much done, except for this one little bug.

 I can imagine that this is very useful for managing phonecalls to be
 made in the future...

Well this will only cover composing and replying to emails, but if you
have a function that automatically makes a phone call, I suppose it
would serve as a template...

Mostly I'm doing it because a full half of my work seems to be replying
to interminable emails, and I wanted something that would keep me in the
agenda as much as possible: hit a key on a TODO, type the email, send
it, and there you are back in the agenda again. It's turning out to be
a little more complicated than I thought!




Re: [O] org-open-link-from-string in a program

2013-08-03 Thread Thorsten Jolitz
Eric Abrahamsen e...@ericabrahamsen.net writes:

 Thorsten Jolitz tjol...@gmail.com writes:

 Eric Abrahamsen e...@ericabrahamsen.net writes:

 Thorsten Jolitz tjol...@gmail.com writes:

 Eric Abrahamsen e...@ericabrahamsen.net writes:
 I can imagine that this is very useful for managing phonecalls to be
 made in the future...

 Well this will only cover composing and replying to emails, but if you
 have a function that automatically makes a phone call, I suppose it
 would serve as a template...

did I write phonecalls? I meant emails, obviously, and I stop posting
for today and go out for walk ... ;)

 Mostly I'm doing it because a full half of my work seems to be replying
 to interminable emails, and I wanted something that would keep me in the
 agenda as much as possible: hit a key on a TODO, type the email, send
 it, and there you are back in the agenda again. It's turning out to be
 a little more complicated than I thought!

thats more of less what I imagined, and it definitely sounds useful.

-- 
cheers,
Thorsten




Re: [O] org-open-link-from-string in a program

2013-08-03 Thread Eric Abrahamsen
Eric Abrahamsen e...@ericabrahamsen.net writes:

 I'm trying to write a small function that programmatically follows a
 link to a gnus message, then calls
 `gnus-summary-wide-reply-with-original' to start a reply to that
 message. It seemed like `org-open-link-from-string' (after extracting
 the address part from the link) would be the right choice, but I'm
 seeing odd behavior.

 When gnus sets up the reply buffer it also adds several hooks and
 actions for restoring windows and marking messages as responded-to, etc,
 and these hooks and actions depend on the value of (current-buffer) when
 the reply was initiated. That's supposed to be the gnus summary buffer.

 When I call all this from a function, however, (current-buffer)
 continues to return the org buffer I started in, even after the link was
 opened, which confuses gnus, and me. What I mean is this:

 (let ((addr the-address-part-of-the-link))
(org-open-link-from-string addr)
(message %s (current-buffer)) ; returns the org buffer I started in
(call-interactively
  'gnus-summary-wide-reply-with-original))

 There must be something I'm misunderstanding about how buffers work when
 you're doing something non-interactive. If I manually eval the
 org-open-link-from-string statement, I end up in the summary buffer,
 obviously, and all works fine.

Hmm, I tried sticking a (redisplay) after opening the link, thinking
that might reset what is considered the current buffer, and it still
doesn't do it!