We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
If the (global-treesit-auto-mode t) is set, opening a bash script would not enable the sh-mode.
(global-treesit-auto-mode t)
sh-mode
The reason for sh-mode to be enabled is its useful keybindings for various features it provides.
If I was to set the following, the *message* buffer would complaint:
*message*
File mode specification error: (excessive-lisp-nesting 1601)
For example:
(add-hook 'sh-base-mode-hook (lambda () (sh-mode) (eglot-ensure)))
After toggle-debug-on-error is toggled, and to reopen a bash script, the debugger would output:
toggle-debug-on-error
Debugger entered--Lisp error: (excessive-lisp-nesting 1601) sh-feature(((bash sh-append bourne "bye" "logout" "select") (bourne sh-append sh "function") (csh sh-append shell "breaksw" "default" "end" "endif" "endsw" "foreach" "goto" "if" "logout" "onintr" "repeat" "switch" "then" "while") (es "break" "catch" "exec" "exit" "fn" "for" "forever" "fork" "if" "return" "throw" "while") (ksh88 sh-append bourne "select") (rc "break" "case" "exec" "exit" "fn" "for" "if" "in" "return" "switch" "while") (sh sh-append shell "done" "esac" "fi" "for" "in" "return") (shell "break" "case" "continue" "exec" "exit") (zsh sh-append bash "select" "foreach"))) sh-feature(((bash sh-append bourne "bye" "logout" "select") (bourne sh-append sh "function") (csh sh-append shell "breaksw" "default" "end" "endif" "endsw" "foreach" "goto" "if" "logout" "onintr" "repeat" "switch" "then" "while") (es "break" "catch" "exec" "exit" "fn" "for" "forever" "fork" "if" "return" "throw" "while") (ksh88 sh-append bourne "select") (rc "break" "case" "exec" "exit" "fn" "for" "if" "in" "return" "switch" "while") (sh sh-append shell "done" "esac" "fi" "for" "in" "return") (shell "break" "case" "continue" "exec" "exit") (zsh sh-append bash "select" "foreach"))) sh-feature(((bash sh-append bourne "bye" "logout" "select") (bourne sh-append sh "function") (csh sh-append shell "breaksw" "default" "end" "endif" "endsw" "foreach" "goto" "if" "logout" "onintr" "repeat" "switch" "then" "while") (es "break" "catch" "exec" "exit" "fn" "for" "forever" "fork" "if" "return" "throw" "while") (ksh88 sh-append bourne "select") (rc "break" "case" "exec" "exit" "fn" "for" "if" "in" "return" "switch" "while") (sh sh-append shell "done" "esac" "fi" "for" "in" "return") (shell "break" "case" "continue" "exec" "exit") (zsh sh-append bash "select" "foreach"))) sh-font-lock-keywords-1(t) sh-font-lock-keywords-2() font-lock-eval-keywords(sh-font-lock-keywords-2) font-lock-set-defaults() font-lock-remove-keywords(nil (rainbow-delimiters--propertize)) rainbow-delimiters-mode() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() (lambda nil (sh-mode) (eglot-ensure))() run-hooks(change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook) apply(run-hooks (change-major-mode-after-body-hook prog-mode-hook sh-base-mode-hook sh-mode-hook)) run-mode-hooks(sh-mode-hook) sh-mode() ;;; Omitted excessive lines of the output ;;; It seems to be too long and in endless looping
The problem is, how could I also have sh-mode enabled when (global-treesit-auto-mode t) is set?
Other programming modes like for python work fine, for example, I've set to enable eglot for python files
(add-hook 'python-base-mode-hook 'eglot-ensure)
Nice and simple, and it works, the python-mode's keybindings and features are loaded unlike sh-mode
The text was updated successfully, but these errors were encountered:
Adding sh-mode to the bash-ts-mode-hook solved the problem. Like follows
bash-ts-mode-hook
(add-hook 'bash-ts-mode-hook 'sh-mode)
I wonder why other modes work fine, but this mode does not
Sorry, something went wrong.
sh-mode is a bit special, and honestly kind of a pain to program around
Since you have a workaround, I'm not sure if we should keep this issue open?
No branches or pull requests
If the
(global-treesit-auto-mode t)
is set, opening a bash script would not enable thesh-mode
.The reason for sh-mode to be enabled is its useful keybindings for various features it provides.
If I was to set the following, the
*message*
buffer would complaint:File mode specification error: (excessive-lisp-nesting 1601)
For example:
After
toggle-debug-on-error
is toggled, and to reopen a bash script, the debugger would output:The problem is, how could I also have
sh-mode
enabled when(global-treesit-auto-mode t)
is set?Other programming modes like for python work fine, for example, I've set to enable eglot for python files
Nice and simple, and it works, the python-mode's keybindings and features are loaded unlike sh-mode
The text was updated successfully, but these errors were encountered: