* refile captured to all opened Org buffer files as targets
@ 2019-12-25 13:01 stardiviner
2019-12-25 15:40 ` Ihor Radchenko
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: stardiviner @ 2019-12-25 13:01 UTC (permalink / raw)
To: Org Mode, Nicolas Goaziou
I recently created an org-capture template for elfeed, it is finished. Now I
have an idea is to refile it to all currently opened Org buffer files. So I
created an function for ~org-refile-targets~ variable.
#+begin_src emacs-lisp
(defun org-refile-targets-all-files ()
"Use all currently opened Org buffer files as org-refile targets."
(mapcar 'buffer-file-name
(seq-filter (lambda (buffer) (if-let (file (buffer-file-name buffer)) (f-ext? file "org"))) ; filter Org buffers
(buffer-list))))
#+end_src
Then set ~org-refile-targets~ to use upper custom function
#+begin_src emacs-lisp :eval no
(setq org-refile-targets '((nil :maxlevel . 3) ; current buffer headlies
(org-agenda-files :maxlevel . 2) ; agenda files headlines
(org-refile-targets-all-files :maxlevel . 3) ; all opened Org buffer files headlines
))
#+end_src
Can I add this as a patch to Org Mode repository?
--
[ stardiviner ]
I try to make every word tell the meaning what I want to express.
Blog: https://stardiviner.github.io/
IRC(freenode): stardiviner, Matrix: stardiviner
GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: refile captured to all opened Org buffer files as targets
2019-12-25 13:01 refile captured to all opened Org buffer files as targets stardiviner
@ 2019-12-25 15:40 ` Ihor Radchenko
2019-12-27 1:32 ` stardiviner
2019-12-27 1:17 ` stardiviner
2019-12-27 6:34 ` Adam Porter
2 siblings, 1 reply; 7+ messages in thread
From: Ihor Radchenko @ 2019-12-25 15:40 UTC (permalink / raw)
To: numbchild, Org Mode, Nicolas Goaziou
[offtopic]
> I recently created an org-capture template for elfeed, it is finished.
Could you share your capture template?
stardiviner <numbchild@gmail.com> writes:
> I recently created an org-capture template for elfeed, it is finished. Now I
> have an idea is to refile it to all currently opened Org buffer files. So I
> created an function for ~org-refile-targets~ variable.
>
> #+begin_src emacs-lisp
> (defun org-refile-targets-all-files ()
> "Use all currently opened Org buffer files as org-refile targets."
> (mapcar 'buffer-file-name
> (seq-filter (lambda (buffer) (if-let (file (buffer-file-name buffer)) (f-ext? file "org"))) ; filter Org buffers
> (buffer-list))))
> #+end_src
>
> Then set ~org-refile-targets~ to use upper custom function
>
> #+begin_src emacs-lisp :eval no
> (setq org-refile-targets '((nil :maxlevel . 3) ; current buffer headlies
> (org-agenda-files :maxlevel . 2) ; agenda files headlines
> (org-refile-targets-all-files :maxlevel . 3) ; all opened Org buffer files headlines
> ))
> #+end_src
>
> Can I add this as a patch to Org Mode repository?
>
> --
> [ stardiviner ]
> I try to make every word tell the meaning what I want to express.
>
> Blog: https://stardiviner.github.io/
> IRC(freenode): stardiviner, Matrix: stardiviner
> GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
>
>
--
Ihor Radchenko,
PhD,
Center for Advancing Materials Performance from the Nanoscale (CAMP-nano)
State Key Laboratory for Mechanical Behavior of Materials, Xi'an Jiaotong University, Xi'an, China
Email: yantar92@gmail.com, ihor_radchenko@alumni.sutd.edu.sg
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: refile captured to all opened Org buffer files as targets
2019-12-25 15:40 ` Ihor Radchenko
@ 2019-12-27 1:32 ` stardiviner
2019-12-27 7:54 ` Ihor Radchenko
0 siblings, 1 reply; 7+ messages in thread
From: stardiviner @ 2019-12-27 1:32 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: Nicolas Goaziou, Org Mode
Ihor Radchenko <yantar92@gmail.com> writes:
> [offtopic]
>
>> I recently created an org-capture template for elfeed, it is finished.
>
> Could you share your capture template?
Sure, here it is:
#+begin_src emacs-lisp
;; support Org Mode Capture template
(defun my/org-capture-elfeed-title ()
(with-current-buffer "*elfeed-entry*"
(elfeed-entry-title elfeed-show-entry)))
(defun my/org-capture-elfeed-date ()
(with-current-buffer "*elfeed-entry*"
(format-time-string
"[%Y-%m-%d %a %H:%M]"
(seconds-to-time (elfeed-entry-date elfeed-show-entry)))))
(defun my/org-capture-elfeed-source ()
(with-current-buffer "*elfeed-entry*"
(let ((feed (elfeed-entry-feed elfeed-show-entry)))
(elfeed-feed-title feed))))
(defun my/org-capture-elfeed-content ()
(with-current-buffer "*elfeed-entry*"
(let* ((content (elfeed-deref (elfeed-entry-content elfeed-show-entry)))
(type (elfeed-entry-content-type elfeed-show-entry))
(feed (elfeed-entry-feed elfeed-show-entry))
(base-url (and feed (elfeed-compute-base (elfeed-feed-url feed)))))
(if content
(if (eq type 'html)
(org-web-tools--html-to-org-with-pandoc content)
(insert content))))))
(add-to-list 'org-capture-templates
'("R" "Capture elfeed [R]SS feed content to Org buffer"
entry (file "")
"* %(my/org-capture-elfeed-title)
:PROPERTIES:
:SOURCE: %(my/org-capture-elfeed-source)
:DATE(original): %(my/org-capture-elfeed-date)
:DATE: %u
:END:
%(my/org-capture-elfeed-content)"
:empty-lines 1
:jump-to-captured t))
#+end_src
If possible, I might submit this PR to elfeed.el repository.
--
[ stardiviner ]
I try to make every word tell the meaning what I want to express.
Blog: https://stardiviner.github.io/
IRC(freenode): stardiviner, Matrix: stardiviner
GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: refile captured to all opened Org buffer files as targets
2019-12-27 1:32 ` stardiviner
@ 2019-12-27 7:54 ` Ihor Radchenko
0 siblings, 0 replies; 7+ messages in thread
From: Ihor Radchenko @ 2019-12-27 7:54 UTC (permalink / raw)
To: stardiviner; +Cc: Nicolas Goaziou, Org Mode
Thanks!
org-web-tools--html-to-org-with-pandoc is an interesting idea. I was
using elfeed-insert-html for this purpose.
Also, note that your capture may be messed up when the rss content
contains org-mode text. A real-case scenario from Stack Exchange rss:
> I'd like to find a way to jump to a location in an org-mode file while automatically unfolding only the heading at the location I'm jumping to and all its parent headings (but not any sibling headings).
>
> For example, if I have this org-mode file:
>
> * A
> ** AA
If you insert the rss entry contents as is, two unexpected headings will
be created.
I use the following to escape possible org-mode text:
(setq content-text (with-temp-buffer (when content
(if (eq content-type 'html)
(elfeed-insert-html content)
(insert content)))
(let ((org-babel-min-lines-for-block-output 0)) ;; handle org-mode syntax in body
(org-escape-code-in-region (point-min) (point-max)))
(buffer-string)))
Best,
Ihor
stardiviner <numbchild@gmail.com> writes:
> Ihor Radchenko <yantar92@gmail.com> writes:
>
>> [offtopic]
>>
>>> I recently created an org-capture template for elfeed, it is finished.
>>
>> Could you share your capture template?
>
> Sure, here it is:
>
> #+begin_src emacs-lisp
> ;; support Org Mode Capture template
> (defun my/org-capture-elfeed-title ()
> (with-current-buffer "*elfeed-entry*"
> (elfeed-entry-title elfeed-show-entry)))
> (defun my/org-capture-elfeed-date ()
> (with-current-buffer "*elfeed-entry*"
> (format-time-string
> "[%Y-%m-%d %a %H:%M]"
> (seconds-to-time (elfeed-entry-date elfeed-show-entry)))))
> (defun my/org-capture-elfeed-source ()
> (with-current-buffer "*elfeed-entry*"
> (let ((feed (elfeed-entry-feed elfeed-show-entry)))
> (elfeed-feed-title feed))))
> (defun my/org-capture-elfeed-content ()
> (with-current-buffer "*elfeed-entry*"
> (let* ((content (elfeed-deref (elfeed-entry-content elfeed-show-entry)))
> (type (elfeed-entry-content-type elfeed-show-entry))
> (feed (elfeed-entry-feed elfeed-show-entry))
> (base-url (and feed (elfeed-compute-base (elfeed-feed-url feed)))))
> (if content
> (if (eq type 'html)
> (org-web-tools--html-to-org-with-pandoc content)
> (insert content))))))
>
> (add-to-list 'org-capture-templates
> '("R" "Capture elfeed [R]SS feed content to Org buffer"
> entry (file "")
> "* %(my/org-capture-elfeed-title)
> :PROPERTIES:
> :SOURCE: %(my/org-capture-elfeed-source)
> :DATE(original): %(my/org-capture-elfeed-date)
> :DATE: %u
> :END:
>
> %(my/org-capture-elfeed-content)"
> :empty-lines 1
> :jump-to-captured t))
> #+end_src
>
> If possible, I might submit this PR to elfeed.el repository.
>
> --
> [ stardiviner ]
> I try to make every word tell the meaning what I want to express.
>
> Blog: https://stardiviner.github.io/
> IRC(freenode): stardiviner, Matrix: stardiviner
> GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: refile captured to all opened Org buffer files as targets
2019-12-25 13:01 refile captured to all opened Org buffer files as targets stardiviner
2019-12-25 15:40 ` Ihor Radchenko
@ 2019-12-27 1:17 ` stardiviner
2019-12-27 6:34 ` Adam Porter
2 siblings, 0 replies; 7+ messages in thread
From: stardiviner @ 2019-12-27 1:17 UTC (permalink / raw)
To: Org Mode
I improved command to get ride of =f.el= library function:
#+begin_src emacs-lisp
(defun org-refile-targets-all-files ()
"Use all currently opened Org buffer files as org-refile targets."
(mapcar 'buffer-file-name
(seq-filter ; filter Org buffers
(lambda (buffer)
(if-let (file (buffer-file-name buffer))
(string-equal (file-name-extension file) "org")
;; (f-ext? file "org")
))
(buffer-list))))
#+end_src
Here is the configured option:
#+begin_src emacs-lisp
(setq org-refile-targets '((nil :maxlevel . 3) ; current buffer headlines
(org-agenda-files :maxlevel . 2) ; agenda files headlines
(org-refile-targets-all-files :maxlevel . 3) ; all opened Org buffer files headlines
))
#+end_src
I think this can be an option for user who might think this is useful like in my
situation. (I want to refile capture elfeed RSS entry to one of my opened Org
buffer's specific headline.)
--
[ stardiviner ]
I try to make every word tell the meaning what I want to express.
Blog: https://stardiviner.github.io/
IRC(freenode): stardiviner, Matrix: stardiviner
GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: refile captured to all opened Org buffer files as targets
2019-12-25 13:01 refile captured to all opened Org buffer files as targets stardiviner
2019-12-25 15:40 ` Ihor Radchenko
2019-12-27 1:17 ` stardiviner
@ 2019-12-27 6:34 ` Adam Porter
2019-12-27 14:10 ` stardiviner
2 siblings, 1 reply; 7+ messages in thread
From: Adam Porter @ 2019-12-27 6:34 UTC (permalink / raw)
To: emacs-orgmode
stardiviner <numbchild@gmail.com> writes:
> I recently created an org-capture template for elfeed, it is finished. Now I
> have an idea is to refile it to all currently opened Org buffer files. So I
> created an function for ~org-refile-targets~ variable.
>
> #+begin_src emacs-lisp
> (defun org-refile-targets-all-files ()
> "Use all currently opened Org buffer files as org-refile targets."
> (mapcar 'buffer-file-name
> (seq-filter (lambda (buffer) (if-let (file (buffer-file-name buffer)) (f-ext? file "org"))) ; filter Org buffers
> (buffer-list))))
> #+end_src
>
>
> Then set ~org-refile-targets~ to use upper custom function
>
> #+begin_src emacs-lisp :eval no
> (setq org-refile-targets '((nil :maxlevel . 3) ; current buffer headlies
> (org-agenda-files :maxlevel . 2) ; agenda files headlines
> (org-refile-targets-all-files :maxlevel . 3) ; all opened Org buffer files headlines
> ))
> #+end_src
>
> Can I add this as a patch to Org Mode repository?
org-buffer-list is a compiled Lisp function in ‘org.el’.
(org-buffer-list &optional PREDICATE EXCLUDE-TMP)
Return a list of Org buffers.
PREDICATE can be ‘export’, ‘files’ or ‘agenda’.
export restrict the list to Export buffers.
files restrict the list to buffers visiting Org files.
agenda restrict the list to buffers visiting agenda files.
If EXCLUDE-TMP is non-nil, ignore temporary buffers.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: refile captured to all opened Org buffer files as targets
2019-12-27 6:34 ` Adam Porter
@ 2019-12-27 14:10 ` stardiviner
0 siblings, 0 replies; 7+ messages in thread
From: stardiviner @ 2019-12-27 14:10 UTC (permalink / raw)
To: emacs-orgmode
Adam Porter <adam@alphapapa.net> writes:
> org-buffer-list is a compiled Lisp function in ‘org.el’.
>
> (org-buffer-list &optional PREDICATE EXCLUDE-TMP)
>
> Return a list of Org buffers.
> PREDICATE can be ‘export’, ‘files’ or ‘agenda’.
>
> export restrict the list to Export buffers.
> files restrict the list to buffers visiting Org files.
> agenda restrict the list to buffers visiting agenda files.
>
> If EXCLUDE-TMP is non-nil, ignore temporary buffers.
This is very awesome, thanks! :)
--
[ stardiviner ]
I try to make every word tell the meaning what I want to express.
Blog: https://stardiviner.github.io/
IRC(freenode): stardiviner, Matrix: stardiviner
GPG: F09F650D7D674819892591401B5DF1C95AE89AC3
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-12-27 14:10 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-25 13:01 refile captured to all opened Org buffer files as targets stardiviner
2019-12-25 15:40 ` Ihor Radchenko
2019-12-27 1:32 ` stardiviner
2019-12-27 7:54 ` Ihor Radchenko
2019-12-27 1:17 ` stardiviner
2019-12-27 6:34 ` Adam Porter
2019-12-27 14:10 ` stardiviner
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).