Moving to Doom Emacs!

This commit is contained in:
Derek Taylor
2019-12-16 20:21:19 -06:00
parent d9f2f456f1
commit d4b4c33550
683 changed files with 51877 additions and 100 deletions

View File

@@ -0,0 +1,19 @@
#+TITLE: :lang sh
This module adds support for shell scripting languages.
+ Code completion (company-shell)
+ Syntax Checking (flycheck)
+ Added variable interpolation fontification
* Table of Contents :TOC:
- [[#install][Install]]
- [[#dependencies][Dependencies]]
* Install
** Dependencies
This module has several soft dependencies:
+ ~shellcheck~ Enables shell script linting.
+ ~bashdb~ Enables debugging for bash scripts.
+ ~zshdb~ Enables debugging for zsh scripts.

View File

@@ -0,0 +1,38 @@
;;; lang/sh/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +sh--match-variables-in-quotes (limit)
"Search for variables in double-quoted strings bounded by LIMIT."
(with-syntax-table sh-mode-syntax-table
(let (res)
(while
(and (setq res
(re-search-forward
"[^\\]\\(\\$\\)\\({.+?}\\|\\<[a-zA-Z0-9_]+\\|[@*#!]\\)"
limit t))
(not (eq (nth 3 (syntax-ppss)) ?\"))))
res)))
;;;###autoload
(defun +sh--match-command-subst-in-quotes (limit)
"Search for variables in double-quoted strings bounded by LIMIT."
(with-syntax-table sh-mode-syntax-table
(let (res)
(while
(and (setq res
(re-search-forward "[^\\]\\(\\$(.+?)\\|`.+?`\\)"
limit t))
(not (eq (nth 3 (syntax-ppss)) ?\"))))
res)))
(defvar sh-shell-file)
;;;###autoload
(defun +sh/open-repl ()
"Open a shell REPL."
(interactive)
(let* ((dest-sh (symbol-name sh-shell))
(sh-shell-file dest-sh))
(sh-shell-process t)
(with-current-buffer "*shell*"
(rename-buffer (format "*shell [%s]*" dest-sh))
(current-buffer))))

View File

@@ -0,0 +1,64 @@
;;; lang/sh/config.el -*- lexical-binding: t; -*-
(defvar +sh-builtin-keywords
'("cat" "cd" "chmod" "chown" "cp" "curl" "date" "echo" "find" "git" "grep"
"kill" "less" "ln" "ls" "make" "mkdir" "mv" "pgrep" "pkill" "pwd" "rm"
"sleep" "sudo" "touch")
"A list of common shell commands to be fontified especially in `sh-mode'.")
;;
;;; Packages
(use-package! sh-script ; built-in
:mode ("\\.zunit\\'" . sh-mode)
:mode ("/bspwmrc\\'" . sh-mode)
:config
(set-electric! 'sh-mode :words '("else" "elif" "fi" "done" "then" "do" "esac" ";;"))
(set-repl-handler! 'sh-mode #'+sh/open-repl)
(setq sh-indent-after-continuation 'always)
;; [pedantry intensifies]
(setq-hook! 'sh-mode-hook mode-name "sh")
;; recognize function names with dashes in them
(add-to-list 'sh-imenu-generic-expression
'(sh (nil "^\\s-*function\\s-+\\([[:alpha:]_-][[:alnum:]_-]*\\)\\s-*\\(?:()\\)?" 1)
(nil "^\\s-*\\([[:alpha:]_-][[:alnum:]_-]*\\)\\s-*()" 1)))
;; `sh-set-shell' is chatty about setting up indentation rules
(advice-add #'sh-set-shell :around #'doom-shut-up-a)
;; 1. Fontifies variables in double quotes
;; 2. Fontify command substitution in double quotes
;; 3. Fontify built-in/common commands (see `+sh-builtin-keywords')
(add-hook! 'sh-mode-hook
(defun +sh-init-extra-fontification-h ()
(font-lock-add-keywords
nil `((+sh--match-variables-in-quotes
(1 'font-lock-constant-face prepend)
(2 'font-lock-variable-name-face prepend))
(+sh--match-command-subst-in-quotes
(1 'sh-quoted-exec prepend))
(,(regexp-opt +sh-builtin-keywords 'symbols)
(0 'font-lock-type-face append))))))
;; 4. Fontify delimiters by depth
(add-hook 'sh-mode-hook #'rainbow-delimiters-mode)
;; autoclose backticks
(sp-local-pair 'sh-mode "`" "`" :unless '(sp-point-before-word-p sp-point-before-same-p)))
(use-package! company-shell
:when (featurep! :completion company)
:after sh-script
:config
(set-company-backend! 'sh-mode '(company-shell company-files))
(setq company-shell-delete-duplicates t))
(use-package! fish-mode
:when (featurep! +fish)
:defer t
:config (set-formatter! 'fish-mode #'fish_indent))

View File

@@ -0,0 +1,5 @@
;;; lang/sh/doctor.el -*- lexical-binding: t; -*-
(when (featurep! :tools flycheck)
(unless (executable-find "shellcheck")
(warn! "Couldn't find shellcheck. Shell script linting will not work")))

View File

@@ -0,0 +1,8 @@
;; -*- no-byte-compile: t; -*-
;;; lang/sh/packages.el
(when (featurep! :completion company)
(package! company-shell))
(when (featurep! +fish)
(package! fish-mode))