mirror of
https://gitlab.com/dwt1/dotfiles.git
synced 2026-04-24 12:00:24 +10:00
Updating Doom Emacs.
This commit is contained in:
@@ -1,8 +1,57 @@
|
||||
;;; lang/scheme/autoload.el -*- lexical-binding: t; -*-
|
||||
|
||||
(defvar calculate-lisp-indent-last-sexp)
|
||||
|
||||
;; Adapted from https://github.com/alezost/emacs-config/blob/master/utils/al-scheme.el#L76-L123
|
||||
;;;###autoload
|
||||
(defun +scheme/open-repl (&optional arg)
|
||||
(defun +scheme-scheme-indent-function-a (indent-point state)
|
||||
"Advice to replace `scheme-indent-function'.
|
||||
|
||||
This function is the same as `scheme-indent-function' except it indents property
|
||||
lists properly and names starting with 'default'."
|
||||
(let ((normal-indent (current-column)))
|
||||
(goto-char (1+ (elt state 1)))
|
||||
(parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)
|
||||
(if (and (elt state 2)
|
||||
;; NOTE looking-at -> looking-at-p
|
||||
(not (looking-at-p "\\sw\\|\\s_")))
|
||||
(progn
|
||||
;; NOTE (if (not ...) (progn ...)) -> (unless ... ...)
|
||||
(unless (> (save-excursion (forward-line 1) (point))
|
||||
calculate-lisp-indent-last-sexp)
|
||||
(goto-char calculate-lisp-indent-last-sexp)
|
||||
(beginning-of-line)
|
||||
(parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t))
|
||||
(backward-prefix-chars)
|
||||
(current-column))
|
||||
(let* ((function (buffer-substring
|
||||
(point) (progn (forward-sexp 1) (point))))
|
||||
;; NOTE let -> let* & moved `method' def into let bindings
|
||||
(method (or (get (intern-soft function) 'scheme-indent-function)
|
||||
(get (intern-soft function) 'scheme-indent-hook))))
|
||||
(cond ((or (eq method 'defun)
|
||||
(and (null method)
|
||||
(> (length function) 3)
|
||||
;; NOTE string-match -> string-match-p
|
||||
;; NOTE The original regexp is "\\`def" but it will mess
|
||||
;; indentation with such names as 'default-...'.
|
||||
(string-match-p "\\`def" function)))
|
||||
(lisp-indent-defform state indent-point))
|
||||
;; NOTE Added this clause to handle alignment of keyword symbols
|
||||
((and (null method)
|
||||
(> (length function) 1)
|
||||
;; NOTE string-match -> string-match-p
|
||||
(string-match-p "\\`:" function))
|
||||
(let ((lisp-body-indent 1))
|
||||
(lisp-indent-defform state indent-point)))
|
||||
((integerp method)
|
||||
(lisp-indent-specform method state indent-point normal-indent))
|
||||
(method
|
||||
(funcall method state indent-point normal-indent)))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +scheme/open-repl ()
|
||||
"Open the Scheme REPL."
|
||||
(interactive "P")
|
||||
(switch-to-geiser arg)
|
||||
(interactive)
|
||||
(call-interactively #'switch-to-geiser)
|
||||
(current-buffer))
|
||||
|
||||
@@ -1,45 +1,63 @@
|
||||
;;; lang/scheme/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
;;;###package scheme
|
||||
(add-hook 'scheme-mode-hook #'rainbow-delimiters-mode)
|
||||
(use-package! scheme
|
||||
:hook (scheme-mode . rainbow-delimiters-mode)
|
||||
:config (advice-add #'scheme-indent-function :override #'+scheme-scheme-indent-function-a))
|
||||
|
||||
|
||||
(use-package! geiser
|
||||
:defer t
|
||||
:hook (scheme-mode . geiser-mode)
|
||||
:init
|
||||
(setq geiser-active-implementations '(guile chicken mit chibi chez))
|
||||
(setq geiser-active-implementations '(guile chicken mit chibi chez)
|
||||
geiser-autodoc-identifier-format "%s → %s"
|
||||
geiser-smart-tab-p t)
|
||||
(unless (featurep! :lang racket)
|
||||
(push 'racket geiser-active-implementations))
|
||||
(after! scheme ; built-in
|
||||
(set-repl-handler! 'scheme-mode '+scheme/open-repl)
|
||||
(after! scheme ; built-in
|
||||
(set-repl-handler! 'scheme-mode #'+scheme/open-repl)
|
||||
(set-eval-handler! 'scheme-mode #'geiser-eval-region)
|
||||
(set-lookup-handlers! 'scheme-mode
|
||||
:definition #'geiser-edit-symbol-at-point
|
||||
:documentation #'geiser-doc-symbol-at-point))
|
||||
:config
|
||||
(set-popup-rules!
|
||||
'(("\\*[Gg]eiser \\(?:[Mm]essages\\|DBG\\|Xref\\)\\*" :quit nil)
|
||||
( "\\* [A-Za-z0-9_-]+ REPL \\*" :quit nil)))
|
||||
'(("^\\*geiser messages\\*$" :slot 1 :vslot -1)
|
||||
("^\\*Geiser dbg\\*$" :slot 1 :vslot -1)
|
||||
("^\\*Geiser xref\\*$" :slot 1 :vslot -1)
|
||||
("^\\*Geiser documentation\\*$" :slot 2 :vslot 2 :select t :size 0.35)
|
||||
("^\\* [A-Za-z0-9_-]+ REPL \\*$" :quit nil :ttl nil)))
|
||||
(map! :localleader
|
||||
:map scheme-mode-map
|
||||
"'" #'geiser-mode-switch-to-repl
|
||||
"s" #'geiser-set-scheme
|
||||
|
||||
"'" #'geiser-mode-switch-to-repl
|
||||
"\"" #'geiser-connect
|
||||
"[" #'geiser-squarify
|
||||
"\\" #'geiser-insert-lambda
|
||||
"s" #'geiser-set-scheme
|
||||
(:prefix ("e" . "eval")
|
||||
"b" #'geiser-eval-buffer
|
||||
"B" #'geiser-eval-buffer-and-go
|
||||
"e" #'geiser-eval-definition
|
||||
"E" #'geiser-eval-definition-and-go
|
||||
"e" #'geiser-eval-last-sexp
|
||||
"d" #'geiser-eval-definition
|
||||
"D" #'geiser-eval-definition-and-go
|
||||
"r" #'geiser-eval-region
|
||||
"R" #'geiser-eval-region-and-go)
|
||||
|
||||
(:prefix ("h" . "help")
|
||||
"d" 'geiser-autodoc)
|
||||
;; TODO add more help keybindings
|
||||
|
||||
"d" #'geiser-autodoc
|
||||
"<" #'geiser-xref-callers
|
||||
">" #'geiser-xref-callees
|
||||
"i" #'geiser-doc-look-up-manual)
|
||||
(:prefix ("m" . "macro")
|
||||
"r" #'geiser-expand-region
|
||||
"d" #'geiser-expand-definition
|
||||
"e" #'geiser-expand-last-sexp)
|
||||
(:prefix ("r" . "repl")
|
||||
"b" #'geiser-switch-to-repl
|
||||
"q" #'geiser-repl-exit
|
||||
"l" #'geiser-load-current-buffer
|
||||
"r" #'geiser-restart-repl
|
||||
"R" #'geiser-reload
|
||||
"c" #'geiser-repl-clear-buffer)))
|
||||
|
||||
(use-package! flycheck-guile
|
||||
:when (featurep! :checkers syntax)
|
||||
:after geiser)
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/scheme/packages.el
|
||||
|
||||
(package! geiser)
|
||||
(package! geiser :pin "0c86289d7b2af07e3653364219e00103c8540edf")
|
||||
|
||||
(when (featurep! :checkers syntax)
|
||||
(package! flycheck-guile
|
||||
:recipe (:host github :repo "flatwhatson/flycheck-guile")
|
||||
:pin "f37b6143776d15b3e7907e7621f6f96f8b1aec48"))
|
||||
|
||||
Reference in New Issue
Block a user