From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id AFtZALt/YF9KZwAA0tVLHw (envelope-from ) for ; Tue, 15 Sep 2020 08:47:55 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id cMoqNrp/YF+XfwAAB5/wlQ (envelope-from ) for ; Tue, 15 Sep 2020 08:47:54 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id EE6FD9404CF for ; Tue, 15 Sep 2020 08:47:53 +0000 (UTC) Received: from localhost ([::1]:36740 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kI6cy-0006Ak-6S for larch@yhetil.org; Tue, 15 Sep 2020 04:47:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55726) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kI6bN-0005Ti-6t for emacs-orgmode@gnu.org; Tue, 15 Sep 2020 04:46:13 -0400 Received: from wout1-smtp.messagingengine.com ([64.147.123.24]:42689) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kI6bK-0006Pp-JU for emacs-orgmode@gnu.org; Tue, 15 Sep 2020 04:46:12 -0400 Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.west.internal (Postfix) with ESMTP id 0A68279A for ; Tue, 15 Sep 2020 04:46:07 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Tue, 15 Sep 2020 04:46:08 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eml.cc; h=from :to:subject:date:message-id:mime-version:content-type :content-transfer-encoding; s=fm1; bh=XrHtl0jRa9YsZt5/SeUQ67aR/l MytMPPMuOI1fh9VbE=; b=ckSvl09uPJUZkwWRNPCOyXjO+iWffmrIBkQ08ulhNU bAvV9iRkPZ/Q3B6KsW2Ousn9vYjnyZ7/bz6JYdP5Lxf/rxanxoftYdTM20Oyxq0d vhOgKlAypRw3+xhM3nbg/q/86Q0Z80fpwaZF6qsMDmjabkfRFgbDHfhI/sZu8v02 YWz5kHxror32IaN4SNPnQgS1CMpx9kP0GFz91d/dtZ6xkThv7Qkb0jeNGIUF7Wkp vFICOf9P1vzfC9Ou29+oJJQdkYWn4fz025hmXHe7ArKIrXOAL79achMAFtb0M4As SKOBdCSuHTuyU5lyeX0syLPy/aiQ5c1PSwmqj7G6+7mA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=XrHtl0 jRa9YsZt5/SeUQ67aR/lMytMPPMuOI1fh9VbE=; b=co/yDT+iRkwBqUeYY4eeRR zsFI4N1eDRGAqTZBFC1JM/wdOZK2ufZJHydIETDDk1R7irqddf+8/MmsIz9o1vKi jZ4JRYO4eSuLdA0YvjLPgCRqKoWg52QdO1cn8/k7xnKVucpedAA/t4BUGqYNYzez rFU6HE5XY4LSlViEjweP5XoiKx2g4NydX239SuspvHOEWEBsZJp1VIxfZa8vzpzc XO3sCnK6eqdzAvcvjRc5Y3F0Cd6Z7ZW8QJv6mOFsHq/6/3qXAkqCF8HqXInZfdAV vZCagyQUSHocDKXRIPG0gu4PVVRouSmUGhPyVmixWsnA+xNANwr6ipxOSv3sk17w == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedrudeikedgtdekucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucgfrhhlucfvnfffucdlfedtmdenucfjughrpefhvf fufffkgggtgfesmhfureertddtvdenucfhrhhomhepofhikhhhrghilhcuufhkohhriihh ihhnshhkihhiuceomhhskhhorhiihhhinhhskhhihiesvghmlhdrtggtqeenucggtffrrg htthgvrhhnpeejieegieefleefgeekieehgeevfeeuteeiveeluedvffefvdeifeevuddt hfetleenucfkphepjeekrddutdejrddvtdehrddutdenucevlhhushhtvghrufhiiigvpe dtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehmshhkohhriihhihhnshhkihihsegvmhhl rdgttg X-ME-Proxy: Received: from trex230.localnet (78-107-205-10.broadband.corbina.ru [78.107.205.10]) by mail.messagingengine.com (Postfix) with ESMTPA id 04151328005E for ; Tue, 15 Sep 2020 04:46:06 -0400 (EDT) From: Mikhail Skorzhinskii To: emacs-orgmode@gnu.org Subject: [PATCHES 1, 2, 3/3] Minor customisation features for ox-icalendar and agenda Date: Tue, 15 Sep 2020 10:45:53 +0200 Message-ID: <1938211.TxZjiQ5Hcs@trex230> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart7768736.hGF6UCgnKs" Content-Transfer-Encoding: 7Bit Received-SPF: pass client-ip=64.147.123.24; envelope-from=mskorzhinskiy@eml.cc; helo=wout1-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/15 04:43:55 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=fail (rsa verify failed) header.d=eml.cc header.s=fm1 header.b=ckSvl09u; dkim=fail (rsa verify failed) header.d=messagingengine.com header.s=fm3 header.b=co/yDT+i; dmarc=fail reason="SPF not aligned (relaxed)" header.from=eml.cc (policy=none); spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Spam-Score: 1.09 X-TUID: ZadHNCx6n+m4 This is a multi-part message in MIME format. --nextPart7768736.hGF6UCgnKs Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Hello forum, I'd like to introduce three new features and request to merge the with current master: 1. Show document title instead of file name in org-agenda; This should be useful for any users of org-roam package or anyone who autogenerate file names and uses document titles instead for navigation. 2. Customise summary lines of exported events in ox-icalendar I personally export deadlines and scheduled items to the separate files so I don't need these cookies and they consume precious space of summary line. So I prefer them be disabled. This should be possible to do now with only customisation setting. 3. Force creation of an alarm when exporting event in ox-icalendar Sometimes I prefer to create icalendar alarms exactly at the event start, but it's not possible since alarm set to zero means that alarm will be disabled. Forcing alarm creation will now create alarm no matter the setting. I've updated news files and attempted to replicate the style of submissions, but I admit that I didn't read much beyond CONTRIBUTE file. Please point me to the right direction in case of any issues I can fix. Kind regards, Mikhail Skorzhinskii --nextPart7768736.hGF6UCgnKs Content-Disposition: attachment; filename="0003-ox-icalendar.el-introduce-setting-to-force-alarms.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="utf-8"; name="0003-ox-icalendar.el-introduce-setting-to-force-alarms.patch" >From 111e6886564abbf3becb2a94e66f235f502b79d9 Mon Sep 17 00:00:00 2001 From: Mikhail Skorzhinskii Date: Sat, 12 Sep 2020 18:52:39 +0200 Subject: [PATCH 3/3] ox-icalendar.el: introduce setting to force alarms This is a new setting for icalendar exports to allow users set alarms exactly at the event start. With this setting set to non-nil and alarm set to zero (by global setting or APPT_WARNTIME property) it will create an alarm at the event start. Note, that zero alarm set as APPT_WARNTIME property will override default warning time. --- etc/ORG-NEWS | 10 ++++++++++ lisp/ox-icalendar.el | 24 +++++++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index b912e807d..eb950d934 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -23,6 +23,16 @@ path. Through these new options for icalendar export, one can customise the looks of summary lines in exported events. +*** New option ~org-icalendar-force-alarm~ + +This is a new setting for icalendar exports to allow users set alarms +exactly at the event start. With this setting set to non-nil and alarm +set to zero (by global setting or APPT_WARNTIME property) it will +create an alarm at the event start. + +Note, that zero alarm set as =APPT_WARNTIME= property will override +default warning time. + * Version 9.4 ** Incompatible changes *** Possibly broken internal file links: please check and fix diff --git a/lisp/ox-icalendar.el b/lisp/ox-icalendar.el index f110a4b2b..baed925e8 100644 --- a/lisp/ox-icalendar.el +++ b/lisp/ox-icalendar.el @@ -64,6 +64,15 @@ for timed events. If non-zero, alarms are created. :version "24.1" :type 'integer) +(defcustom org-icalendar-force-alarm nil + "Non-nil means alarm will be created even if is set to zero. + +This overrides default behaviour where zero means no alarm. With +this set to non-nil and alarm set to zero, alarm will be created +and will fire at the event start." + :group 'org-export-icalendar + :type 'bool) + (defcustom org-icalendar-combined-name "OrgMode" "Calendar name for the combined iCalendar representing all agenda files." :group 'org-export-icalendar @@ -797,8 +806,11 @@ Return VALARM component as a string, or nil if it isn't allowed." (let ((alarm-time (let ((warntime (org-element-property :APPT_WARNTIME entry))) - (if warntime (string-to-number warntime) 0)))) - (and (or (> alarm-time 0) (> org-icalendar-alarm-time 0)) + (if warntime (string-to-number warntime) nil)))) + (and (or (and alarm-time + (> alarm-time 0)) + (> org-icalendar-alarm-time 0) + org-icalendar-force-alarm) (org-element-property :hour-start timestamp) (format "BEGIN:VALARM ACTION:DISPLAY @@ -806,7 +818,13 @@ DESCRIPTION:%s TRIGGER:-P0DT0H%dM0S END:VALARM\n" summary - (if (zerop alarm-time) org-icalendar-alarm-time alarm-time))))) + (if org-icalendar-force-alarm + (if alarm-time + alarm-time + org-icalendar-alarm-time) + (if (zerop alarm-time) + org-icalendar-alarm-time + alarm-time)))))) ;;;; Template -- 2.28.0 --nextPart7768736.hGF6UCgnKs Content-Disposition: attachment; filename="0002-ox-icalendar.el-allow-to-customise-deadline-and-sche.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="utf-8"; name="0002-ox-icalendar.el-allow-to-customise-deadline-and-sche.patch" >From 1c30be14e2e7a6774d499388ec207b1950963746 Mon Sep 17 00:00:00 2001 From: Mikhail Skorzhinskii Date: Sat, 12 Sep 2020 18:27:23 +0200 Subject: [PATCH 2/3] ox-icalendar.el: allow to customise deadline and scheduled items summary In some of export schemes these cookies at the start of each event can be a distraction rather then storage of useful information. --- etc/ORG-NEWS | 5 +++++ lisp/ox-icalendar.el | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 32f64d84e..b912e807d 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -18,6 +18,11 @@ When set to 'title, will show document title in outline path in echo area instead of file name. When set to nil will show only outline path. +*** New options ~org-icalendar-scheduled-summary-prepend~ and ~org-icalendar-deadline-summary-prepend~ + +Through these new options for icalendar export, one can customise the +looks of summary lines in exported events. + * Version 9.4 ** Incompatible changes *** Possibly broken internal file links: please check and fix diff --git a/lisp/ox-icalendar.el b/lisp/ox-icalendar.el index 0f890534a..f110a4b2b 100644 --- a/lisp/ox-icalendar.el +++ b/lisp/ox-icalendar.el @@ -82,6 +82,12 @@ keyword." :group 'org-export-icalendar :type '(repeat (string :tag "Tag"))) +(defcustom org-icalendar-scheduled-summary-prepend "S: " + "String used for prepending summary in exported scheduled headlines.") + +(defcustom org-icalendar-deadline-summary-prepend "DL: " + "String used for prepending summary in exported deadlines.") + (defcustom org-icalendar-use-deadline '(event-if-not-todo todo-due) "Contexts where iCalendar export should use a deadline time stamp. @@ -606,7 +612,7 @@ inlinetask within the section." (_ (memq 'event-if-not-todo use-deadline))) (org-icalendar--vevent entry deadline (concat "DL-" uid) - (concat "DL: " summary) loc desc cat tz class))) + (concat org-icalendar-deadline-summary-prepend summary) loc desc cat tz class))) (let ((scheduled (org-element-property :scheduled entry)) (use-scheduled (plist-get info :icalendar-use-scheduled))) (and scheduled @@ -617,7 +623,7 @@ inlinetask within the section." (_ (memq 'event-if-not-todo use-scheduled))) (org-icalendar--vevent entry scheduled (concat "SC-" uid) - (concat "S: " summary) loc desc cat tz class))) + (concat org-icalendar-scheduled-summary-prepend summary) loc desc cat tz class))) ;; When collecting plain timestamps from a headline and its ;; title, skip inlinetasks since collection will happen once ;; ENTRY is one of them. -- 2.28.0 --nextPart7768736.hGF6UCgnKs Content-Disposition: attachment; filename="0001-org-agenda.el-allow-to-customize-outline-path-in-ech.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="utf-8"; name="0001-org-agenda.el-allow-to-customize-outline-path-in-ech.patch" >From 6468b0402bf55ee21eb199395e41bc706fa17354 Mon Sep 17 00:00:00 2001 From: Mikhail Skorzhinskii Date: Sat, 12 Sep 2020 18:10:05 +0200 Subject: [PATCH 1/3] 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 | 7 +++++++ lisp/org-agenda.el | 10 +++++++++- lisp/org.el | 25 ++++++++++++++++++++++--- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 0ed626fb7..32f64d84e 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -11,6 +11,13 @@ 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 ~org-agenda-show-outline-path-prepend~ + +When set to 'title, will show document title in outline path in echo +area instead of file name. When set to nil will show only outline +path. + * 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..25c9051e2 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -1044,6 +1044,14 @@ current item's tree, in an indirect buffer." :group 'org-agenda-startup :type 'boolean) +(defcustom org-agenda-show-outline-path-prepend t + "Non-nil means show outline path with document title (if present) in echo area instead of file name." + :group 'org-agenda-startup + :type '(choice + (const :tag "Show only outline path without file name or document title." nil) + (const :tag "Prepend outline path with file name." t) + (const :tag "Prepend outline path with title name. 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." :group 'org-agenda-startup @@ -8777,7 +8785,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-prepend)))))) (defun org-agenda-show-tags () "Show the tags applicable to the current item." diff --git a/lisp/org.el b/lisp/org.el index 020cfc873..d13d78dbf 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -8024,10 +8024,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 \"/\". @@ -8035,6 +8049,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 @@ -8046,7 +8062,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 --nextPart7768736.hGF6UCgnKs--