C-c C-t has
sh-tmp-file binding in
sh-mode, which I want to change.:
C-c C-t runs the command sh-tmp-file (found in sh-mode-map), which is an interactive compiled Lisp function in ‘sh-script.el’. It is bound to C-c C-t.
I have tried to bind the key binding as follows:
(defun insert-todo () (interactive "*") (insert comment-start "TODO: ")) (define-key shell-mode-map (kbd "C-c C-t") 'insert-todo) (define-key sh-mode-map (kbd "C-c C-t") 'insert-todo)
I am having following error message:
Debugger entered--Lisp error: (void-variable sh-mode-map) (define-key sh-mode-map (kbd "C-c C-t") 'insert-todo) eval-buffer(#<buffer *load*> nil "/home/alper/.emacs" nil t) ; Reading at buffer position 100039 load-with-code-conversion("/home/alper/.emacs" "/home/alper/.emacs" t t) load("~/.emacs" noerror nomessage) startup--load-user-init-file(#f(compiled-function () #<bytecode 0x15948fd477f1>) #f(compiled-function () #<bytecode 0x15948fd46d41>) t) command-line() normal-top-level()
How could I resolve this error?
sh-mode-mapis defined out of the box in Emacs 26 and Emacs 27. Absent additional facts regarding which version of Emacs you are using and your operating system, I don't see why the variable would be void. If for, example, you are using Emacs 25 or something like that where
sh-mode-maphas not yet been defined, you could try using:
(defvar sh-mode-map) (with-eval-after-load 'sh-script (define-key sh-mode-map (kbd "C-c C-t") 'insert-todo))