emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: Stephen Berman <stephen.berman@gmx.net>
To: 48199@debbugs.gnu.org
Cc: emacs-orgmode@gnu.org
Subject: Re: bug#48199: 28.0.50; Org mode surprisingly usurps Calendar key binding
Date: Sun, 09 May 2021 19:21:31 +0200	[thread overview]
Message-ID: <878s4nomas.fsf@gmx.net> (raw)
In-Reply-To: <87eeen243m.fsf@gmx.net> (Stephen Berman's message of "Mon, 03 May 2021 18:07:25 +0200")

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

[I added emacs-orgmode@gnu.org in the Cc:]

On Mon, 03 May 2021 18:07:25 +0200 Stephen Berman <stephen.berman@gmx.net> wrote:

> By default `i' is a prefix key in calendar-mode for commands that insert
> diary entries.  But if you happen to display a buffer that activates
> org-mode machinery, then `i' in calendar-mode becomes bound to
> org-agenda-diary-entry and typing it can raise a wrong-type-argument
> error.  This can happen by visiting a file in Org mode.  To reproduce:
>
> 0. emacs -Q
> 1. (sanity check:) Type `M-x calendar RET' and then in the Calendar
>    buffer type `i C-h': the *Help* buffer displays all the commands
>    invoked by `i' plus one or more keys.
> 2. Visit the file `ORG-NEWS' (e.g. by typing `C-h n C-x C-f O TAB RET').
> 3. Type `M-x calendar RET' and then in the Calendar buffer type `i'
> => Wrong type argument: commandp, org-agenda-diary-entry
>
> This can also catch users by surprise, e.g. in Gnus.  To reproduce,
> replace step 2 above by the following:
>
> 2a. Type `M-x gnus', answer `y' at the prompt; in the Gnus buffer type
>     `B RET news.gmane.io RET'.
> 2b. In the *Gnus Browse Server* buffer type `C-s humani' to put point on
>     the gmane.emacs.humanities group; type RET to enter it.
> 2c. Type `j <87sg6wulu6.fsf@localhost> RET', which displays an article
>     containing an org-mode source code block.
> 3. As above, resulting in the same error (when done from emacs -Q).
>
> The Org mode manual (info "(org) Agenda Commands") does describe its use
> of the `i' binding in the Calendar, and if Org mode has its own versions
> of the commands that use `i' by default in calendar-mode, then
> overriding the calendar-mode bindings is no problem for Org Agenda
> users, but those bindings should not be overridden just by displaying a
> buffer that happens to be in org-mode or happens to contain an Org
> source code block.

The following patch fixes the problem for me:


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org-compat.el patch --]
[-- Type: text/x-patch, Size: 631 bytes --]

diff --git a/lisp/org/org-compat.el b/lisp/org/org-compat.el
index 1f4e2e8308..b68e5b58fc 100644
--- a/lisp/org/org-compat.el
+++ b/lisp/org/org-compat.el
@@ -1151,8 +1151,8 @@ org--setup-calendar-bindings
     ((guard (not (lookup-key calendar-mode-map "c")))
      (local-set-key "c" #'org-calendar-goto-agenda))
     (_ nil))
-  (unless (and (boundp 'org-agenda-diary-file)
-	       (eq org-agenda-diary-file 'diary-file))
+  (when (and (boundp 'org-agenda-diary-file)
+	     (not (eq org-agenda-diary-file 'diary-file)))
     (local-set-key org-calendar-insert-diary-entry-key
 		   #'org-agenda-diary-entry)))


[-- Attachment #3: Type: text/plain, Size: 1162 bytes --]


I have to admit, though, that I don't understand why the version with
`unless' results in the bug, since in the recipes I gave
org-agenda-diary-file is unbound and, indeed, when I instrument the
unpatched org--setup-calendar-bindings and step through it on calling
`calendar', the org-calendar-insert-diary-entry-key local-set-key call
is skipped as expected.  But "c" does get locally set, so if I type `c'
in the Calendar buffer, it displays the Org Agenda, and if I then type
`i' in the Calendar buffer, I now get prompted with a choice menu for
the type of diary entry, but whichever I choose, the result is the
user-error "Don't know which date to use for diary entry", evidently
because there is indeed no org-agenda-diary-file with the necessary text
properties.  So somehow the "i" binding is made even though the code
should prevent this (and does under Edebug but not when executed
normally).

With the above patch, after typing `c' in the Calendar buffer, `i' is
still unbound, as it should be, but if I changed the value of
org-agenda-diary-file from the default 'diary-file to some file, then
`i' works with Org Agenda as documented.

Steve Berman

       reply	other threads:[~2021-05-09 17:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <87eeen243m.fsf@gmx.net>
2021-05-09 17:21 ` Stephen Berman [this message]
2021-06-25  9:15   ` Stephen Berman
     [not found] <87eeagbr0l.fsf@ypei.me>
2021-08-27  3:32 ` Yuchen Pei
2021-08-27  3:37   ` Lars Ingebrigtsen
2021-08-27  4:33     ` Yuchen Pei
2021-08-27  6:42     ` tomas

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=878s4nomas.fsf@gmx.net \
    --to=stephen.berman@gmx.net \
    --cc=48199@debbugs.gnu.org \
    --cc=emacs-orgmode@gnu.org \
    --subject='Re: bug#48199: 28.0.50; Org mode surprisingly usurps Calendar key binding' \
    /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

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