emacs-helm / helm-org

53 stars 9 forks source link

helm-completing-read-handlers-alist: Use "org-set-tags-command" instead of "org-set-tags" #3

Open NathanNeff opened 5 years ago

NathanNeff commented 5 years ago

I copied this issue from the helm project [0] to the helm-org project:

When using org-mode 9.2 and higher, set-tags was broken. It was displaying the set of tags correctly when a heading had no tags. However, if a heading had 1+ tags already, then Helm was not displaying the list of available tags.

I think I found the issue (it's quite simple). The org-set-tags function is not called by org-mode when pressing C-c C-q. The function is called org-set-tags-command.

Adding the entry (org-set-tags-command . helm-org-completing-read-tags) to helm-completing-read-handlers-alist fixed the problem.

https://github.com/emacs-helm/helm-org/blob/bc27669fdc699e65d5162b6e0a0d1bc1d87250a3/helm-org.el#L38

However, after looking a bit further, the old emacs versions also called "org-set-tags-command" when pressing C-c C-q.

org-set-tags-command calls org-set-tags. So, why does this fix work? Any more insight is appreciated.

I don't know enough about the magic of Helm to know why this fix works (being that org versions 9.1.x and 9.2.x both call org-set-tags-command which calls org-set-tags.

The definitions of org-set-tags-command and org-set-tags changed quite a bit from org 9.1.x to Org 9.2.x. One difference that I notice is that the old version of org-set-tags [1] was an (interactive) function and the new version of org-set-tags is not [2].

Any ideas?

[1] 9.1.14 https://code.orgmode.org/bzg/org-mode/src/release_9.1.14/lisp/org.el#L14883 [2] 9.2.5 https://code.orgmode.org/bzg/org-mode/src/master/lisp/org.el#L12334

Possibly related issues: https://github.com/emacs-helm/helm/issues/2063

Spacemacs issue: syl20bnr/spacemacs#3738

[0] https://github.com/emacs-helm/helm/issues/2183

thierryvolpiatto commented 5 years ago

Nathan Neff notifications@github.com writes:

Hmm, after looking a bit further, the old emacs versions also called "org-set-tags-command" when pressing C-c C-q.

org-set-tags-command calls org-set-tags. So, why does this fix work?

(org-set-tags-command . helm-org-completing-read-tags)

I don't know enough about the magic of Helm to know why this fix works (being that org versions 9.1.x and 9.2.x both call org-set-tags-command which calls org-set-tags.

Because helm is checking the caller which in your case is org-set-tags-command, the helm-buffer in your case should be called "helm-mode-org-set-tags-command" and not "helm-mode-org-set-tags".

-- Thierry

Get my Gnupg key: gpg --keyserver pgp.mit.edu --recv-keys 59F29997

jagrg commented 5 years ago

@NathanNeff Your solution works well. Thanks for your work.

NathanNeff commented 5 years ago

You're welcome! It took me a long time to detect what was wrong but I found out a lot more about the inner workings of Emacs Lisp / Helm and Org-mode.

On Tue, Aug 13, 2019 at 5:29 PM Jonathan Gregory notifications@github.com wrote:

@NathanNeff Your solution works well. Thanks for your work.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/emacs-helm/helm-org/issues/3?email_source=notifications&email_token=AAADY6HTWMJMWD5PS7TMM5DQEMYUJA5CNFSM4IK4AQJ2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD4HFLPA#issuecomment-521033148, or mute the thread https://github.com/notifications/unsubscribe-auth/AAADY6FGLMCLDAD45KNBDPLQEMYUJANCNFSM4IK4AQJQ .

NathanNeff commented 5 years ago

Also, I think the README.md needs to be fixed as well.

improve100 commented 4 years ago

org-capture: Capture abort: Symbol’s value as variable is void: helm-completing-read-handlers-alist

granitrocky commented 2 years ago

II was still having this issue with org mode. Because Org uses (completing-read-multiple), helm doesn't read helm-completing-read-handlers-alist for completions. I have written a workaround instead. It's an advice that wraps helm--completion-in-region and checks what commands/modes we're using and changes the separator accordingly.

https://gist.github.com/granitrocky/af86037dcd239a928c10c7fa974f54a3