[ESS] Trouble assigning to keys in Emacs Modified for MacOS 30.2
Tyler Smith
ty|er @end|ng |rom p|@nt@rum@c@
Wed Jan 21 17:00:01 CET 2026
On Wed, Jan 21, 2026, at 9:50 AM, Steve Gutreuter via ESS-help wrote:
> (use-package ess
> :bind (:map ess-r-mode-map
> ("C-|" . " %>% ")
> :map inferior-ess-r-mode-map
> ("C-|" . " %>% ")))
> (use-package ess
> :bind (:map ess-r-mode-map
> ("C-=" . " <- ")
> :map inferior-ess-r-mode-map
> ("C-=" . " <- ")))
I think the `:bind` directive indicates the following code will be evaluated *before* the package is loaded. Which will generate the error you describe, since the keymaps aren't defined at that point.
I use the following (on Linux, but this should be OS-independent I hope):
```
(use-package ess
:config
...
(define-key ess-r-mode-map "_" #'ess-insert-assign)
(define-key inferior-ess-r-mode-map "_" #'ess-insert-assign)
(define-key ess-r-mode-map (kbd "C-c >") #'tws-ess-insert-then)
(define-key inferior-ess-r-mode-map (kbd "C-c >") #'tws-ess-insert-then)
(define-key ess-r-mode-map (kbd "C-c ;") #'tws-ess-insert-pipe)
(define-key inferior-ess-r-mode-map (kbd "C-c ;") #'tws-ess-insert-pipe)
...
)
```
Note that the function `ess-insert-assign` is provided with ESS to insert the `<-` symbol. It works as a toggle, so if you type the character twice it switches back. Which is convenient if you bind it to something you might occasionally want to actually insert as-is (in my case, the underscore).
I use the following for magrittr and regular pipes. Using `just-one-space` instead of a hard-coded " " usually produces the desired spacing around these.
```
(defun tws-ess-insert-then ()
(interactive)
(just-one-space 1)
(insert "%>%")
(just-one-space 1))
(defun tws-ess-insert-pipe ()
(interactive)
(just-one-space 1)
(insert "|>")
(just-one-space 1))
```
- tyler
More information about the ESS-help
mailing list