emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCHES 1, 2/2] allow to use document title in agenda and refile outline paths
@ 2020-09-21 13:09 Mikhail Skorzhinskii
  2020-09-21 13:11 ` Mikhail Skorzhinskii
  0 siblings, 1 reply; 2+ messages in thread
From: Mikhail Skorzhinskii @ 2020-09-21 13:09 UTC (permalink / raw)
  To: Org-mode Org-Mode; +Cc: yantar92

Hello everyone,

I've already submitted these features to the mailing list:

  https://lists.gnu.org/archive/html/emacs-orgmode/2020-09/msg00628.html

But even if these changes are really tiny and minor, they are touching very 
different functionality of org-mode. It wasn't good mixing my suggestions for 
agenda and for ox-icalendar. So I'm starting a separate mail thread.

Changes since v1:
  - Allow to customise title path for the refile targets also (thanks to Ihor Radchenko for suggestion);
  - Turn separate option into just an additional value for org-agenda-show-outline-path.

Kind regards,
Mikhail Skorzhinskii




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

* Re: [PATCHES 1, 2/2] allow to use document title in agenda and refile outline paths
  2020-09-21 13:09 [PATCHES 1, 2/2] allow to use document title in agenda and refile outline paths Mikhail Skorzhinskii
@ 2020-09-21 13:11 ` Mikhail Skorzhinskii
  0 siblings, 0 replies; 2+ messages in thread
From: Mikhail Skorzhinskii @ 2020-09-21 13:11 UTC (permalink / raw)
  To: Org-mode Org-Mode; +Cc: yantar92

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

... and of course I forgot to attach actual patches.

On Monday, September 21, 2020 3:09:58 PM CEST Mikhail Skorzhinskii wrote:
> Hello everyone,
> 
> I've already submitted these features to the mailing list:
> 
>   https://lists.gnu.org/archive/html/emacs-orgmode/2020-09/msg00628.html
> 
> But even if these changes are really tiny and minor, they are touching very
> different functionality of org-mode. It wasn't good mixing my suggestions
> for agenda and for ox-icalendar. So I'm starting a separate mail thread.
> 
> Changes since v1:
>   - Allow to customise title path for the refile targets also (thanks to
> Ihor Radchenko for suggestion); - Turn separate option into just an
> additional value for org-agenda-show-outline-path.
> 
> Kind regards,
> Mikhail Skorzhinskii


