[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master aeb5488 2/7: excorporate-diary: Escape literal percent sig
From: |
Thomas Fitzsimmons |
Subject: |
[elpa] master aeb5488 2/7: excorporate-diary: Escape literal percent signs |
Date: |
Fri, 14 Jun 2019 17:12:19 -0400 (EDT) |
branch: master
commit aeb5488cbe1f0b40b06331db47ba7b58ce5424ba
Author: Thomas Fitzsimmons <address@hidden>
Commit: Thomas Fitzsimmons <address@hidden>
excorporate-diary: Escape literal percent signs
* packages/excorporate/excorporate-diary.el
(exco-diary--fix-percent-signs): New function.
(excorporate-diary-enable): Add exco-diary--fix-percent-signs to
diary-fancy-display-mode-hook.
(excorporate-diary-disable): Remove exco-diary--fix-percent-signs
from diary-fancy-display-mode-hook.
---
packages/excorporate/excorporate-diary.el | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/packages/excorporate/excorporate-diary.el
b/packages/excorporate/excorporate-diary.el
index e3435be..fe5887e 100644
--- a/packages/excorporate/excorporate-diary.el
+++ b/packages/excorporate/excorporate-diary.el
@@ -109,6 +109,17 @@ initialize for today's date, nil otherwise."
;; connnection-callback loop.
(basic-save-buffer-1))))))
+;; Literal percent signs (%) are not supported in a diary entry since
+;; they're interpreted as format strings by `diary-sexp-entry', so
+;; encode them during entry insertion, then unescape them during
+;; display. This is needed so that, e.g., encoded meeting URLs that
+;; contain literal percent signs (%) work with `browse-url'.
+(defun exco-diary--fix-percent-signs ()
+ "Replace percent-sign placeholders with percent signs."
+ (goto-char (point-min))
+ (while (re-search-forward "<EXCO_PERCENT_SIGN>" nil t)
+ (replace-match "%")))
+
(defun exco-diary-insert-meeting (finalize
subject start _end _location
_main-invitees _optional-invitees
@@ -138,6 +149,14 @@ Call FINALIZE after the meeting has been inserted."
excorporate-diary-transient-file)))
(with-temp-buffer
(insert icalendar-text)
+ ;; Escape literal percent signs (%). Use less-than sign (<)
+ ;; and greater-than sign (>) which are forbidden URL
+ ;; characters, so that in the plain text diary file,
+ ;; percent-encoded URLs become completely invalid rather than
+ ;; slightly wrong.
+ (goto-char (point-min))
+ (while (re-search-forward "%" nil t)
+ (replace-match "<EXCO_PERCENT_SIGN>"))
(icalendar-import-buffer file t))))
(funcall finalize))
@@ -229,6 +248,7 @@ ARGUMENTS are the arguments to `diary-view-entries'."
#'exco-diary-diary-view-entries-override)
(add-hook 'diary-list-entries-hook #'diary-sort-entries)
(add-hook 'diary-list-entries-hook #'diary-include-other-diary-files)
+ (add-hook 'diary-fancy-display-mode-hook #'exco-diary--fix-percent-signs)
(unless (eq diary-display-function 'diary-fancy-display)
(warn (format
(concat "Excorporate diary support needs diary-fancy-display"
@@ -243,6 +263,7 @@ ARGUMENTS are the arguments to `diary-view-entries'."
(interactive)
(advice-remove #'diary #'exco-diary-diary-around)
(advice-remove #'diary-view-entries #'exco-diary-diary-view-entries-override)
+ (remove-hook 'diary-fancy-display-mode-hook #'exco-diary--fix-percent-signs)
(with-current-buffer (find-file-noselect diary-file)
(dolist (file (list excorporate-diary-transient-file
excorporate-diary-today-file))
- [elpa] master updated (e2ceac5 -> 50aceef), Thomas Fitzsimmons, 2019/06/14
- [elpa] master a426add 3/7: excorporate-diary: Fix documentation string, Thomas Fitzsimmons, 2019/06/14
- [elpa] master aa5513d 1/7: excorporate-diary: Always use diary-fancy-display, Thomas Fitzsimmons, 2019/06/14
- [elpa] master e4fdf86 5/7: excorporate-org: Support multiple calendars, Thomas Fitzsimmons, 2019/06/14
- [elpa] master 50aceef 7/7: Excorporate: Support multiple connections, Thomas Fitzsimmons, 2019/06/14
- [elpa] master 75874ae 4/7: excorporate-diary: Add feature idea comment, Thomas Fitzsimmons, 2019/06/14
- [elpa] master aeb5488 2/7: excorporate-diary: Escape literal percent signs,
Thomas Fitzsimmons <=
- [elpa] master 47c951c 6/7: excorporate-diary: Suppress compilation warning, Thomas Fitzsimmons, 2019/06/14