emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Mikhail Skorzhisnkii <mskorzhinskii@eml.cc>
To: Ihor Radchenko <yantar92@gmail.com>
Cc: Org Mode <emacs-orgmode@gnu.org>
Subject: Re: [PATCH] ox-icalendar.el: customizable vevent summary prefix
Date: Sun, 23 Oct 2022 21:15:10 +0200	[thread overview]
Message-ID: <878rl6wcbv.fsf@eml.cc> (raw)
In-Reply-To: <874jxgety7.fsf@localhost>

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

Hi, Ihor,

Sorry for the delay with fixes, took some time before I got time to finish this. Thanks for your review and looking forward for the next iteration. See new version in the attachment. Comments are inline.

Ihor Radchenko <yantar92@gmail.com> writes:

> Mikhail Skorzhisnkii <mskorzhinskii@eml.cc> writes:
>
>> Thank you for suggestion, I seen an announcement about this function, but somehow forgot about it.
>>
>> Sending next version of these patches. Changes from the next version:
>
> Thanks!
>
>> Subject: [PATCH 3/3] org-refile.el: show refile targets with a title
>>
>> * lisp/org-refile.el (org-refile-get-targets): Use a document
>> title (#+TITLE) instead of file or buffer name in outline path, if
>> a corresponding customisation option is set to ’title. Fallback to a
>> filename if there is no title in the document.
>
> Please use 2 spaces between sentences in docstrings, comments, and
> commit messages. Also, end sentences with “.”. See
> <https://orgmode.org/worg/org-contribute.html#commit-messages> and
> <https://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html>
>

Fixed.

>>  (defcustom org-outline-path-complete-in-steps t
>>    “Non-nil means complete the outline path in hierarchical steps.
>> @@ -319,6 +320,11 @@ 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)
>> +                                 (and f (file-name-nondirectory f)))
>> +                             f nil nil)
>> +                       tgs))
>
> We have very too many whens in this function. It will be more succinct
> to use a single (pcase org-refile-use-outline-path …) instead.

Yes. But then I will be refactoring quite a lot of (working) code that I have not actually touching.

I would prefer doing that in the separate patch. You’ve suggested some changes in my patches which could be applied to some other places in org-mode files I have seen. May be once we finish this discussion I would send a new series of patches with restyling?

>> +  ;; 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”
>
> You may as well add a test when multiple #+title lines are present.

Added.

>> From 62684b478ae5ceb03f66967fbebcc4d6163c826c Mon Sep 17 00:00:00 2001
>> From: Mikhail Skorzhinskii <mskorzhinskii@eml.cc>
>> Date: Sat, 12 Sep 2020 18:10:05 +0200
>> Subject: [PATCH 2/3] org-agenda.el: show document title in outline path
>                                      ^Show

Fixed.

>> * lisp/org.el (org-display-outline-path): Show a document title (#+TITLE
>> value) and an outline path in an echo area if the customisation option
>> is set to ’title. Fallback to a file or a buffer name if the document
>                   ^  Fallback ;; (double space between sentences)

Fixed.

>> title is absent.
>
>>  ** New options
>> -*** New custom settings `org-icalendar-scheduled-summary-prefix' and `org-icalendar-deadline-summary-prefix'
>
> This is removing an existing NEWS entry. I guess it is not intentional.

Yes. Sorry about that — fixed.

>> +*** A new option for custom setting `org-agenda-show-outline-path' to show document title
>>
>>  (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 outline path with prepended document
>> +title.  Fallback to file name is no title is present.”
>>    :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)))
>
> I think you can leave
> (const :tag “Show outline path with prepended document title.” title)
>
> This text will be displayed in drop menu in cutomize interface alongside
> with the full docstring. Mentioning the fallback in the docstring should
> be good enough.

Agreed. Fixed.

>> From 5b15f886b22dc542220b48ae9659c4c2d56dea78 Mon Sep 17 00:00:00 2001
>> From: Mikhail Skorzhinskii <mskorzhinskii@eml.cc>
>> Date: Thu, 8 Sep 2022 21:29:23 +0200
>> Subject: [PATCH 1/3] org-clock.el: rename org-clock-get-file-title
>                                     ^Rename

Fixed.

>> * lisp/org.el (org-get-title): A new function to collect a document
>> title from an org-mode buffer, based on a org-clock-get-file-title
>> implementation.
>
> `org-clock-get-file-title’. Elisp symbols should be quoted.