[-- Attachment #2: 0002-org-refile.el-allow-to-start-refile-targets-with-doc.patch --]
[-- Type: text/x-patch, Size: 2048 bytes --]

From ecdf571291c3a598fa1c767c6a73604ab95bfd02 Mon Sep 17 00:00:00 2001
From: Mikhail Skorzhinskii <mskorzhinskiy@eml.cc>
Date: Mon, 21 Sep 2020 14:53:13 +0200
Subject: [PATCH 2/2] org-refile.el: allow to start refile targets with
 document title

---
 etc/ORG-NEWS       | 2 ++
 lisp/org-refile.el | 5 ++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index e30336f45..6d3945d91 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -16,7 +16,9 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
 
 When set to 'title, will show document title in outline path in echo
 area instead of file name.
+*** New option value for ~org-refile-use-outline-path~
 
+When set to 'title, will show document title in outline path of refile targets.
 * Version 9.4
 ** Incompatible changes
 *** Possibly broken internal file links: please check and fix
diff --git a/lisp/org-refile.el b/lisp/org-refile.el
index 7eb0a9643..e3d17bc35 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.
@@ -315,6 +316,8 @@ converted to a headline before refiling."
 		 (push (list (buffer-name (buffer-base-buffer)) f nil nil) tgs))
 	       (when (eq org-refile-use-outline-path 'full-file-path)
 		 (push (list (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)))))))
 	       (org-with-wide-buffer
 		(goto-char (point-min))
 		(setq org-outline-path-cache nil)
-- 
2.28.0


[-- Attachment #3: 0001-org-agenda.el-allow-to-customize-outline-path-in-ech.patch --]
[-- Type: text/x-patch, Size: 4657 bytes --]

From 4eb0c3011fecb69c6ac5867970e033c62352c2b2 Mon Sep 17 00:00:00 2001
From: Mikhail Skorzhinskii <mskorzhinskiy@eml.cc>
Date: Sat, 12 Sep 2020 18:10:05 +0200
Subject: [PATCH 1/2] org-agenda.el: allow to customize outline path in echo
 area

Some of the org-mode data bases auto-generate file names, so they don't
carry a lot of information and can be noisy. Allowing user to show
document titles instead could be useful. Showing titles is disabled by
default.
---
 etc/ORG-NEWS       |  6 ++++++
 lisp/org-agenda.el | 11 ++++++++---
 lisp/org.el        | 25 ++++++++++++++++++++++---
 3 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 0ed626fb7..e30336f45 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -11,6 +11,12 @@ See the end of the file for license conditions.
 Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
 
 * Version 9.5 (not yet released)
+** New options and settings
+*** New option value for ~org-agenda-show-outline-path~
+
+When set to 'title, will show document title in outline path in echo
+area instead of file name.
+
 * Version 9.4
 ** Incompatible changes
 *** Possibly broken internal file links: please check and fix
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 82fe6091c..17e189317 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -1040,9 +1040,14 @@ current item's tree, in an indirect buffer."
   :type 'boolean)
 
 (defcustom org-agenda-show-outline-path t
-  "Non-nil means show outline path in echo area after line motion."
+  "Non-nil means show outline path in echo area after line motion.
+
+If set to 'title, show document title."
   :group 'org-agenda-startup
-  :type 'boolean)
+  :type '(choice
+	  (const :tag "Don't show outline path in agenda view." nil)
+	  (const :tag "Show outline path with prepended file name." t)
+	  (const :tag "Show outline path with prepended document title. Fallback to file name is no title is present." title)))
 
 (defcustom org-agenda-start-with-entry-text-mode nil
   "The initial value of entry-text-mode in a newly created agenda window."
@@ -8777,7 +8782,7 @@ When called with a prefix argument, include all archive files as well."
 	       (org-agenda-tree-to-indirect-buffer nil)
 	     (org-agenda-show)))
       (and org-agenda-show-outline-path
-	   (org-with-point-at m (org-display-outline-path t))))))
+	   (org-with-point-at m (org-display-outline-path org-agenda-show-outline-path))))))
 
 (defun org-agenda-show-tags ()
   "Show the tags applicable to the current item."
diff --git a/lisp/org.el b/lisp/org.el
index a9fdc7b77..191918860 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -8023,10 +8023,24 @@ the default is \"/\"."
 	(setf (substring fpath (- width 2)) "..")))
     fpath))
 
-(defun org-display-outline-path (&optional file current separator just-return-string)
+(defun org-get-title-from-file (file)
+  "Collect tilte from the provided `org-mode' FILE."
+  (let (title)
+    (when file
+      (with-current-buffer
+	  (get-file-buffer file)
+	(pcase (org-collect-keywords '("TITLE"))
+	  (`(("TITLE" . ,val))
+	   (setq title (car val)))))
+      title)))
+
+
+(defun org-display-outline-path (&optional file-or-title current separator just-return-string)
   "Display the current outline path in the echo area.
 
-If FILE is non-nil, prepend the output with the file name.
+If FILE-OR-TITLE is 'title, prepend outline with file title.  If
+it is non-nil or title is not present in document, prepend
+outline path with the file name.
 If CURRENT is non-nil, append the current heading to the output.
 SEPARATOR is passed through to `org-format-outline-path'.  It separates
 the different parts of the path and defaults to \"/\".
@@ -8034,6 +8048,8 @@ If JUST-RETURN-STRING is non-nil, return a string, don't display a message."
   (interactive "P")
   (let* (case-fold-search
 	 (bfn (buffer-file-name (buffer-base-buffer)))
+	 (title (when (and file-or-title (string= file-or-title 'title))
+		  (org-get-title-from-file bfn)))
 	 (path (and (derived-mode-p 'org-mode) (org-get-outline-path)))
 	 res)
     (when current (setq path (append path
@@ -8045,7 +8061,10 @@ If JUST-RETURN-STRING is non-nil, return a string, don't display a message."
 	  (org-format-outline-path
 	   path
 	   (1- (frame-width))
-	   (and file bfn (concat (file-name-nondirectory bfn) separator))
+	   (and file-or-title bfn (concat (if (and (string= file-or-title 'title) title)
+					      title
+					    (file-name-nondirectory bfn))
+				 separator))
 	   separator))
     (add-face-text-property 0 (length res)
 			    `((t :height ,(face-attribute 'default :height)))
-- 
2.28.0


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

end of thread, other threads:[~2020-09-21 13:15 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-21 13:09 [PATCHES 1, 2/2] allow to use document title in agenda and refile outline paths Mikhail Skorzhinskii
2020-09-21 13:11 ` Mikhail Skorzhinskii

Code repositories for project(s) associated with this 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).