Files
dotemacs/lisp/modes/shell.el
2022-01-09 21:19:46 +01:00

75 lines
2.3 KiB
EmacsLisp

;;; shell.el --- initializes shell modes -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(defun user--sh-mode-hook ()
"Initialize mode for shell script editing."
(validate-setq
;; Indent with four spaces.
sh-basic-offset 4
sh-indentation 4))
(defun user--shell-mode-common-hook ()
"Shell mode common hook."
(with-feature 'ansi-color
;; Enable ANSI colors for comint.
(ansi-color-for-comint-mode-on))
(with-feature 'shelldoc
(shelldoc-minor-mode-on)))
(defun user--shell-mode-hook ()
"Initialize mode for interactive shell."
(user--shell-mode-common-hook)
(validate-setq
;; Set up to use Bash with input echoing.
explicit-shell-file-name "bash"
explicit-bash-args '("-c" "export EMACS=; stty echo; bash")
comint-process-echoes t))
(use-package shell
:defer
:hook ((sh-mode-hook . user--sh-mode-hook)
(shell-mode-hook . user--shell-mode-hook))
:config
;;; (Packages) ;;;
;; https://github.com/wilkystyle/lsp-sh
;; Bash support for lsp-mode using Mads Hartmann's bash-language-server
(use-package lsp-sh
:if (executable-find "bash-language-server")
:hook (sh-mode-hook . lsp-sh-enable))
;; https://github.com/szermatt/emacs-bash-completion
;; Add programmable bash completion to Emacs shell-mode
(use-package bash-completion)
;; https://github.com/Alexander-Miller/company-shell
;; Company mode completion backends for your shell scripting
(use-package company-shell
:after (company)
:config
(add-to-list 'company-backends '(company-shell company-shell-env)))
;; https://github.com/charlesdaniels/shelldoc
;; A tool for generating ReST documentation from shell scripts
(use-package shelldoc
:disabled)
;; (use-package shell-command)
;; https://github.com/cuonglm/flycheck-checkbashisms
;; Flycheck linter for checkbashisms
(use-package flycheck-checkbashisms
:if (executable-find "checkbashisms")
:config
(flycheck-checkbashisms-setup))
;; https://github.com/alexmurray/flycheck-bashate
;; Integrate bashate with flycheck to automatically check the style of your bash scripts on the fly.
(use-package flycheck-bashate
:disabled
:if (executable-find "bashate")
:config
(flycheck-bashate-setup)))
(provide 'modes/shell)
;;; shell.el ends here