Done. (on a side note, all my email clients show ` and ’ quite differently. I wonder why.)

>>  ** New functions and changes in function arguments
>> +*** New function `org-get-title' to get `#+TITLE:' property from buffers
>
> We generally use `code' for Elisp symbols and `#+TITLE:' for verbatim
> non-code text. (This has not been consistently followed in etc/NEWS, but
> at least please change `#+TITLE' to `#+TITLE'). See
> doc/Documentation_Standards.org

Ah, yes. There are many occasions in the ORG-NEWS where this is not followed. Would you be interested in the patch fixing these irregularities?

And if you do, would you prefer to have a fixed-up commits for these ones or just one big commit? I recently learned about existence of git absorb and couldn’t recommend it enough.

>>  ** Removed or renamed functions and variables
>> +*** Rename `org-clock-get-file-title' to `org-get-file-title'
>> +
>> +This function is now part of the `org.el' file.
>
> You do not need to mention this. org-clock-get-file-title was
> introduced in recent commits on main. Main is development branch, and we
> do not need to document changes on the changes made after the last
> release.

OK. Fixed, left only a note about new function. I would say some users may find it interesting. I had a function that extracts title for many-many years. Used it for displaying document title in the frame title.

>>  ;;;###autoload
>>  (defun org-dblock-write:clocktable (params)
>>    “Write the standard clocktable.”
>> @@ -2739,7 +2729,7 @@ from the dynamic block definition.“
>>  			     ”\n“)
>>
>>                       (if filetitle
>> -                         (org-clock-get-file-title file-name)
>> +                         (org-get-file-title file-name)
>>                         (file-name-nondirectory file-name))
>>  		     (if level?    ”| “ ”“) ;level column, maybe
>>  		     (if timestamp ”| “ ”“) ;timestamp column, maybe
>
> This may introduce a compiler warning. I suggest running make after
> applying your patch and fix possible compiler warnings. (I suspect that
> you may need to add declare-function on top of org-clock.el)

Hm, I have tried it on the latest stable emacs (28.2) and it does not produce me a warning. `make compile' was just clean. Could you please refer me to the library/documentation why would I need to call `declare-function'? This is something from cl library?

>> +(defun org-get-file-title (file-name)
>> +  “Collect title from `org-mode’ FILE-NAME.
>> +
>> +Return file name if title does not exist.”
>> +  (or (org-get-title (find-file-noselect file-name))
>> +      (file-name-nondirectory file-name)))
>> +
>> +(defun org-get-title (&optional buffer)
>> +  “Collect title from the provided `org-mode’ BUFFER.
>> +
>> +Returns nil if there are no #+TITLE property.”
>> +  (let ((buffer (or (buffer-base-buffer)
>> +                    buffer
>> +                    (current-buffer))))
>> +    (with-current-buffer buffer
>> +      (org-macro-initialize-templates)
>> +      (let ((title (assoc-default “title” org-macro-templates)))
>> +        (unless (string= “” title)
>> +          title)))))
>
> These two functions can be merged into a single `org-get-title’ that
> accepts buffer or file-name as an optional argument.

Merged, but a little bit differently. Now the function accepts buffer or file. Also, I removed the basebuffer logic, because this logic is already included in the `org-macro-initialize-templates'.

Thanks,
Mikhail Skorzhinskii

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0003-org-refile.el-Show-refile-targets-with-a-title.patch --]
[-- Type: text/x-diff, Size: 6996 bytes --]

From 870f01312242fcbc56a66efb3a10d5bcf42144d6 Mon Sep 17 00:00:00 2001
From: Mikhail Skorzhinskii <mskorzhinskii@eml.cc>
Date: Mon, 21 Sep 2020 14:53:13 +0200
Subject: [PATCH 3/3] org-refile.el: Show refile targets with a title

* lisp/org-refile.el (org-refile-get-targets): Use a document
title (#+TITLE) instead of file or buffer name in outline path, if a
corresponding customisation option is set to 'title.  Fallback to a
filename if there is no title in the document.

* lisp/org-refile.el (org-refile-use-outline-path): Add a new option
'title, see above.
---
 etc/ORG-NEWS             |  6 +++++
 lisp/org-refile.el       | 17 ++++++++++---
 testing/lisp/test-org.el | 55 +++++++++++++++++++++++++++++++++++++++-
 3 files changed, 74 insertions(+), 4 deletions(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 7b64f1b9d..2a2501c45 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -324,6 +324,12 @@ value of ~org-babel-clojure-backend~. For example:
 #+end_src
 
 ** New options
+*** A new option for custom setting ~org-refile-use-outline-path~ to show document title in refile targets
+
+Setting ~org-refile-use-outline-path~ to ~'title~ will show title
+instead of the file name in refile targets. If the documen do not have
+a title, the filename will be used, similar to ~'file~ option.
+
 *** A new option for custom setting ~org-agenda-show-outline-path~ to show document title
 
 Setting ~org-agenda-show-outline-path~ to ~'title~ will show title
diff --git a/lisp/org-refile.el b/lisp/org-refile.el
index edab0b225..6dd76d380 100644
--- a/lisp/org-refile.el
+++ b/lisp/org-refile.el
@@ -160,7 +160,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.
@@ -319,6 +320,11 @@ 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)
+                                 (and f (file-name-nondirectory f)))
+                             f nil nil)
+                       tgs))
 	       (org-with-wide-buffer
 		(goto-char (point-min))
 		(setq org-outline-path-cache nil)
@@ -345,7 +351,12 @@ 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)
+                                                (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
@@ -633,7 +644,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 4a6a3a0b0..334022c98 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -6821,7 +6821,60 @@ Paragraph<point>"
    (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* ((org-refile-use-outline-path 'title)
+             (org-refile-targets `((nil :level . 1))))
+        (mapcar #'car (org-refile-get-targets))))))
+  ;; When `org-refile-use-outline-path' is `title' validate that
+  ;; deeper levels are correctly reported too (the same behaviour as
+  ;; 'file)
+  (should
+   (equal '("T" "T/H1" "T/H1/H2" "T/H1/H2/H3" "T/H1")
+     (org-test-with-temp-text-in-file "#+title: T\n* H1\n** H2\n*** H3\n* H1"
+       (let ((org-refile-use-outline-path 'title)
+             (org-refile-targets `((nil :maxlevel . 3))))
+         (mapcar #'car (org-refile-get-targets))))))
+  ;; 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 `((nil :level . 1))))
+       (member (file-name-nondirectory filename)
+               (mapcar #'car (org-refile-get-targets))))))
+  ;; When `org-refile-use-outline-path' is `title' and document is a
+  ;; temporary buffer without a file, it is still possible to extract
+  ;; a title
+  (should
+   (equal '("T" "T/H1")
+     (org-test-with-temp-text "#+title: T\n* H1\n** H2"
+      (let* ((org-refile-use-outline-path 'title)
+             (org-refile-targets `((nil :level . 1))))
+      (mapcar #'car (org-refile-get-targets))))))
+  ;; When `org-refile-use-outline-path' is `title' and there are two
+  ;; title keywords in the file, titles are concatenated into a single
+  ;; one.
+  (should
+   (equal '("T1 T2" "T1 T2/H1")
+     (org-test-with-temp-text "#+title: T1\n#+title: T2\n* H1\n** H2"
+       (let* ((org-refile-use-outline-path 'title)
+              (org-refile-targets `((nil :level . 1))))
+       (mapcar #'car (org-refile-get-targets))))))
+  ;; When `org-refile-use-outline-path' is `title' and there are two
+  ;; title keywords in the file, titles are concatenated into a single
+  ;; one even if they are in the middle of the file.
+  (should
+   (equal '("T1 T2" "T1 T2/H1")
+     (org-test-with-temp-text "#+title: T1\n* H1\n** H2\n#+title: T2\n"
+       (let* ((org-refile-use-outline-path 'title)
+              (org-refile-targets `((nil :level . 1))))
+       (mapcar #'car (org-refile-get-targets)))))))
 
 
 \f
-- 
2.35.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-org-agenda.el-Show-document-title-in-outline-path.patch --]
[-- Type: text/x-diff, Size: 4645 bytes --]

From 12da8c1ccd1efa9c4f1282d213a46f93bf10410d Mon Sep 17 00:00:00 2001
From: Mikhail Skorzhinskii <mskorzhinskii@eml.cc>
Date: Sat, 12 Sep 2020 18:10:05 +0200
Subject: [PATCH 2/3] org-agenda.el: Show document title in outline path

* lisp/org-agenda.el (org-agenda-show-outline-path): Add an option to
show a document title at start of an outline path, instead of a file or
a buffer name.

* lisp/org.el (org-display-outline-path): Show a document title (#+TITLE
value) and an outline path in an echo area if the customisation option
is set to 'title.  Fallback to a file or a buffer name if the document
title is absent.
---
 etc/ORG-NEWS       |  6 ++++++
 lisp/org-agenda.el | 12 +++++++++---
 lisp/org.el        | 12 +++++++++---
 3 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index e96aa482b..7b64f1b9d 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -324,6 +324,12 @@ value of ~org-babel-clojure-backend~. For example:
 #+end_src
 
 ** New options
+*** A new option for custom setting ~org-agenda-show-outline-path~ to show document title
+
+Setting ~org-agenda-show-outline-path~ to ~'title~ will show title
+instead of the file name at the beginning of the outline. The title of
+the document can be set by special keyword =#+title:=.
+
 *** New custom settings =org-icalendar-scheduled-summary-prefix= and =org-icalendar-deadline-summary-prefix=
 
 These settings allow users to define prefixes for exported summary
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 3bac53965..6c0be68ac 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -1068,9 +1068,15 @@ 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 outline path with prepended document
+title.  Fallback to file name is no title is present."
   :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." title)))
 
 (defcustom org-agenda-start-with-entry-text-mode nil
   "The initial value of entry-text-mode in a newly created agenda window."
@@ -9468,7 +9474,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 f51e6d6d9..e93a81210 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -7437,10 +7437,12 @@ Returns nil if there are no #+TITLE property."
         (unless (string= "" title)
           title)))))
 
-(defun org-display-outline-path (&optional file current separator just-return-string)
+(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 \"/\".
@@ -7448,6 +7450,7 @@ 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-prop (when (eq file-or-title 'title) (org-get-title)))
 	 (path (and (derived-mode-p 'org-mode) (org-get-outline-path)))
 	 res)
     (when current (setq path (append path
@@ -7459,7 +7462,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 (eq file-or-title 'title) title-prop)
+					      title-prop
+					    (file-name-nondirectory bfn))
+				 separator))
 	   separator))
     (add-face-text-property 0 (length res)
 			    `(:height ,(face-attribute 'default :height))
-- 
2.35.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0001-org-clock.el-Rename-org-clock-get-file-title.patch --]
[-- Type: text/x-diff, Size: 3363 bytes --]

From 669bb68aae3da16d0336bb7e6e1950bb716c8719 Mon Sep 17 00:00:00 2001
From: Mikhail Skorzhinskii <mskorzhinskii@eml.cc>
Date: Thu, 8 Sep 2022 21:29:23 +0200
Subject: [PATCH 1/3] org-clock.el: Rename org-clock-get-file-title

* lisp/org.el (org-get-title): A new function to collect a document
title from an org-mode buffer, based on a `org-clock-get-file-title'
implementation.

* lisp/org-clock.el (org-clock-get-file-title): Removed
---
 etc/ORG-NEWS      |  4 ++++
 lisp/org-clock.el | 13 ++-----------
 lisp/org.el       | 14 ++++++++++++++
 3 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index c18c03725..e96aa482b 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -361,6 +361,10 @@ event time when the alarm time is set to 0.  The default value is
 nil -- do not create alarms at the event time.
 
 ** New functions and changes in function arguments
+*** New function ~org-get-title~ to get =#+TITLE:= property from buffers
+
+A function to collect the document title from the org-mode buffer.
+
 *** ~org-fold-show-entry~ does not fold drawers by default anymore
 
 ~org-fold-show-entry~ now accepts an optional argument HIDE-DRAWERS.
diff --git a/lisp/org-clock.el b/lisp/org-clock.el
index 6332399bb..e98a34f0d 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -2484,16 +2484,6 @@ the currently selected interval size."
 	  (org-update-dblock)
 	  t)))))
 
-(defun org-clock-get-file-title (file-name)
-  "Get the file title from FILE-NAME as a string.
-Return short FILE-NAME if #+title keyword is not found."
-  (with-current-buffer (find-file-noselect file-name)
-    (org-macro-initialize-templates)
-    (let ((title (assoc-default "title" org-macro-templates)))
-      (if (null title)
-          (file-name-nondirectory file-name)
-        title))))
-
 ;;;###autoload
 (defun org-dblock-write:clocktable (params)
   "Write the standard clocktable."
@@ -2750,7 +2740,8 @@ from the dynamic block definition."
 			     "\n")
 
                      (if filetitle
-                         (org-clock-get-file-title file-name)
+                         (or (org-get-title file-name)
+                             (file-name-nondirectory file-name))
                        (file-name-nondirectory file-name))
 		     (if level?    "| " "") ;level column, maybe
 		     (if timestamp "| " "") ;timestamp column, maybe
diff --git a/lisp/org.el b/lisp/org.el
index 8191f0860..f51e6d6d9 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -7423,6 +7423,20 @@ the default is \"/\"."
 	(setf (substring fpath (- width 2)) "..")))
     fpath))
 
+(defun org-get-title (&optional buffer-or-file)
+  "Collect title from the provided `org-mode' BUFFER-OR-FILE.
+
+Returns nil if there are no #+TITLE property."
+  (let ((buffer (cond ((bufferp buffer-or-file) buffer-or-file)
+                      ((stringp buffer-or-file) (find-file-noselect
+                                                 buffer-or-file))
+                      (t (current-buffer)))))
+    (with-current-buffer buffer
+      (org-macro-initialize-templates)
+      (let ((title (assoc-default "title" org-macro-templates)))
+        (unless (string= "" title)
+          title)))))
+
 (defun org-display-outline-path (&optional file current separator just-return-string)
   "Display the current outline path in the echo area.
 
-- 
2.35.1


  reply	other threads:[~2022-10-24  4:23 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-25 15:24 [PATCH] ox-icalendar.el: customizable vevent summary prefix Mikhail Skorzhinskii
2021-12-26 21:26 ` Nicolas Goaziou
2021-12-28 12:10   ` Mikhail Skorzhinskii
2022-07-31  7:16     ` Ihor Radchenko
2022-07-31  7:35       ` Mikhail Skorzhinskiy
2022-07-31 13:02         ` Ihor Radchenko
2022-08-30 13:50           ` Mikhail Skorzhisnkii
2022-08-31 12:09             ` Ihor Radchenko
2022-09-05 18:50               ` Mikhail Skorzhisnkii
2022-09-08  5:40                 ` Ihor Radchenko
2022-09-08 20:10                   ` Mikhail Skorzhisnkii
2022-09-09 10:13                     ` Ihor Radchenko
2022-10-23 19:15                       ` Mikhail Skorzhisnkii [this message]
2022-10-25  6:59                         ` Ihor Radchenko
2022-08-31 12:11             ` Ihor Radchenko
2022-09-01  7:29               ` Bastien
2022-08-31 12:13             ` Ihor Radchenko
2022-09-05 18:59               ` Mikhail Skorzhisnkii
2022-09-05 19:28             ` Mikhail Skorzhisnkii
2022-09-08  5:33               ` Ihor Radchenko

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:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  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=878rl6wcbv.fsf@eml.cc \
    --to=mskorzhinskii@eml.cc \
    --cc=emacs-orgmode@gnu.org \
    --cc=yantar92@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).