Hi All, The Org line commands -- `org-beginning-of-line', `org-end-of-line', and `org-kill-line' -- all take due care for the presence of `visual-line-mode' to do the right thing if it is turned on. However, when `visual-line-mode' is indeed on, the bindings on `visual-line-mode-map' shadow Org's bindings, so that we actually get `beginning-of-visual-line', `end-of-visual-line', and `kill-visual-line' for the usual keybindings, instead of the much nicer specialized Org commands. To check this, start with =emacs -Q=, set load-path to get the proper version of Org (as your case may be): #+begin_src emacs-lisp (add-to-list 'load-path "~/.emacs.d/elpa/org-plus-contrib-20200727") #+end_src Then visit an Org file, and enable "M-x visual-line-mode", and check the bindings with "C-h k C-a", "C-h k C-e", and "C-h k C-k" to get: #+begin_example beginning-of-visual-line end-of-visual-line kill-visual-line #+end_example I'm not sure this is a "bug", strictly speaking, or if it is correct unfortunate behavior. Anyway, is there something that could be done from Org's side? Best, Gustavo. Emacs : GNU Emacs 27.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.18, cairo version 1.16.0) of 2020-06-29 Package: Org mode version 9.3.7 (9.3.7-15-gc9abb4-elpaplus @ /home/gustavo/.emacs.d/elpa/org-plus-contrib-20200727/) current state: ============== (setq org-src-mode-hook '(org-src-babel-configure-edit-buffer org-src-mode-configure-edit-buffer) org-link-shell-confirm-function 'yes-or-no-p org-metadown-hook '(org-babel-pop-to-session-maybe) org-clock-out-hook '(org-clock-remove-empty-clock-drawer) org-mode-hook '(#[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-show-all append local] 5] #[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes org-eldoc-load) org-archive-hook '(org-attach-archive-delete-maybe) org-confirm-elisp-link-function 'yes-or-no-p org-agenda-before-write-hook '(org-agenda-add-entry-text) org-metaup-hook '(org-babel-load-in-session-maybe) org-bibtex-headline-format-function #[257 "\300\236A\207" [:title] 3 "\n\n(fn ENTRY)"] org-babel-pre-tangle-hook '(save-buffer) org-tab-first-hook '(org-babel-hide-result-toggle-maybe org-babel-header-arg-expand) org-src-lang-modes '(("arduino" . arduino) ("redis" . redis) ("php" . php) ("C" . c) ("C++" . c++) ("asymptote" . asy) ("bash" . sh) ("beamer" . latex) ("calc" . fundamental) ("cpp" . c++) ("ditaa" . artist) ("dot" . fundamental) ("elisp" . emacs-lisp) ("ocaml" . tuareg) ("screen" . shell-script) ("shell" . sh) ("sqlite" . sql)) org-occur-hook '(org-first-headline-recenter) org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-show-empty-lines org-optimize-window-after-visibility-change) org-speed-command-hook '(org-speed-command-activate org-babel-speed-command-activate) org-confirm-shell-link-function 'yes-or-no-p org-link-parameters '(("attachment" :follow org-attach-open-link :export org-attach-export-link :complete org-attach-complete-link) ("id" :follow org-id-open) ("eww" :follow eww :store org-eww-store-link) ("rmail" :follow org-rmail-open :store org-rmail-store-link) ("mhe" :follow org-mhe-open :store org-mhe-store-link) ("irc" :follow org-irc-visit :store org-irc-store-link :export org-irc-export) ("info" :follow org-info-open :export org-info-export :store org-info-store-link) ("gnus" :follow org-gnus-open :store org-gnus-store-link) ("docview" :follow org-docview-open :export org-docview-export :store org-docview-store-link) ("bibtex" :follow org-bibtex-open :store org-bibtex-store-link) ("bbdb" :follow org-bbdb-open :export org-bbdb-export :complete org-bbdb-complete-link :store org-bbdb-store-link) ("w3m" :store org-w3m-store-link) ("file+sys") ("file+emacs") ("shell" :follow org-link--open-shell) ("news" :follow #[257 "\301\300\302Q!\207" ["news" browse-url ":"] 5 "\n\n(fn URL)"]) ("mailto" :follow #[257 "\301\300\302Q!\207" ["mailto" browse-url ":"] 5 "\n\n(fn URL)"]) ("https" :follow #[257 "\301\300\302Q!\207" ["https" browse-url ":"] 5 "\n\n(fn URL)"]) ("http" :follow #[257 "\301\300\302Q!\207" ["http" browse-url ":"] 5 "\n\n(fn URL)"]) ("ftp" :follow #[257 "\301\300\302Q!\207" ["ftp" browse-url ":"] 5 "\n\n(fn URL)"]) ("help" :follow org-link--open-help) ("file" :complete org-link-complete-file) ("elisp" :follow org-link--open-elisp) ("doi" :follow org-link--open-doi)) org-link-elisp-confirm-function 'yes-or-no-p )
Hi Gustavo,
> The Org line commands -- `org-beginning-of-line', `org-end-of-line', and
> `org-kill-line' -- all take due care for the presence of
> `visual-line-mode' to do the right thing if it is turned on. However,
> when `visual-line-mode' is indeed on, the bindings on
> `visual-line-mode-map' shadow Org's bindings, so that we actually get
> `beginning-of-visual-line', `end-of-visual-line', and `kill-visual-line'
> for the usual keybindings, instead of the much nicer specialized Org
> commands.
>
> To check this, start with =emacs -Q=, set load-path to get the proper
> version of Org (as your case may be):
>
> #+begin_src emacs-lisp
> (add-to-list 'load-path "~/.emacs.d/elpa/org-plus-contrib-20200727")
> #+end_src
>
>
> Then visit an Org file, and enable "M-x visual-line-mode", and check the
> bindings with "C-h k C-a", "C-h k C-e", and "C-h k C-k" to get:
>
> #+begin_example
> beginning-of-visual-line
> end-of-visual-line
> kill-visual-line
> #+end_example
>
> I'm not sure this is a "bug", strictly speaking, or if it is correct
> unfortunate behavior. Anyway, is there something that could be done
> from Org's side?
Also not sure if this is a bug. But you can configure the desired
behavior by hooking in at activation of visual line mode AFAICS.
You could e.g. add
--8<---------------cut here---------------start------------->8---
(add-hook 'visual-line-mode-hook
(lambda () (when (derived-mode-p 'org-mode)
(local-set-key (kbd "C-a") #'org-beginning-of-line)
(local-set-key (kbd "C-e") #'org-end-of-line)
(local-set-key (kbd "C-k") #'org-kill-line))))
--8<---------------cut here---------------end--------------->8---
to your config.
Best,
-- Marco
Hi Marco,
thank you for your answer.
On Tue, 28 Jul 2020 at 17:34, Marco Wahl <marcowahlsoft@gmail.com> wrote:
>> I'm not sure this is a "bug", strictly speaking, or if it is correct
>> unfortunate behavior. Anyway, is there something that could be done
>> from Org's side?
>
> Also not sure if this is a bug. But you can configure the desired
> behavior by hooking in at activation of visual line mode AFAICS.
>
> You could e.g. add
>
>
> (add-hook 'visual-line-mode-hook
> (lambda () (when (derived-mode-p 'org-mode)
> (local-set-key (kbd "C-a") #'org-beginning-of-line)
> (local-set-key (kbd "C-e") #'org-end-of-line)
> (local-set-key (kbd "C-k") #'org-kill-line))))
>
> to your config.
>
This is a good workaround. I've been doing something else, which is
simply to bind the keys directly (that is not using `[remap ...]') in
`org-mode-map'. This way the remappings done by `visual-line-mode' find
nothing to remap, and things work as expected. However, while I'm safe
with this approach in my local settings, because I know I haven't changed
the default bindings for these commands, I don't know how good this
would be as a general solution for Org.
Anyway, it would be nice if this worked out-of-the-box, this can be
baffling behavior, especially for newer users. But I'm not sure what to
suggest here.
Best,
Gustavo.
Hi Marco, Marco Wahl <marcowahlsoft@gmail.com> writes: > (add-hook 'visual-line-mode-hook > (lambda () (when (derived-mode-p 'org-mode) > (local-set-key (kbd "C-a") #'org-beginning-of-line) > (local-set-key (kbd "C-e") #'org-end-of-line) > (local-set-key (kbd "C-k") #'org-kill-line)))) Nice -- I've added this to https://orgmode.org/worg/org-hacks.html Thanks, -- Bastien
Hi Bastien,
On Fri, 04 Sep 2020 at 17:20, Bastien <bzg@gnu.org> wrote:
> Hi Marco,
>
> Marco Wahl <marcowahlsoft@gmail.com> writes:
>
>> (add-hook 'visual-line-mode-hook
>> (lambda () (when (derived-mode-p 'org-mode)
>> (local-set-key (kbd "C-a") #'org-beginning-of-line)
>> (local-set-key (kbd "C-e") #'org-end-of-line)
>> (local-set-key (kbd "C-k") #'org-kill-line))))
>
> Nice -- I've added this to https://orgmode.org/worg/org-hacks.html
I do think my other workaround is worth pondering to be included, so
that this would work out-of-the-box. Do you see any particular
drawbacks of setting these bindings directly (that is, not by remapping)
in `org-mode-map'?
Best,
Gustavo.
Hi Gustavo,
Gustavo Barros <gtvbrs@gmail.com> writes:
> I do think my other workaround is worth pondering to be included, so
> that this would work out-of-the-box. Do you see any particular
> drawbacks of setting these bindings directly (that is, not by remapping)
> in `org-mode-map'?
You mean by adding something like
(org-defkey org-mode-map (kbd "C-a") #'org-beginning-of-line)
in org-keys.el? I'm pretty sure such "hard" remapping breaks an Emacs
convention--I'll ask emacs-devel, because that would indeed fix the
problem you are reporting.
Thanks for insisting,
--
Bastien
Hi Bastien,
On Fri, 04 Sep 2020 at 14:37, Bastien <bzg@gnu.org> wrote:
> You mean by adding something like
>
> (org-defkey org-mode-map (kbd "C-a") #'org-beginning-of-line)
>
> in org-keys.el? I'm pretty sure such "hard" remapping breaks an Emacs
> convention--I'll ask emacs-devel, because that would indeed fix the
> problem you are reporting.
>
> Thanks for insisting,
Yes, that is what I mean. I understand this kind of hard remapping
would not be conventional, and is not the best solution. But, in this
case, it is not Org, but visual-line-mode which is going a bit too far.
Org takes care of the presence of visual-line-mode, but the opposite
does not occur. Anyway, since you are asking emacs-devel, perhaps ask
too if it would be possible for a major mode to set, something like
`beginning-of-line-function' etc, which visual-line-mode, or even the
original functions it substitutes, could then honor, as is done with
`fill-paragraph-function', for example. Something of the sort might be
the proper solution. "Hard" rebinding is what Org can currently do on
its side, as far as I can tell.
Best,
Gustavo.
Hi Bastien,
Hi Marco,
On Fri, 04 Sep 2020 at 14:37, Bastien <bzg@gnu.org> wrote:
> Hi Gustavo,
>
> Gustavo Barros <gtvbrs@gmail.com> writes:
>
>> I do think my other workaround is worth pondering to be included, so
>> that this would work out-of-the-box. Do you see any particular
>> drawbacks of setting these bindings directly (that is, not by
>> remapping)
>> in `org-mode-map'?
>
> You mean by adding something like
>
> (org-defkey org-mode-map (kbd "C-a") #'org-beginning-of-line)
>
> in org-keys.el? I'm pretty sure such "hard" remapping breaks an Emacs
> convention--I'll ask emacs-devel, because that would indeed fix the
> problem you are reporting.
>
> Thanks for insisting,
I've been playing with 'mwim.el' today, and came up with something that
might be interesting.
Btw, Bastien, I've seen the message you've sent to emacs-devel about
this. Thank you. A pity it doesn't seem to have drawn much attention.
Anyway, what I came up is a slight variation from Marco's approach,
which may be just general enough to be employed by Org.
#+begin_src emacs-lisp
(add-hook 'visual-line-mode-hook #'my/visual-line-mode-hook-for-org)
(defun my/visual-line-mode-hook-for-org ()
(when (and (derived-mode-p 'org-mode)
visual-line-mode)
;; Ensure 'visual-line-mode' does not shadow Org's line commands.
(local-set-key [remap move-beginning-of-line] nil)
(local-set-key [remap move-end-of-line] nil)
(local-set-key [remap kill-line] nil)))
#+end_src
I've lightly tested this here and it seems to be working.
WDYT?
Best regards,
Gustavo.
On Tue, 22 Dec 2020 at 17:18, Gustavo Barros <gusbrs.2016@gmail.com>
wrote:
>
> Anyway, what I came up is a slight variation from Marco's approach,
> which may
> be just general enough to be employed by Org.
>
> #+begin_src emacs-lisp
> (add-hook 'visual-line-mode-hook #'my/visual-line-mode-hook-for-org)
>
> (defun my/visual-line-mode-hook-for-org ()
> (when (and (derived-mode-p 'org-mode)
> visual-line-mode)
> ;; Ensure 'visual-line-mode' does not shadow Org's line commands.
> (local-set-key [remap move-beginning-of-line] nil)
> (local-set-key [remap move-end-of-line] nil)
> (local-set-key [remap kill-line] nil)))
> #+end_src
>
> I've lightly tested this here and it seems to be working.
>
> WDYT?
Damn! Sorry for the noise. It *doesn't* work, and disables Org's own
remappings, of course. Just as I sent I realized I had something else
enabled which was doing the actual job (my previous take on this
thread). Back on the deadlock.
Sorry again.
Gustavo.
On Tue, 22 Dec 2020 at 17:24, Gustavo Barros <gusbrs.2016@gmail.com> wrote: > > Damn! Sorry for the noise. It *doesn't* work, and disables Org's own > remappings, of course. Just as I sent I realized I had something else > enabled which was doing the actual job (my previous take on this > thread). > Back on the deadlock. > Sorry again. But, in the meantime I did find this: https://stackoverflow.com/a/13102821 I reproduce Stefan's answer verbatim, so it's kept for reference in the list regardless of the external link: #+begin_src emacs-lisp (add-hook '<major-mode>-hook (lambda () (let ((oldmap (cdr (assoc '<minor-mode> minor-mode-map-alist))) (newmap (make-sparse-keymap))) (set-keymap-parent newmap oldmap) (define-key newmap [<thekeyIwanttohide>] nil) (make-local-variable 'minor-mode-overriding-map-alist) (push `(<minor-mode> . ,newmap) minor-mode-overriding-map-alist)))) #+end_src Best regards, Gustavo.
Hi Gustavo,
Gustavo Barros <gusbrs.2016@gmail.com> writes:
> The Org line commands -- `org-beginning-of-line', `org-end-of-line', and
> `org-kill-line' -- all take due care for the presence of
> `visual-line-mode' to do the right thing if it is turned on. However,
> when `visual-line-mode' is indeed on, the bindings on
> `visual-line-mode-map' shadow Org's bindings, so that we actually get
> `beginning-of-visual-line', `end-of-visual-line', and `kill-visual-line'
> for the usual keybindings, instead of the much nicer specialized Org
> commands.
Fixed in the maint branch with commit ccd513a3c, thanks!
--
Bastien
Hi Bastien,
On Sat, 01 May 2021 at 17:28, Bastien <bzg@gnu.org> wrote:
> Hi Gustavo,
>
> Gustavo Barros <gusbrs.2016@gmail.com> writes:
>
>> The Org line commands -- `org-beginning-of-line', `org-end-of-line',
>> and
>> `org-kill-line' -- all take due care for the presence of
>> `visual-line-mode' to do the right thing if it is turned on.
>> However,
>> when `visual-line-mode' is indeed on, the bindings on
>> `visual-line-mode-map' shadow Org's bindings, so that we actually get
>> `beginning-of-visual-line', `end-of-visual-line', and
>> `kill-visual-line'
>> for the usual keybindings, instead of the much nicer specialized Org
>> commands.
>
> Fixed in the maint branch with commit ccd513a3c, thanks!
Thank you!
Gustavo.