Re: refile captured to all opened Org buffer files as targets

2019-12-27 Thread stardiviner


Adam Porter  writes:

> org-buffer-list is a compiled Lisp function in ‘org.el’.
>
> (org-buffer-list  PREDICATE EXCLUDE-TMP)
>
> Return a list of Org buffers.
> PREDICATE can be ‘export’, ‘files’ or ‘agenda’.
>
> export   restrict the list to Export buffers.
> filesrestrict 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
  



Re: refile captured to all opened Org buffer files as targets

2019-12-26 Thread Ihor Radchenko
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  writes:

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




Re: refile captured to all opened Org buffer files as targets

2019-12-26 Thread Adam Porter
stardiviner  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  PREDICATE EXCLUDE-TMP)

Return a list of Org buffers.
PREDICATE can be ‘export’, ‘files’ or ‘agenda’.

export   restrict the list to Export buffers.
filesrestrict 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.





Re: refile captured to all opened Org buffer files as targets

2019-12-26 Thread stardiviner


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



Re: refile captured to all opened Org buffer files as targets

2019-12-26 Thread stardiviner


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
  



Re: refile captured to all opened Org buffer files as targets

2019-12-25 Thread Ihor Radchenko
[offtopic]

> I recently created an org-capture template for elfeed, it is finished. 

Could you share your capture template?


stardiviner  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: yanta...@gmail.com, ihor_radche...@alumni.sutd.edu.sg



refile captured to all opened Org buffer files as targets

2019-12-25 Thread stardiviner


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