Merge remote-tracking branch 'upstream/develop' into develop

merge upsteam
This commit is contained in:
Sam Precious 2021-02-04 18:51:12 +00:00
commit d5d241b36e
125 changed files with 1272 additions and 879 deletions

View file

@ -65,6 +65,7 @@ with anything other than =aspell= yet.
** Aspell
+ Ubuntu: ~apt-get install aspell aspell-en~
+ macOS: ~brew install aspell~
+ Arch Linux: ~pacman -S aspell aspell-en~
+ NixOS:
#+BEGIN_SRC nix
@ -75,10 +76,22 @@ with anything other than =aspell= yet.
}
#+END_SRC
** TODO Hunspell
** Hunspell
+ Ubuntu: ~apt-get install hunspell~
+ macOS: ~brew install hunspell~
+ Arch Linux: ~pacman -S hunspell~
+ NixOS:
#+BEGIN_SRC nix
{
environment.systemPackages = with pkgs; [
hunspell
];
}
#+END_SRC
** Enchant
+ Ubuntu: ~apt-get install enchant-2~
+ macOS: ~brew install enchant~
+ Arch Linux: ~pacman -S enchant~
+ NixOS:
#+BEGIN_SRC nix

View file

@ -65,7 +65,8 @@
(featurep! :completion helm)))
(call-interactively #'ispell-word)
(cl-destructuring-bind (start . end)
(bounds-of-thing-at-point 'word)
(or (bounds-of-thing-at-point 'word)
(user-error "No word at point"))
(let ((word (thing-at-point 'word t))
(orig-pt (point))
poss ispell-filter)

View file

@ -32,8 +32,6 @@
ispell-extra-args '("--sug-mode=ultra"
"--run-together"))
(unless ispell-dictionary
(setq ispell-dictionary "english"))
(unless ispell-aspell-dict-dir
(setq ispell-aspell-dict-dir
(ispell-get-aspell-config-value "dict-dir")))
@ -147,7 +145,7 @@
(add-hook! 'spell-fu-mode-hook
(defun +spell-init-excluded-faces-h ()
"Set `spell-fu-faces-exclude' according to `+spell-excluded-faces-alist'."
(when-let (excluded (alist-get major-mode +spell-excluded-faces-alist))
(when-let (excluded (cdr (cl-find-if #'derived-mode-p +spell-excluded-faces-alist :key #'car)))
(setq-local spell-fu-faces-exclude excluded))))
;; TODO custom `spell-fu-check-range' function to reduce false positives
@ -199,7 +197,10 @@ e.g. proselint and langtool."
(add-hook 'flyspell-mode-hook #'+spell-init-flyspell-predicate-h)
(let ((flyspell-correct
(cmds! (and (not (or mark-active (ignore-errors (evil-insert-state-p))))
(cmds! (and (not mark-active)
(not (and (bound-and-true-p evil-local-mode)
(or (evil-insert-state-p)
(evil-emacs-state-p))))
(memq 'flyspell-incorrect (face-at-point nil t)))
#'flyspell-correct-at-point)))
(map! :map flyspell-mouse-map

View file

@ -9,10 +9,10 @@
:config
(setq flycheck-emacs-lisp-load-path 'inherit)
;; Check only when saving or opening files. Newline & idle checks are a mote
;; excessive and can catch code in an incomplete state, producing false
;; positives, so we removed them.
(setq flycheck-check-syntax-automatically '(save mode-enabled idle-buffer-switch))
;; Rerunning checks on every newline is a mote excessive.
(delq 'new-line flycheck-check-syntax-automatically)
;; And don't recheck on idle as often
(setq flycheck-idle-change-delay 1.0)
;; For the above functionality, check syntax in a buffer that you switched to
;; only briefly. This allows "refreshing" the syntax check state for several
@ -24,7 +24,9 @@
;; Don't commandeer input focus if the error message pops up (happens when
;; tooltips and childframes are disabled).
(set-popup-rule! "^\\*Flycheck error messages\\*" :select nil)
(set-popup-rules!
'(("^\\*Flycheck error messages\\*" :select nil)
("^\\*Flycheck errors\\*" :size 0.25)))
(add-hook! 'doom-escape-hook :append
(defun +syntax-check-buffer-h ()

View file

@ -2,7 +2,7 @@
;;;###autoload
(defvar +company-backend-alist
'((text-mode company-dabbrev company-yasnippet company-ispell)
'((text-mode (:separate company-dabbrev company-yasnippet company-ispell))
(prog-mode company-capf company-yasnippet)
(conf-mode company-capf company-dabbrev-code company-yasnippet))
"An alist matching modes to company backends. The backends for any mode is

View file

@ -13,7 +13,7 @@
(when (featurep! +fuzzy)
(package! helm-flx :pin "6640fac5cb16bee73c95b8ed1248a4e5e113690e"))
(when (featurep! +childframe)
(package! posframe :pin "e1552c82dffaadc5e7de09a44880a498197ffbee"))
(package! posframe :pin "efd7ea490defc53a5b78e7469a3a35d225b766cc"))
(when (featurep! :lang org)
(package! helm-org :pin "b7a18dfc17e8b933956d61d68c435eee03a96c24"))
(package! helm-descbinds :pin "b72515982396b6e336ad7beb6767e95a80fca192")

View file

@ -59,6 +59,8 @@ results buffer.")
(setq ivy-height 17
ivy-wrap t
ivy-fixed-height-minibuffer t
ivy-read-action-function #'ivy-hydra-read-action
ivy-read-action-format-function #'ivy-read-action-format-columns
projectile-completion-system 'ivy
;; don't show recent files in switch-buffer
ivy-use-virtual-buffers nil
@ -83,22 +85,22 @@ results buffer.")
(add-hook! 'minibuffer-exit-hook
(defun +ivy--set-jump-point-maybe-h ()
(and (markerp (bound-and-true-p +ivy--origin))
(not (equal (ignore-errors (with-ivy-window (point-marker)))
+ivy--origin))
(with-current-buffer (marker-buffer +ivy--origin)
(better-jumper-set-jump +ivy--origin)))
(when (markerp (bound-and-true-p +ivy--origin))
(unless (equal (ignore-errors (with-ivy-window (point-marker)))
+ivy--origin)
(with-current-buffer (marker-buffer +ivy--origin)
(better-jumper-set-jump +ivy--origin)))
(set-marker +ivy--origin nil))
(setq +ivy--origin nil)))
(after! yasnippet
(add-hook 'yas-prompt-functions #'+ivy-yas-prompt-fn))
(defadvice! +ivy--inhibit-completion-in-region-a (orig-fn &rest args)
"`ivy-completion-in-region' struggles with completing certain
evil-ex-specific constructs, so we disable it solely in evil-ex."
:around #'evil-ex
(let ((completion-in-region-function #'completion--in-region))
(apply orig-fn args)))
(after! ivy-hydra
;; Ensure `ivy-dispatching-done' and `hydra-ivy/body' hydras can be
;; exited / toggled by the same key binding they were opened
(add-to-list 'ivy-dispatching-done-hydra-exit-keys '("C-o" nil))
(defhydra+ hydra-ivy () ("M-o" nil)))
(define-key! ivy-minibuffer-map
[remap doom/delete-backward-word] #'ivy-backward-kill-word
@ -182,6 +184,7 @@ evil-ex-specific constructs, so we disable it solely in evil-ex."
[remap describe-face] #'counsel-faces
[remap describe-function] #'counsel-describe-function
[remap describe-variable] #'counsel-describe-variable
[remap describe-symbol] #'counsel-describe-symbol
[remap evil-ex-registers] #'counsel-evil-registers
[remap evil-show-marks] #'counsel-mark-ring
[remap execute-extended-command] #'counsel-M-x
@ -220,19 +223,14 @@ evil-ex-specific constructs, so we disable it solely in evil-ex."
(when (stringp counsel-rg-base-command)
(setq counsel-rg-base-command (split-string counsel-rg-base-command)))
;; REVIEW Fix #3215: prevents mingw on Windows throwing an error trying to
;; expand / to an absolute path. Remove this when it is fixed upstream
;; in counsel.
(when (and (memq system-type '(windows-nt ms-dos))
(listp counsel-rg-base-command)
(member "--path-separator" counsel-rg-base-command))
(setf (cadr (member "--path-separator" counsel-rg-base-command))
"/"))
;; Integrate with `helpful'
(setq counsel-describe-function-function #'helpful-callable
counsel-describe-variable-function #'helpful-variable)
;; Decorate `doom/help-custom-variable' results the same way as
;; `counsel-describe-variable' (adds value and docstring columns).
(ivy-configure 'doom/help-custom-variable :parent 'counsel-describe-variable)
;; Record in jumplist when opening files via counsel-{ag,rg,pt,git-grep}
(add-hook 'counsel-grep-post-action-hook #'better-jumper-set-jump)
(add-hook 'counsel-grep-post-action-hook #'recenter)
@ -285,15 +283,15 @@ evil-ex-specific constructs, so we disable it solely in evil-ex."
"Change `counsel-file-jump' to use fd or ripgrep, if they are available."
:override #'counsel--find-return-list
(cl-destructuring-bind (find-program . args)
(cond ((when-let (fd (executable-find (or doom-projectile-fd-binary "fd")))
(cond ((when-let (fd (executable-find (or doom-projectile-fd-binary "fd") t))
(append (list fd "-H" "--color=never" "--type" "file" "--type" "symlink" "--follow")
(if IS-WINDOWS '("--path-separator=/")))))
((executable-find "rg")
((executable-find "rg" t)
(append (list "rg" "--files" "--follow" "--color=never" "--hidden" "-g!.git" "--no-messages")
(cl-loop for dir in projectile-globally-ignored-directories
collect "--glob"
collect (concat "!" dir))
(if IS-WINDOWS (list "--path-separator" "/"))))
(if IS-WINDOWS '("--path-separator=/"))))
((cons find-program args)))
(unless (listp args)
(user-error "`counsel-file-jump-args' is a list now, please customize accordingly."))

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*-
;;; completion/ivy/packages.el
(package! swiper :pin "778d8bffa33ae0bf432aa23370bb2a535d2132ce")
(package! swiper :pin "d2891aab7b816aebf21ebd01ce33933a6ac6244f")
(package! ivy)
(package! ivy-hydra)
(package! ivy-avy)
@ -9,16 +9,16 @@
(package! amx :pin "ccfc92c600df681df5e8b5fecec328c462ceb71e")
(package! counsel-projectile :pin "06b03c1080d3ccc3fa9b9c41b1ccbcf13f058e4b")
(package! ivy-rich :pin "c0a164ce42920df0629c87dad5ea1bddc79ceac3")
(package! ivy-rich :pin "f8a1f5c90d2a113b597ef5903634c089fce3365b")
(package! wgrep :pin "f0ef9bfa44db503cdb2f83fcfbd2fa4e2382ef1f")
(if (featurep! +prescient)
(package! ivy-prescient :pin "5d139e5b1fe03ccaddff8c250ab8e9d795071b95")
(package! ivy-prescient :pin "42adc802d3ba6c747bed7ea1f6e3ffbbdfc7192d")
(when (featurep! +fuzzy)
(package! flx :pin "647cb2f92f9936c62e277d7a74ad54a80502d255")))
(when (featurep! +childframe)
(package! ivy-posframe :pin "08a00b81747c6b623dd1adc7491a1e2a4c3a3d2a"))
(package! ivy-posframe :pin "83047d440ff132d5a45acde5955f71853edeefb9"))
(when (featurep! +icons)
(package! all-the-icons-ivy :pin "a70cbfa1effe36efc946a823a580cec686d5e88d"))

View file

@ -72,7 +72,7 @@
:desc "Find file from here" "F" #'+default/find-file-under-here
:desc "Locate file" "l" #'locate
:desc "Rename/move this file" "m" #'doom/move-this-file
:desc "Find file in private config" "p" #'doom/open-private-config
:desc "Find file in private config" "p" #'doom/find-file-in-private-config
:desc "Browse private config" "P" #'doom/open-private-config
:desc "Recent files" "r" #'recentf-open-files
:desc "Recent project files" "R" #'projectile-recentf
@ -307,6 +307,7 @@
:desc "Jump to previous hunk" "p" #'git-gutter:previous-hunk)
(:when (featurep! :tools magit)
:desc "Magit dispatch" "/" #'magit-dispatch
:desc "Magit file dispatch" "." #'magit-file-dispatch
:desc "Forge dispatch" "'" #'forge-dispatch
:desc "Magit status" "g" #'magit-status
:desc "Magit status here" "G" #'magit-status-here

View file

@ -12,7 +12,7 @@
(use-package! expand-region
:commands (er/contract-region er/mark-symbol er/mark-word)
:config
(defadvice! doom--quit-expand-region-a ()
(defadvice! doom--quit-expand-region-a (&rest _)
"Properly abort an expand-region region."
:before '(evil-escape doom/escape)
(when (memq last-command '(er/expand-region er/contract-region))

View file

@ -411,6 +411,7 @@
:desc "Jump to previous hunk" "[" #'git-gutter:previous-hunk)
(:when (featurep! :tools magit)
:desc "Magit dispatch" "/" #'magit-dispatch
:desc "Magit file dispatch" "." #'magit-file-dispatch
:desc "Forge dispatch" "'" #'forge-dispatch
:desc "Magit switch branch" "b" #'magit-branch-checkout
:desc "Magit status" "g" #'magit-status

View file

@ -45,9 +45,16 @@ If prefix ARG is non-nil, prompt for the search path."
(interactive "P")
(if arg
(call-interactively #'projectile-discover-projects-in-directory)
(if projectile-project-search-path
(mapc #'projectile-discover-projects-in-directory projectile-project-search-path)
(user-error "`projectile-project-search-path' is empty; don't know where to search"))))
(if (not projectile-project-search-path)
(user-error "`projectile-project-search-path' is empty; don't know where to search")
(letf! (defun projectile-add-known-project (project-root)
(unless (projectile-ignored-project-p project-root)
(funcall projectile-add-known-project project-root)
(message "Added %S to known project roots" project-root)))
(dolist (dir projectile-project-search-path)
(if (not (file-accessible-directory-p dir))
(message "%S was inaccessible and couldn't searched" dir)
(projectile-discover-projects-in-directory dir)))))))
;;;###autoload
(defun +default/dired (arg)

View file

@ -310,7 +310,7 @@ Continues comments if executed from a commented line. Consults
"M" #'doom/describe-active-minor-mode
"O" #'+lookup/online
"T" #'doom/toggle-profiler
"V" #'set-variable
"V" #'doom/help-custom-variable
"W" #'+default/man-or-woman
"C-k" #'describe-key-briefly
"C-l" #'describe-language-environment

View file

@ -106,7 +106,7 @@ more information on modifiers."
(cond ((sp-point-in-comment pos)
(setq evil-auto-indent nil)
(if comment-line-break-function
(funcall comment-line-break-function)
(funcall comment-line-break-function nil)
(comment-indent-new-line)))
;; TODO Find a better way to do this
((and (eq major-mode 'haskell-mode)
@ -121,7 +121,8 @@ more information on modifiers."
(defun +evil--insert-newline-below-and-respect-comments-a (orig-fn count)
(if (or (not +evil-want-o/O-to-continue-comments)
(not (eq this-command 'evil-open-below))
(evil-insert-state-p))
(evil-insert-state-p)
(evil-emacs-state-p))
(funcall orig-fn count)
(letf! (defun evil-insert-newline-below () (+evil--insert-newline))
(let ((evil-auto-indent evil-auto-indent))
@ -131,7 +132,8 @@ more information on modifiers."
(defun +evil--insert-newline-above-and-respect-comments-a (orig-fn count)
(if (or (not +evil-want-o/O-to-continue-comments)
(not (eq this-command 'evil-open-above))
(evil-insert-state-p))
(evil-insert-state-p)
(evil-emacs-state-p))
(funcall orig-fn count)
(letf! (defun evil-insert-newline-above () (+evil--insert-newline 'above))
(let ((evil-auto-indent evil-auto-indent))
@ -188,16 +190,17 @@ From https://github.com/emacs-evil/evil/issues/606"
(let* ((count (count-lines beg end))
(count (if (> count 1) (1- count) count))
(fixup-mark (make-marker)))
(dotimes (var count)
(if (and (bolp) (eolp))
(join-line 1)
(let* ((end (line-beginning-position 3))
(fill-column (1+ (- end beg))))
(set-marker fixup-mark (line-end-position))
(fill-region-as-paragraph beg end nil t)
(goto-char fixup-mark)
(fixup-whitespace))))
(set-marker fixup-mark nil)))
(unwind-protect
(dotimes (var count)
(if (and (bolp) (eolp))
(join-line 1)
(let* ((end (line-beginning-position 3))
(fill-column (1+ (- end beg))))
(set-marker fixup-mark (line-end-position))
(fill-region-as-paragraph beg end nil t)
(goto-char fixup-mark)
(fixup-whitespace))))
(set-marker fixup-mark nil))))
;;;###autoload
(defun +evil--fix-dabbrev-in-minibuffer-h ()

View file

@ -15,18 +15,18 @@
;;; Interactive commands
;;;###autoload
(defun +evil/visual-indent ()
(defun +evil/shift-right ()
"vnoremap < <gv"
(interactive)
(evil-shift-right (region-beginning) (region-end))
(call-interactively #'evil-shift-right)
(evil-normal-state)
(evil-visual-restore))
;;;###autoload
(defun +evil/visual-dedent ()
(defun +evil/shift-left ()
"vnoremap > >gv"
(interactive)
(evil-shift-left (region-beginning) (region-end))
(call-interactively #'evil-shift-left)
(evil-normal-state)
(evil-visual-restore))
@ -123,7 +123,7 @@ the only window, use evil-window-move-* (e.g. `evil-window-move-far-left')."
"Wrapper around `doom/retab'."
:motion nil :move-point nil :type line
(interactive "<r>")
(doom/retab beg end))
(doom/retab nil beg end))
;;;###autoload (autoload '+evil:narrow-buffer "editor/evil/autoload/evil" nil t)
(evil-define-operator +evil:narrow-buffer (beg end &optional bang)

View file

@ -20,7 +20,7 @@ directives. By default, this only recognizes C directives.")
;; Set these defaults before `evil'; use `defvar' so they can be changed prior
;; to loading.
(defvar evil-want-C-g-bindings t)
(defvar evil-want-C-i-jump (or (daemonp) (display-graphic-p)))
(defvar evil-want-C-i-jump nil) ; we do this ourselves
(defvar evil-want-C-u-scroll t) ; moved the universal arg to <leader> u
(defvar evil-want-C-u-delete t)
(defvar evil-want-C-w-scroll t)
@ -66,7 +66,7 @@ directives. By default, this only recognizes C directives.")
(put 'evil-define-key* 'lisp-indent-function 'defun)
;; stop copying each visual state move to the clipboard:
;; https://bitbucket.org/lyro/evil/issue/336/osx-visual-state-copies-the-region-on
;; https://github.com/emacs-evil/evil/issues/336
;; grokked from:
;; http://stackoverflow.com/questions/15873346/elisp-rename-macro
(advice-add #'evil-visual-update-x-selection :override #'ignore)
@ -419,6 +419,8 @@ directives. By default, this only recognizes C directives.")
;; zu{q,w} - undo last marking
(map! :v "@" #'+evil:apply-macro
:m [C-i] #'evil-jump-forward
:m [tab] #'evil-jump-item
;; implement dictionary keybinds
;; evil already defines 'z=' to `ispell-word' = correct word at point
@ -516,8 +518,8 @@ directives. By default, this only recognizes C directives.")
:n "zx" #'kill-current-buffer
:n "ZX" #'doom/save-and-kill-buffer
;; don't leave visual mode after shifting
:v "<" #'+evil/visual-dedent ; vnoremap < <gv
:v ">" #'+evil/visual-indent ; vnoremap > >gv
:v "<" #'+evil/shift-left ; vnoremap < <gv
:v ">" #'+evil/shift-right ; vnoremap > >gv
;; window management (prefix "C-w")
(:map evil-window-map

View file

@ -37,7 +37,6 @@
elisp-mode
ert
free-keys
help
helm
indent
image
@ -95,6 +94,7 @@ variable for an explanation of the defaults (in comments). See
comint
company
compile
consult
(custom cus-edit)
cus-theme
daemons
@ -102,6 +102,7 @@ variable for an explanation of the defaults (in comments). See
deadgrep
debbugs
debug
dictionary
diff-mode
dired
dired-sidebar
@ -187,10 +188,12 @@ variable for an explanation of the defaults (in comments). See
python
quickrun
racer
racket-describe
realgud
reftex
restclient
rg
ripgrep
rjsx-mode
robe
rtags
@ -263,10 +266,15 @@ and complains if a module is loaded too early (during startup)."
"q" #'kill-current-buffer
"d" #'process-menu-delete-process)
(mapc #'+evil-collection-init '(comint custom help)))
(mapc #'+evil-collection-init '(comint custom)))
;; ...or on first invokation of their associated major/minor modes.
(after! evil
;; Emacs loads these two packages immediately, at startup, which needlessly
;; convolutes load order for evil-collection-help.
(defer-feature! help help-mode)
(defer-feature! help-mode help-mode)
(add-transient-hook! 'Buffer-menu-mode
(+evil-collection-init '(buff-menu "buff-menu")))
(add-transient-hook! 'image-mode

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*-
;;; editor/evil/packages.el
(package! evil :pin "d6cf6680ec52733ea78dc530ed75fadc5171c758")
(package! evil :pin "cc9d6886b418389752a0591b9fcb270e83234cf9")
(package! evil-args :pin "758ad5ae54ad34202064fec192c88151c08cb387")
(package! evil-easymotion :pin "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9")
(package! evil-embrace :pin "4379adea032b25e359d01a36301b4a5afdd0d1b7")
@ -18,7 +18,7 @@
(package! evil-snipe :pin "6dcac7f2516c6137a2de532fc2c052f242559ee3")
(package! evil-surround :pin "346d4d85fcf1f9517e9c4991c1efe68b4130f93a")
(package! evil-textobj-anyblock :pin "ff00980f0634f95bf2ad9956b615a155ea8743be")
(package! evil-traces :pin "bc25cae9fa5ab0ba1507827f0944f52ce0ca7462")
(package! evil-traces :pin "290b5323542c46af364ec485c8ec9000040acf90")
(package! evil-visualstar :pin "06c053d8f7381f91c53311b1234872ca96ced752")
(package! exato :pin "aee7af7b7a0e7551478f453d1de7d5b9cb2e06c4")
(package! evil-quick-diff
@ -33,4 +33,4 @@
(package! neotree)
(autoload 'neotree-make-executor "neotree" nil nil 'macro))
(package! evil-collection :pin "ab5bb7c39199518d98035ef201096704a21a97ea"))
(package! evil-collection :pin "e6824e2ad2f2ee7ddccf6f54db655a4cd37a13dc"))

View file

@ -1,15 +1,15 @@
;;; `(file-name-nondirectory buffer-file-name)`${1: --- ${2:description}} -*- lexical-binding: t; -*-
;;; `(file-name-nondirectory buffer-file-name)`${1: --- ${2:Description}} -*- lexical-binding: t; -*-
;;
;; Copyright (C) `(format-time-string "%Y")` `user-full-name`
;;
;; Author: `user-full-name` <http://github/`user-login-name`>
;; Author: `user-full-name` <https://github.com/`(cl-find-if-not #'string-empty-p (list (cdr (doom-call-process "git" "config" "github.user")) user-login-name))`>
;; Maintainer: `user-full-name` <`user-mail-address`>
;; Created: `(format-time-string "%B %d, %Y")`
;; Modified: `(format-time-string "%B %d, %Y")`
;; Version: 0.0.1
;; Keywords:
;; Keywords: `(mapconcat #'symbol-name (mapcar #'car finder-known-keywords) " ")`
;; Homepage: https://github.com/`user-login-name`/`(file-name-base buffer-file-name)`
;; Package-Requires: ((emacs `emacs-version`) (cl-lib "0.5"))
;; Package-Requires: ((emacs "24.3"))
;;
;; This file is not part of GNU Emacs.
;;

View file

@ -20,8 +20,8 @@ marker, indent and syntax-based code folding for as many languages as possible.
This module provides no flags.
** Plugins
+[[https://github.com/alexmurray/evil-vimish-fold][evil-vimish-fold]]
+[[https://github.com/matsievskiysv/vimish-fold][vimish-fold]]
+ [[https://github.com/alexmurray/evil-vimish-fold][evil-vimish-fold]]
+ [[https://github.com/matsievskiysv/vimish-fold][vimish-fold]]
* Prerequisites
This module has no prerequisites.

View file

@ -225,9 +225,9 @@ If nil, BEG and/or END will default to the boundaries of the src block at point.
(defun +format/buffer ()
"Reformat the current buffer using LSP or `format-all-buffer'."
(interactive)
(if (and (eq major-mode 'org-mode)
(org-in-src-block-p t))
(+format--org-region nil nil)
(if (eq major-mode 'org-mode)
(when (org-in-src-block-p t)
(+format--org-region nil nil))
(call-interactively
(cond ((and +format-with-lsp
(bound-and-true-p lsp-mode)

View file

@ -168,7 +168,7 @@
(defun +multiple-cursors-compat-back-to-previous-state-h ()
(when +mc--compat-evil-prev-state
(unwind-protect
(case +mc--compat-evil-prev-state
(cl-case +mc--compat-evil-prev-state
((normal visual) (evil-force-normal-state))
(t (message "Don't know how to handle previous state: %S"
+mc--compat-evil-prev-state)))

View file

@ -33,6 +33,15 @@ ignored. This makes it easy to override built-in snippets with private ones."
(make-directory dir t)
(error "%S doesn't exist" (abbreviate-file-name dir)))))
(defun +snippet--get-template-by-uuid (uuid &optional mode)
"Look up the template by uuid in child-most to parent-most mode order.
Finds correctly active snippets from parent modes (based on Yas' logic)."
(cl-loop with mode = (or mode major-mode)
for active-mode in (yas--modes-to-activate mode)
if (gethash active-mode yas--tables)
if (gethash uuid (yas--table-uuidhash it))
return it))
(defun +snippet--completing-read-uuid (prompt all-snippets &rest args)
(plist-get
(text-properties-at
@ -169,7 +178,7 @@ buggy behavior when <delete> is pressed in an empty field."
(interactive
(list
(+snippet--completing-read-uuid "Visit snippet: " current-prefix-arg)))
(if-let* ((template (yas--get-template-by-uuid major-mode template-uuid))
(if-let* ((template (+snippet--get-template-by-uuid template-uuid major-mode))
(template-path (yas--template-load-file template)))
(progn
(unless (file-readable-p template-path)
@ -242,7 +251,7 @@ shadow the default snippet)."
(if-let* ((major-mode (if (eq major-mode 'snippet-mode)
(intern (file-name-base (directory-file-name default-directory)))
major-mode))
(template (yas--get-template-by-uuid major-mode template-uuid))
(template (+snippet--get-template-by-uuid template-uuid major-mode))
(template-path (yas--template-load-file template)))
(if (file-in-directory-p template-path +snippets-dir)
(find-file template-path)
@ -312,5 +321,7 @@ is."
(defun region-end () evil-visual-end))
(funcall orig-fn no-condition)))
(when (and (bound-and-true-p evil-local-mode)
(not (or (evil-emacs-state-p)
(evil-insert-state-p)))
(yas-active-snippets))
(evil-insert-state +1)))

View file

@ -93,6 +93,7 @@ info in the `header-line-format' is a more visible indicator."
"Start git-commit-mode in insert state if in a blank commit message,
otherwise in default state."
(when (and (bound-and-true-p evil-mode)
(not (evil-emacs-state-p))
(bobp) (eolp))
(evil-insert-state)))))

View file

@ -6,7 +6,7 @@
(package! smerge-mode :built-in t)
(package! browse-at-remote :pin "fadf99d6d8e891f3b112e36c772e0eea0b9bc7f2")
(package! git-commit :pin "2fb3bf782ccf5652b98f8de989f014749473eacf")
(package! git-commit :pin "acfe22ab60a56c61aae3ca6d4f2b7b826fe3b071")
(package! git-timemachine :pin "8d675750e921a047707fcdc36d84f8439b19a907")
(package! gitconfig-mode :pin "55468314a5f6b77d2c96be62c7005ac94545e217")
(package! gitignore-mode :pin "55468314a5f6b77d2c96be62c7005ac94545e217")

View file

@ -86,6 +86,11 @@ This module requires:
| =<localleader> n N= | =cider-browse-ns-all= |
| =<localleader> n n= | =cider-browse-ns= |
| =<localleader> n r= | =cider-ns-refresh= |
| =<localleader> p d= | =cider-pprint-eval-defun-at-point= |
| =<localleader> p D= | =cider-pprint-eval-defun-to-comment= |
| =<localleader> p p= | =cider-pprint-eval-last-sexp= |
| =<localleader> p P= | =cider-pprint-eval-last-sexp-to-comment= |
| =<localleader> p r= | =cider-pprint-eval-last-sexp-to-repl= |
| =<localleader> r B= | =+clojure/cider-switch-to-repl-buffer-and-switch-ns= |
| =<localleader> r L= | =cider-load-buffer-and-switch-to-repl-buffer= |
| =<localleader> r R= | =cider-restart= |

View file

@ -126,6 +126,12 @@
"n" #'cider-browse-ns
"N" #'cider-browse-ns-all
"r" #'cider-ns-refresh)
(:prefix ("p" . "print")
"p" #'cider-pprint-eval-last-sexp
"P" #'cider-pprint-eval-last-sexp-to-comment
"d" #'cider-pprint-eval-defun-at-point
"D" #'cider-pprint-eval-defun-to-comment
"r" #'cider-pprint-eval-last-sexp-to-repl)
(:prefix ("r" . "repl")
"n" #'cider-repl-set-ns
"q" #'cider-quit

View file

@ -2,8 +2,8 @@
;;; lang/clojure/packages.el
(package! clojure-mode :pin "53ef8ac076ae7811627fbdd408e519ab7fca9a0b")
(package! cider :pin "ef47c1de151c212b8d2ddeb9af6c8b0dfc0e300f")
(package! clj-refactor :pin "6db85b37b57497b56d97d5e5512160e5db85f798")
(package! cider :pin "1a34f893e1fe81982fb5099192122a72ee8e94ea")
(package! clj-refactor :pin "9dcc50da7ce6f3c10276c87f09022e80c03e8bef")
(when (featurep! :checkers syntax)
(package! flycheck-clj-kondo :pin "a558bda44c4cb65b69fa53df233e8941ebd195c5"))

View file

@ -1,6 +1,7 @@
;;; lang/common-lisp/doctor.el -*- lexical-binding: t; -*-
(when (require 'sly nil t)
(unless (executable-find inferior-lisp-program)
(warn! "Couldn't find your `inferior-lisp-program' (%s). Is it installed?"
inferior-lisp-program)))
(let ((prog-name (car (split-string inferior-lisp-program))))
(unless (executable-find prog-name)
(warn! "Couldn't find your `inferior-lisp-program' (%s). Is it installed?"
inferior-lisp-program))))

View file

@ -7,6 +7,26 @@
(set-rotate-patterns! 'csharp-mode
:symbols '(("public" "protected" "private")
("class" "struct")))
(set-ligatures! 'csharp-mode
;; Functional
:lambda "() =>"
;; Types
:null "null"
:true "true"
:false "false"
:int "int"
:float "float"
:str "string"
:bool "bool"
:list "List"
;; Flow
:not "!"
:in "in"
:and "&&"
:or "||"
:for "for"
:return "return"
:yield "yield")
(sp-local-pair 'csharp-mode "<" ">"
:when '(+csharp-sp-point-in-type-p)

View file

@ -61,7 +61,9 @@ to a pop up buffer."
(defun +emacs-lisp-lookup-definition (_thing)
"Lookup definition of THING."
(if-let (module (+emacs-lisp--module-at-point))
(doom/help-modules (car module) (cadr module) 'visit-dir)
;; FIXME: this is probably a bug in `counsel'. See
;; https://github.com/abo-abo/swiper/pull/2752.
(progn (doom/help-modules (car module) (cadr module) 'visit-dir) 'deferred)
(call-interactively #'elisp-def)))
;;;###autoload

View file

@ -99,15 +99,17 @@ employed so that flycheck still does *some* helpful linting.")
"Display variable value next to documentation in eldoc."
:around #'elisp-get-var-docstring
(when-let (ret (funcall orig-fn sym))
(concat ret " "
(let* ((truncated " [...]")
(print-escape-newlines t)
(str (symbol-value sym))
(str (prin1-to-string str))
(limit (- (frame-width) (length ret) (length truncated) 1)))
(format (format "%%0.%ds%%s" (max limit 0))
(propertize str 'face 'warning)
(if (< (length str) limit) "" truncated))))))
(if (fboundp sym)
(concat ret " "
(let* ((truncated " [...]")
(print-escape-newlines t)
(str (symbol-value sym))
(str (prin1-to-string str))
(limit (- (frame-width) (length ret) (length truncated) 1)))
(format (format "%%0.%ds%%s" (max limit 0))
(propertize str 'face 'warning)
(if (< (length str) limit) "" truncated))))
ret)))
(map! :localleader
:map emacs-lisp-mode-map
@ -181,12 +183,12 @@ employed so that flycheck still does *some* helpful linting.")
"Add Doom's own demos to help buffers."
:around #'elisp-demos--search
(or (funcall orig-fn symbol)
(when-let (demos-file (doom-glob doom-docs-dir "api.org"))
(when-let (demos-file (doom-module-locate-path :lang 'emacs-lisp "demos.org"))
(with-temp-buffer
(insert-file-contents demos-file)
(goto-char (point-min))
(when (re-search-forward
(format "^\\*\\*\\* %s$" (regexp-quote (symbol-name symbol)))
(format "^\\*\\* %s$" (regexp-quote (symbol-name symbol)))
nil t)
(let (beg end)
(forward-line 1)

View file

@ -0,0 +1,537 @@
#+TITLE: API Demos
#+PROPERTY: header-args:elisp :results pp
This file contains demos of Doom's public API; its core library, macros, and
autodefs. It is used by the =elisp-demos= package to display examples of their
usage from their documentation (e.g. =SPC h f add-hook\!=).
* Table of Contents :TOC_3:
- [[#core-lib][core-lib]]
- [[#add-hook][add-hook!]]
- [[#add-transient-hook][add-transient-hook!]]
- [[#after][after!]]
- [[#appendq][appendq!]]
- [[#custom-set-faces][custom-set-faces!]]
- [[#custom-theme-set-faces][custom-theme-set-faces!]]
- [[#defer-feature][defer-feature!]]
- [[#defer-until][defer-until!]]
- [[#disable-packages][disable-packages!]]
- [[#doom][doom!]]
- [[#file-exists-p][file-exists-p!]]
- [[#cmd][cmd!]]
- [[#cmd-1][cmd!!]]
- [[#cmds][cmds!]]
- [[#kbd][kbd!]]
- [[#letenv][letenv!]]
- [[#load][load!]]
- [[#map][map!]]
- [[#package][package!]]
- [[#pushnew][pushnew!]]
- [[#prependq][prependq!]]
- [[#quiet][quiet!]]
- [[#remove-hook][remove-hook!]]
- [[#setq][setq!]]
- [[#setq-hook][setq-hook!]]
- [[#unsetq-hook][unsetq-hook!]]
- [[#use-package][use-package!]]
* core-lib
** add-hook!
#+BEGIN_SRC elisp :eval no
;; With only one hook and one function, this is identical to `add-hook'. In that
;; case, use that instead.
(add-hook! 'some-mode-hook #'enable-something)
;; Adding many-to-many functions to hooks
(add-hook! some-mode #'enable-something #'and-another)
(add-hook! some-mode #'(enable-something and-another))
(add-hook! '(one-mode-hook second-mode-hook) #'enable-something)
(add-hook! (one-mode second-mode) #'enable-something)
;; Appending and local hooks
(add-hook! (one-mode second-mode) :append #'enable-something)
(add-hook! (one-mode second-mode) :local #'enable-something)
;; With arbitrary forms
(add-hook! (one-mode second-mode) (setq v 5) (setq a 2))
(add-hook! (one-mode second-mode) :append :local (setq v 5) (setq a 2))
;; Inline named hook functions
(add-hook! '(one-mode-hook second-mode-hook)
(defun do-something ()
...)
(defun do-another-thing ()
...))
#+END_SRC
** TODO add-transient-hook!
** after!
#+BEGIN_SRC elisp :eval no
;;; `after!' will take:
;; An unquoted package symbol (the name of a package)
(after! helm ...)
;; An unquoted list of package symbols (i.e. BODY is evaluated once both magit
;; and git-gutter have loaded)
(after! (magit git-gutter) ...)
;; An unquoted, nested list of compound package lists, using any combination of
;; :or/:any and :and/:all
(after! (:or package-a package-b ...) ...)
(after! (:and package-a package-b ...) ...)
(after! (:and package-a (:or package-b package-c) ...) ...)
;; (Without :or/:any/:and/:all, :and/:all are implied.)
;; A common mistake is to pass it the names of major or minor modes, e.g.
(after! rustic-mode ...)
(after! python-mode ...)
;; But the code in them will never run! rustic-mode is in the `rustic' package
;; and python-mode is in the `python' package. This is what you want:
(after! rustic ...)
(after! python ...)
#+END_SRC
** appendq!
#+BEGIN_SRC elisp
(let ((x '(a b c)))
(appendq! x '(c d e))
x)
#+END_SRC
#+RESULTS:
: (a b c c d e)
#+BEGIN_SRC elisp
(let ((x '(a b c))
(y '(c d e))
(z '(f g)))
(appendq! x y z '(h))
x)
#+END_SRC
#+RESULTS:
: (a b c c d e f g h)
** custom-set-faces!
#+BEGIN_SRC elisp :eval no
(custom-set-faces!
'(outline-1 :weight normal)
'(outline-2 :weight normal)
'(outline-3 :weight normal)
'(outline-4 :weight normal)
'(outline-5 :weight normal)
'(outline-6 :weight normal)
'(default :background "red" :weight bold)
'(region :background "red" :weight bold))
(custom-set-faces!
'((outline-1 outline-2 outline-3 outline-4 outline-5 outline-6)
:weight normal)
'((default region)
:background "red" :weight bold))
(let ((red-bg-faces '(default region)))
(custom-set-faces!
`(,(cl-loop for i from 0 to 6 collect (intern (format "outline-%d" i)))
:weight normal)
`(,red-bg-faces
:background "red" :weight bold)))
;; If you want to make use of the `doom-themes' package API (e.g. `doom-color',
;; `doom-lighten', `doom-darken', etc.), you must use `custom-set-faces!'
;; *after* the theme has been loaded. e.g.
(load-theme 'doom-one t)
(custom-set-faces!
`(outline-1 :foreground ,(doom-color 'red))
`(outline-2 :background ,(doom-color 'blue)))
#+END_SRC
** custom-theme-set-faces!
#+BEGIN_SRC elisp :eval no
(custom-theme-set-faces! 'doom-one
'(outline-1 :weight normal)
'(outline-2 :weight normal)
'(outline-3 :weight normal)
'(outline-4 :weight normal)
'(outline-5 :weight normal)
'(outline-6 :weight normal)
'(default :background "red" :weight bold)
'(region :background "red" :weight bold))
(custom-theme-set-faces! '(doom-one-theme doom-one-light-theme)
'((outline-1 outline-2 outline-3 outline-4 outline-5 outline-6)
:weight normal)
'((default region)
:background "red" :weight bold))
(let ((red-bg-faces '(default region)))
(custom-theme-set-faces! '(doom-one-theme doom-one-light-theme)
`(,(cl-loop for i from 0 to 6 collect (intern (format "outline-%d" i)))
:weight normal)
`(,red-bg-faces
:background "red" :weight bold)))
;; If you want to make use of the `doom-themes' package API (e.g. `doom-color',
;; `doom-lighten', `doom-darken', etc.), you must use `custom-set-faces!'
;; *after* the theme has been loaded. e.g.
(load-theme 'doom-one t)
(custom-theme-set-faces! 'doom-one
`(outline-1 :foreground ,(doom-color 'red))
`(outline-2 :background ,(doom-color 'blue)))
#+END_SRC
** TODO defer-feature!
** TODO defer-until!
** disable-packages!
#+BEGIN_SRC elisp :eval no
;; Disable packages enabled by DOOM
(disable-packages! some-package second-package)
#+END_SRC
** doom!
#+BEGIN_SRC elisp :eval no
(doom! :completion
company
ivy
;;helm
:tools
(:if IS-MAC macos)
docker
lsp
:lang
(cc +lsp)
(:cond ((string= system-name "work-pc")
python
rust
web)
((string= system-name "writing-pc")
(org +dragndrop)
ruby))
(:if IS-LINUX
(web +lsp)
web)
:config
literate
(default +bindings +smartparens))
#+END_SRC
** file-exists-p!
#+BEGIN_SRC elisp
(file-exists-p! "init.el" doom-emacs-dir)
#+END_SRC
#+RESULTS:
: /home/hlissner/.emacs.d/init.el
#+BEGIN_SRC elisp
(file-exists-p! (and (or "doesnotexist" "init.el")
"LICENSE")
doom-emacs-dir)
#+END_SRC
#+RESULTS:
: /home/hlissner/.emacs.d/LICENSE
** cmd!
#+BEGIN_SRC elisp :eval no
(map! "C-j" (cmd! (newline) (indent-according-to-mode)))
#+END_SRC
** cmd!!
When ~newline~ is passed a numerical prefix argument (=C-u 5 M-x newline=), it
inserts N newlines. We can use ~cmd!!~ to easily create a keybinds that bakes in
the prefix arg into the command call:
#+BEGIN_SRC elisp :eval no
(map! "C-j" (cmd!! #'newline 5))
#+END_SRC
Or to create aliases for functions that behave differently:
#+BEGIN_SRC elisp :eval no
(fset 'insert-5-newlines (cmd!! #'newline 5))
;; The equivalent of C-u M-x org-global-cycle, which resets the org document to
;; its startup visibility settings.
(fset 'org-reset-global-visibility (cmd!! #'org-global-cycle '(4))
#+END_SRC
** cmds!
#+BEGIN_SRC elisp :eval no
(map! :i [tab] (cmds! (and (featurep! :editor snippets)
(bound-and-true-p yas-minor-mode)
(yas-maybe-expand-abbrev-key-filter 'yas-expand))
#'yas-expand
(featurep! :completion company +tng)
#'company-indent-or-complete-common)
:m [tab] (cmds! (and (bound-and-true-p yas-minor-mode)
(evil-visual-state-p)
(or (eq evil-visual-selection 'line)
(not (memq (char-after) (list ?\( ?\[ ?\{ ?\} ?\] ?\))))))
#'yas-insert-snippet
(and (featurep! :editor fold)
(save-excursion (end-of-line) (invisible-p (point))))
#'+fold/toggle
(fboundp 'evil-jump-item)
#'evil-jump-item))
#+END_SRC
** kbd!
#+BEGIN_SRC elisp :eval no
(map! "," (kbd! "SPC")
";" (kbd! ":"))
#+END_SRC
** letenv!
#+BEGIN_SRC elisp
(letenv! (("SHELL" "/bin/sh"))
(shell-command-to-string "echo $SHELL"))
#+END_SRC
#+RESULTS:
: "/bin/sh\n"
** load!
#+BEGIN_SRC elisp :eval no
;;; Lets say we're in ~/.doom.d/config.el
(load! "lisp/module") ; loads ~/.doom.d/lisp/module.el
(load! "somefile" doom-emacs-dir) ; loads ~/.emacs.d/somefile.el
(load! "anotherfile" doom-private-dir) ; loads ~/.doom.d/anotherfile.el
;; If you don't want a `load!' call to throw an error if the file doesn't exist:
(load! "~/.maynotexist" nil t)
#+END_SRC
** map!
#+BEGIN_SRC elisp :eval no
(map! :map magit-mode-map
:m "C-r" 'do-something ; C-r in motion state
:nv "q" 'magit-mode-quit-window ; q in normal+visual states
"C-x C-r" 'a-global-keybind
:g "C-x C-r" 'another-global-keybind ; same as above
(:when IS-MAC
:n "M-s" 'some-fn
:i "M-o" (cmd! (message "Hi"))))
(map! (:when (featurep! :completion company) ; Conditional loading
:i "C-@" #'+company/complete
(:prefix "C-x" ; Use a prefix key
:i "C-l" #'+company/whole-lines)))
(map! (:when (featurep! :lang latex) ; local conditional
(:map LaTeX-mode-map
:localleader ; Use local leader
:desc "View" "v" #'TeX-view)) ; Add which-key description
:leader ; Use leader key from now on
:desc "Eval expression" ";" #'eval-expression)
#+END_SRC
These are side-by-side comparisons, showing how to bind keys with and without
~map!~:
#+BEGIN_SRC elisp :eval no
;; bind a global key
(global-set-key (kbd "C-x y") #'do-something)
(map! "C-x y" #'do-something)
;; bind a key on a keymap
(define-key emacs-lisp-mode-map (kbd "C-c p") #'do-something)
(map! :map emacs-lisp-mode-map "C-c p" #'do-something)
;; unbind a key defined elsewhere
(define-key lua-mode-map (kbd "SPC m b") nil)
(map! :map lua-mode-map "SPC m b" nil)
;; bind multiple keys
(global-set-key (kbd "C-x x") #'do-something)
(global-set-key (kbd "C-x y") #'do-something-else)
(global-set-key (kbd "C-x z") #'do-another-thing)
(map! "C-x x" #'do-something
"C-x y" #'do-something-else
"C-x z" #'do-another-thing)
;; bind global keys in normal mode
(evil-define-key* 'normal 'global
(kbd "C-x x") #'do-something
(kbd "C-x y") #'do-something-else
(kbd "C-x z") #'do-another-thing)
(map! :n "C-x x" #'do-something
:n "C-x y" #'do-something-else
:n "C-x z" #'do-another-thing)
;; or on a deferred keymap
(evil-define-key 'normal emacs-lisp-mode-map
(kbd "C-x x") #'do-something
(kbd "C-x y") #'do-something-else
(kbd "C-x z") #'do-another-thing)
(map! :map emacs-lisp-mode-map
:n "C-x x" #'do-something
:n "C-x y" #'do-something-else
:n "C-x z" #'do-another-thing)
;; or multiple maps
(dolist (map (list emacs-lisp-mode go-mode-map ivy-minibuffer-map))
(evil-define-key '(normal insert) map
"a" #'a
"b" #'b
"c" #'c))
(map! :map (emacs-lisp-mode go-mode-map ivy-minibuffer-map)
:ni "a" #'a
:ni "b" #'b
:ni "c" #'c)
;; or in multiple states (order of states doesn't matter)
(evil-define-key* '(normal visual) emacs-lisp-mode-map (kbd "C-x x") #'do-something)
(evil-define-key* 'insert emacs-lisp-mode-map (kbd "C-x x") #'do-something-else)
(evil-define-key* '(visual normal insert emacs) emacs-lisp-mode-map (kbd "C-x z") #'do-another-thing)
(map! :map emacs-lisp-mode
:nv "C-x x" #'do-something ; normal+visual
:i "C-x y" #'do-something-else ; insert
:vnie "C-x z" #'do-another-thing) ; visual+normal+insert+emacs
;; You can nest map! calls:
(evil-define-key* '(normal visual) emacs-lisp-mode-map (kbd "C-x x") #'do-something)
(evil-define-key* 'normal go-lisp-mode-map (kbd "C-x x") #'do-something-else)
(map! (:map emacs-lisp-mode :nv "C-x x" #'do-something)
(:map go-lisp-mode :n "C-x x" #'do-something-else))
#+END_SRC
** package!
#+BEGIN_SRC elisp :eval no
;; To install a package that can be found on ELPA or any of the sources
;; specified in `straight-recipe-repositories':
(package! evil)
(package! js2-mode)
(package! rainbow-delimiters)
;; To disable a package included with Doom (which will no-op all its `after!'
;; and `use-package!' blocks):
(package! evil :disable t)
(package! rainbow-delimiters :disable t)
;; To install a package from a github repo
(package! so-long :recipe (:host github :repo "hlissner/emacs-so-long"))
;; If a package is particularly big and comes with submodules you don't need,
;; you can tell the package manager not to clone the repo recursively:
(package! ansible :recipe (:nonrecursive t))
;; To pin a package to a specific commit:
(package! evil :pin "e7bc39de2f9")
;; ...or branch:
(package! evil :recipe (:branch "stable"))
;; To unpin a pinned package:
(package! evil :pin nil)
;; If you share your config between two computers, and don't want bin/doom
;; refresh to delete packages used only on one system, use :ignore
(package! evil :ignore (not (equal system-name "my-desktop")))
#+END_SRC
** pushnew!
#+BEGIN_SRC elisp
(let ((list '(a b c)))
(pushnew! list 'c 'd 'e)
list)
#+END_SRC
#+RESULTS:
: (e d a b c)
** prependq!
#+BEGIN_SRC elisp
(let ((x '(a b c)))
(prependq! x '(c d e))
x)
#+END_SRC
#+RESULTS:
: (c d e a b c)
#+BEGIN_SRC elisp
(let ((x '(a b c))
(y '(c d e))
(z '(f g)))
(prependq! x y z '(h))
x)
#+END_SRC
#+RESULTS:
: (c d e f g h a b c)
** quiet!
#+BEGIN_SRC elisp :eval no
;; Enters recentf-mode without extra output
(quiet! (recentf-mode +1))
#+END_SRC
** remove-hook!
#+BEGIN_SRC elisp :eval no
;; With only one hook and one function, this is identical to `remove-hook'. In
;; that case, use that instead.
(remove-hook! 'some-mode-hook #'enable-something)
;; Removing N functions from M hooks
(remove-hook! some-mode #'enable-something #'and-another)
(remove-hook! some-mode #'(enable-something and-another))
(remove-hook! '(one-mode-hook second-mode-hook) #'enable-something)
(remove-hook! (one-mode second-mode) #'enable-something)
;; Removing buffer-local hooks
(remove-hook! (one-mode second-mode) :local #'enable-something)
;; Removing arbitrary forms (must be exactly the same as the definition)
(remove-hook! (one-mode second-mode) (setq v 5) (setq a 2))
#+END_SRC
** setq!
#+BEGIN_SRC elisp
;; Each of these have a setter associated with them, which must be triggered in
;; order for their new values to have an effect.
(setq! evil-want-Y-yank-to-eol nil
evil-want-C-u-scroll nil
evil-want-C-d-scroll nil)
#+END_SRC
** setq-hook!
#+BEGIN_SRC elisp :eval no
;; Set multiple variables after a hook
(setq-hook! 'markdown-mode-hook
line-spacing 2
fill-column 80)
;; Set variables after multiple hooks
(setq-hook! '(eshell-mode-hook term-mode-hook)
hscroll-margin 0)
#+END_SRC
** unsetq-hook!
#+BEGIN_SRC elisp :eval no
(unsetq-hook! 'markdown-mode-hook line-spacing)
;; Removes the following variable hook
(setq-hook! 'markdown-mode-hook line-spacing 2)
;; Removing N variables from M hooks
(unsetq-hook! some-mode enable-something and-another)
(unsetq-hook! some-mode (enable-something and-another))
(unsetq-hook! '(one-mode-hook second-mode-hook) enable-something)
(unsetq-hook! (one-mode second-mode) enable-something)
#+END_SRC
** use-package!
#+BEGIN_SRC elisp :eval no
;; Use after-call to load package before hook
(use-package! projectile
:after-call (pre-command-hook after-find-file dired-before-readin-hook))
;; defer recentf packages one by one
(use-package! recentf
:defer-incrementally easymenu tree-widget timer
:after-call after-find-file)
;; This is equivalent to :defer-incrementally (abc)
(use-package! abc
:defer-incrementally t)
#+END_SRC

View file

@ -31,9 +31,9 @@ This module adds [[https://fsharp.org/][F#]] support.
** Module Flags
+ =+lsp= Enables lsp-fsharp (this requires ~:tools lsp~ to be enabled).
** Plugins
+ [[https://github.com/fsharp/emacs-fsharp-mod+e][fsharp-mode]]
+ [[https://github.com/fsharp/emacs-fsharp-mode][fsharp-mode]]
+ =+lsp=
+ [[https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-fsharp.el][lsp-fsharp]]
+ [[https://github.com/emacs-lsp/lsp-mode/blob/master/clients/lsp-fsharp.el][lsp-fsharp]]
** Hacks
None so far.
@ -47,7 +47,7 @@ Do *NOT* install mono via brew. See this [[https://github.com/fsharp/FsAutoCompl
sudo pacman -S mono
#+END_SRC
** LSP
The language server is automatically installed by [[https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-fsharp.el][lsp-fsharp]].
The language server is automatically installed by [[https://github.com/emacs-lsp/lsp-mode/blob/master/clients/lsp-fsharp.el][lsp-fsharp]].
* Features
An in-depth list of features, how to use them, and their dependencies.

View file

@ -3,7 +3,7 @@
;; Major modes
(package! coffee-mode :pin "35a41c7d8233eac0b267d9593e67fb8b6235e134")
(package! js2-mode :pin "ffb70990c1a4d4616034cb810b4ce36953aecb47")
(package! js2-mode :pin "f7816bdd3e8e84ed1d64b6a13c9ba488363b7e91")
(package! rjsx-mode :pin "b697fe4d92cc84fa99a7bcb476f815935ea0d919")
(package! typescript-mode :pin "54f14c482701c4f937bf51469f70812624e07f87")

View file

@ -6,7 +6,7 @@
(set-repl-handler! 'julia-mode #'+julia/open-repl)
;; Borrow matlab.el's fontification of math operators. From
;; <https://ogbe.net/emacsconfig.html>
;; <https://web.archive.org/web/20170326183805/https://ogbe.net/emacsconfig.html>
(dolist (mode '(julia-mode ess-julia-mode))
(font-lock-add-keywords
mode

View file

@ -39,19 +39,28 @@ This module has no dedicated maintainers.
* Prerequisites
** Language Server Protocol servers
Currently the servers supported depend on the =:tools lsp= flavor you are using
LSP server support depends on which flavor of the =:tools lsp= module you have
installed (Eglot or LSP-mode).
*** LSP-mode
This server is built in Java, so a ~java~ environment will be necessary
+ [[https://github.com/EmmyLua/EmmyLua-LanguageServer][EmmyLua-LanguageServer]] must be installed and configured to use the
configuration provided by emacs-lsp.
Three servers are supported, ordered from highest to lowest priority:
+ [[https://github.com/EmmyLua/EmmyLua-LanguageServer][EmmyLua-LanguageServer]] :: Must be in =~/.emacs.d/.local/etc/lsp/EmmyLua-LS-all.jar=. See ~lsp-clients-emmy-lua-jar-path~ variable to change this.
+ [[https://github.com/sumneko/lua-language-server][Sumneko language server]] (lua-language-server) :: Must be in
=~/.config/emacs/.local/etc/lsp/lua-language-server/=. See
~lsp-clients-lua-language-server-bin~ variable to change this.
+ [[https://github.com/Alloyed/lua-lsp][lua-lsp]] :: Must be available in =~/.luarocks/bin/lua-lsp=. See
~lsp-clients-lua-lsp-server-install-dir~ variable to change this.
[[https://emacs-lsp.github.io/lsp-mode/page/lsp-emmy-lua/][LSP-mode documentation]] has more information about setting up the server and the
configuration variables correctly (use a bare ~(setq
lsp-clients-emmy-lua-java-path value)~ in your =config.el=)
configuration variables correctly.
*** Eglot
This server is built in Lua, so a =lua= environment will be necessary
+ [[https://github.com/sumneko/lua-language-server][lua-language-server]] must be installed and built locally, with =+lua-lsp-dir=
variable pointing to the root of the repository
Eglot currently only supports one of the above servers out of the box:
+ [[https://github.com/sumneko/lua-language-server][Sumneko language server]] (lua-language-server) :: Must be in
=~/.config/emacs/.local/etc/lsp/lua-language-server/=. See
~+lua-lsp-dir~ variable to change this.
* TODO Features
# An in-depth list of features, how to use them, and their dependencies.

View file

@ -1,11 +1,5 @@
;;; lang/lua/config.el -*- lexical-binding: t; -*-
(defvar +lua-lsp-dir (concat doom-etc-dir "lsp/lua-language-server/")
"Absolute path to the directory of sumneko's lua-language-server.
This directory MUST contain the 'main.lua' file and be the in-source build of
lua-language-server.")
;; sp's default rules are obnoxious, so disable them
(provide 'smartparens-lua)
@ -25,27 +19,29 @@ lua-language-server.")
(set-company-backend! 'lua-mode '(company-lua company-yasnippet))
(when (featurep! +lsp)
(defun +lua-generate-lsp-server-command ()
;; The absolute path to lua-language-server binary is necessary because
;; the bundled dependencies aren't found otherwise. The only reason this
;; is a function is to dynamically change when/if `+lua-lsp-dir' does
(list (doom-path +lua-lsp-dir
(cond (IS-MAC "bin/macOS")
(IS-LINUX "bin/Linux")
(IS-WINDOWS "bin/Windows"))
"lua-language-server")
"-E" "-e" "LANG=en"
(doom-path +lua-lsp-dir "main.lua")))
(add-hook 'lua-mode-local-vars-hook #'lsp!)
(if (featurep! :tools lsp +eglot)
(set-eglot-client! 'lua-mode (+lua-generate-lsp-server-command))
(after! lsp-mode
(lsp-register-client
(make-lsp-client :new-connection (lsp-stdio-connection '+lua-generate-lsp-server-command)
:major-modes '(lua-mode)
:priority -1
:server-id 'lua-langserver))))
(add-hook 'lua-mode-local-vars-hook #'lsp!)))
(when (featurep! :tools lsp +eglot)
(defvar +lua-lsp-dir (concat doom-etc-dir "lsp/lua-language-server/")
"Absolute path to the directory of sumneko's lua-language-server.
This directory MUST contain the 'main.lua' file and be the in-source build of
lua-language-server.")
(defun +lua-generate-lsp-server-command ()
;; The absolute path to lua-language-server binary is necessary because
;; the bundled dependencies aren't found otherwise. The only reason this
;; is a function is to dynamically change when/if `+lua-lsp-dir' does
(list (or (executable-find "lua-language-server")
(doom-path +lua-lsp-dir
(cond (IS-MAC "bin/macOS")
(IS-LINUX "bin/Linux")
(IS-WINDOWS "bin/Windows"))
"lua-language-server"))
"-E" "-e" "LANG=en"
(doom-path +lua-lsp-dir "main.lua")))
(set-eglot-client! 'lua-mode (+lua-generate-lsp-server-command)))))
(use-package! moonscript

View file

@ -2,31 +2,37 @@
;;;###autoload
(defun +markdown-flyspell-word-p ()
"Return t if `flyspell' should check work before point.
"Return t if `flyspell' should check word before point.
Used for `flyspell-generic-check-word-predicate'. Augments
`markdown-flyspell-check-word-p' to:
Used for `flyspell-generic-check-word-predicate'. Like
`markdown-flyspell-check-word-p', but also:
a) Do spell check in code comments and
b) Inhibit spell check in html markup"
(and (markdown-flyspell-check-word-p)
(save-excursion
(goto-char (1- (point)))
(if (or
;; Spell check in code comments
(not (and (markdown-code-block-at-point-p)
(markdown--face-p (point) '(font-lock-comment-face))))
;; Don't spell check in html markup
(markdown--face-p (point) '(markdown-html-attr-name-face
markdown-html-attr-value-face
markdown-html-tag-name-face)))
(prog1 nil
;; If flyspell overlay is put, then remove it
(when-let (bounds (bounds-of-thing-at-point 'word))
(cl-loop for ov in (overlays-in (car bounds) (cdr bounds))
when (overlay-get ov 'flyspell-overlay)
do (delete-overlay ov))))
t))))
a) Performs spell check in code comments and
b) Inhibits spell check in html markup"
(save-excursion
(goto-char (1- (point)))
(if (or (and (markdown-code-block-at-point-p)
(not (or (markdown-text-property-at-point 'markdown-yaml-metadata-section)
(markdown--face-p (point) '(font-lock-comment-face)))))
(markdown-inline-code-at-point-p)
(markdown-in-comment-p)
(markdown--face-p (point) '(markdown-reference-face
markdown-markup-face
markdown-plain-url-face
markdown-inline-code-face
markdown-url-face
markdown-html-attr-name-face
markdown-html-attr-value-face
markdown-html-tag-name-face)))
(prog1 nil
;; If flyspell overlay is put, then remove it
(let ((bounds (bounds-of-thing-at-point 'word)))
(when bounds
(cl-loop for ov in (overlays-in (car bounds) (cdr bounds))
when (overlay-get ov 'flyspell-overlay)
do
(delete-overlay ov)))))
t)))
;;

View file

@ -86,12 +86,35 @@ capture, the end position, and the output buffer.")
"p" #'markdown-preview
"e" #'markdown-export
(:when (featurep! +grip)
"p" #'grip-mode)
"p" #'grip-mode)
(:prefix ("i" . "insert")
"t" #'markdown-toc-generate-toc
"i" #'markdown-insert-image
"l" #'markdown-insert-link)))
:desc "Table Of Content" "T" #'markdown-toc-generate-toc
:desc "Image" "i" #'markdown-insert-image
:desc "Link" "l" #'markdown-insert-link
:desc "<hr>" "-" #'markdown-insert-hr
:desc "Heading 1" "1" #'markdown-insert-header-atx-1
:desc "Heading 2" "2" #'markdown-insert-header-atx-2
:desc "Heading 3" "3" #'markdown-insert-header-atx-3
:desc "Heading 4" "4" #'markdown-insert-header-atx-4
:desc "Heading 5" "5" #'markdown-insert-header-atx-5
:desc "Heading 6" "6" #'markdown-insert-header-atx-6
:desc "Code block" "C" #'markdown-insert-gfm-code-block
:desc "Pre region" "P" #'markdown-pre-region
:desc "Blockquote region" "Q" #'markdown-blockquote-region
:desc "Checkbox" "[" #'markdown-insert-gfm-checkbox
:desc "Bold" "b" #'markdown-insert-bold
:desc "Inline code" "c" #'markdown-insert-code
:desc "Italic" "e" #'markdown-insert-italic
:desc "Footnote" "f" #'markdown-insert-footnote
:desc "Header dwim" "h" #'markdown-insert-header-dwim
:desc "Italic" "i" #'markdown-insert-italic
:desc "Kbd" "k" #'markdown-insert-kbd
:desc "Link" "l" #'markdown-insert-link
:desc "Pre" "p" #'markdown-insert-pre
:desc "New blockquote" "q" #'markdown-insert-blockquote
:desc "Strike through" "s" #'markdown-insert-strike-through
:desc "Table" "t" #'markdown-insert-table
:desc "Wiki link" "w" #'markdown-insert-wiki-link)))
(use-package! evil-markdown
:when (featurep! :editor evil +everywhere)

View file

@ -53,7 +53,8 @@
(save-excursion
(goto-char (point-min))
(save-match-data
(if (not (re-search-forward "#! *\\(?:cached-\\)?nix-shell +-i +\\([^ \n]+\\)" 256 t))
(if (not (and (re-search-forward "\\_<nix-shell " (line-end-position 2) t)
(re-search-forward "-i +\"?\\([^ \"\n]+\\)" (line-end-position) t)))
(message "Couldn't determine mode for this script")
(let* ((interp (match-string 1))
(mode
@ -67,4 +68,8 @@
(when mode
(prog1 (set-auto-mode-0 mode)
(when (eq major-mode 'sh-mode)
(sh-set-shell interp)))))))))
(sh-set-shell interp))
;; HACK Without this, quickrun tries to evaluate code directly
;; with (cached)?nix-shell.
;; TODO Use the nix-shell/cached-nix-shell-given interpreter
(setq-local quickrun-option-shebang nil))))))))

View file

@ -10,6 +10,14 @@
(use-package! nix-mode
:interpreter ("\\(?:cached-\\)?nix-shell" . +nix-shell-init-mode)
:mode "\\.nix\\'"
:init
;; Treat flake.lock files as json. Fall back to js-mode because it's faster
;; than js2-mode, and its extra features aren't needed there.
(add-to-list 'auto-mode-alist
(cons "/flake\\.lock\\'"
(if (featurep! :lang json)
'json-mode
'js-mode)))
:config
(set-repl-handler! 'nix-mode #'+nix/open-repl)
(set-company-backend! 'nix-mode 'company-nixos-options)

View file

@ -74,17 +74,17 @@ tools.
* Appendix
** Commands
| Command | Key | Description |
|------------------------------+-----------+-----------------------------------------------------------|
| =merlin-type-enclosing= | =SPC m t= | display type under point |
| =tuareg-find-alternate-file= | =SPC m a= | switch between =.ml= and =.mli= |
| =merlin-locate= | =gd= | lookup definition |
| =merlin-occurences= | =SPC c D= | lookup references |
| =merlin-document= | =K= | lookup documentation |
| =merlin-imenu= | =SPC / i= | symbol lookup in file |
| =merlin-iedit-occurrences= | =v R= | visual refactor identifier under point (multiple cursors) |
| =utop= | =SPC o r= | open =utop= as REPL |
| =utop-eval-region= | =SPC c e= | evaluate selected region in =utop= |
| Command | Key | Description |
|------------------------------+-------------------+-----------------------------------------------------------|
| =merlin-type-enclosing= | =<localleader> t= | display type under point |
| =tuareg-find-alternate-file= | =<localleader> a= | switch between =.ml= and =.mli= |
| =merlin-locate= | =g d= | lookup definition |
| =merlin-occurences= | =SPC c D= | lookup references |
| =merlin-document= | =K= | lookup documentation |
| =merlin-imenu= | =SPC s i= | symbol lookup in file |
| =merlin-iedit-occurrences= | =v R= | visual refactor identifier under point (multiple cursors) |
| =utop= | =SPC o r= | open =utop= as REPL |
| =utop-eval-region= | =SPC c e= | evaluate selected region in =utop= |
** Hacks
+ =set-ligatures!= is called with the full tuareg prettify symbol list, this

View file

@ -173,6 +173,8 @@ esoteric features:
+ To execute babel code blocks, you need whatever dependencies those languages
need. It is recommended you enable the associated =:lang= module and ensure
its dependencies are met, e.g. install the =ruby= executable for ruby support.
To use ~jupyter kernels~ you need the =+jupyter= flag, the associated kernel as
well as the ~jupyter~ program.
+ =org-roam= (with the =+roam= flag) requires =sqlite3= to be installed.
** MacOS
@ -185,6 +187,7 @@ brew install gnuplot
#+BEGIN_SRC sh
pacman -S texlive-core texlive-bin texlive-science
pacman -S gnuplot
pacman -S jupyter # required by +jupyter
#+END_SRC
** NixOS
@ -192,6 +195,8 @@ pacman -S gnuplot
environment.systemPackages = with pkgs; [
# any less than medium isn't guaranteed to work
texlive.combined.scheme-medium
# required by +jupyter
(python38.withPackages(ps: with ps; [jupyter]))
];
#+END_SRC

View file

@ -387,7 +387,8 @@ another level of headings on each invocation."
Made for `org-tab-first-hook' in evil-mode."
(interactive)
(cond ((not (and (bound-and-true-p evil-local-mode)
(evil-insert-state-p)))
(or (evil-insert-state-p)
(evil-emacs-state-p))))
nil)
((org-at-item-p)
(if (eq this-command 'org-shifttab)
@ -424,7 +425,8 @@ Made for `org-tab-first-hook'."
;; in the few cases where it does.
(yas-indent-line 'fixed))
(cond ((and (or (not (bound-and-true-p evil-local-mode))
(evil-insert-state-p))
(evil-insert-state-p)
(evil-emacs-state-p))
(yas--templates-for-key-at-point))
(yas-expand)
t)

View file

@ -541,12 +541,6 @@ the exported output (i.e. formatters)."
:before-while #'org-fix-tags-on-the-fly
org-auto-align-tags)
;; HACK Org is known to use a lot of unicode symbols (and large org files tend
;; to be especially memory hungry). Compounded with
;; `inhibit-compacting-font-caches' being non-nil, org needs more memory
;; to be performant.
(setq-hook! 'org-mode-hook gcmh-high-cons-threshold (* 2 gcmh-high-cons-threshold))
(defadvice! +org--recenter-after-follow-link-a (&rest _args)
"Recenter after following a link, but only internal or file links."
:after '(org-footnote-action
@ -556,20 +550,14 @@ the exported output (i.e. formatters)."
(when (get-buffer-window)
(recenter)))
(defadvice! +org--strip-properties-from-outline-a (orig-fn path &optional width prefix separator)
"Remove link syntax and fix variable height text (e.g. org headings) in the
eldoc string."
(defadvice! +org--strip-properties-from-outline-a (orig-fn &rest args)
"Fix variable height faces in eldoc breadcrumbs."
:around #'org-format-outline-path
(funcall orig-fn
(cl-loop for part in path
;; Remove full link syntax
for fixedpart = (replace-regexp-in-string org-link-any-re "\\4" (or part ""))
for n from 0
for face = (nth (% n org-n-level-faces) org-level-faces)
collect
(org-add-props fixedpart
nil 'face `(:foreground ,(face-foreground face nil t) :weight bold)))
width prefix separator))
(let ((org-level-faces
(cl-loop for face in org-level-faces
collect `(:foreground ,(face-foreground face nil t)
:weight bold))))
(apply orig-fn args)))
(after! org-eldoc
;; HACK Fix #2972: infinite recursion when eldoc kicks in in 'org' or
@ -588,8 +576,7 @@ eldoc string."
(add-hook! 'org-agenda-finalize-hook
(defun +org-exclude-agenda-buffers-from-workspace-h ()
"Prevent temporary agenda buffers being associated with current
workspace."
"Don't associate temporary agenda buffers with current workspace."
(when (and org-agenda-new-buffers
(bound-and-true-p persp-mode)
(not org-agenda-sticky))
@ -598,11 +585,12 @@ workspace."
(get-current-persp)
nil))))
(defun +org-defer-mode-in-agenda-buffers-h ()
"Org agenda opens temporary agenda incomplete org-mode buffers.
These are great for extracting agenda information from, but what if the user
tries to visit one of these buffers? Then we remove it from the to-be-cleaned
queue and restart `org-mode' so they can grow up to be full-fledged org-mode
buffers."
"`org-agenda' opens temporary, incomplete org-mode buffers.
I've disabled a lot of org-mode's startup processes for these invisible buffers
to speed them up (in `+org--exclude-agenda-buffers-from-recentf-a'). However, if
the user tries to visit one of these buffers they'll see a gimped, half-broken
org buffer. To avoid that, restart `org-mode' when they're switched to so they
can grow up to be fully-fledged org-mode buffers."
(dolist (buffer org-agenda-new-buffers)
(with-current-buffer buffer
(add-hook 'doom-switch-buffer-hook #'+org--restart-mode-h
@ -612,7 +600,7 @@ buffers."
"Prevent temporarily opened agenda buffers from polluting recentf."
:around #'org-get-agenda-file-buffer
(let ((recentf-exclude (list (lambda (_file) t)))
(doom-large-file-p t)
(doom-inhibit-large-file-detection t)
find-file-hook
org-mode-hook)
(funcall orig-fn file)))
@ -1128,7 +1116,9 @@ compelling reason, so..."
(run-hooks 'org-load-hook))
:config
(set-company-backend! 'org-mode 'company-capf 'company-dabbrev)
(add-to-list 'doom-debug-variables 'org-export-async-debug)
(set-company-backend! 'org-mode 'company-capf)
(set-eval-handler! 'org-mode #'+org-eval-handler)
(set-lookup-handlers! 'org-mode
:definition #'+org-lookup-definition-handler

View file

@ -45,6 +45,8 @@
(set-popup-rule! "^\\*Org-journal search" :select t :quit t)
(set-company-backend! 'org-journal-mode 'company-capf 'company-dabbrev)
(map! (:map org-journal-mode-map
:n "]f" #'org-journal-next-entry
:n "[f" #'org-journal-previous-entry

View file

@ -21,4 +21,5 @@
(use-package! org-fancy-priorities ; priority icons
:hook (org-mode . org-fancy-priorities-mode)
:hook (org-agenda-mode . org-fancy-priorities-mode)
:config (setq org-fancy-priorities-list '("" "" "")))

View file

@ -9,4 +9,20 @@
(unless (executable-find "sqlite3")
(warn! "Couldn't find the sqlite3 executable. org-roam will not work."))
(unless (executable-find "dot")
(warn! "Couldn't find the dot executable (from graphviz). org-roam will not be able to generate graph visuallizations.")))
(warn! "Couldn't find the dot executable (from graphviz). org-roam will not be able to generate graph visualizations.")))
(when (featurep! +dragndrop)
(when IS-MAC
(unless (executable-find "pngpaste")
(warn! "Couldn't find the pngpaste executable. org-download-clipboard will not work.")))
(when IS-LINUX
(unless (or (executable-find "maim") (executable-find "scrot") (executable-find "gnome-screenshot"))
(warn! "Couldn't find the maim, scrot or gnome-screenshot executable. org-download-clipboard will not work."))
(if (string= "wayland" (getenv "XDG_SESSION_TYPE"))
(unless (executable-find "wl-paste")
(warn! "Couldn't find the wl-paste executable (from wl-clipboard). org-download-clipboard will not work."))
(unless (executable-find "xclip")
(warn! "Couldn't find the xclip executable. org-download-clipboard will not work."))))
(when IS-WINDOWS
(unless (executable-find "convert")
(warn! "Couldn't find the convert program (from ImageMagick). org-download-clipboard will not work."))))

View file

@ -14,11 +14,12 @@
;; root. Of course, this command won't work in a sparse clone,
;; and more than that, initiating these compilation step is a
;; hassle, so...
:build (with-temp-file (expand-file-name "org-version.el" (straight--repos-dir "org-mode"))
(insert "(fset 'org-release (lambda () \"9.5\"))\n"
"(fset 'org-git-version #'ignore)\n"
"(provide 'org-version)\n")))
:pin "7c8dce72bd5d86157dd1dda2ba0a21ac86084426"
:pre-build
(with-temp-file (doom-path (straight--repos-dir "org-mode") "org-version.el")
(insert "(fset 'org-release (lambda () \"9.5\"))\n"
"(fset 'org-git-version #'ignore)\n"
"(provide 'org-version)\n")))
:pin "6b83c6e4eaec4af47a90d05c3410d4637d8cb8da"
;; Prevents built-in Org from sneaking into the byte-compilation of
;; `org-plus-contrib', and inform other packages that `org-mode' satisfies the
;; `org' dependency: https://github.com/raxod502/straight.el/issues/352
@ -38,22 +39,22 @@
:recipe (:host github :repo "hlissner/evil-org-mode")
:pin "a9706da260c45b98601bcd72b1d2c0a24a017700"))
(when (featurep! :tools pdf)
(package! org-pdftools :pin "3c2b9a413eb841c781cfb49d8c343bf07aa0ad1f"))
(package! org-pdftools :pin "bcf0084883ede36e91c72be73c0fbd7098439c99"))
(when (featurep! :tools magit)
(package! orgit :pin "ac9b1a42863a864fde9d225890ef5464bffdc646"))
(when (featurep! +brain)
(package! org-brain :pin "1ae4fd46165fc56f34f36ce38cb2ae816b07e207"))
(package! org-brain :pin "f7939ef5071895930eebccf490ea7cb25cc54b2c"))
(when (featurep! +dragndrop)
(package! org-download :pin "42ac361ef5502017e6fc1bceb00333eba90402f4"))
(package! org-download :pin "97bec7412e1a4d6e9031c7a0568d0f065cd9fd00"))
(when (featurep! +gnuplot)
(package! gnuplot :pin "f0001c30010b2899e36d7d89046322467e923088")
(package! gnuplot :pin "116cad8e09024223f97e81b0a4503cef20de9bf5")
(package! gnuplot-mode :pin "601f6392986f0cba332c87678d31ae0d0a496ce7"))
(when (featurep! +ipython) ; DEPRECATED
(package! ob-ipython :pin "7147455230841744fb5b95dcbe03320313a77124"))
(when (featurep! +jupyter)
(package! jupyter :pin "360cae2c70ab28c7a7848c0c56473d984f0243e5"))
(when (featurep! +journal)
(package! org-journal :pin "14ce0119fe2d89f2f2207788be2edce0b9372822"))
(package! org-journal :pin "c0836483ae43e525bf7547b7a789d171eda84c84"))
(when (featurep! +noter)
(package! org-noter :pin "9ead81d42dd4dd5074782d239b2efddf9b8b7b3d"))
(when (featurep! +pomodoro)
@ -65,14 +66,14 @@
(package! centered-window
:recipe (:host github :repo "anler/centered-window-mode")
:pin "f50859941ab5c7cbeaee410f2d38716252b552ac")
(package! org-tree-slide :pin "18034c476038adcc1c4697168b8068f4d0ce62fe")
(package! org-re-reveal :pin "0062756e9a5b6ec96c7de5ca94372cc6495296a1")
(package! org-tree-slide :pin "d6e8e91433dfe4968f1343b483f2680f45a77d52")
(package! org-re-reveal :pin "47339ef6772c79849a9764716df8361649ea7bdc")
(package! revealjs
:recipe (:host github :repo "hakimel/reveal.js"
:files ("css" "dist" "js" "plugin"))
:pin "0582f57517c97a4c7bfeb58762138c78883f94c5"))
(when (featurep! +roam)
(package! org-roam :pin "be95b42d32d9707309ab373f1d8182c84db41c5c"))
(package! org-roam :pin "15d864a500d90c9dc2e16d888e93343528ec3941"))
;;; Babel
(package! ob-async :pin "de1cd6c93242a4cb8773bbe115b7be3d4dd6b97e")
@ -89,7 +90,7 @@
:recipe (:host github :repo "DEADB17/ob-racket")
:pin "d8fd51bddb019b0eb68755255f88fc800cfe03cb"))
(when (featurep! :lang rest)
(package! ob-restclient :pin "f7449b2068498fe9d8ab9589e0a638148861533f"))
(package! ob-restclient :pin "0ebfc7c5ebf96d2fe1a476439831363a5a43b9b6"))
(when (featurep! :lang scala)
(package! ob-ammonite :pin "39937dff395e70aff76a4224fa49cf2ec6c57cca"))
@ -99,6 +100,6 @@
(when (featurep! +hugo)
(package! ox-hugo
:recipe (:host github :repo "kaushalmodi/ox-hugo" :nonrecursive t)
:pin "f24c9bd522ae22bee2327c2b53858d0a5066707d"))
:pin "6bc8ee08023695fa167ac0ddf1fc61e1975fa1ce"))
(when (featurep! :lang rst)
(package! ox-rst :pin "99fa790da55b57a3f2e9aa187493ba434a64250e"))

View file

@ -100,29 +100,41 @@ sudo zypper install nodejs npm
#+END_SRC
** Dependencies
The features in this module optionally depend on the following php packages:
This module has no required dependencies, but it has a couple optional ones.
+ ~boris~ (REPL)
+ ~phpctags~ (better code completion)
+ ~phpunit~ (unit test commands)
+ ~php-cs-fixer~ (for code formatting)
+ ~php-cs-fixer~ and ~@prettier/plugin-php~ (for code formatting)
#+BEGIN_SRC sh
composer global require \
d11wtq/boris \
phpunit/phpunit \
techlivezheng/phpctags
techlivezheng/phpctags \
friendsofphp/php-cs-fixer
# Needed by php-cs-fixer, otherwise you'll get "Couldn't resolve parser
# 'php'" errors
npm install -g @prettier/plugin-php
#+END_SRC
Ensure that ~\~/.composer/vendor/bin~ is in ~PATH~:
You must ensure that ~\~/.composer/vendor/bin~ is in ~PATH~, so these
executables are visible to Emacs:
#+BEGIN_SRC sh
# place this in your profile file, like ~/.bash_profile or ~/.zshenv
export PATH="~/.composer/vendor/bin:$PATH"
#+END_SRC
By the way, if you use intelephense, running =M-x lsp-install-server= and
choose ~iph~ to install lsp-intelephense.
You may also need to regenerate your envvar file by running ~doom env~ on the
command line.
#+begin_quote
To use intelephense instead of , run =M-x lsp-install-server= and choose ~iph~ to
install lsp-intelephense.
#+end_quote
* TODO Features
# An in-depth list of features, how to use them, and their dependencies.

View file

@ -36,7 +36,7 @@ Adds Python support to Doom Emacs.
+ [[https://github.com/pythonic-emacs/anaconda-mode][anaconda-mode]]*
+ [[https://github.com/Wilfred/pyimport][pyimport]]*
+ [[https://github.com/paetzke/py-isort.el][py-isort]]*
+ [[https://melpa.org/#/nose][nose]]*
+ [[https://github.com/emacsattic/nose/][nose]]*
+ [[https://github.com/wbolster/emacs-python-pytest][python-pytest]]*
+ [[https://github.com/Wilfred/pip-requirements.el][pip-requirements]]*
+ [[https://github.com/pwalsh/pipenv.el][pipenv]]*

View file

@ -102,7 +102,7 @@
(unless (or (bound-and-true-p lsp-mode)
(bound-and-true-p eglot--managed-mode)
(bound-and-true-p lsp--buffer-deferred)
(not (executable-find python-shell-interpreter)))
(not (executable-find python-shell-interpreter t)))
(anaconda-mode +1))))
:config
(set-company-backend! 'anaconda-mode '(company-anaconda))
@ -207,7 +207,7 @@
(set-eval-handler! 'python-mode
'((:command . (lambda () python-shell-interpreter))
(:exec (lambda ()
(if-let* ((bin (executable-find "pipenv"))
(if-let* ((bin (executable-find "pipenv" t))
(_ (pipenv-project-p)))
(format "PIPENV_MAX_DEPTH=9999 %s run %%c %%o %%s %%a" bin)
"%c %o %s %a")))

View file

@ -4,10 +4,12 @@
(featurep! :tools lsp))
"This module requires (:tools lsp)")
(if (not (executable-find "python"))
(if (not (or (executable-find "python")
(executable-find "python3")))
(error! "Couldn't find python in your PATH")
(unless (featurep! +lsp)
(unless (zerop (shell-command "python -c 'import setuptools'"))
(unless (or (zerop (shell-command "python -c 'import setuptools'"))
(zerop (shell-command "python3 -c 'import setuptools'")))
(warn! "setuptools wasn't detected, which anaconda-mode requires"))))
(when (featurep! +pyenv)

View file

@ -4,7 +4,7 @@
;; Major modes
(package! pip-requirements :pin "216cd1690f80cc965d4ae47b8753fc185f778ff6")
(when (featurep! +cython)
(package! cython-mode :pin "21b4e533747507c4dad5e6908df1f157dff4de89")
(package! cython-mode :pin "17e03b8658a07b6d6da49300b39b57ed9c59ddb1")
(when (featurep! :checkers syntax)
(package! flycheck-cython :pin "ecc4454d35ab5317ab66a04406f36f0c1dbc0b76")))
@ -12,21 +12,21 @@
(when (featurep! +lsp)
(unless (featurep! :tools lsp +eglot)
(if (featurep! +pyright)
(package! lsp-pyright :pin "d9e7d3cf1bdc8ee0395c8df4408b05ee3ba9c22a")
(package! lsp-python-ms :pin "c4ebc7a11398733055a1dc07f9cffacd04d1c2dc"))))
(package! lsp-pyright :pin "71ff088ac4c93b0edd012f305a3dfd1602c5d21e")
(package! lsp-python-ms :pin "5470ada6cde6e68fe6ce13ff1146c89c3bae0cc8"))))
;; Programming environment
(package! anaconda-mode :pin "39b1cf88c8c459901630d248d6135d8644075648")
(package! anaconda-mode :pin "b1875a5d0ec9885c1c42558c126b93ee6bcedaa6")
(when (featurep! :completion company)
(package! company-anaconda :pin "da1566db41a68809ef7f91ebf2de28118067c89b"))
;; Environment management
(package! pipenv :pin "b730bb509e8b60af9f5ab1f1e6c3458d1d95d789")
(package! pyvenv :pin "0bf4b87068e9040fc99afa85af1992247dd7aacd")
(package! pipenv :pin "f516a1a8677a6a1ce9683056e9f77b1e785e8431")
(package! pyvenv :pin "9b3678bc29192d2dba64df90fbdb17393ef8d877")
(when (featurep! +pyenv)
(package! pyenv-mode :pin "b818901b8eac0e260ced66a6a5acabdbf6f5ba99"))
(when (featurep! +conda)
(package! conda :pin "9f7eea16e9ad3eb34fe3d1cbd9d6162b8046c2f8"))
(package! conda :pin "dce431b25f5a13af58cc7cacfa7968b5a888609c"))
(when (featurep! +poetry)
(package! poetry :pin "d5163fe065239bb7b46ed8b3ff3b85b1f3229af3"))
@ -35,7 +35,7 @@
;; REVIEW Remove this when emacsmirror/epkgs updates its emacsattic index
:recipe (:host github :repo "emacsattic/nose")
:pin "f8528297519eba911696c4e68fa88892de9a7b72")
(package! python-pytest :pin "4a1c4c8915c12e540d41aae1d4e326a2362da541")
(package! python-pytest :pin "3fadf1f8bc363d57c54eedd1bf98e6d9db9f0a62")
;; Import managements
(package! pyimport :pin "a6f63cf7ed93f0c0f7c207e6595813966f8852b9")

View file

@ -97,7 +97,7 @@ selected by default. Modify ~rustic-lsp-server~ to change the default:
(setq rustic-lsp-server 'rls))
#+END_SRC
** Enabling elgot support for Rust
** Enabling eglot support for Rust
Doom's =:tools lsp= module has an =+eglot= flag. Enable it and this module will
use eglot instead.

View file

@ -1,6 +1,6 @@
;; -*- no-byte-compile: t; -*-
;;; lang/rust/packages.el
(package! rustic :pin "91ad5db27b86bb2ba6f3019b764d0f45ec93f484")
(package! rustic :pin "f7d5ac0c930ae435421f3f5bc827e8c61ce73662")
(unless (featurep! +lsp)
(package! racer :pin "a0bdf778f01e8c4b8a92591447257422ac0b455b"))

View file

@ -11,7 +11,9 @@
(setq geiser-active-implementations '(guile chicken mit chibi chez)
geiser-autodoc-identifier-format "%s → %s"
geiser-repl-current-project-function 'doom-project-root)
(unless (featurep! :lang racket)
(if (featurep! :lang racket)
(setq auto-mode-alist
(remove '("\\.rkt\\'" . scheme-mode) auto-mode-alist))
(push 'racket geiser-active-implementations))
(after! scheme ; built-in
(set-repl-handler! 'scheme-mode #'+scheme/open-repl)

View file

@ -65,12 +65,9 @@
(add-to-list 'web-mode-engines-alist '("elixir" . "\\.eex\\'"))
(let ((types '("javascript" "jsx")))
(setq web-mode-comment-formats
(cl-remove-if (lambda (item) (member (car item) types))
web-mode-comment-formats))
(dolist (type types)
(push (cons type "//") web-mode-comment-formats)))
;; Use // instead of /* as the default comment delimited in JS
(setf (alist-get "javascript" web-mode-comment-formats nil nil #'equal)
"//")
(add-hook! 'web-mode-hook
(defun +web--fix-js-comments-h ()

View file

@ -22,7 +22,7 @@
;; wl-copy, termux-clipboard-get, or getclip (cygwin); depending on what
;; is available.
(and (require 'xclip nil t)
(xclip-mode +1)))))
(with-demoted-errors "%s" (xclip-mode +1))))))
(when (featurep! :editor evil)
;; Fix cursor shape-changing in the terminal. Only supported in XTerm, Gnome

View file

@ -28,7 +28,7 @@
(switch-to-buffer (doom-fallback-buffer)))
(when +eshell-enable-new-shell-on-split
(let ((default-directory directory))
(when-let (win (get-buffer-window (+eshell/here t)))
(when-let (win (get-buffer-window (+eshell/here)))
(set-window-dedicated-p win dedicated-p))))))
(defun +eshell--setup-window (window &optional flag)

View file

@ -103,6 +103,10 @@ You should use `set-eshell-alias!' to change this.")
;; or configure `+eshell-aliases' via elisp.
(advice-add #'eshell-write-aliases-list :override #'ignore)
;; REVIEW In Emacs 27 and newer, waiting for esh-module is unnecessary.
(after! esh-module
(add-to-list 'eshell-modules-list 'eshell-tramp))
;; Visual commands require a proper terminal. Eshell can't handle that, so
;; it delegates these commands to a term buffer.
(after! em-term

View file

@ -75,18 +75,3 @@ method to prepare vterm at the corresponding remote directory."
(vterm-send-string
(concat "cd " path-localname))
(vterm-send-return)))))
(defvar +vterm--insert-point nil)
;;;###autoload
(defun +vterm-remember-insert-point-h ()
"Remember point when leaving insert mode."
(setq-local +vterm--insert-point (point)))
;;;###autoload
(defun +vterm-goto-insert-point-h ()
"Go to the point we were at when we left insert mode."
(when +vterm--insert-point
(goto-char +vterm--insert-point)
(setq-local +vterm--insert-point nil)))

View file

@ -19,11 +19,4 @@
;; Don't prompt about dying processes when killing vterm
confirm-kill-processes nil
;; Prevent premature horizontal scrolling
hscroll-margin 0)
;; Restore the point's location when leaving and re-entering insert mode.
(when (featurep! :editor evil)
(add-hook! 'vterm-mode-hook
(defun +vterm-init-remember-point-h ()
(add-hook 'evil-insert-state-exit-hook #'+vterm-remember-insert-point-h nil t)
(add-hook 'evil-insert-state-entry-hook #'+vterm-goto-insert-point-h nil t)))))
hscroll-margin 0))

View file

@ -3,4 +3,4 @@
(package! vterm
:built-in 'prefer
:pin "101ff86d4d1c7ff8ca954ba59f666fd36f789aae")
:pin "fb12d7f49e2da121d9b17ed583d269166e0da087")

View file

@ -7,6 +7,8 @@
:config
(setq ansible-section-face 'font-lock-variable-name-face
ansible-task-label-face 'font-lock-doc-face)
(when (featurep! :completion company)
(set-company-backend! 'ansible 'company-ansible))
(map! :map ansible-key-map
:localleader
:desc "Decrypt buffer" "d" #'ansible-decrypt-buffer

View file

@ -0,0 +1,5 @@
;; -*- lexical-binding: t; no-byte-compile: t; -*-
;;; tools/ansible/doctor.el
(unless (executable-find "ansible")
(warn! "Couldn't find ansible executable. Some features of the ansible module won't work"))

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*-
;;; tools/ansible/packages.el
(package! ansible :recipe (:nonrecursive t) :pin "cf6b8f06c2628357fc2a72ea9817a2c2d0ebf690")
(package! ansible :recipe (:nonrecursive t) :pin "40af0d2bbb6c5bbcf7aa9269ac9a07e22622d263")
(package! ansible-doc :pin "86083a7bb2ed0468ca64e52076b06441a2f8e9e0")
(package! jinja2-mode :pin "ecd19a40b7832bb00f0a2244e3b0713d0bf3850d")
(package! yaml-mode :pin "fc5e1c58f94472944c4aa838f00f6adcac6fa992")

View file

@ -1,8 +1,8 @@
;; -*- no-byte-compile: t; -*-
;;; tools/biblio/packages.el
(package! bibtex-completion :pin "8d84d8beb3bfafaa060d7e956fcc569ecf010d9c")
(package! bibtex-completion :pin "1bb81d77e08296a50de7ebfe5cf5b0c715b7f3d6")
(when (featurep! :completion ivy)
(package! ivy-bibtex :pin "8d84d8beb3bfafaa060d7e956fcc569ecf010d9c"))
(package! ivy-bibtex :pin "1bb81d77e08296a50de7ebfe5cf5b0c715b7f3d6"))
(when (featurep! :completion helm)
(package! helm-bibtex :pin "8d84d8beb3bfafaa060d7e956fcc569ecf010d9c"))
(package! helm-bibtex :pin "1bb81d77e08296a50de7ebfe5cf5b0c715b7f3d6"))

View file

@ -1,10 +1,10 @@
;; -*- no-byte-compile: t; -*-
;;; tools/debugger/packages.el
(when (package! realgud :pin "ff660011c82c6af504915833e2d981a547b7ad58")
(when (package! realgud :pin "f73c039a340579a98e6716c901fd4e80e7eaa2eb")
(when (featurep! :lang javascript)
(package! realgud-trepan-ni :pin "6e38cf838c7b47b5f1353d00901b939ffa36d707")))
(when (featurep! +lsp)
(package! dap-mode :pin "e582ff90c104703ed65c1f3174d4c4690e9cf1fd")
(package! posframe :pin "e1552c82dffaadc5e7de09a44880a498197ffbee"))
(package! dap-mode :pin "612388d0b85e77972a9c28391bac6224a63408c7")
(package! posframe :pin "efd7ea490defc53a5b78e7469a3a35d225b766cc"))

View file

@ -3,4 +3,4 @@
(package! docker :pin "3773112eea3fc99704b5ca50c1e9a3db2cb8e4f3")
(package! docker-tramp :pin "8e2b671eff7a81af43b76d9dfcf94ddaa8333a23")
(package! dockerfile-mode :pin "d31f7685ebc5832d957e25070a930aa42984327d")
(package! dockerfile-mode :pin "6a56c1cc1713b501040b08fdbf0c4159a4fe95f9")

View file

@ -3,4 +3,4 @@
(package! editorconfig
:recipe (:nonrecursive t)
:pin "da844718bfe1ca51919c63fdffedaba5d0cc1bba")
:pin "d73333c224de783e42acd225a20330a667fe5191")

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; tools/ein/packages.el
(package! ein :pin "a019ee3994585e4ed4700d2591d693fda3232616")
(package! ein :pin "917f2a0b6ca76ed9e966985ca6f19d8b57690d40")

View file

@ -163,18 +163,20 @@ This can be passed nil as its second argument to unset handlers for MODES. e.g.
(+lookup--run-handlers handler identifier origin)
(user-error "No lookup handler selected"))
(run-hook-wrapped handlers #'+lookup--run-handlers identifier origin))))
(when (cond ((null result)
(message "No lookup handler could find %S" identifier)
nil)
((markerp result)
(funcall (or display-fn #'switch-to-buffer)
(marker-buffer result))
(goto-char result)
result)
(result))
(with-current-buffer (marker-buffer origin)
(better-jumper-set-jump (marker-position origin)))
result)))
(unwind-protect
(when (cond ((null result)
(message "No lookup handler could find %S" identifier)
nil)
((markerp result)
(funcall (or display-fn #'switch-to-buffer)
(marker-buffer result))
(goto-char result)
result)
(result))
(with-current-buffer (marker-buffer origin)
(better-jumper-set-jump (marker-position origin)))
result)
(set-marker origin nil))))
;;

View file

@ -26,7 +26,8 @@
("Github" "https://github.com/search?ref=simplesearch&q=%s")
("Youtube" "https://youtube.com/results?aq=f&oq=&search_query=%s")
("Wolfram alpha" "https://wolframalpha.com/input/?i=%s")
("Wikipedia" "https://wikipedia.org/search-redirect.php?language=en&go=Go&search=%s"))
("Wikipedia" "https://wikipedia.org/search-redirect.php?language=en&go=Go&search=%s")
("MDN" "https://developer.mozilla.org/en-US/search?q=%s"))
(when (featurep! :lang rust)
'(("Rust Docs" "https://doc.rust-lang.org/std/?search=%s"))))
"An alist that maps online resources to either:
@ -170,7 +171,16 @@ Dictionary.app behind the scenes to get definitions.")
(setq xref-show-definitions-function #'ivy-xref-show-defs))
;; Necessary in Emacs <27. In Emacs 27 it will affect all xref-based
;; commands other than xref-find-definitions too (eg project-find-regexp)
(setq xref-show-xrefs-function #'ivy-xref-show-xrefs))
(setq xref-show-xrefs-function #'ivy-xref-show-xrefs)
;; HACK Fix #4386: `ivy-xref-show-xrefs' calls `fetcher' twice, which has
;; side effects that breaks in some cases (i.e. on `dired-do-find-regexp').
(defadvice! +lookup--fix-ivy-xrefs (orig-fn fetcher alist)
:around #'ivy-xref-show-xrefs
(when (functionp fetcher)
(setf (alist-get 'fetched-xrefs alist)
(funcall fetcher)))
(funcall orig-fn fetcher alist)))
(use-package! helm-xref
:when (featurep! :completion helm)))

View file

@ -27,7 +27,7 @@
(when (featurep! +dictionary)
(if IS-MAC
(package! osx-dictionary :pin "1b79ff64c72485cb078db9ab7ee3256b11a99f4b")
(package! define-word :pin "3af6825c5f3bf4f6176a3f5b2e499616c65e2fe0")
(package! define-word :pin "6e4a427503aef096484f88332962c346cdd10847")
(package! powerthesaurus :pin "93036d3b111925ebc34f747ff846cb0b8669b92e")
(when (featurep! +offline)
(package! wordnut :pin "feac531404041855312c1a046bde7ea18c674915")

View file

@ -28,6 +28,8 @@ Can be a list of backends; accepts any value `company-backends' accepts.")
lsp-enable-text-document-color nil)
;; Reduce unexpected modifications to code
(setq lsp-enable-on-type-formatting nil)
;; Make breadcrumbs opt-in; they're redundant with the modeline and imenu
(setq lsp-headerline-breadcrumb-enable nil)
;; Let doom bind the lsp keymap.
(when (featurep! :config default +bindings)
@ -40,7 +42,10 @@ Can be a list of backends; accepts any value `company-backends' accepts.")
lsp-vetur-global-snippets-dir (expand-file-name "vetur"
(or (bound-and-true-p +snippets-dir)
(concat doom-private-dir "snippets/")))
lsp-clients-emmy-lua-jar-path (concat lsp-server-install-dir "EmmyLua-LS-all.jar")
lsp-clients-lua-language-server-bin (concat lsp-server-install-dir "lua-language-server/"
(cond (IS-MAC "bin/macOS")
(IS-LINUX "bin/Linux")
(IS-WINDOWS "bin/Windows")))
lsp-xml-jar-file (concat lsp-server-install-dir "org.eclipse.lsp4xml-0.3.0-uber.jar")
lsp-groovy-server-file (concat lsp-server-install-dir "groovy-language-server-all.jar"))

View file

@ -41,8 +41,6 @@ killing and opening many LSP/eglot-powered buffers.")
;; GC strategy, so we modify its variables rather than
;; `gc-cons-threshold' directly.
(setq-default gcmh-high-cons-threshold (* 2 +lsp--default-gcmh-high-cons-threshold))
(unless (bound-and-true-p gcmh-mode)
(gcmh-mode +1))
(gcmh-set-high-threshold)
(setq +lsp--optimization-init-p t))))

View file

@ -3,10 +3,10 @@
(if (featurep! +eglot)
(progn
(package! eglot :pin "21726416e6e580b20dfa90833c6dab2a8a15ea48")
(package! project :pin "67216fba813461a8b8d5db1a12aaca08a0389423"))
(package! lsp-mode :pin "e1c42412eac0d742196efe64a82699326e72b391")
(package! lsp-ui :pin "b1693d610c4d2c44305eba2719e8d4097fdcdcb8")
(package! eglot :pin "4c85df2b04e467b8ed0eca68bd202fd0e7b671f4")
(package! project :pin "a1997af9a6de5b10cebe8c06875508249ad559ea"))
(package! lsp-mode :pin "dbfbe1a221de78e5d42e93ab2833d68c7f27f1b7")
(package! lsp-ui :pin "94673cd08c35acc3b6c34301f74f1852487a5558")
(when (featurep! :completion ivy)
(package! lsp-ivy :pin "c70ee8b54357c56d1b972393ee53e57a2e545fbb"))
(when (featurep! :completion helm)

View file

@ -1,9 +1,9 @@
;; -*- no-byte-compile: t; -*-
;;; tools/magit/packages.el
(when (package! magit :pin "2e0c697188ca728c240b5aa677f4a5e853692b6e")
(when (package! magit :pin "21454777281247d97814ce5fb64f4afe39fab5da")
(when (featurep! +forge)
(package! forge :pin "844aa6d52792dd56a14f1759312c96a3de9b988e"))
(package! forge :pin "e340c2be2aa5337c8c4c81cd6eab87961c6848b6"))
(package! magit-gitflow :pin "cc41b561ec6eea947fe9a176349fb4f771ed865b")
(package! magit-todos :pin "78d24cf419138b543460f40509c8c1a168b52ca0")
(package! github-review :pin "db723740e02348c0760407e532ad667ef89210ec"))

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*-
;;; tools/pass/packages.el
(package! pass :pin "919d8e3826d556433ab67d4ee21a509d209d1baa")
(package! pass :pin "a095d24cf06a7b0fbc3add480c101304a91cf788")
(package! password-store :pin "f152064da9832d6d3d2b4e75f43f63bf2d50716f")
(package! password-store-otp :pin "04998c8578a060ab4a4e8f46f2ee0aafad4ab4d5")

View file

@ -38,9 +38,8 @@
(message nil) ; flush lingering prompt in echo-area
;; Make sure this doesn't run more than once
(advice-remove #'pdf-view-mode #'+pdf--install-epdfinfo-a)
(if (or (pdf-info-running-p)
(ignore-errors (pdf-info-check-epdfinfo) t))
(pdf-tools-install-noverify)
(unless (or (pdf-info-running-p)
(ignore-errors (pdf-info-check-epdfinfo) t))
;; HACK On the first pdf you open (before pdf-tools loaded)
;; `pdf-tools-install' throws errors because it has hardcoded
;; opinions about what buffer should be focused when it is run.
@ -61,6 +60,8 @@
(revert-buffer t t))))))))))
((message "Aborted")))))
(pdf-tools-install-noverify)
;; For consistency with other special modes
(map! :map pdf-view-mode-map :gn "q" #'kill-current-buffer)

View file

@ -8,4 +8,4 @@
:branch "fix-macros")
:pin "eb6d40663069f2b7e6b52e907eeaa4e37375feb6")
(package! saveplace-pdf-view :pin "88e07be656544bcdfa332d25880abff168ca1423")
(package! saveplace-pdf-view :pin "b0370912049222f3a4c943856de3d69d48d53a35")

View file

@ -1,6 +1,6 @@
;; -*- no-byte-compile: t; -*-
;;; tools/terraform/packages.el
(package! terraform-mode :pin "63fafc635b04b1b72e408e7dcb21c1fac78fc60b")
(package! terraform-mode :pin "a9fa5bdaf58e9cae32ee44b7d0883f5600441b05")
(when (featurep! :completion company)
(package! company-terraform :pin "2d11a21fee2f298e48968e479ddcaeda4d736e12"))

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; ui/deft/packages.el
(package! deft :pin "fca9ea05ef4fdac825e2ad3921baa7042f6b82c8")
(package! deft :pin "c4af44827f4257e7619e63abfd22094a29a9ab52")

View file

@ -48,7 +48,7 @@ Possible values:
(defvar +doom-dashboard-menu-sections
'(("Reload last session"
:icon (all-the-icons-octicon "history" :face 'doom-dashboard-menu-title)
:when (cond ((require 'persp-mode nil t)
:when (cond ((featurep! :ui workspaces)
(file-exists-p (expand-file-name persp-auto-save-fname persp-save-dir)))
((require 'desktop nil t)
(file-exists-p (desktop-full-file-name))))

View file

@ -42,7 +42,7 @@ Although this module uses the ~doom-one~ theme by default, [[https://github.com/
+ *doom-one:* doom-themes' flagship theme, inspired by [[https://atom.io/][Atom's]] One Dark themes
+ *doom-vibrant:* a more vibrant version of doom-one
+ *doom-molokai:* based on Textmate's monokai
+ *doom-nova:* adapted from [[https://trevordmiller.com/projects/nova][Nova]]
+ *doom-nova:* adapted from [[https://github.com/trevordmiller/nova-colors][Nova]]
+ *doom-one-light:* light version of doom-one
+ *doom-peacock:* based on Peacock from [[https://daylerees.github.io/][daylerees' themes]]
+ *doom-tomorrow-night:* by [[https://github.com/ChrisKempson/Tomorrow-Theme][Chris Kempson]]

View file

@ -1,5 +1,5 @@
;; -*- no-byte-compile: t; -*-
;;; ui/doom/packages.el
(package! doom-themes :pin "74ebd778571a2ba2a490d45a3f4161ea7251e050")
(package! doom-themes :pin "5adcc29eeccb251937fe002594bc21ce08ae5317")
(package! solaire-mode :pin "c697925f7e03819a4046a233f6ab31664aca9d6a")

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; ui/emoji/packages.el
(package! emojify :pin "4b96f37f315182f95d4ea9ff33a9b5af9f1b1620")
(package! emojify :pin "cfa00865388809363df3f884b4dd554a5d44f835")

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; ui/hl-todo/packages.el
(package! hl-todo :pin "0598b98f63b623c1778cbd2e2f60b774b7a311b9")
(package! hl-todo :pin "9661a462d86b22293caaa4c3d94f971a15dbf1d5")

View file

@ -6,4 +6,5 @@
(setq minimap-window-location 'right
minimap-update-delay 0
minimap-width-fraction 0.09
minimap-minimum-width 15))
minimap-minimum-width 15)
(pushnew! minimap-major-modes 'text-mode 'conf-mode))

View file

@ -2,7 +2,7 @@
;;; ui/modeline/packages.el
(unless (featurep! +light)
(package! doom-modeline :pin "fb34eb5eb60f41ce1bc23c2bad6ac20de5669f22"))
(package! doom-modeline :pin "4956606a5455a3968ca10cbdb8de3889e6bd1d85"))
(package! anzu :pin "bdb3da5028935a4aea55c40769bc191a81afb54e")
(when (featurep! :editor evil)
(package! evil-anzu :pin "d3f6ed4773b48767bd5f4708c7f083336a8a8a86"))

View file

@ -45,7 +45,9 @@ the buffer is visible, then set another timer and try again later."
+ And finally deletes the window!"
(let ((buffer (window-buffer window))
(inhibit-quit t))
(and (buffer-file-name buffer)
(and (or (buffer-file-name buffer)
(if-let (base-buffer (buffer-base-buffer buffer))
(buffer-file-name base-buffer)))
(buffer-modified-p buffer)
(let ((autosave (+popup-parameter 'autosave window)))
(cond ((eq autosave 't))

View file

@ -174,6 +174,6 @@ prevent the popup(s) from messing up the UI (or vice versa)."
;;
;; Hacks
;;; Hacks
(load! "+hacks")

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; ui/tabs/packages.el
(package! centaur-tabs :pin "b172646b49d00c7e11fe4a4eaa80bbf026e58ab5")
(package! centaur-tabs :pin "23eda0a0292a84c7e0a0aa2b598f9e29c7e5b54f")

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*-
;;; ui/treemacs/packages.el
(package! treemacs :pin "389bca1c3bdd4c4cf8245d6c4bdf8aa875e40d14")
(package! treemacs :pin "559fa09e32d5db7f620fdd08e03b938e67bf398b")
;; These packages have no :pin because they're in the same repo
(when (featurep! :editor evil +everywhere)
(package! treemacs-evil))

View file

@ -61,7 +61,7 @@ If your font does not provide some glyphs, this package will try its best to fin
A list of fonts with good unicode coverage can be found on the page of the [[https://github.com/rolandwalker/unicode-fonts#minimum-useful-fonts][unicode-fonts]] package.
** Advanced configuration
Consult the [[https://github.com/rolandwalker/unicode-font][unicode-fonts]] package documentation for a description of more advanced configuration. The configuration should be placed, as usual, in your private =config.el= wrapped in an ~(after! unicode-fonts)~ block. The variable ~unicode-fonts-blocks~ contains a list of all unicode block names and their character ranges. The default fonts to search for glyphs are in the variable ~unicode-fonts-block-font-mapping~.
Consult the [[https://github.com/rolandwalker/unicode-fonts][unicode-fonts]] package documentation for a description of more advanced configuration. The configuration should be placed, as usual, in your private =config.el= wrapped in an ~(after! unicode-fonts)~ block. The variable ~unicode-fonts-blocks~ contains a list of all unicode block names and their character ranges. The default fonts to search for glyphs are in the variable ~unicode-fonts-block-font-mapping~.
If you want to use the font =Symbola= for =Miscellaneous Symbols= by default you could add
#+BEGIN_SRC elisp

View file

@ -1,5 +1,5 @@
;; -*- no-byte-compile: t; -*-
;;; ui/zen/packages.el
(package! writeroom-mode :pin "92c47dfa659c418700d064a479e30590bcfc1904")
(package! mixed-pitch :pin "d305108f9520e196b533f05d1dcc284cf535faaf")
(package! writeroom-mode :pin "b648b340172ce4e44307375697e190bc723203e0")
(package! mixed-pitch :pin "beb22e85f6073a930f7338a78bd186e3090abdd7")