Re: [PATCH] org-refile.el: show refile targets with doc. title

2022-08-30 Thread Mikhail Skorzhisnkii
I have signed the FSF papers. However for the simplicity I will send renewed 
patch in different thread. You may consider this thread to be closed.q

E-Mail thread I am going to use is: 


  Thanks,
  Mikhail Skorzhinskii

Ihor Radchenko  writes:

> Mikhail Skorzhinskii  writes:
>
>> Thank you for reviewing the changes. Sorry for the sloppy patch, I’ve
>> retested everything and added a few additional fixes, there were more
>> problems.
>
> Thanks! And sorry for the slow review. Your email was lost near the tail
> of the todo list.
>
>> I’ve added a couple of test cases too. (BTW, test framework is awesome
>> and really easy to use!)
>
> Great!
>
>> * lisp/org-refile.el (org-refile-use-outline-path): add an option ’title
>> * lisp/org-refile.el (org-refile-get-targets): start refile target
>> outline with document title (#+title) instead of file name
>
> Note that changes like this should be detailed in etc/ORG-NEWS
>
>> -  (const :tag “Start with buffer name” buffer-name)))
>> +  (const :tag “Start with buffer name” buffer-name)
>> +  (const :tag “Start with document title” title)))
>
> You also need to document the new option in the docstring.
>
>> +  ;; When `org-refile-use-outline-path’ is `title’ and document do not
>> +  ;; have an extracted document title, return just the file name
>> +  (should
>> +   (org-test-with-temp-text-in-file “* H1”
>> + (let* ((filename (buffer-file-name))
>> +(org-refile-use-outline-path ’title)
>> +(org-refile-targets `(((,filename) :level . 1
>> +   (member (file-name-nondirectory filename)
>> +   (mapcar #’car (org-refile-get-targets)))
>
> It would also make sense to add a test when document is a temporary
> buffer without filename and also does not contain a title.
>
> Finally, your patch is exceeding 15LOC. You need to do copyright
> paperwork to get the patch merged. See
> 
>
> Best,
> Ihor


Re: [PATCH] org-refile.el: show refile targets with doc. title

2022-05-27 Thread Ihor Radchenko
Mikhail Skorzhinskii  writes:

> Thank you for reviewing the changes. Sorry for the sloppy patch, I've
> retested everything and added a few additional fixes, there were more
> problems.

Thanks! And sorry for the slow review. Your email was lost near the tail
of the todo list.

> I've added a couple of test cases too. (BTW, test framework is awesome
> and really easy to use!)

Great!

> * lisp/org-refile.el (org-refile-use-outline-path): add an option 'title
> * lisp/org-refile.el (org-refile-get-targets): start refile target
> outline with document title (#+title) instead of file name

Note that changes like this should be detailed in etc/ORG-NEWS

> -   (const :tag "Start with buffer name" buffer-name)))
> +   (const :tag "Start with buffer name" buffer-name)
> +   (const :tag "Start with document title" title)))

You also need to document the new option in the docstring.
  
> +  ;; When `org-refile-use-outline-path' is `title' and document do not
> +  ;; have an extracted document title, return just the file name
> +  (should
> +   (org-test-with-temp-text-in-file "* H1"
> + (let* ((filename (buffer-file-name))
> +(org-refile-use-outline-path 'title)
> +(org-refile-targets `(((,filename) :level . 1
> +   (member (file-name-nondirectory filename)
> +   (mapcar #'car (org-refile-get-targets)))

It would also make sense to add a test when document is a temporary
buffer without filename and also does not contain a title.

Finally, your patch is exceeding 15LOC. You need to do copyright
paperwork to get the patch merged. See
https://orgmode.org/worg/org-contribute.html#copyright

Best,
Ihor



Re: [PATCH] org-refile.el: show refile targets with doc. title

2021-12-28 Thread Mikhail Skorzhinskii
Hi Ihor,

Thank you for reviewing the changes. Sorry for the sloppy patch, I've
retested everything and added a few additional fixes, there were more
problems.

I've added a couple of test cases too. (BTW, test framework is awesome
and really easy to use!)

I've attached new patch to this email. Let me know what you think.

Thanks,
Mikhail

On Sun, 2021-12-26 at 21:59 +0800, Ihor Radchenko wrote:
> Mikhail Skorzhinskii  writes:
> 
> > * lisp/org-refile.el (org-refile-use-outline-path): add an option
> > 'title
> 
> This is an interesting idea. However, your patch may break things
> quite
> badly. Look at `org-refile-get-location'. It expects a very specific
> format for the refile targets and treats 'file/'full-file-path values
> specially.
> 
> Can you add tests for your new value of org-refile-use-outline-path
> and
> make sure that they do not fail after applying your patch?
> 
> Best,
> Ihor
> 
> 
From e6d3aae4a75e50423924e0eacbcd94cdea7dafe8 Mon Sep 17 00:00:00 2001
From: Mikhail Skorzhinskii 
Date: Mon, 21 Sep 2020 14:53:13 +0200
Subject: [PATCH 2/5] org-refile.el: show refile targets with doc. title

* lisp/org-refile.el (org-refile-use-outline-path): add an option 'title
* lisp/org-refile.el (org-refile-get-targets): start refile target
outline with document title (#+title) instead of file name
---
 lisp/org-refile.el   | 18 +++---
 testing/lisp/test-org.el | 29 -
 2 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/lisp/org-refile.el b/lisp/org-refile.el
index 678759e10..644e9f497 100644
--- a/lisp/org-refile.el
+++ b/lisp/org-refile.el
@@ -158,7 +158,8 @@ When `buffer-name', use the buffer name."
 	  (const :tag "Yes" t)
 	  (const :tag "Start with file name" file)
 	  (const :tag "Start with full file path" full-file-path)
-	  (const :tag "Start with buffer name" buffer-name)))
+	  (const :tag "Start with buffer name" buffer-name)
+	  (const :tag "Start with document title" title)))
 
 (defcustom org-outline-path-complete-in-steps t
   "Non-nil means complete the outline path in hierarchical steps.
@@ -317,6 +318,9 @@ converted to a headline before refiling."
 		 (push (list (and (buffer-file-name (buffer-base-buffer))
   (file-truename (buffer-file-name (buffer-base-buffer
  f nil nil) tgs))
+	   (when (eq org-refile-use-outline-path 'title)
+		 (push (list (or (org-get-title-from-file (file-truename (buffer-file-name (buffer-base-buffer
+ (and f (file-name-nondirectory f))) f nil nil) tgs))
 	   (org-with-wide-buffer
 		(goto-char (point-min))
 		(setq org-outline-path-cache nil)
@@ -343,7 +347,15 @@ converted to a headline before refiling."
(and (buffer-file-name (buffer-base-buffer))
 (file-name-nondirectory
  (buffer-file-name (buffer-base-buffer))
-   (`full-file-path
+   (`title (list
+(or
+ (org-get-title-from-file
+  (file-truename
+   (buffer-file-name (buffer-base-buffer
+ (and (buffer-file-name (buffer-base-buffer))
+ (file-name-nondirectory
+  (buffer-file-name (buffer-base-buffer)))
+   (`full-file-path
 (list (buffer-file-name
 	   (buffer-base-buffer
    (`buffer-name
@@ -631,7 +643,7 @@ this function appends the default value from
 	 (tbl (mapcar
 	   (lambda (x)
 		 (if (and (not (member org-refile-use-outline-path
-   '(file full-file-path)))
+   '(file full-file-path title)))
 			  (not (equal filename (nth 1 x
 		 (cons (concat (car x) extra " ("
    (file-name-nondirectory (nth 1 x)) ")")
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 056ea7d87..a6df00baf 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -6435,7 +6435,34 @@ Paragraph"
(org-test-with-temp-text "* H1"
  (let* ((org-refile-use-outline-path 'buffer-name)
 	(org-refile-targets `((nil :level . 1
-   (member (buffer-name) (mapcar #'car (org-refile-get-targets)))
+   (member (buffer-name) (mapcar #'car (org-refile-get-targets))
+  ;; When `org-refile-use-outline-path' is `title', return extracted
+  ;; document title
+  (should
+   (equal '("T" "T/H1")
+  (org-test-with-temp-text-in-file "#+title: T\n* H1"
+(let* ((filename (buffer-file-name))
+   (org-refile-use-outline-path 'title)
+   (org-refile-targets `(((,filename) :level . 1
+  (mapcar #'car 

Re: [PATCH] org-refile.el: show refile targets with doc. title

2021-12-26 Thread Ihor Radchenko
Mikhail Skorzhinskii  writes:

> * lisp/org-refile.el (org-refile-use-outline-path): add an option
> 'title

This is an interesting idea. However, your patch may break things quite
badly. Look at `org-refile-get-location'. It expects a very specific
format for the refile targets and treats 'file/'full-file-path values
specially.

Can you add tests for your new value of org-refile-use-outline-path and
make sure that they do not fail after applying your patch?

Best,
Ihor





[PATCH] org-refile.el: show refile targets with doc. title

2021-12-25 Thread Mikhail Skorzhinskii


* lisp/org-refile.el (org-refile-use-outline-path): add an option
'title
* lisp/org-refile.el (org-refile-get-targets): start refile target
outline with document title (#+title) instead of file name
---
 lisp/org-refile.el | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lisp/org-refile.el b/lisp/org-refile.el
index 678759e10..8ff1b2f5b 100644
--- a/lisp/org-refile.el
+++ b/lisp/org-refile.el
@@ -158,7 +158,8 @@ When `buffer-name', use the buffer name."
  (const :tag "Yes" t)
  (const :tag "Start with file name" file)
  (const :tag "Start with full file path" full-file-path)
- (const :tag "Start with buffer name" buffer-name)))
+ (const :tag "Start with buffer name" buffer-name)
+ (const :tag "Start with document title" title)))
 
 (defcustom org-outline-path-complete-in-steps t
   "Non-nil means complete the outline path in hierarchical steps.
@@ -317,6 +318,8 @@ converted to a headline before refiling."
 (push (list (and (buffer-file-name (buffer-base-
buffer))
   (file-truename (buffer-file-name
(buffer-base-buffer
  f nil nil) tgs))
+  (when (eq org-refile-use-outline-path 'title)
+    (push (list (org-get-title-from-file (file-truename
(buffer-file-name (buffer-base-buffer f nil nil) tgs))
   (org-with-wide-buffer
(goto-char (point-min))
(setq org-outline-path-cache nil)