emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Mikhail Skorzhinskii <mskorzhinskiy@eml.cc>
To: Org Mode <emacs-orgmode@gnu.org>
Subject: [PATCH] org-agenda.el: customise outline path in echo area
Date: Sat, 25 Dec 2021 16:24:26 +0100	[thread overview]
Message-ID: <645e9e94235057a7b8f4b541fe11677d6f74ccf8.camel@eml.cc> (raw)

* lisp/org-agenda.el (org-agenda-show-outline-path): add an option to
show document title in outline path (instead of file name)
* lisp/org.el (org-get-title-from-file): a function to collect the
document title from the org-mode file
* lisp/org.el (org-display-outline-path): add logic that will collect a
document title and put it into the outline path if
org-agenda-show-outline-path set to 'title
 lisp/org-agenda.el | 11 ++++++++---
 lisp/org.el        | 25 ++++++++++++++++++++++---
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 721ef2ced..817354659 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -1045,9 +1045,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
@@ -9354,7 +9359,7 @@ When called with a prefix argument, include all
archive files as well."
               (org-agenda-tree-to-indirect-buffer nil)
       (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-
 (defun org-agenda-show-tags ()
   "Show the tags applicable to the current item."
diff --git a/lisp/org.el b/lisp/org.el
index ce4e08eab..eab3aed3c 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -8166,10 +8166,24 @@ the default is \"/\"."
        (setf (substring fpath (- width 2)) "..")))
-(defun org-display-outline-path (&optional file current separator
+(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
 the different parts of the path and defaults to \"/\".
@@ -8177,6 +8191,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
+                 (org-get-title-from-file bfn)))
         (path (and (derived-mode-p 'org-mode) (org-get-outline-path)))
     (when current (setq path (append path
@@ -8188,7 +8204,10 @@ If JUST-RETURN-STRING is non-nil, return a
string, don't display a message."
           (1- (frame-width))
-          (and file bfn (concat (file-name-nondirectory bfn)
+          (and file-or-title bfn (concat (if (and (string= file-or-
title 'title) title)
+                                             title
+                                           (file-name-nondirectory
+                                separator))
     (add-face-text-property 0 (length res)
                            `(:height ,(face-attribute 'default

             reply	other threads:[~2021-12-25 15:26 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-25 15:24 Mikhail Skorzhinskii [this message]
2021-12-26 13:44 ` Ihor Radchenko
2021-12-26 13:49   ` Mikhail Skorzhinskiy
2021-12-26 14:01     ` Ihor Radchenko
2021-12-28 12:01   ` Mikhail Skorzhinskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=645e9e94235057a7b8f4b541fe11677d6f74ccf8.camel@eml.cc \
    --to=mskorzhinskiy@eml.cc \
    --cc=emacs-orgmode@gnu.org \
    --subject='Re: [PATCH] org-agenda.el: customise outline path in echo area' \


* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:


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).