Merge branch 'develop' into eshell-improvements
This commit is contained in:
commit
c881f98960
75 changed files with 1118 additions and 535 deletions
|
@ -214,6 +214,7 @@ evil-ex-specific constructs, so we disable it solely in evil-ex."
|
|||
|
||||
;; 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)
|
||||
(ivy-add-actions
|
||||
'counsel-rg ; also applies to `counsel-rg'
|
||||
'(("O" +ivy-git-grep-other-window-action "open in other window")))
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; completion/ivy/packages.el
|
||||
|
||||
(package! swiper :pin "9e0803cdb5b47e4e1844e8281516b46589ef26c7")
|
||||
(package! swiper :pin "84efa3a2cbb9c5b0bbcc8d2e90671434eed74f94")
|
||||
(package! ivy)
|
||||
(package! ivy-hydra)
|
||||
(package! counsel)
|
||||
|
|
|
@ -202,7 +202,14 @@
|
|||
:desc "Send to Launchbar" "l" #'+macos/send-to-launchbar
|
||||
:desc "Send project to Launchbar" "L" #'+macos/send-project-to-launchbar)
|
||||
(:when (featurep! :tools docker)
|
||||
:desc "Docker" "D" #'docker))
|
||||
:desc "Docker" "D" #'docker)
|
||||
(:when (featurep! :email mu4e)
|
||||
:desc "mu4e" "m" #'=mu4e)
|
||||
(:when (featurep! :email notmuch)
|
||||
:desc "notmuch" "m" #'=notmuch)
|
||||
(:when (featurep! :email wanderlust)
|
||||
:desc "wanderlust" "m" #'=wanderlust))
|
||||
|
||||
|
||||
;;; <leader> p --- project
|
||||
(:prefix ("p" . "project")
|
||||
|
|
|
@ -549,7 +549,13 @@
|
|||
:desc "Send to Launchbar" "l" #'+macos/send-to-launchbar
|
||||
:desc "Send project to Launchbar" "L" #'+macos/send-project-to-launchbar)
|
||||
(:when (featurep! :tools docker)
|
||||
:desc "Docker" "D" #'docker))
|
||||
:desc "Docker" "D" #'docker)
|
||||
(:when (featurep! :email mu4e)
|
||||
:desc "mu4e" "m" #'=mu4e)
|
||||
(:when (featurep! :email notmuch)
|
||||
:desc "notmuch" "m" #'=notmuch)
|
||||
(:when (featurep! :email wanderlust)
|
||||
:desc "wanderlust" "m" #'=wanderlust))
|
||||
|
||||
;;; <leader> p --- project
|
||||
(:prefix-map ("p" . "project")
|
||||
|
|
|
@ -36,17 +36,6 @@ If ARG (universal argument), runs `compile' from the current directory."
|
|||
(with-current-buffer buffer
|
||||
(funcall (default-value 'major-mode))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +default/lsp-format-region-or-buffer ()
|
||||
"Format the buffer (or selection) with LSP."
|
||||
(interactive)
|
||||
(unless (bound-and-true-p lsp-mode)
|
||||
(user-error "Not in an LSP buffer"))
|
||||
(call-interactively
|
||||
(if (doom-region-active-p)
|
||||
#'lsp-format-region
|
||||
#'lsp-format-buffer)))
|
||||
|
||||
;;;###autoload
|
||||
(defun +default/restart-server ()
|
||||
"Restart the Emacs server."
|
||||
|
|
|
@ -28,13 +28,15 @@
|
|||
(defun +default/browse-notes ()
|
||||
"Browse files from `org-directory'."
|
||||
(interactive)
|
||||
(require 'org)
|
||||
(unless (boundp 'org-directory)
|
||||
(require 'org))
|
||||
(doom-project-browse org-directory))
|
||||
;;;###autoload
|
||||
(defun +default/find-in-notes ()
|
||||
"Find a file under `org-directory', recursively."
|
||||
(interactive)
|
||||
(require 'org)
|
||||
(unless (boundp 'org-directory)
|
||||
(require 'org))
|
||||
(doom-project-find-file org-directory))
|
||||
|
||||
;;;###autoload
|
||||
|
|
|
@ -50,8 +50,8 @@ If `buffer-file-name' isn't set, uses `default-directory'."
|
|||
(abbreviate-file-name path)
|
||||
(file-name-nondirectory path)))))
|
||||
|
||||
|
||||
(defun doom--backward-delete-whitespace-to-column ()
|
||||
;;;###autoload
|
||||
(defun doom/backward-delete-whitespace-to-column ()
|
||||
"Delete back to the previous column of whitespace, or as much whitespace as
|
||||
possible, or just one char if that's not possible."
|
||||
(interactive)
|
||||
|
@ -74,7 +74,7 @@ possible, or just one char if that's not possible."
|
|||
;; point and bol.
|
||||
((and (not indent-tabs-mode)
|
||||
(not (bolp))
|
||||
(not (sp-point-in-string))
|
||||
(not (doom-point-in-string-p))
|
||||
(save-excursion (>= (- (skip-chars-backward " \t")) tab-width)))
|
||||
(let ((movement (% (current-column) tab-width)))
|
||||
(when (= movement 0)
|
||||
|
@ -97,7 +97,7 @@ possible, or just one char if that's not possible."
|
|||
{
|
||||
|
|
||||
} => {|}
|
||||
+ Otherwise, resort to `doom--backward-delete-whitespace-to-column'.
|
||||
+ Otherwise, resort to `doom/backward-delete-whitespace-to-column'.
|
||||
+ Resorts to `delete-char' if n > 1"
|
||||
(interactive "p\nP")
|
||||
(or (integerp n)
|
||||
|
@ -120,12 +120,14 @@ possible, or just one char if that's not possible."
|
|||
(save-excursion
|
||||
(insert-char ?\s (- ocol (current-column)) nil))))
|
||||
;;
|
||||
((and (= n 1) (bound-and-true-p smartparens-mode))
|
||||
(cond ((and (memq (char-before) (list ?\ ?\t))
|
||||
(save-excursion
|
||||
(and (/= (skip-chars-backward " \t" (line-beginning-position)) 0)
|
||||
(bolp))))
|
||||
(doom--backward-delete-whitespace-to-column))
|
||||
((= n 1)
|
||||
(cond ((or (not (featurep! +smartparens))
|
||||
(not (bound-and-true-p smartparens-mode))
|
||||
(and (memq (char-before) (list ?\ ?\t))
|
||||
(save-excursion
|
||||
(and (/= (skip-chars-backward " \t" (line-beginning-position)) 0)
|
||||
(bolp)))))
|
||||
(doom/backward-delete-whitespace-to-column))
|
||||
((let* ((pair (ignore-errors (sp-get-thing)))
|
||||
(op (plist-get pair :op))
|
||||
(cl (plist-get pair :cl))
|
||||
|
@ -144,6 +146,6 @@ possible, or just one char if that's not possible."
|
|||
(sp-insert-pair op)
|
||||
t)
|
||||
((run-hook-with-args-until-success 'doom-delete-backward-functions))
|
||||
((doom--backward-delete-whitespace-to-column)))))))
|
||||
((doom/backward-delete-whitespace-to-column)))))))
|
||||
;; Otherwise, do simple deletion.
|
||||
((delete-char (- n) killflag))))
|
||||
|
|
|
@ -204,52 +204,52 @@
|
|||
|
||||
;; This keybind allows * to skip over **.
|
||||
(map! :map markdown-mode-map
|
||||
:ig "*" (λ! (if (looking-at-p "\\*\\* *$")
|
||||
(forward-char 2)
|
||||
(call-interactively 'self-insert-command)))))
|
||||
|
||||
;; Highjacks backspace to:
|
||||
;; a) balance spaces inside brackets/parentheses ( | ) -> (|)
|
||||
;; b) delete up to nearest column multiple of `tab-width' at a time
|
||||
;; c) close empty multiline brace blocks in one step:
|
||||
;; {
|
||||
;; |
|
||||
;; }
|
||||
;; becomes {|}
|
||||
;; d) refresh smartparens' :post-handlers, so SPC and RET expansions work
|
||||
;; even after a backspace.
|
||||
;; e) properly delete smartparen pairs when they are encountered, without
|
||||
;; the need for strict mode.
|
||||
;; f) do none of this when inside a string
|
||||
(advice-add #'delete-backward-char :override #'+default--delete-backward-char-a))
|
||||
|
||||
;; HACK Makes `newline-and-indent' continue comments (and more reliably).
|
||||
;; Consults `doom-point-in-comment-functions' to detect a commented
|
||||
;; region and uses that mode's `comment-line-break-function' to continue
|
||||
;; comments. If neither exists, it will fall back to the normal behavior
|
||||
;; of `newline-and-indent'.
|
||||
;;
|
||||
;; We use an advice here instead of a remapping because many modes define
|
||||
;; and remap to their own newline-and-indent commands, and tackling all
|
||||
;; those cases was judged to be more work than dealing with the edge
|
||||
;; cases on a case by case basis.
|
||||
(defadvice! +default--newline-indent-and-continue-comments-a (&rest _)
|
||||
"A replacement for `newline-and-indent'.
|
||||
|
||||
Continues comments if executed from a commented line. Consults
|
||||
`doom-point-in-comment-functions' to determine if in a comment."
|
||||
:before-until #'newline-and-indent
|
||||
(interactive "*")
|
||||
(when (and +default-want-RET-continue-comments
|
||||
(doom-point-in-comment-p)
|
||||
(fboundp comment-line-break-function))
|
||||
(funcall comment-line-break-function nil)
|
||||
t)))
|
||||
:ig "*" (general-predicate-dispatch nil
|
||||
(looking-at-p "\\*\\* *")
|
||||
(λ! (forward-char 2)))))))
|
||||
|
||||
|
||||
;;
|
||||
;;; Keybinding fixes
|
||||
|
||||
;; Highjacks backspace to delete up to nearest column multiple of `tab-width' at
|
||||
;; a time. If you have smartparens enabled, it will also:
|
||||
;; a) balance spaces inside brackets/parentheses ( | ) -> (|)
|
||||
;; b) close empty multiline brace blocks in one step:
|
||||
;; {
|
||||
;; |
|
||||
;; }
|
||||
;; becomes {|}
|
||||
;; c) refresh smartparens' :post-handlers, so SPC and RET expansions work even
|
||||
;; after a backspace.
|
||||
;; d) properly delete smartparen pairs when they are encountered, without the
|
||||
;; need for strict mode.
|
||||
;; e) do none of this when inside a string
|
||||
(advice-add #'delete-backward-char :override #'+default--delete-backward-char-a)
|
||||
|
||||
;; HACK Makes `newline-and-indent' continue comments (and more reliably).
|
||||
;; Consults `doom-point-in-comment-functions' to detect a commented region
|
||||
;; and uses that mode's `comment-line-break-function' to continue comments.
|
||||
;; If neither exists, it will fall back to the normal behavior of
|
||||
;; `newline-and-indent'.
|
||||
;;
|
||||
;; We use an advice here instead of a remapping because many modes define
|
||||
;; and remap to their own newline-and-indent commands, and tackling all
|
||||
;; those cases was judged to be more work than dealing with the edge cases
|
||||
;; on a case by case basis.
|
||||
(defadvice! +default--newline-indent-and-continue-comments-a (&rest _)
|
||||
"A replacement for `newline-and-indent'.
|
||||
|
||||
Continues comments if executed from a commented line. Consults
|
||||
`doom-point-in-comment-functions' to determine if in a comment."
|
||||
:before-until #'newline-and-indent
|
||||
(interactive "*")
|
||||
(when (and +default-want-RET-continue-comments
|
||||
(doom-point-in-comment-p)
|
||||
(fboundp comment-line-break-function))
|
||||
(funcall comment-line-break-function nil)
|
||||
t))
|
||||
|
||||
;; This section is dedicated to "fixing" certain keys so that they behave
|
||||
;; sensibly (and consistently with similar contexts).
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
(defun yas-java-project-package ()
|
||||
(or (and (eq major-mode 'java-mode)
|
||||
(+java-current-package))
|
||||
""))
|
||||
|
||||
(defun yas-java-class-name ()
|
||||
(or (and (eq major-mode 'java-mode)
|
||||
(+java-current-class))
|
||||
""))
|
|
@ -1,9 +1,9 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: Java file template
|
||||
# --
|
||||
package `(yas-java-project-package)`;
|
||||
package `(+java-current-package)`;
|
||||
|
||||
public class `(yas-java-class-name)` $1
|
||||
public class `(+java-current-class)` $1
|
||||
{
|
||||
$0
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# -*- mode: snippet -*-
|
||||
# name: Java MAIN file template
|
||||
# --
|
||||
package `(yas-java-project-package)`;
|
||||
package `(+java-current-package)`;
|
||||
|
||||
public class `(yas-java-class-name)` $1
|
||||
public class `(+java-current-class)` $1
|
||||
{
|
||||
public static void main(String[] args) {
|
||||
$0
|
||||
|
|
|
@ -198,7 +198,14 @@ See `+format/buffer' for the interactive version of this function, and
|
|||
;;; Commands
|
||||
|
||||
;;;###autoload
|
||||
(defalias '+format/buffer #'format-all-buffer)
|
||||
(defun +format/buffer ()
|
||||
"Reformat the current buffer using LSP or `format-all-buffer'."
|
||||
(interactive)
|
||||
(call-interactively
|
||||
(if (and (bound-and-true-p lsp-mode)
|
||||
(lsp-feature? "textDocument/formatting"))
|
||||
#'lsp-format-buffer
|
||||
#'format-all-buffer)))
|
||||
|
||||
;;;###autoload
|
||||
(defun +format/region (beg end)
|
||||
|
@ -208,10 +215,13 @@ WARNING: this may not work everywhere. It will throw errors if the region
|
|||
contains a syntax error in isolation. It is mostly useful for formatting
|
||||
snippets or single lines."
|
||||
(interactive "rP")
|
||||
(save-restriction
|
||||
(narrow-to-region beg end)
|
||||
(let ((+format-region-p t))
|
||||
(+format/buffer))))
|
||||
(if (and (bound-and-true-p lsp-mode)
|
||||
(lsp-feature? "textDocument/rangeFormatting"))
|
||||
#'lsp-format-region
|
||||
(save-restriction
|
||||
(narrow-to-region beg end)
|
||||
(let ((+format-region-p t))
|
||||
(+format/buffer)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +format/region-or-buffer ()
|
||||
|
@ -219,11 +229,9 @@ snippets or single lines."
|
|||
is selected)."
|
||||
(interactive)
|
||||
(call-interactively
|
||||
(if (bound-and-true-p lsp-mode)
|
||||
#'+default/lsp-format-region-or-buffer
|
||||
(if (use-region-p)
|
||||
#'+format/region
|
||||
#'+format/buffer))))
|
||||
(if (doom-region-active-p)
|
||||
#'+format/region
|
||||
#'+format/buffer)))
|
||||
|
||||
|
||||
;;
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
(name formatter &key modes filter ok-statuses error-regexp)
|
||||
"Define (or modify) a formatter named NAME.
|
||||
|
||||
Supported keywords: :modes :install :filter :ok-statuses :error-regexp
|
||||
Supported keywords: :modes :filter :ok-statuses :error-regexp
|
||||
|
||||
NAME is a symbol that identifies this formatter.
|
||||
|
||||
|
|
|
@ -12,10 +12,12 @@
|
|||
- [[#prerequisites][Prerequisites]]
|
||||
- [[#features][Features]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#disabling-persistent-undo-history][Disabling persistent undo history]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
|
||||
* Description
|
||||
This module augments Emacs' built-in undo system to be more intuitive.
|
||||
This module augments Emacs' built-in undo system to be more intuitive and to
|
||||
persist across Emacs sessions.
|
||||
|
||||
** Maintainers
|
||||
This module has no dedicated maintainers.
|
||||
|
@ -47,8 +49,20 @@ This module has no prereqisites.
|
|||
* TODO Features
|
||||
# An in-depth list of features, how to use them, and their dependencies.
|
||||
|
||||
* TODO Configuration
|
||||
# How to configure this module, including common problems and how to address them.
|
||||
* Configuration
|
||||
** Disabling persistent undo history
|
||||
+ If you are using =+tree=:
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(after! undo-tree
|
||||
(setq undo-tree-auto-save-history nil))
|
||||
#+END_SRC
|
||||
|
||||
+ If you aren't:
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(remove-hook 'undo-fu-mode-hook #'global-undo-fu-session-mode)
|
||||
#+END_SRC
|
||||
|
||||
* TODO Troubleshooting
|
||||
# Common issues and their solution, or places to look for help.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
(use-package! undo-fu
|
||||
:unless (featurep! +tree)
|
||||
:after-call doom-switch-buffer after-find-file
|
||||
:after-call doom-switch-buffer-hook after-find-file
|
||||
:init
|
||||
(after! undo-tree
|
||||
(global-undo-tree-mode -1))
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
|
||||
(if (featurep! +tree)
|
||||
(package! undo-tree :pin "5b6df03781495d8a25695d846b0cce496d3d3058")
|
||||
(package! undo-fu :pin "0ce9ac36144e80316fff50bfe1bc5dd7e5e7ded6")
|
||||
(package! undo-fu-session :pin "b808ef0cdcdd2eef221c67eda567eed7fcb3d4af"))
|
||||
(package! undo-fu :pin "2b1e53285a55ce50ca6fd60b050f2171e235d8f9")
|
||||
(package! undo-fu-session :pin "0400f15f2a0cfcedb69c06c3ff62f3f8814b62fb"))
|
||||
|
|
|
@ -80,7 +80,7 @@ environment.systemPackages = with pkgs; [
|
|||
];
|
||||
#+END_SRC
|
||||
|
||||
[[https://github.com/Emiller88/dotfiles/blob/master/modules/shell/mail.nix][An example of setting up mbsync with home-manager]]
|
||||
[[https://github.com/Emiller88/dotfiles/blob/5eaabedf1b141c80a8d32e1b496055231476f65e/modules/shell/mail.nix][An example of setting up mbsync and mu with home-manager]]
|
||||
|
||||
** openSUSE
|
||||
Remove ~#~ in ~#sync_program=offlineimap~ to choose ~offlineimap~ instead of
|
||||
|
|
110
modules/email/notmuch/README.org
Normal file
110
modules/email/notmuch/README.org
Normal file
|
@ -0,0 +1,110 @@
|
|||
#+TITLE: email/notmuch
|
||||
#+DATE: May 5, 2019
|
||||
#+SINCE: v2.0
|
||||
#+STARTUP: inlineimages
|
||||
|
||||
* Table of Contents :TOC:
|
||||
- [[#description][Description]]
|
||||
- [[#module-flags][Module Flags]]
|
||||
- [[#plugins][Plugins]]
|
||||
- [[#prerequisites][Prerequisites]]
|
||||
- [[#macos][MacOS]]
|
||||
- [[#arch-linux][Arch Linux]]
|
||||
- [[#nixos][NixOS]]
|
||||
- [[#opensuse][openSUSE]]
|
||||
- [[#debianubuntu][Debian/Ubuntu]]
|
||||
- [[#features][Features]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#gmailier][Gmailier]]
|
||||
- [[#offlineimap][offlineimap]]
|
||||
- [[#mbsync][mbsync]]
|
||||
- [[#notmuch][notmuch]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
|
||||
* Description
|
||||
This module makes Emacs an email client, using ~notmuch~.
|
||||
|
||||
** Module Flags
|
||||
+ This module install no module flags.
|
||||
|
||||
|
||||
** Plugins
|
||||
+ [[https://notmuchmail.org/][notmuch]]
|
||||
+ [[https://github.com/org-mime/org-mime][org-mime]]
|
||||
|
||||
* Prerequisites
|
||||
This module requires:
|
||||
|
||||
+ Either ~gmailieer~ (default), ~mbsync~ or ~offlineimap~ (to sync mail with)
|
||||
+ ~notmuch~, to index and tag your downloaded messages.
|
||||
+ ~afew~, optionally to initially tag your downloaded messages.
|
||||
|
||||
** TODO MacOS
|
||||
|
||||
** TODO Arch Linux
|
||||
** NixOS
|
||||
#+BEGIN_SRC nix
|
||||
environment.systemPackages = with pkgs; [
|
||||
notmuch
|
||||
# And one of the following
|
||||
gmailieer
|
||||
isync
|
||||
offlineimap
|
||||
];
|
||||
#+END_SRC
|
||||
|
||||
[[https://github.com/Emiller88/dotfiles/blob/319841bd3b89e59b01d169137cceee3183aba4fc/modules/shell/mail.nix][An example of setting up mbsync and notmuch with home-manager]]
|
||||
|
||||
** TODO openSUSE
|
||||
** TODO Debian/Ubuntu
|
||||
* TODO Features
|
||||
|
||||
* Configuration
|
||||
** TODO Gmailier
|
||||
** offlineimap
|
||||
This module uses =Gmailier= by default. To use =offlineimap=, change ~+notmuch-sync-backend~:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(setq +notmuch-sync-backend 'offlineimap)
|
||||
#+END_SRC
|
||||
|
||||
Next, you need to write a configuration file for =offlineimap=. Mine can be found
|
||||
[[https://github.com/hlissner/dotfiles/tree/master/shell/mu][in my dotfiles repository]]. It is configured to download mail to ~\~/.mail~. I
|
||||
use [[https://www.passwordstore.org/][unix pass]] to securely store my login credentials. You can find a *very*
|
||||
detailed configuration [[https://github.com/OfflineIMAP/offlineimap/blob/master/offlineimap.conf][here]].
|
||||
|
||||
Next you can download your email with ~offlineimap -o~. This may take a while,
|
||||
especially if you have thousands of mails.
|
||||
|
||||
You can now proceed with the [[*mu and mu4e][mu and mu4e]] section.
|
||||
|
||||
** mbsync
|
||||
This module uses =Gmailier= by default. To use =mbsync=, change ~+notmuch-sync-backend~:
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(setq +notmuch-sync-backend 'mbsync)
|
||||
#+END_SRC
|
||||
|
||||
The steps needed to set up =mu4e= with =mbsync= are very similar to the ones for
|
||||
[[*offlineimap][offlineimap]].
|
||||
|
||||
Start with writing a ~\~/.mbsyncrc~. An example for GMAIL can be found on
|
||||
[[http://pragmaticemacs.com/emacs/migrating-from-offlineimap-to-mbsync-for-mu4e/][pragmaticemacs.com]]. A non-GMAIL example is available as a gist [[https://gist.github.com/agraul/60977cc497c3aec44e10591f94f49ef0][here]]. The [[http://isync.sourceforge.net/mbsync.html][manual
|
||||
page]] contains all needed information to set up your own.
|
||||
|
||||
Next you can download your email with ~mbsync --all~. This may take a while, but
|
||||
should be quicker than =offlineimap= ;).
|
||||
|
||||
You can now proceed with the [[*mu and mu4e][mu and mu4e]] section.
|
||||
|
||||
** notmuch
|
||||
You should have your email downloaded already. If you have not, you need to set
|
||||
=Gmailier=, =offlineimap= or =mbsync= up before you proceed.
|
||||
|
||||
Before you can use =notmuch=, you need to index your email initially.
|
||||
|
||||
#+BEGIN_SRC sh
|
||||
notmuch new
|
||||
#+END_SRC
|
||||
|
||||
* Troubleshooting
|
|
@ -1,9 +1,9 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/clojure/packages.el
|
||||
|
||||
(package! clojure-mode :pin "c970c4605c")
|
||||
(package! cider :pin "d63e5652fd")
|
||||
(package! clj-refactor :pin "8259791e05")
|
||||
(package! clojure-mode :pin "da9f1ec717dac1194404b4a4562dba6bd9a4ee3a")
|
||||
(package! cider :pin "3a59fe046c9884573512dff88d140d37c0be7b2c")
|
||||
(package! clj-refactor :pin "8259791e054382457b87d1f78061b5e3ce948907")
|
||||
|
||||
(when (featurep! :checkers syntax)
|
||||
(package! flycheck-clj-kondo :pin "5472c26ffd"))
|
||||
(package! flycheck-clj-kondo :pin "5472c26ffdf754a0661357564874ffd4f8598805"))
|
||||
|
|
|
@ -76,12 +76,15 @@
|
|||
(map! (:map sly-db-mode-map
|
||||
:n "gr" #'sly-db-restart-frame)
|
||||
(:map sly-inspector-mode-map
|
||||
:n "gb" #'sly-inspector-pop
|
||||
:n "gr" #'sly-inspector-reinspect
|
||||
:n "gR" #'sly-inspector-fetch-all
|
||||
:n "K" #'sly-inspector-describe-inspectee)
|
||||
(:map sly-xref-mode-map
|
||||
:n "gr" #'sly-recompile-xref
|
||||
:n "gR" #'sly-recompile-all-xrefs)
|
||||
(:map lisp-mode-map
|
||||
:n "gb" #'sly-pop-find-definition-stack)
|
||||
|
||||
(:localleader
|
||||
:map lisp-mode-map
|
||||
|
|
|
@ -16,10 +16,10 @@
|
|||
|
||||
* Description
|
||||
This module provides support for [[https://elixir-lang.org/][Elixir programming language]] via [[https://github.com/tonini/alchemist.el][alchemist.el]]
|
||||
or [[https://github.com/JakeBecker/elixir-ls/][elixir-ls]].
|
||||
or [[https://github.com/elixir-lsp/elixir-ls/][elixir-ls]].
|
||||
|
||||
** Module flags
|
||||
+ ~+lsp~ Enable LSP support. Requires [[https://github.com/JakeBecker/elixir-ls/][elixir-ls]].
|
||||
+ ~+lsp~ Enable LSP support. Requires [[https://github.com/elixir-lsp/elixir-ls/][elixir-ls]].
|
||||
|
||||
** Plugins
|
||||
+ [[https://github.com/elixir-editors/emacs-elixir][elixir-mode]]
|
||||
|
|
|
@ -67,6 +67,9 @@ library/userland functions"
|
|||
(byte-compile #'+emacs-lisp-highlight-vars-and-faces)))
|
||||
|
||||
|
||||
;;
|
||||
;;; Handlers
|
||||
|
||||
(defun +emacs-lisp--module-at-point ()
|
||||
(let ((origin (point)))
|
||||
(save-excursion
|
||||
|
@ -126,11 +129,52 @@ if it's callable, `apropos' otherwise."
|
|||
(thing (helpful-symbol (intern thing)))
|
||||
((call-interactively #'helpful-at-point))))
|
||||
|
||||
;; FIXME
|
||||
;; (defun +emacs-lisp-lookup-file (thing)
|
||||
;; (when-let (module (+emacs-lisp--module-at-point thing))
|
||||
;; (doom/help-modules (car module) (cadr module) 'visit-dir)
|
||||
;; t))
|
||||
;;;###autoload
|
||||
(defun +emacs-lisp-indent-function (indent-point state)
|
||||
"A replacement for `lisp-indent-function'.
|
||||
|
||||
Indents plists more sensibly. Adapted from
|
||||
https://emacs.stackexchange.com/questions/10230/how-to-indent-keywords-aligned"
|
||||
(let ((normal-indent (current-column))
|
||||
(orig-point (point))
|
||||
;; TODO Refactor `target' usage (ew!)
|
||||
target)
|
||||
(goto-char (1+ (elt state 1)))
|
||||
(parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)
|
||||
(cond ((and (elt state 2)
|
||||
(or (not (looking-at-p "\\sw\\|\\s_"))
|
||||
(eq (char-after) ?:)))
|
||||
(unless (> (save-excursion (forward-line 1) (point))
|
||||
calculate-lisp-indent-last-sexp)
|
||||
(goto-char calculate-lisp-indent-last-sexp)
|
||||
(beginning-of-line)
|
||||
(parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t))
|
||||
(backward-prefix-chars)
|
||||
(current-column))
|
||||
((and (save-excursion
|
||||
(goto-char indent-point)
|
||||
(skip-syntax-forward " ")
|
||||
(not (eq (char-after) ?:)))
|
||||
(save-excursion
|
||||
(goto-char orig-point)
|
||||
(and (eq (char-after) ?:)
|
||||
(eq (char-before) ?\()
|
||||
(setq target (current-column)))))
|
||||
(save-excursion
|
||||
(move-to-column target t)
|
||||
target))
|
||||
((let* ((function (buffer-substring (point) (progn (forward-sexp 1) (point))))
|
||||
(method (or (function-get (intern-soft function) 'lisp-indent-function)
|
||||
(get (intern-soft function) 'lisp-indent-hook))))
|
||||
(cond ((or (eq method 'defun)
|
||||
(and (null method)
|
||||
(> (length function) 3)
|
||||
(string-match-p "\\`def" function)))
|
||||
(lisp-indent-defform state indent-point))
|
||||
((integerp method)
|
||||
(lisp-indent-specform method state indent-point normal-indent))
|
||||
(method
|
||||
(funcall method indent-point state))))))))
|
||||
|
||||
|
||||
;;
|
||||
|
@ -170,6 +214,18 @@ if it's callable, `apropos' otherwise."
|
|||
load-path)))
|
||||
(buttercup-run-discover)))
|
||||
|
||||
;;;###autoload
|
||||
(defun +emacs-lisp/edebug-instrument-defun-on ()
|
||||
"Toggle on instrumentalisation for the function under `defun'."
|
||||
(interactive)
|
||||
(eval-defun 'edebugit))
|
||||
|
||||
;;;###autoload
|
||||
(defun +emacs-lisp/edebug-instrument-defun-off ()
|
||||
"Toggle off instrumentalisation for the function under `defun'."
|
||||
(interactive)
|
||||
(eval-defun nil))
|
||||
|
||||
|
||||
;;
|
||||
;;; Hooks
|
||||
|
@ -234,62 +290,3 @@ verbosity when editing a file in `doom-private-dir' or `doom-emacs-dir'."
|
|||
(when (and start finish)
|
||||
(put-text-property start finish 'display "...")))))
|
||||
nil)
|
||||
|
||||
;;;###autoload
|
||||
(defun +emacs-lisp-indent-function (indent-point state)
|
||||
"A replacement for `lisp-indent-function'.
|
||||
|
||||
Indents plists more sensibly. Adapted from
|
||||
https://emacs.stackexchange.com/questions/10230/how-to-indent-keywords-aligned"
|
||||
(let ((normal-indent (current-column))
|
||||
(orig-point (point))
|
||||
;; TODO Refactor `target' usage (ew!)
|
||||
target)
|
||||
(goto-char (1+ (elt state 1)))
|
||||
(parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t)
|
||||
(cond ((and (elt state 2)
|
||||
(or (not (looking-at-p "\\sw\\|\\s_"))
|
||||
(eq (char-after) ?:)))
|
||||
(unless (> (save-excursion (forward-line 1) (point))
|
||||
calculate-lisp-indent-last-sexp)
|
||||
(goto-char calculate-lisp-indent-last-sexp)
|
||||
(beginning-of-line)
|
||||
(parse-partial-sexp (point) calculate-lisp-indent-last-sexp 0 t))
|
||||
(backward-prefix-chars)
|
||||
(current-column))
|
||||
((and (save-excursion
|
||||
(goto-char indent-point)
|
||||
(skip-syntax-forward " ")
|
||||
(not (eq (char-after) ?:)))
|
||||
(save-excursion
|
||||
(goto-char orig-point)
|
||||
(and (eq (char-after) ?:)
|
||||
(eq (char-before) ?\()
|
||||
(setq target (current-column)))))
|
||||
(save-excursion
|
||||
(move-to-column target t)
|
||||
target))
|
||||
((let* ((function (buffer-substring (point) (progn (forward-sexp 1) (point))))
|
||||
(method (or (function-get (intern-soft function) 'lisp-indent-function)
|
||||
(get (intern-soft function) 'lisp-indent-hook))))
|
||||
(cond ((or (eq method 'defun)
|
||||
(and (null method)
|
||||
(> (length function) 3)
|
||||
(string-match-p "\\`def" function)))
|
||||
(lisp-indent-defform state indent-point))
|
||||
((integerp method)
|
||||
(lisp-indent-specform method state indent-point normal-indent))
|
||||
(method
|
||||
(funcall method indent-point state))))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +emacs-lisp/edebug-instrument-defun-on ()
|
||||
"Toggle on instrumentalisation for the function under `defun'."
|
||||
(interactive)
|
||||
(eval-defun 'edebugit))
|
||||
|
||||
;;;###autoload
|
||||
(defun +emacs-lisp/edebug-instrument-defun-off ()
|
||||
"Toggle off instrumentalisation for the function under `defun'."
|
||||
(interactive)
|
||||
(eval-defun nil))
|
||||
|
|
|
@ -84,6 +84,24 @@ This marks a foldable marker for `outline-minor-mode' in elisp buffers.")
|
|||
;; Recenter window after following definition
|
||||
(advice-add #'elisp-def :after #'doom-recenter-a)
|
||||
|
||||
(defadvice! +emacs-lisp-append-value-to-eldoc-a (orig-fn sym)
|
||||
"Display variable value next to documentation in eldoc."
|
||||
:around #'elisp-get-var-docstring
|
||||
(when-let (ret (funcall orig-fn sym))
|
||||
(concat ret " "
|
||||
(let* ((truncated " [...]")
|
||||
(limit (- (frame-width) (length ret) (length truncated) 1))
|
||||
(str (symbol-value sym))
|
||||
(str (prin1-to-string
|
||||
(if (stringp str)
|
||||
(replace-regexp-in-string "\n" "
" str)
|
||||
str)))
|
||||
(str-length (length str))
|
||||
(short (< str-length limit)))
|
||||
(concat (substring (propertize str 'face 'warning)
|
||||
0 (if short str-length limit))
|
||||
(unless short truncated))))))
|
||||
|
||||
(map! :localleader
|
||||
:map emacs-lisp-mode-map
|
||||
:desc "Expand macro" "m" #'macrostep-expand
|
||||
|
|
|
@ -3,15 +3,16 @@
|
|||
|
||||
(package! elisp-mode :built-in t)
|
||||
|
||||
(package! highlight-quoted :pin "2410347815")
|
||||
;; Fontification plugins
|
||||
(package! highlight-quoted :pin "24103478158cd19fbcfb4339a3f1fa1f054f1469")
|
||||
|
||||
;; Tools
|
||||
(package! macrostep :pin "424e3734a1")
|
||||
(package! overseer :pin "02d49f582e")
|
||||
(package! elisp-def :pin "368b04da68")
|
||||
(package! elisp-demos :pin "57dd4ae3e4")
|
||||
(package! macrostep :pin "424e3734a1ee526a1bd7b5c3cd1d3ef19d184267")
|
||||
(package! overseer :pin "02d49f582e80e36b4334c9187801c5ecfb027789")
|
||||
(package! elisp-def :pin "368b04da68783601b52e3169312183381871cf9e")
|
||||
(package! elisp-demos :pin "4cd55a30d5dbd8d36a0e6f87261c4fef17fc6db0")
|
||||
(when (featurep! :checkers syntax)
|
||||
(package! flycheck-cask :pin "3457ae553c"))
|
||||
(package! flycheck-cask :pin "3457ae553c4feaf8168008f063d78fdde8fb5f94"))
|
||||
|
||||
;; Libraries
|
||||
(package! buttercup :pin "a91f282025")
|
||||
(package! buttercup :pin "532d082a363add4f6d9838ca3f924a773ce12136")
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/go/packages.el
|
||||
|
||||
(package! go-eldoc :pin "cbbd2ea1e9")
|
||||
(package! go-guru :pin "10d6ab43d9")
|
||||
(package! go-mode :pin "10d6ab43d9")
|
||||
(package! gorepl-mode :pin "6a73bf352e")
|
||||
(package! go-tag :pin "59b243f2fa")
|
||||
(package! go-gen-test :pin "44c202ac97")
|
||||
(package! go-eldoc :pin "cbbd2ea1e94a36004432a9ac61414cb5a95a39bd")
|
||||
(package! go-guru :pin "734d5232455ffde088021ea5908849ac570e890f")
|
||||
(package! go-mode :pin "734d5232455ffde088021ea5908849ac570e890f")
|
||||
(package! gorepl-mode :pin "6a73bf352e8d893f89cad36c958c4db2b5e35e07")
|
||||
(package! go-tag :pin "59b243f2fa079d9de9d56f6e2d94397e9560310a")
|
||||
(package! go-gen-test :pin "44c202ac97e728e93a35cee028a0ea8dd6e4292c")
|
||||
|
||||
(when (featurep! :completion company)
|
||||
(package! company-go :pin "4acdcbdea7"))
|
||||
(package! company-go :pin "4acdcbdea79de6b3dee1c637eca5cbea0fdbe37c"))
|
||||
|
||||
(when (featurep! :checkers syntax)
|
||||
(package! flycheck-golangci-lint :pin "8e446c6831"))
|
||||
(package! flycheck-golangci-lint :pin "8e446c68311048f0b87febf8ef0379e29d358851"))
|
||||
|
|
|
@ -31,7 +31,9 @@
|
|||
|
||||
(map! :map haskell-mode-map
|
||||
:n "o" #'+haskell/evil-open-below
|
||||
:n "O" #'+haskell/evil-open-above)
|
||||
:n "O" #'+haskell/evil-open-above
|
||||
(:when (featurep! :tools lookup)
|
||||
[remap haskell-mode-jump-to-def-or-tag] #'+lookup/definition))
|
||||
|
||||
(map! :localleader
|
||||
:map haskell-mode-map
|
||||
|
|
|
@ -4,10 +4,18 @@
|
|||
(use-package! lsp-java
|
||||
:after lsp-clients
|
||||
:preface
|
||||
(setq lsp-java-server-install-dir (concat doom-etc-dir "eclipse.jdt.ls/server/")
|
||||
lsp-java-workspace-dir (concat doom-etc-dir "java-workspace")
|
||||
lsp-jt-root (concat doom-etc-dir "eclipse.jdt.ls/server/java-test/server/"))
|
||||
(add-hook! java-mode-local-vars #'lsp!)
|
||||
(setq lsp-java-workspace-dir (concat doom-etc-dir "java-workspace"))
|
||||
(add-hook 'java-mode-local-vars-hook #'lsp!)
|
||||
(map! :when (featurep! :tools debugger +lsp)
|
||||
:after cc-mode ; where `java-mode' is defined
|
||||
:map java-mode-map
|
||||
:localleader
|
||||
(:prefix ("t" . "Test")
|
||||
:desc "Run test class or method" "t" #'+java/run-test
|
||||
:desc "Run all tests in class" "a" #'dap-java-run-test-class
|
||||
:desc "Debug test class or method" "d" #'+java/debug-test
|
||||
:desc "Debug all tests in class" "D" #'dap-java-debug-test-class))
|
||||
:config
|
||||
;; TODO keybinds
|
||||
)
|
||||
(when (featurep! :tools debugger +lsp)
|
||||
(setq lsp-jt-root (concat lsp-java-server-install-dir "java-test/server/")
|
||||
dap-java-test-runner (concat lsp-java-server-install-dir "test-runner/junit-platform-console-standalone.jar"))))
|
||||
|
|
|
@ -13,10 +13,12 @@
|
|||
- [[#oracle-jdk-11][Oracle JDK 11]]
|
||||
- [[#ubuntu-1][Ubuntu]]
|
||||
- [[#fedora-1][Fedora]]
|
||||
- [[#multiple-java-versions][Multiple Java Versions]]
|
||||
- [[#features][Features]]
|
||||
- [[#lsp-features][=+lsp= features]]
|
||||
- [[#meghanada-features][=+meghanada= features]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#lsp][=+lsp=]]
|
||||
|
||||
* Description
|
||||
This module adds [[https://www.java.com][java]] support to Doom Emacs, including =android-mode= and
|
||||
|
@ -30,6 +32,9 @@ The =+lsp= and =+meghanada= packages are mutually exclusive and do not work
|
|||
together. At the time of writing the =+meghanada= is already configured whereas
|
||||
=+lsp= needs to manual configuring.
|
||||
|
||||
The =lsp= test runner requires that =:tools (debugger +lsp)= is enabled, as this
|
||||
provides =dap-mode= which contains the Java test runner.
|
||||
|
||||
* Prerequisites
|
||||
This module requires the Java SDK.
|
||||
|
||||
|
@ -72,6 +77,23 @@ source /etc/profile.d/jdk11.sh
|
|||
java -version
|
||||
#+END_SRC
|
||||
|
||||
** Multiple Java Versions
|
||||
It is common to need support for multiple Java versions. You can use a generic
|
||||
tool like [[https://github.com/shyiko/jabba][jabba]] to install and manage multiple Java versions on any OS.
|
||||
|
||||
To switch between Java versions in Doom, you can use [[https://github.com/direnv/direnv][direnv]] and the [[file:~/.emacs.d/modules/tools/direnv/README.org::+TITLE: tools/direnv][direnv module]]. To set a
|
||||
Java version for a particular project, create a =.envrc= pointing to the Java
|
||||
installation in the root of the project:
|
||||
|
||||
#+BEGIN_SRC conf-unix
|
||||
PATH_add ~/.jabba/jdk/adopt@1.11.0-3
|
||||
JAVA_HOME=~/.jabba/jdk/adopt@1.11.0-3
|
||||
#+END_SRC
|
||||
|
||||
And then run =direnv allow .= in the project directory. If the =direnv= module
|
||||
is enabled, then Doom will automatically source this environment before
|
||||
executing the LSP server.
|
||||
|
||||
* Features
|
||||
** =+lsp= features
|
||||
According to [[https://github.com/emacs-lsp/lsp-java]] it adds
|
||||
|
@ -111,4 +133,16 @@ According to [[https://github.com/mopemope/meghanada-emacs/]] it adds
|
|||
+ Search references
|
||||
+ Full-featured text search
|
||||
|
||||
* TODO Configuration
|
||||
* Configuration
|
||||
** =+lsp=
|
||||
Install the eclipse server by executing =M-x lsp-install-server= and selecting
|
||||
=jdtls=. After that any newly opened =java= files should start the LSP server
|
||||
automatically.
|
||||
|
||||
To update the server, perform =SPC u M-x lsp-install-server=.
|
||||
|
||||
Note that if you change Java version you may need to remove the LSP server and
|
||||
install it again. You can do this with =M-x +lsp/uninstall-server= followed by
|
||||
=M-x lsp-install-server=.
|
||||
|
||||
Enable the =:tools (debugger +lsp)= module to get test runner support.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
;;; lang/java/config.el -*- lexical-binding: t; -*-
|
||||
;;; lang/java/autoload/java.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; yasnippet defuns
|
||||
;;;###autoload
|
||||
|
@ -71,3 +71,10 @@ root)."
|
|||
(user-error "This buffer has no filepath; cannot guess its class name"))
|
||||
(or (file-name-sans-extension (file-name-base (buffer-file-name)))
|
||||
"ClassName"))
|
||||
|
||||
;;;###autoload
|
||||
(defun +java/groovy-open-repl ()
|
||||
"Open a Groovy REPL."
|
||||
(interactive)
|
||||
(call-interactively #'run-groovy)
|
||||
(get-buffer groovy-buffer))
|
20
modules/lang/java/autoload/lsp.el
Normal file
20
modules/lang/java/autoload/lsp.el
Normal file
|
@ -0,0 +1,20 @@
|
|||
;;; lang/java/autoload/lsp.el -*- lexical-binding: t; -*-
|
||||
;;;###if (featurep! :tools debugger +lsp)
|
||||
|
||||
;;;###autoload
|
||||
(defun +java/run-test ()
|
||||
"Runs test at point.
|
||||
If in a method, runs the test method, otherwise runs the entire test class."
|
||||
(interactive)
|
||||
(condition-case nil
|
||||
(dap-java-run-test-method)
|
||||
(user-error (dap-java-run-test-class))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +java/debug-test ()
|
||||
"Runs test at point in a debugger.
|
||||
If in a method, runs the test method, otherwise runs the entire test class."
|
||||
(interactive)
|
||||
(condition-case nil
|
||||
(call-interactively #'dap-java-debug-test-method)
|
||||
(user-error (call-interactively #'dap-java-debug-test-class))))
|
|
@ -45,4 +45,6 @@ If the depth is 2, the first two directories are removed: net.lissner.game.")
|
|||
(use-package! groovy-mode
|
||||
:mode "\\.g\\(?:radle\\|roovy\\)$"
|
||||
:config
|
||||
(set-eval-handler! 'groovy-mode "groovy"))
|
||||
(set-docsets! 'groovy-mode "Groovy" "Groovy_JDK")
|
||||
(set-eval-handler! 'groovy-mode "groovy")
|
||||
(set-repl-handler! 'groovy-mode #'+java/groovy-open-repl))
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#+TITLE: lang/kotlin
|
||||
#+DATE: March 28, @019
|
||||
#+DATE: March 28, 2019
|
||||
#+SINCE: v3.0.0
|
||||
#+STARTUP: inlineimages
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
(when (featurep! +lsp)
|
||||
(add-hook 'kotlin-mode-local-vars-hook #'lsp!))
|
||||
(set-docsets! 'kotlin-mode "Kotlin")
|
||||
(set-repl-handler! 'kotlin-mode #'kotlin-repl)
|
||||
|
||||
(map! :map kotlin-mode-map
|
||||
:localleader
|
||||
|
|
|
@ -82,7 +82,6 @@ If no viewers are found, `latex-preview-pane' is used.")
|
|||
:when (featurep! +fold)
|
||||
:hook (TeX-mode . TeX-fold-buffer)
|
||||
:hook (TeX-mode . TeX-fold-mode)
|
||||
|
||||
:config
|
||||
;; Fold after all auctex macro insertions
|
||||
(advice-add #'TeX-insert-macro :after #'+latex-fold-last-macro-a)
|
||||
|
@ -91,24 +90,23 @@ If no viewers are found, `latex-preview-pane' is used.")
|
|||
(advice-add #'cdlatex-math-modify :after #'+latex-fold-last-macro-a)
|
||||
;; Fold after snippets
|
||||
(when (featurep! :editor snippets)
|
||||
(add-hook 'TeX-fold-mode-hook
|
||||
(defun +latex-fold-set-yas-hook-h ()
|
||||
"Set a local after-snippet-hook to fold the snippet contents."
|
||||
(add-hook! 'yas-after-exit-snippet-hook :local
|
||||
(TeX-fold-region yas-snippet-beg yas-snippet-end)))))
|
||||
(add-hook! 'TeX-fold-mode-hook
|
||||
(defun +latex-fold-snippet-contents-h ()
|
||||
(add-hook! 'yas-after-exit-snippet-hook :local
|
||||
(TeX-fold-region yas-snippet-beg yas-snippet-end)))))
|
||||
|
||||
(add-hook 'mixed-pitch-mode-hook
|
||||
(defun +latex-fold-set-variable-pitch-h ()
|
||||
"Fix folded things invariably getting fixed pitch when using mixed-pitch.
|
||||
Math faces should stay fixed by the mixed-pitch blacklist, this
|
||||
is mostly for \\section etc."
|
||||
(when mixed-pitch-mode
|
||||
;; Adding to this list makes mixed-pitch clean the face remaps after us
|
||||
(add-to-list 'mixed-pitch-fixed-cookie
|
||||
(face-remap-add-relative
|
||||
'TeX-fold-folded-face
|
||||
:family (face-attribute 'variable-pitch :family)
|
||||
:height (face-attribute 'variable-pitch :height))))))
|
||||
(add-hook! 'mixed-pitch-mode-hook
|
||||
(defun +latex-fold-set-variable-pitch-h ()
|
||||
"Fix folded things invariably getting fixed pitch when using mixed-pitch.
|
||||
Math faces should stay fixed by the mixed-pitch blacklist, this is mostly for
|
||||
\\section etc."
|
||||
(when mixed-pitch-mode
|
||||
;; Adding to this list makes mixed-pitch clean the face remaps after us
|
||||
(add-to-list 'mixed-pitch-fixed-cookie
|
||||
(face-remap-add-relative
|
||||
'TeX-fold-folded-face
|
||||
:family (face-attribute 'variable-pitch :family)
|
||||
:height (face-attribute 'variable-pitch :height))))))
|
||||
|
||||
(map! :map TeX-fold-mode-map
|
||||
:localleader
|
||||
|
|
|
@ -92,10 +92,6 @@ capture, the end position, and the output buffer.")
|
|||
(use-package! evil-markdown
|
||||
:when (featurep! :editor evil +everywhere)
|
||||
:hook (markdown-mode . evil-markdown-mode)
|
||||
:init
|
||||
;; REVIEW Until Somelauw/evil-markdown#1 is resolved:
|
||||
(defun evil-disable-insert-state-bindings ()
|
||||
evil-disable-insert-state-bindings)
|
||||
:config
|
||||
(add-hook 'evil-markdown-mode-hook #'evil-normalize-keymaps)
|
||||
(map! :map evil-markdown-mode-map
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; lang/markdown/packages.el
|
||||
|
||||
(package! markdown-mode :pin "c927a114b1b23cf7538181d62fd14679cce7fa25")
|
||||
(package! markdown-toc :pin "eda9650a1bf0015e52e9678bd92b0a8beb1d7d71")
|
||||
(package! markdown-mode :pin "f47a2e9796dfdde6fae7920af23647fe027dc34e")
|
||||
(package! markdown-toc :pin "a9f13eecd0c7d8be960055dbc2d6f5d3fe6f40ca")
|
||||
(package! edit-indirect :pin "935ded353b9ed3da67bc61abf245c21b58d88864")
|
||||
|
||||
(when (featurep! +grip)
|
||||
|
@ -11,4 +11,4 @@
|
|||
(when (featurep! :editor evil +everywhere)
|
||||
(package! evil-markdown
|
||||
:recipe (:host github :repo "Somelauw/evil-markdown")
|
||||
:pin "46cd81b37991c4325fc24015a610f832b0ff995d"))
|
||||
:pin "685d7fbb81bc02fa32779d2a127b99a0c8c7436b"))
|
||||
|
|
57
modules/lang/nix/README.org
Normal file
57
modules/lang/nix/README.org
Normal file
|
@ -0,0 +1,57 @@
|
|||
#+TITLE: lang/nix
|
||||
#+DATE: May 4, 2020
|
||||
#+SINCE: v2.0.7
|
||||
#+STARTUP: inlineimages nofold
|
||||
|
||||
* Table of Contents :TOC_3:noexport:
|
||||
- [[#description][Description]]
|
||||
- [[#maintainers][Maintainers]]
|
||||
- [[#module-flags][Module Flags]]
|
||||
- [[#plugins][Plugins]]
|
||||
- [[#prerequisites][Prerequisites]]
|
||||
- [[#features][Features]]
|
||||
- [[#keybindings][Keybindings]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
|
||||
* Description
|
||||
Adds many tools for [[https://nixos.org/][Nix(OS)]] users in nice package for Doom users.
|
||||
|
||||
+ Syntax highlighting
|
||||
+ Completion through ~company~ / ~helm~
|
||||
+ Nix option lookup
|
||||
+ Formatting (~nixfmt~)
|
||||
|
||||
** Maintainers
|
||||
This module has no dedicated maintainers.
|
||||
|
||||
** Module Flags
|
||||
This module provides no flags.
|
||||
|
||||
** Plugins
|
||||
+ [[https://github.com/NixOS/nix-mode][nix-mode]]
|
||||
+ [[https://github.com/jwiegley/nix-update-el][nix-update]]
|
||||
|
||||
* Prerequisites
|
||||
+ ~nixfmt~ is required to use formatting
|
||||
+ If you have Nix(OS) installed it can be installed through Nix configuration ~environment.systemPackages = with pkgs; [ nixfmt ];~ (recommended)
|
||||
+ Or through nix-env ~nix-env -iA nixpkgs.nixfmt~
|
||||
+ Or through nix-shell ~nix-shell -f https://github.com/serokell/nixfmt/archive/master.tar.gz -i~
|
||||
+ ~:editor format~ ~format-all~ also supports ~nixfmt~ so you can use that also to format Nix code, default binding is ~SPC c f~ in evil.
|
||||
|
||||
* Features
|
||||
** Keybindings
|
||||
| Binding | Description |
|
||||
|-------------------+----------------------|
|
||||
| ~<localleader> b~ | ~nix-build~ |
|
||||
| ~<localleader> f~ | ~nix-update-fetch~ |
|
||||
| ~<localleader> o~ | ~+nix/lookup-option~ |
|
||||
| ~<localleader> p~ | ~nix-format-buffer~ |
|
||||
| ~<localleader> r~ | ~nix-repl-show~ |
|
||||
| ~<localleader> s~ | ~nix-repl-shell~ |
|
||||
| ~<localleader> u~ | ~nix-unpack~ |
|
||||
|
||||
* Configuration
|
||||
|
||||
* Troubleshooting
|
||||
+ There aren't any known problems.
|
|
@ -1,12 +0,0 @@
|
|||
;;; lang/org/autoload/contrib-dragndrop.el -*- lexical-binding: t; -*-
|
||||
;;;###if (featurep! +dragndrop)
|
||||
|
||||
;;;###autoload
|
||||
(defun +org-dragndrop-download-dnd-fn (uri action)
|
||||
"Handle file links and base64 data uris."
|
||||
(if (eq major-mode 'org-mode)
|
||||
(+org/attach-file-and-insert-link uri)
|
||||
(let ((dnd-protocol-alist
|
||||
(rassq-delete-all '+org-dragndrop-download-dnd-fn
|
||||
(copy-alist dnd-protocol-alist))))
|
||||
(dnd-handle-one-url nil action uri))))
|
|
@ -434,20 +434,14 @@ with `org-cycle')."
|
|||
t))
|
||||
|
||||
;;;###autoload
|
||||
(defun +org-unfold-to-2nd-level-or-point-h ()
|
||||
"Alters '#+STARTUP overview' to only expand first-level headings.
|
||||
Expands the first level, but no further. If a different startup option was
|
||||
provided, do that instead."
|
||||
(unless org-agenda-inhibit-startup
|
||||
;; TODO Implement a custom #+STARTUP option?
|
||||
(when (eq org-startup-folded t)
|
||||
(outline-hide-sublevels +org-initial-fold-level))
|
||||
;; If point was left somewhere deeper, unfold to point on startup.
|
||||
(when (outline-invisible-p)
|
||||
(ignore-errors
|
||||
(save-excursion
|
||||
(outline-previous-visible-heading 1)
|
||||
(org-show-subtree))))))
|
||||
(defun +org-make-last-point-visible-h ()
|
||||
"Unfold subtree around point if saveplace places it to a folded region."
|
||||
(and (not org-agenda-inhibit-startup)
|
||||
(outline-invisible-p)
|
||||
(ignore-errors
|
||||
(save-excursion
|
||||
(outline-previous-visible-heading 1)
|
||||
(org-show-subtree)))))
|
||||
|
||||
;;;###autoload
|
||||
(defun +org-remove-occur-highlights-h ()
|
||||
|
|
|
@ -50,9 +50,6 @@ Is relative to `org-directory', unless it is absolute. Is used in Doom's default
|
|||
(defvar +org-capture-projects-file "projects.org"
|
||||
"Default, centralized target for org-capture templates.")
|
||||
|
||||
(defvar +org-initial-fold-level 2
|
||||
"The initial fold level of org files when no #+STARTUP options for it.")
|
||||
|
||||
(defvar +org-habit-graph-padding 2
|
||||
"The padding added to the end of the consistency graph")
|
||||
|
||||
|
@ -322,11 +319,17 @@ I like:
|
|||
(after! org-capture
|
||||
(org-capture-put :kill-buffer t))
|
||||
|
||||
;; Fix #462: when refiling from org-capture, Emacs prompts to kill the
|
||||
;; underlying, modified buffer. This fixes that.
|
||||
(add-hook 'org-after-refile-insert-hook #'save-buffer)
|
||||
|
||||
;; HACK Doom doesn't support `customize'. Best not to advertise it as an
|
||||
;; option in `org-capture's menu.
|
||||
(defadvice! +org--remove-customize-option-a (orig-fn table title &optional prompt specials)
|
||||
:around #'org-mks
|
||||
(funcall orig-fn table title prompt (remove '("C" "Customize org-capture-templates") specials)))
|
||||
(funcall orig-fn table title prompt
|
||||
(remove '("C" "Customize org-capture-templates")
|
||||
specials)))
|
||||
|
||||
(defadvice! +org--capture-expand-variable-file-a (file)
|
||||
"If a variable is used for a file path in `org-capture-template', it is used
|
||||
|
@ -337,13 +340,6 @@ relative to `org-directory', unless it is an absolute path."
|
|||
(expand-file-name (symbol-value file) org-directory)
|
||||
file))
|
||||
|
||||
(defadvice! +org--prevent-save-prompts-when-refiling-a (&rest _)
|
||||
"Fix #462: when refiling from org-capture, Emacs prompts to kill the
|
||||
underlying, modified buffer. This fixes that."
|
||||
:after #'org-refile
|
||||
(when (bound-and-true-p org-capture-is-refiling)
|
||||
(org-save-all-org-buffers)))
|
||||
|
||||
(add-hook! 'org-capture-mode-hook
|
||||
(defun +org-show-target-in-capture-header-h ()
|
||||
(setq header-line-format
|
||||
|
@ -374,7 +370,10 @@ underlying, modified buffer. This fixes that."
|
|||
(unless org-attach-id-dir
|
||||
(setq org-attach-id-dir (expand-file-name ".attach/" org-directory)))
|
||||
(after! projectile
|
||||
(add-to-list 'projectile-globally-ignored-directories org-attach-id-dir))))
|
||||
(add-to-list 'projectile-globally-ignored-directories org-attach-id-dir)))
|
||||
|
||||
;; Add inline image previews for attachment links
|
||||
(org-link-set-parameters "attachment" :image-data-fun #'+org-inline-image-data-fn))
|
||||
|
||||
|
||||
(defun +org-init-custom-links-h ()
|
||||
|
@ -437,24 +436,23 @@ underlying, modified buffer. This fixes that."
|
|||
|
||||
|
||||
(defun +org-init-habit-h ()
|
||||
"TODO"
|
||||
(add-hook! 'org-agenda-mode-hook
|
||||
(defun +org-habit-resize-graph-h ()
|
||||
"Right align and resize the consistency graphs based on
|
||||
`+org-habit-graph-window-ratio'"
|
||||
(require 'org-habit)
|
||||
(let* ((total-days (float (+ org-habit-preceding-days org-habit-following-days)))
|
||||
(preceding-days-ratio (/ org-habit-preceding-days total-days))
|
||||
(graph-width (floor (* (window-width) +org-habit-graph-window-ratio)))
|
||||
(preceding-days (floor (* graph-width preceding-days-ratio)))
|
||||
(following-days (- graph-width preceding-days))
|
||||
(graph-column (- (window-width) (+ preceding-days following-days)))
|
||||
(graph-column-adjusted (if (> graph-column +org-habit-min-width)
|
||||
(- graph-column +org-habit-graph-padding)
|
||||
nil)))
|
||||
(setq-local org-habit-preceding-days preceding-days)
|
||||
(setq-local org-habit-following-days following-days)
|
||||
(setq-local org-habit-graph-column graph-column-adjusted)))))
|
||||
(when (featurep 'org-habit)
|
||||
(let* ((total-days (float (+ org-habit-preceding-days org-habit-following-days)))
|
||||
(preceding-days-ratio (/ org-habit-preceding-days total-days))
|
||||
(graph-width (floor (* (window-width) +org-habit-graph-window-ratio)))
|
||||
(preceding-days (floor (* graph-width preceding-days-ratio)))
|
||||
(following-days (- graph-width preceding-days))
|
||||
(graph-column (- (window-width) (+ preceding-days following-days)))
|
||||
(graph-column-adjusted (if (> graph-column +org-habit-min-width)
|
||||
(- graph-column +org-habit-graph-padding)
|
||||
nil)))
|
||||
(setq-local org-habit-preceding-days preceding-days)
|
||||
(setq-local org-habit-following-days following-days)
|
||||
(setq-local org-habit-graph-column graph-column-adjusted))))))
|
||||
|
||||
|
||||
(defun +org-init-hacks-h ()
|
||||
|
@ -464,6 +462,12 @@ underlying, modified buffer. This fixes that."
|
|||
;; Open directory links in dired
|
||||
(add-to-list 'org-file-apps '(directory . emacs))
|
||||
|
||||
;; 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))
|
||||
|
||||
;; When you create a sparse tree and `org-indent-mode' is enabled, the
|
||||
;; highlighting destroys the invisibility added by `org-indent-mode'.
|
||||
;; Therefore, don't highlight when creating a sparse tree.
|
||||
|
@ -704,12 +708,12 @@ between the two."
|
|||
:localleader
|
||||
"d" #'org-agenda-deadline
|
||||
(:prefix ("c" . "clock")
|
||||
"c" #'org-agenda-clock-in
|
||||
"C" #'org-agenda-clock-out
|
||||
"c" #'org-agenda-clock-cancel
|
||||
"g" #'org-agenda-clock-goto
|
||||
"i" #'org-agenda-clock-in
|
||||
"o" #'org-agenda-clock-out
|
||||
"r" #'org-agenda-clockreport-mode
|
||||
"s" #'org-agenda-show-clocking-issues
|
||||
"x" #'org-agenda-clock-cancel)
|
||||
"s" #'org-agenda-show-clocking-issues)
|
||||
"q" #'org-agenda-set-tags
|
||||
"r" #'org-agenda-refile
|
||||
"s" #'org-agenda-schedule
|
||||
|
@ -968,15 +972,8 @@ compelling reason, so..."
|
|||
))
|
||||
|
||||
;;; Custom org modules
|
||||
(if (featurep! +brain) (load! "contrib/brain"))
|
||||
(if (featurep! +dragndrop) (load! "contrib/dragndrop"))
|
||||
(if (featurep! +ipython) (load! "contrib/ipython"))
|
||||
(if (featurep! +journal) (load! "contrib/journal"))
|
||||
(if (featurep! +jupyter) (load! "contrib/jupyter"))
|
||||
(if (featurep! +pomodoro) (load! "contrib/pomodoro"))
|
||||
(if (featurep! +present) (load! "contrib/present"))
|
||||
(if (featurep! +roam) (load! "contrib/roam"))
|
||||
(if (featurep! +noter) (load! "contrib/noter"))
|
||||
(dolist (flag doom--current-flags)
|
||||
(load! (concat "contrib/" (substring (symbol-name flag) 1)) nil t))
|
||||
|
||||
;; Add our general hooks after the submodules, so that any hooks the
|
||||
;; submodules add run after them, and can overwrite any defaults if necessary.
|
||||
|
@ -988,7 +985,7 @@ compelling reason, so..."
|
|||
#'doom-disable-show-trailing-whitespace-h
|
||||
#'+org-enable-auto-reformat-tables-h
|
||||
#'+org-enable-auto-update-cookies-h
|
||||
#'+org-unfold-to-2nd-level-or-point-h)
|
||||
#'+org-make-last-point-visible-h)
|
||||
|
||||
(add-hook! 'org-load-hook
|
||||
#'+org-init-org-directory-h
|
||||
|
@ -1022,6 +1019,16 @@ compelling reason, so..."
|
|||
:config
|
||||
(setq org-archive-subtree-save-file-p t) ; save target buffer after archiving
|
||||
|
||||
;; Autoload all these commands that org-attach doesn't autoload itself
|
||||
(use-package! org-attach
|
||||
:commands (org-attach-new
|
||||
org-attach-open
|
||||
org-attach-open-in-emacs
|
||||
org-attach-reveal-in-emacs
|
||||
org-attach-url
|
||||
org-attach-set-directory
|
||||
org-attach-sync))
|
||||
|
||||
;; Global ID state means we can have ID links anywhere. This is required for
|
||||
;; `org-brain', however.
|
||||
(setq org-id-track-globally t
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
:init
|
||||
;; HACK We add these manually so that org-download is truly lazy-loaded
|
||||
(pushnew! dnd-protocol-alist
|
||||
'("^\\(?:https?\\|ftp\\|file\\|nfs\\):" . +org-dragndrop-download-dnd-fn)
|
||||
'("^\\(?:https?\\|ftp\\|file\\|nfs\\):" . org-download-dnd)
|
||||
'("^data:" . org-download-dnd-base64))
|
||||
(advice-add #'org-download-enable :override #'ignore)
|
||||
|
||||
|
|
|
@ -2,66 +2,62 @@
|
|||
;;;###if (featurep! +journal)
|
||||
|
||||
(use-package! org-journal
|
||||
:hook (org-mode . +org-journal-mode-maybe)
|
||||
:defer t
|
||||
:init
|
||||
;; HACK org-journal does some file-path magic at load time that creates
|
||||
;; duplicate and hard-coded `auto-mode-alist' entries, so we suppress it
|
||||
;; and use the more generalize regexp (above).
|
||||
(advice-add #'org-journal-update-auto-mode-alist :override #'ignore)
|
||||
;; Not using the .org file extension causes so much needless headache with
|
||||
;; file detection, and for no compelling reason, so we make it the default, so
|
||||
;; `org-journal' doesn't have to do all this silly magic.
|
||||
(setq org-journal-file-format "%Y%m%d.org")
|
||||
(remove-hook 'org-mode-hook #'org-journal-update-auto-mode-alist)
|
||||
|
||||
;; HACK `org-journal-dir' has is surrounded by setter and `auto-mode-alist'
|
||||
;; magic which makes its needlessly difficult to create an "overrideable"
|
||||
;; default for Doom users, so we set this to an empty string (a
|
||||
;; non-string would throw an error) so we can detect changes to it later.
|
||||
(setq org-journal-dir ""
|
||||
;; Not using the .org file extension causes needless headache with file
|
||||
;; detection for no compelling reason, so we make it the default, so
|
||||
;; `org-journal' doesn't have to do all its `auto-mode-alist' magic.
|
||||
(defvar org-journal-file-format "%Y%m%d.org")
|
||||
|
||||
;; HACK `org-journal-dir' is surrounded with setters and `auto-mode-alist'
|
||||
;; magic which makes it difficult to create an better default for Doom
|
||||
;; users. We set this here so we can detect user-changes to it later.
|
||||
(setq org-journal-dir "journal/"
|
||||
org-journal-cache-file (concat doom-cache-dir "org-journal")
|
||||
;; Doom opts for an "open in a popup or here" strategy as a default.
|
||||
;; Open in "other window" is less consistent and harder to predict.
|
||||
;; Open in "other window" is less predictable, and can replace a window
|
||||
;; we wanted to keep visible.
|
||||
org-journal-find-file #'find-file)
|
||||
|
||||
;; HACK `org-journal' does some file-path magic at load time that creates
|
||||
;; duplicate entries in `auto-mode-alist'. We load org-journal in such a
|
||||
;; way that we can generate a final entry after the user could possibly
|
||||
;; customize `org-journal-dir'.
|
||||
(after! org
|
||||
(require 'org-journal)
|
||||
;; Delete duplicate entries in `auto-mode-alist'
|
||||
(rassq-delete-all 'org-journal-mode auto-mode-alist)
|
||||
;; ...and exploit `org-journal-dir''s setter to set up
|
||||
;; `org-journal-file-pattern' and call `org-journal-update-auto-mode-alist'
|
||||
;; for us, to create the one-true-entry in `auto-mode-alist.'
|
||||
(setq! org-journal-dir (expand-file-name org-journal-dir org-directory)))
|
||||
|
||||
:config
|
||||
;; This is necessary if the user decides opens a journal file directly, via
|
||||
;; `find-file' or something, and not through org-journal's commands.
|
||||
(defun +org-journal-mode-maybe ()
|
||||
"Activate `org-journal-mode', maybe."
|
||||
(and (eq major-mode 'org-mode)
|
||||
(stringp buffer-file-name)
|
||||
(stringp org-journal-file-pattern)
|
||||
(string-match-p org-journal-file-pattern buffer-file-name)
|
||||
(let ((org-mode-hook (remq '+org-journal-mode-maybe org-mode-hook)))
|
||||
(org-journal-mode))))
|
||||
|
||||
(when (string-empty-p org-journal-dir)
|
||||
(setq org-journal-dir (expand-file-name "journal/" org-directory)))
|
||||
|
||||
(advice-remove #'org-journal-update-auto-mode-alist #'ignore)
|
||||
(setq! org-journal-dir org-journal-dir)
|
||||
(set-popup-rule! "^\\*Org-journal search" :select t :quit t)
|
||||
|
||||
(map! (:map org-journal-mode-map
|
||||
:n "]f" #'org-journal-open-next-entry
|
||||
:n "[f" #'org-journal-open-previous-entry
|
||||
:n "C-n" #'org-journal-open-next-entry
|
||||
:n "C-p" #'org-journal-open-previous-entry)
|
||||
:n "]f" #'org-journal-open-next-entry
|
||||
:n "[f" #'org-journal-open-previous-entry
|
||||
:n "C-n" #'org-journal-open-next-entry
|
||||
:n "C-p" #'org-journal-open-previous-entry)
|
||||
(:map org-journal-search-mode-map
|
||||
"C-n" #'org-journal-search-next
|
||||
"C-p" #'org-journal-search-previous)
|
||||
"C-n" #'org-journal-search-next
|
||||
"C-p" #'org-journal-search-previous)
|
||||
:localleader
|
||||
(:map org-journal-mode-map
|
||||
"c" #'org-journal-new-entry
|
||||
"d" #'org-journal-new-date-entry
|
||||
"n" #'org-journal-open-next-entry
|
||||
"p" #'org-journal-open-previous-entry
|
||||
(:prefix "s"
|
||||
"s" #'org-journal-search
|
||||
"f" #'org-journal-search-forever
|
||||
"F" #'org-journal-search-future
|
||||
"w" #'org-journal-search-calendar-week
|
||||
"m" #'org-journal-search-calendar-month
|
||||
"y" #'org-journal-search-calendar-year))
|
||||
"c" #'org-journal-new-entry
|
||||
"d" #'org-journal-new-date-entry
|
||||
"n" #'org-journal-open-next-entry
|
||||
"p" #'org-journal-open-previous-entry
|
||||
(:prefix "s"
|
||||
"s" #'org-journal-search
|
||||
"f" #'org-journal-search-forever
|
||||
"F" #'org-journal-search-future
|
||||
"w" #'org-journal-search-calendar-week
|
||||
"m" #'org-journal-search-calendar-month
|
||||
"y" #'org-journal-search-calendar-year))
|
||||
(:map org-journal-search-mode-map
|
||||
"n" #'org-journal-search-next
|
||||
"p" #'org-journal-search-prev)))
|
||||
"n" #'org-journal-search-next
|
||||
"p" #'org-journal-search-prev)))
|
||||
|
|
|
@ -4,3 +4,7 @@
|
|||
(when (featurep! +gnuplot)
|
||||
(unless (executable-find "gnuplot")
|
||||
(warn! "Couldn't find gnuplot. org-plot/gnuplot will not work")))
|
||||
|
||||
(when (featurep! +roam)
|
||||
(unless (executable-find "dot")
|
||||
(warn! "Couldn't find the dot executable (from graphviz). org-roam will not be able to generate graph visuallizations.")))
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
:recipe (:host github
|
||||
:repo "emacs-straight/org-mode"
|
||||
:files ("*.el" "lisp/*.el" "contrib/lisp/*.el"))
|
||||
:pin "e5eda0beeb3b6b0666550091bcc0df066d52c008")
|
||||
:pin "20c13221942183290dc440ca6ba91597f243b9e7")
|
||||
;; ...And prevent other packages from pulling org; org-plus-contrib satisfies
|
||||
;; the dependency already: https://github.com/raxod502/straight.el/issues/352
|
||||
(package! org :recipe (:local-repo nil))
|
||||
|
@ -51,9 +51,9 @@
|
|||
(when (featurep! :tools magit)
|
||||
(package! orgit :pin "e147f055772cc934fe1f1d8619059badeb647c93"))
|
||||
(when (featurep! +brain)
|
||||
(package! org-brain :pin "ae7fe0f628bd093526786ece6917f7a4310e5e4d"))
|
||||
(package! org-brain :pin "ed99f7e38dd687800fb898f8934a0da0541ebcd9"))
|
||||
(when (featurep! +dragndrop)
|
||||
(package! org-download :pin "48d3952ad8ebc5ef5a6a77b8c6a4a0da61653036"))
|
||||
(package! org-download :pin "d248fcb8f2592a40507682e91eed9a31ead4e4a6"))
|
||||
(when (featurep! +gnuplot)
|
||||
(package! gnuplot :pin "f0001c30010b2899e36d7d89046322467e923088")
|
||||
(package! gnuplot-mode :pin "601f6392986f0cba332c87678d31ae0d0a496ce7"))
|
||||
|
@ -74,9 +74,9 @@
|
|||
(package! org-tree-slide :pin "7bf09a02bd2d8f1ccfcb5209bfb18fbe02d1f44e")
|
||||
(package! org-re-reveal :pin "61549f4c00284a30e34caa3d76001b233ea5d2ad"))
|
||||
(when (featurep! +roam)
|
||||
(package! org-roam :pin "e698ed7f5378106da8a8fec4537658392157657c")
|
||||
(package! org-roam :pin "ad5fca5440e5c8a6b8078013684df43b3e43d773")
|
||||
(when (featurep! :completion company)
|
||||
(package! company-org-roam :pin "0913d86f167164e18831206e611f44bb8e7297e3")))
|
||||
(package! company-org-roam :pin "3da3821d1736e0d05a042bd944b74ea1da4a021b")))
|
||||
|
||||
;;; Babel
|
||||
(package! ob-async :pin "80a30b96a007d419ece12c976a81804ede340311")
|
||||
|
|
|
@ -79,14 +79,19 @@ This module has no direct prerequisites. Here are some of its soft dependencies.
|
|||
|
||||
** Language Server Protocol Support
|
||||
This module must be enabled with the =+lsp= flag, and the =:tools lsp= module
|
||||
must be enabled. LSP will try mspyls, then pyls; whichever is available.
|
||||
must be enabled. LSP will try pyls then mspyls; the first that is available.
|
||||
|
||||
mypyls can be installed with ~M-x lsp-install-server~ after opening a python
|
||||
buffer.
|
||||
|
||||
Alternatively, use the [[https://pypi.org/project/python-language-server/][Python Language Server]] instead. ~pip install
|
||||
*To use [[https://pypi.org/project/python-language-server/][Python Language Server]] (pyls)* install it with ~pip install
|
||||
'python-language-server[all]'~
|
||||
|
||||
*To use mspyls*, install it with ~M-x lsp-install-server~ and add this to your
|
||||
private config.el:
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
(after! lsp-python-ms
|
||||
(set-lsp-priority! 'mspyls 1))
|
||||
#+END_SRC
|
||||
|
||||
* Features
|
||||
This module supports LSP. It requires installation of [[https://pypi.org/project/python-language-server/][Python Language
|
||||
Server]] or [[https://github.com/Microsoft/python-language-server][Microsoft Language Server]], see [[Language Server Protocol Support][LSP Support]].
|
||||
|
|
|
@ -50,6 +50,11 @@
|
|||
(set-lookup-handlers! 'ruby-mode
|
||||
:definition #'robe-jump
|
||||
:documentation #'robe-doc)
|
||||
(when (boundp 'read-process-output-max)
|
||||
;; Robe can over saturate IPC, making interacting with it slow/clobbering
|
||||
;; the GC, so increase the amount of data Emacs reads from it at a time.
|
||||
(setq-hook! '(robe-mode-hook inf-ruby-mode-hook)
|
||||
read-process-output-max (* 1024 1024)))
|
||||
(when (featurep! :editor evil)
|
||||
(add-hook 'robe-mode-hook #'evil-normalize-keymaps))
|
||||
(map! :localleader
|
||||
|
|
|
@ -3,34 +3,34 @@
|
|||
|
||||
;; Major modes
|
||||
(package! ruby-mode :built-in t)
|
||||
(package! yard-mode :pin "ba74a47463")
|
||||
(package! yard-mode :pin "ba74a47463b0320ae152bd42a7dd7aeecd7b5748")
|
||||
|
||||
;; REPL
|
||||
(package! inf-ruby :pin "41e5ed3a88")
|
||||
(package! inf-ruby :pin "41e5ed3a886fca56990486f1987bb3bae0dbd54b")
|
||||
(when (featurep! :completion company)
|
||||
(package! company-inf-ruby :pin "fe3e4863bc"))
|
||||
(package! company-inf-ruby :pin "fe3e4863bc971fbb81edad447efad5795ead1b17"))
|
||||
|
||||
;; Programming environment
|
||||
(package! rubocop :pin "03bf15558a")
|
||||
(package! robe :pin "68503b32bb")
|
||||
(package! rubocop :pin "03bf15558a6eb65e4f74000cab29412efd46660e")
|
||||
(package! robe :pin "68503b32bb3a005787ecb7a7fdeb3bb4a2317e2b")
|
||||
|
||||
;; Project tools
|
||||
(package! bundler :pin "43efb6be4e")
|
||||
(package! rake :pin "9c204334b0")
|
||||
(package! bundler :pin "43efb6be4ed118b06d787ce7fbcffd68a31732a7")
|
||||
(package! rake :pin "9c204334b03b4e899fadae6e59c20cf105404128")
|
||||
|
||||
;; Environment management
|
||||
(when (featurep! +rbenv)
|
||||
(package! rbenv :pin "2ea1a5bdc1"))
|
||||
(package! rbenv :pin "2ea1a5bdc1266caef1dd77700f2c8f42429b03f1"))
|
||||
(when (featurep! +rvm)
|
||||
(package! rvm :pin "134497bc46"))
|
||||
(package! rvm :pin "134497bc460990c71ab8fa75431156e62c17da2d"))
|
||||
(when (featurep! +chruby)
|
||||
(package! chruby :pin "42bc6d521f"))
|
||||
(package! chruby :pin "42bc6d521f832eca8e2ba210f30d03ad5529788f"))
|
||||
|
||||
;; Testing frameworks
|
||||
(package! rspec-mode :pin "9a2a9d2935")
|
||||
(package! minitest :pin "97d7d1760b")
|
||||
(package! rspec-mode :pin "9a2a9d2935ae17b8570485bdea7c347533b464f6")
|
||||
(package! minitest :pin "ddd152c990a528ad09a696bfad23afa4330ea4d7")
|
||||
|
||||
;; Rails
|
||||
(when (featurep! +rails)
|
||||
(package! projectile-rails :pin "0398d940a2")
|
||||
(package! inflections :pin "e4f1372cf2"))
|
||||
(package! projectile-rails :pin "11980b2bcb99208888856a9b8666ff329b6f0142")
|
||||
(package! inflections :pin "e4f1372cf22e811faca52fc86bdd5d817498a4d8"))
|
||||
|
|
|
@ -21,13 +21,15 @@
|
|||
t))
|
||||
|
||||
(defun +eshell--bury-buffer (&optional dedicated-p)
|
||||
(unless (switch-to-prev-buffer nil 'bury)
|
||||
(switch-to-buffer (doom-fallback-buffer)))
|
||||
(when (eq major-mode 'eshell-mode)
|
||||
(switch-to-buffer (doom-fallback-buffer)))
|
||||
(when +eshell-enable-new-shell-on-split
|
||||
(when-let (win (get-buffer-window (+eshell/here)))
|
||||
(set-window-dedicated-p win dedicated-p))))
|
||||
(let ((directory default-directory))
|
||||
(unless (switch-to-prev-buffer nil 'bury)
|
||||
(switch-to-buffer (doom-fallback-buffer)))
|
||||
(when (eq major-mode 'eshell-mode)
|
||||
(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)))
|
||||
(set-window-dedicated-p win dedicated-p))))))
|
||||
|
||||
(defun +eshell--setup-window (window &optional flag)
|
||||
(when (window-live-p window)
|
||||
|
|
|
@ -187,9 +187,8 @@ You should use `set-eshell-alias!' to change this.")
|
|||
;; installed for bash completion to work. How frustrating. This way we
|
||||
;; can at least get bash completion whether or not fish is present.
|
||||
(defadvice! +eshell--fallback-to-bash-a (&rest _)
|
||||
:before-while #'fish-completion--list-completions-with-desc
|
||||
(executable-find "fish")))
|
||||
|
||||
:before-until #'fish-completion--list-completions-with-desc
|
||||
(unless (executable-find "fish") "")))
|
||||
|
||||
;; Activate eshell-did-you-mean using its setup function (lazily)
|
||||
(use-package! eshell-did-you-mean
|
||||
|
@ -200,4 +199,4 @@ You should use `set-eshell-alias!' to change this.")
|
|||
;; work on first invocation, so we invoke it once manually by setting
|
||||
;; the last command and then calling the output filter.
|
||||
(setq eshell-last-command-name "catt")
|
||||
(eshell-did-you-mean-output-filter "catt: command not found"))
|
||||
(eshell-did-you-mean-output-filter "catt: command not found"))
|
|
@ -33,7 +33,8 @@ If prefix ARG is non-nil, recreate vterm buffer in the current project's root."
|
|||
(let ((buffer (get-buffer-create buffer-name)))
|
||||
(with-current-buffer buffer
|
||||
(unless (eq major-mode 'vterm-mode)
|
||||
(vterm-mode)))
|
||||
(vterm-mode))
|
||||
(+vterm--change-directory-if-remote))
|
||||
(pop-to-buffer buffer)))))
|
||||
|
||||
;;;###autoload
|
||||
|
@ -55,7 +56,25 @@ If prefix ARG is non-nil, cd into `default-directory' instead of project root."
|
|||
project-root))
|
||||
display-buffer-alist)
|
||||
(setenv "PROOT" project-root)
|
||||
(vterm)))
|
||||
(vterm)
|
||||
(+vterm--change-directory-if-remote)))
|
||||
|
||||
(defun +vterm--change-directory-if-remote ()
|
||||
"When `default-directory` is remote, use the corresponding
|
||||
method to prepare vterm at the corresponding remote directory."
|
||||
(when (and (featurep 'tramp)
|
||||
(tramp-tramp-file-p default-directory))
|
||||
(message "default-directory is %s" default-directory)
|
||||
(with-parsed-tramp-file-name default-directory path
|
||||
(let ((method (cadr (assoc `tramp-login-program
|
||||
(assoc path-method tramp-methods)))))
|
||||
(vterm-send-string
|
||||
(concat method " "
|
||||
(when path-user (concat path-user "@")) path-host))
|
||||
(vterm-send-return)
|
||||
(vterm-send-string
|
||||
(concat "cd " path-localname))
|
||||
(vterm-send-return)))))
|
||||
|
||||
|
||||
(defvar +vterm--insert-point nil)
|
||||
|
|
|
@ -3,4 +3,4 @@
|
|||
|
||||
(package! vterm
|
||||
:built-in 'prefer
|
||||
:pin "e63bd65eece7c5de3a534b7e2fdbe58256ec2da0")
|
||||
:pin "422ffe029b92c47e4acf0e2ed06cbc83636d7e44")
|
||||
|
|
|
@ -6,5 +6,5 @@
|
|||
(package! realgud-trepan-ni :pin "6e9cac5e8097018aadf41c88de541168036cc227")))
|
||||
|
||||
(when (featurep! +lsp)
|
||||
(package! dap-mode :pin "04d7e967f21a0ab1e2223e528baf55fe5b663882")
|
||||
(package! dap-mode :pin "cc2eb2fc1b2958ef01dad8c004d2f3bc4dc38bc3")
|
||||
(package! posframe :pin "093b29a53cbeda6d637ccc9ef4dfc47123e79b9e"))
|
||||
|
|
|
@ -40,6 +40,7 @@ or synonyms.
|
|||
+ ~+dictionary~ Enable word definition and thesaurus lookup functionality.
|
||||
+ ~+offline~ Install and prefer offline dictionary/thesaurus.
|
||||
+ ~+docsets~ Enable integration with Dash.app docsets.
|
||||
+ ~+xwidget~ Enable integration with [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Embedded-WebKit-Widgets.html][Embedded Webkit Widgets]].
|
||||
|
||||
** Plugins
|
||||
+ [[https://github.com/jacktasia/dumb-jump][dumb-jump]]
|
||||
|
@ -81,7 +82,7 @@ export PATH="/usr/local/opt/sqlite/bin:$PATH"
|
|||
** Arch Linux
|
||||
#+BEGIN_SRC sh
|
||||
sudo pacman -S sqlite ripgrep
|
||||
sudo yay -S wordnet-cli
|
||||
yay -S wordnet-cli
|
||||
#+END_SRC
|
||||
|
||||
** NixOS
|
||||
|
|
|
@ -96,6 +96,8 @@ Used by `+lookup/dictionary-definition' and `+lookup/synonyms'.
|
|||
For `+lookup/dictionary-definition', this is ignored on Mac, where Emacs users
|
||||
Dictionary.app behind the scenes to get definitions.")
|
||||
|
||||
(defvar +lookup--dash-docs-xwidget-webkit-last-session-buffer nil)
|
||||
|
||||
|
||||
;;
|
||||
;;; dumb-jump
|
||||
|
@ -178,6 +180,21 @@ See https://github.com/magit/ghub/issues/81"
|
|||
(let ((gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3"))
|
||||
(funcall orig-fn url)))
|
||||
|
||||
;; Dash docset + Xwidget integration
|
||||
(when (featurep! +xwidget)
|
||||
(defun +lookup-dash-docs-xwidget-webkit-browse-url-fn (url &optional new-session)
|
||||
(if (not (display-graphic-p))
|
||||
(eww url new-session)
|
||||
(setq xwidget-webkit-last-session-buffer +lookup--dash-docs-xwidget-webkit-last-session-buffer)
|
||||
(save-window-excursion
|
||||
(xwidget-webkit-browse-url url new-session))
|
||||
(with-popup-rules!
|
||||
'((set-popup-rule! "^\\*xwidget" :vslot -11 :size 0.35 :select nil))
|
||||
(pop-to-buffer xwidget-webkit-last-session-buffer))
|
||||
(setq +lookup--dash-docs-xwidget-webkit-last-session-buffer xwidget-webkit-last-session-buffer
|
||||
xwidget-webkit-last-session-buffer nil)))
|
||||
(setq dash-docs-browser-func #'+lookup-dash-docs-xwidget-webkit-browse-url-fn))
|
||||
|
||||
(cond ((featurep! :completion helm)
|
||||
(require 'helm-dash nil t))
|
||||
((featurep! :completion ivy)
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"Change the PRIORITY of lsp CLIENT."
|
||||
(require 'lsp-mode)
|
||||
(if-let (client (gethash client lsp-clients))
|
||||
(setf (lsp--client-priority (gethash server lsp-clients))
|
||||
(setf (lsp--client-priority client)
|
||||
priority)
|
||||
(error "No LSP client named %S" client)))
|
||||
|
||||
|
|
|
@ -91,6 +91,10 @@ This also logs the resolved project root, if found, so we know where we are."
|
|||
;; development builds of Emacs 27 and above
|
||||
(or (not (boundp 'read-process-output-max))
|
||||
(setq-local read-process-output-max (* 1024 1024)))
|
||||
;; REVIEW LSP causes a lot of allocations, with or without Emacs 27+'s
|
||||
;; native JSON library, so we up the GC threshold to stave off
|
||||
;; GC-induced slowdowns/freezes.
|
||||
(setq-local gcmh-high-cons-threshold (* 2 gcmh-high-cons-threshold))
|
||||
(prog1 (lsp-mode 1)
|
||||
(setq-local lsp-buffer-uri (lsp--buffer-uri))
|
||||
;; Announce what project root we're using, for diagnostic purposes
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; tools/lsp/packages.el
|
||||
|
||||
(package! lsp-mode :pin "941e6062a5b407675e13ba471e9878f4a2dbd10e")
|
||||
(package! lsp-ui :pin "43f71e3837b07f377444ad631b12f8198c495aa7")
|
||||
(package! lsp-mode :pin "11750e7b118858b38417a538c1c6eff8759c12f3")
|
||||
(package! lsp-ui :pin "1288be94b4c37f89e80a03b1cff1b81aba9560bb")
|
||||
(when (featurep! :completion ivy)
|
||||
(package! lsp-ivy :pin "81e81ced99829358674c5a6bbe2c3e15cecd4ed8"))
|
||||
(when (featurep! :completion helm)
|
||||
|
|
101
modules/tools/pdf/README.org
Normal file
101
modules/tools/pdf/README.org
Normal file
|
@ -0,0 +1,101 @@
|
|||
#+TITLE: tools/pdf
|
||||
#+DATE: February 6, 2018
|
||||
#+SINCE: v2.0
|
||||
#+STARTUP: inlineimages nofold
|
||||
|
||||
* Table of Contents :TOC_3:noexport:
|
||||
- [[#description][Description]]
|
||||
- [[#maintainers][Maintainers]]
|
||||
- [[#module-flags][Module Flags]]
|
||||
- [[#plugins][Plugins]]
|
||||
- [[#hacks][Hacks]]
|
||||
- [[#prerequisites][Prerequisites]]
|
||||
- [[#building-epdfinfo-on-windows][Building =epdfinfo= on Windows]]
|
||||
- [[#features][Features]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
|
||||
* Description
|
||||
This module improves Emacs' support for reading PDF files.
|
||||
|
||||
** Maintainers
|
||||
This module has no dedicated maintainers.
|
||||
|
||||
** Module Flags
|
||||
This module provides no flags.
|
||||
|
||||
** Plugins
|
||||
+ [[https://github.com/politza/pdf-tools][pdf-tools]]
|
||||
|
||||
** Hacks
|
||||
+ Added basic support for HiDPI or Retina displays.
|
||||
|
||||
* Prerequisites
|
||||
This module will build the =epdfinfo= program when you first open a pdf file.
|
||||
Linux and macOS don't need to do anything special. Windows users, however, must
|
||||
build it themselves.
|
||||
|
||||
** Building =epdfinfo= on Windows
|
||||
1. [[https://www.msys2.org/][Install MSYS2]] and update the package database and core packages using the
|
||||
instructions provided.
|
||||
|
||||
2. Update and install dependencies, skipping any you already have
|
||||
|
||||
#+BEGIN_SRC sh
|
||||
pacman -Syu
|
||||
pacman -S base-devel
|
||||
pacman -S mingw-w64-x86_64-toolchain
|
||||
pacman -S mingw-w64-x86_64-zlib
|
||||
pacman -S mingw-w64-x86_64-libpng
|
||||
pacman -S mingw-w64-x86_64-poppler
|
||||
pacman -S mingw-w64-x86_64-imagemagick
|
||||
#+END_SRC
|
||||
|
||||
3. Install PDF tools in Emacs, but do not try to compile the server. Instead, get a separate copy of the source somewhere else.
|
||||
|
||||
#+BEGIN_SRC sh
|
||||
git clone https://github.com/politza/pdf-tools
|
||||
#+END_SRC
|
||||
|
||||
4. Open mingw64 shell (Note: You must use mingw64.exe and not msys2.exe)
|
||||
|
||||
5. Compile pdf-tools:
|
||||
#+BEGIN_SRC sh
|
||||
# Cask requires python2 (important: not 3!)
|
||||
pacman -S python2
|
||||
|
||||
# Make the mingw-shell aware of your python installation. Adjust the path if
|
||||
# Emacs is installed elsewhere!
|
||||
export PATH="/c/Program Files (x86)/Emacs/bin/:$PATH"
|
||||
|
||||
# Cask needs to know where git.exe is; change this path if git is installed
|
||||
# elsewhere!
|
||||
export PATH="/c/Program Files/Git/bin:$PATH"
|
||||
|
||||
# Install cask. Certificate errors can be ignored with (unsafe) -k option.
|
||||
curl -fsSL https://raw.githubusercontent.com/cask/cask/master/go | python
|
||||
|
||||
# Make sure the build process can see cask
|
||||
export PATH="$HOME/.cask/bin:$PATH"
|
||||
|
||||
cd /path/to/pdf-tools
|
||||
make -s
|
||||
#+END_SRC
|
||||
|
||||
6. This should produce a file =server/epdfinfo.exe=. Copy this file into the
|
||||
=~/.emacs.d/.local/straight/build/pdf-tools/=.
|
||||
|
||||
7. Start Emacs.
|
||||
|
||||
8. Open a pdf file (or run ~M-x pdf-tools-install~)
|
||||
|
||||
9. Test it out: ~M-x pdf-info-check-epdfinfo~
|
||||
|
||||
* TODO Features
|
||||
# An in-depth list of features, how to use them, and their dependencies.
|
||||
|
||||
* TODO Configuration
|
||||
# How to configure this module, including common problems and how to address them.
|
||||
|
||||
* TODO Troubleshooting
|
||||
# Common issues and their solution, or places to look for help.
|
|
@ -25,6 +25,18 @@
|
|||
(setq pdf-view-use-scaling t
|
||||
pdf-view-use-imagemagick nil)
|
||||
|
||||
;; Persist current page for PDF files viewed in Emacs
|
||||
(add-hook! 'pdf-view-change-page-hook
|
||||
(defun +pdf-remember-page-number-h ()
|
||||
(when buffer-file-name
|
||||
(doom-store-put buffer-file-name (pdf-view-current-page) nil "pdf-view"))))
|
||||
(add-hook! 'pdf-view-mode-hook
|
||||
(defun +pdf-restore-page-number-h ()
|
||||
(when-let (page (doom-store-get buffer-file-name "pdf-view"))
|
||||
(or (and (< page 1)
|
||||
(> page (pdf-cache-number-of-pages)))
|
||||
(pdf-view-goto-page page)))))
|
||||
|
||||
;; Add retina support for MacOS users
|
||||
(when IS-MAC
|
||||
(advice-add #'pdf-util-frame-scale-factor :around #'+pdf--util-frame-scale-factor-a)
|
||||
|
|
54
modules/tools/rgb/README.org
Normal file
54
modules/tools/rgb/README.org
Normal file
|
@ -0,0 +1,54 @@
|
|||
#+TITLE: tools/rgb
|
||||
#+DATE: May 6, 2020
|
||||
#+SINCE: 3.0.0
|
||||
#+STARTUP: inlineimages nofold
|
||||
|
||||
* Table of Contents :TOC_3:noexport:
|
||||
- [[#description][Description]]
|
||||
- [[#maintainers][Maintainers]]
|
||||
- [[#module-flags][Module Flags]]
|
||||
- [[#plugins][Plugins]]
|
||||
- [[#prerequisites][Prerequisites]]
|
||||
- [[#features][Features]]
|
||||
- [[#configuration][Configuration]]
|
||||
|
||||
* Description
|
||||
Highlights color hex values and names with the color itself, and provides tools
|
||||
to easily modify color values or formats.
|
||||
|
||||
** Maintainers
|
||||
This module has no dedicated maintainers.
|
||||
|
||||
** Module Flags
|
||||
This module provides no flags.
|
||||
|
||||
** Plugins
|
||||
# A list of linked plugins
|
||||
+ [[https://elpa.gnu.org/packages/rainbow-mode.html][rainbow-mode]]
|
||||
+ [[https://github.com/alphapapa/kurecolor][kurecolor]]
|
||||
|
||||
* Prerequisites
|
||||
This module has no prerequisites.
|
||||
|
||||
* Features
|
||||
# An in-depth list of features, how to use them, and their dependencies.
|
||||
=rainbow-mode= provides automatic highlighting to hex color codes, and in
|
||||
relevant modes, color names (e.g. html color names in =css-mode= or LaTeX color
|
||||
names in =latex-mode=)
|
||||
|
||||
=kurecolor= provides commands to easily change the brightness, saturation, and
|
||||
hue of hex colors (and a useful hydra for this, if =:ui hydra= is enabled), as
|
||||
well as conversion between hex and css colors
|
||||
|
||||
* Configuration
|
||||
# How to configure this module, including common problems and how to address them.
|
||||
=hl-line-mode= overrides the color highlighting of =rainbow-mode=, which limits
|
||||
the use of that plugin and on site color changes using =kurecolor=. To
|
||||
automatically disable it only when =rainbow-mode= is active, you can add the
|
||||
following hook:
|
||||
|
||||
#+BEGIN_SRC elisp
|
||||
;; ~/.doom.d/config.el
|
||||
(add-hook! 'rainbow-mode-hook
|
||||
(hl-line-mode (if rainbow-mode -1 +1)))
|
||||
#+END_SRC
|
64
modules/tools/upload/README.org
Normal file
64
modules/tools/upload/README.org
Normal file
|
@ -0,0 +1,64 @@
|
|||
#+TITLE: tools/upload
|
||||
#+DATE: Feb 19, 2020
|
||||
#+SINCE: 2.0.9
|
||||
#+STARTUP: inlineimages nofold
|
||||
|
||||
* Table of Contents :TOC_3:noexport:
|
||||
- [[#description][Description]]
|
||||
- [[#maintainers][Maintainers]]
|
||||
- [[#module-flags][Module Flags]]
|
||||
- [[#plugins][Plugins]]
|
||||
- [[#prerequisites][Prerequisites]]
|
||||
- [[#features][Features]]
|
||||
- [[#configuration][Configuration]]
|
||||
- [[#troubleshooting][Troubleshooting]]
|
||||
- [[#root-local-and-root-remote-must-match][~root-local~ and ~root-remote~ must match]]
|
||||
|
||||
* Description
|
||||
Uses ~ssh-deploy~ to map a local folder to a remote one.
|
||||
|
||||
From the [[https://github.com/cjohansson/emacs-ssh-deploy/blob/master/README.md][ssh-deploy README]]:
|
||||
|
||||
#+BEGIN_QUOTE
|
||||
The ssh-deploy plug-in for Emacs makes it possible to effortlessly deploy local files and directories to remote hosts via Tramp (including but not limited to SSH, SFTP, FTP). It tries to provide functions that can be easily used by custom scripts.
|
||||
|
||||
The idea for this plug-in was to mimic the behavior of PhpStorm deployment functionality.
|
||||
#+END_QUOTE
|
||||
|
||||
** Maintainers
|
||||
This module has no dedicated maintainers.
|
||||
|
||||
** Module Flags
|
||||
This module provides no flags.
|
||||
|
||||
** Plugins
|
||||
+ [[https://github.com/cjohansson/emacs-ssh-deploy][ssh-deploy]]
|
||||
|
||||
* Prerequisites
|
||||
This module has no prerequisites.
|
||||
|
||||
* Features
|
||||
Uses ~ssh-deploy~ to map a local folder to a remote one. Set
|
||||
~ssh-deploy-root-remote~ and ~ssh-deploy-root-local~ in a .dir-locals.el file
|
||||
to establish this mapping.
|
||||
|
||||
Example:
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
((nil . ((ssh-deploy-root-local . "/local/path/to/project")
|
||||
(ssh-deploy-root-remote . "/ssh:user@server:/remote/project/")
|
||||
(ssh-deploy-on-explicity-save . t))))
|
||||
#+END_SRC
|
||||
|
||||
Note: ~ssh-deploy-root-local~ is optional, and will resort to
|
||||
~doom-project-root~ if unspecified.
|
||||
|
||||
* TODO Configuration
|
||||
Check out [[https://github.com/cjohansson/emacs-ssh-deploy#deployment-configuration-examples][Deployment configuration examples]] for some ideas of what's possible.
|
||||
|
||||
* Troubleshooting
|
||||
** ~root-local~ and ~root-remote~ must match
|
||||
The final directory names much match
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
((nil . ((ssh-deploy-root-local . "/local/path/to/example-project")
|
||||
(ssh-deploy-root-remote . "/ssh:user@server:/remote/example-project/")
|
||||
#+END_SRC
|
|
@ -1,5 +1,5 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; ui/doom/packages.el
|
||||
|
||||
(package! doom-themes :pin "254d476dd6790eaa6b563c5a4da286321ff75d38")
|
||||
(package! doom-themes :pin "34f181c290d2c9fb9628e4ec85c16e633931ede1")
|
||||
(package! solaire-mode :pin "adc8c0c60d914f6395eba0bee78feedda128b30b")
|
||||
|
|
|
@ -281,6 +281,13 @@ Ugh, such an ugly hack."
|
|||
(apply orig-fn args))))
|
||||
|
||||
|
||||
;;;###package org-journal
|
||||
(defadvice! +popup--use-popup-window-a (orig-fn &rest args)
|
||||
:around #'org-journal-search-by-string
|
||||
(letf! ((#'switch-to-buffer #'pop-to-buffer))
|
||||
(apply orig-fn args)))
|
||||
|
||||
|
||||
;;;###package persp-mode
|
||||
(defadvice! +popup--persp-mode-restore-popups-a (&rest _)
|
||||
"Restore popup windows when loading a perspective from file."
|
||||
|
|
|
@ -86,7 +86,7 @@ emacs, this is implemented in two different ways :
|
|||
automatically depending on the capabilities of the font, and no font-specific
|
||||
configuration is necessary.
|
||||
|
||||
Emacs-mac port implements the /composition-function-table/ method in its code,
|
||||
Emacs-mac port implements the /composition-function-table/ method in [[https://bitbucket.org/mituharu/emacs-mac/src/26c8fd9920db9d34ae8f78bceaec714230824dac/lisp/term/mac-win.el?at=master#lines-345:805][its code]],
|
||||
nothing is necessary on Doom side; otherwise, Doom implements the
|
||||
/composition-function-table/ for emacs 28+ built with Harfbuzz support, and the
|
||||
/prettify-symbols-mode/ method otherwise.
|
||||
|
|
|
@ -51,33 +51,34 @@ besides what is listed.")
|
|||
|
||||
;;; Automatic font-specific ligatures
|
||||
(defvar +prog-ligatures-alist
|
||||
(eval-when-compile
|
||||
`((?! . ,(regexp-opt '("!!" "!=" "!==")))
|
||||
(?# . ,(regexp-opt '("##" "###" "####" "#(" "#:" "#=" "#?" "#[" "#_" "#_(" "#{")))
|
||||
(?$ . ,(regexp-opt '("$>" "$>>")))
|
||||
(?% . ,(regexp-opt '("%%" "%%%")))
|
||||
(?& . ,(regexp-opt '("&&" "&&&")))
|
||||
(?* . ,(regexp-opt '("*" "**" "***" "**/" "*/" "*>")))
|
||||
(?+ . ,(regexp-opt '("+" "++" "+++" "+>")))
|
||||
(?- . ,(regexp-opt '("--" "---" "-->" "-<" "-<<" "->" "->>" "-}" "-~")))
|
||||
(?. . ,(regexp-opt '(".-" ".." "..." "..<" ".=")))
|
||||
(?/ . ,(regexp-opt '("/*" "/**" "//" "///" "/=" "/==" "/>")))
|
||||
(?: . ,(regexp-opt '(":" "::" ":::" ":=" ":<" ":=" ":>")))
|
||||
(?0 . "0\\(?:\\(x[a-fA-F0-9]\\).?\\)") ; Tries to match the x in 0xDEADBEEF
|
||||
;; (?x . ,(regexp-opt '("x"))) ; Also tries to match the x in 0xDEADBEEF
|
||||
(?\; . ,(regexp-opt '(";;")))
|
||||
(?< . ,(regexp-opt '("<!--" "<$" "<$>" "<*" "<*>" "<+" "<+>" "<-" "<--" "<->" "</" "</>" "<<" "<<-" "<<<" "<<=" "<=" "<=" "<=<" "<==" "<=>" "<>" "<|" "<|>" "<~" "<~~")))
|
||||
(?= . ,(regexp-opt '("=/=" "=:=" "=<<" "==" "===" "==>" "=>" "=>>")))
|
||||
(?> . ,(regexp-opt '(">-" ">->" ">:" ">=" ">=>" ">>" ">>-" ">>=" ">>>")))
|
||||
(?? . ,(regexp-opt '("??" "?." "?:" "?=")))
|
||||
(?\[ . ,(regexp-opt '("[]" "[|]" "[|")))
|
||||
(?\\ . ,(regexp-opt '("\\\\" "\\\\\\" "\\\\n")))
|
||||
(?^ . ,(regexp-opt '("^=" "^==")))
|
||||
(?w . ,(regexp-opt '("www" "wwww")))
|
||||
(?{ . ,(regexp-opt '("{-" "{|" "{||" "{|}" "{||}")))
|
||||
(?| . ,(regexp-opt '("|=" "|>" "||" "||=" "|->" "|=>" "|]" "|}")))
|
||||
(?_ . ,(regexp-opt '("_|_" "__")))
|
||||
(?~ . ,(regexp-opt '("~-" "~=" "~>" "~@" "~~" "~~>")))))
|
||||
'((?! . "\\(?:!\\(?:==\\|[!=]\\)\\)") ; (regexp-opt '("!!" "!=" "!=="))
|
||||
(?# . "\\(?:#\\(?:###?\\|_(\\|[#(:=?[_{]\\)\\)") ; (regexp-opt '("##" "###" "####" "#(" "#:" "#=" "#?" "#[" "#_" "#_(" "#{"))
|
||||
(?$ . "\\(?:\\$>>?\\)") ; (regexp-opt '("$>" "$>>"))
|
||||
(?% . "\\(?:%%%?\\)") ; (regexp-opt '("%%" "%%%"))
|
||||
(?& . "\\(?:&&&?\\)") ; (regexp-opt '("&&" "&&&"))
|
||||
(?* . "\\(?:\\*\\(?:\\*[*/]\\|[)*/>]\\)?\\)") ; (regexp-opt '("*" "**" "***" "**/" "*/" "*>" "*)"))
|
||||
(?+ . "\\(?:\\+\\(?:\\+\\+\\|[+:>]\\)?\\)") ; (regexp-opt '("+" "++" "+++" "+>" "+:"))
|
||||
(?- . "\\(?:-\\(?:-\\(?:->\\|[>-]\\)\\|<[<-]\\|>[>-]\\|[:<>|}~-]\\)\\)") ; (regexp-opt '("--" "---" "-->" "--->" "->-" "-<" "-<-" "-<<" "->" "->>" "-}" "-~" "-:" "-|"))
|
||||
(?. . "\\(?:\\.\\(?:\\.[.<]\\|[.=>-]\\)\\)") ; (regexp-opt '(".-" ".." "..." "..<" ".=" ".>"))
|
||||
(?/ . "\\(?:/\\(?:\\*\\*\\|//\\|==\\|[*/=>]\\)\\)") ; (regexp-opt '("/*" "/**" "//" "///" "/=" "/==" "/>"))
|
||||
(?: . "\\(?::\\(?:::\\|[+:<=>]\\)?\\)") ; (regexp-opt '(":" "::" ":::" ":=" ":<" ":=" ":>" ":+"))
|
||||
(?\; . ";;") ; (regexp-opt '(";;"))
|
||||
(?0 . "0\\(?:\\(x[a-fA-F0-9]\\).?\\)") ; Tries to match the x in 0xDEADBEEF
|
||||
;; (?x . "x") ; Also tries to match the x in 0xDEADBEEF
|
||||
;; (regexp-opt '("<!--" "<$" "<$>" "<*" "<*>" "<**>" "<+" "<+>" "<-" "<--" "<---" "<->" "<-->" "<--->" "</" "</>" "<<" "<<-" "<<<" "<<=" "<=" "<=<" "<==" "<=>" "<===>" "<>" "<|" "<|>" "<~" "<~~" "<." "<.>" "<..>"))
|
||||
(?< . "\\(?:<\\(?:!--\\|\\$>\\|\\*\\(?:\\*?>\\)\\|\\+>\\|-\\(?:-\\(?:->\\|[>-]\\)\\|[>-]\\)\\|\\.\\(?:\\.?>\\)\\|/>\\|<[<=-]\\|=\\(?:==>\\|[<=>]\\)\\||>\\|~~\\|[$*+./<=>|~-]\\)\\)")
|
||||
(?= . "\\(?:=\\(?:/=\\|:=\\|<<\\|=[=>]\\|>>\\|[=>]\\)\\)") ; (regexp-opt '("=/=" "=:=" "=<<" "==" "===" "==>" "=>" "=>>"))
|
||||
(?> . "\\(?:>\\(?:->\\|=>\\|>[=>-]\\|[:=>-]\\)\\)") ; (regexp-opt '(">-" ">->" ">:" ">=" ">=>" ">>" ">>-" ">>=" ">>>"))
|
||||
(?? . "\\(?:\\?[.:=?]\\)") ; (regexp-opt '("??" "?." "?:" "?="))
|
||||
(?\[ . "\\(?:\\[\\(?:|]\\|[]|]\\)\\)") ; (regexp-opt '("[]" "[|]" "[|"))
|
||||
(?\\ . "\\(?:\\\\\\\\[\\n]?\\)") ; (regexp-opt '("\\\\" "\\\\\\" "\\\\n"))
|
||||
(?^ . "\\(?:\\^==?\\)") ; (regexp-opt '("^=" "^=="))
|
||||
(?w . "\\(?:wwww?\\)") ; (regexp-opt '("www" "wwww"))
|
||||
(?{ . "\\(?:{\\(?:|\\(?:|}\\|[|}]\\)\\|[|-]\\)\\)") ; (regexp-opt '("{-" "{|" "{||" "{|}" "{||}"))
|
||||
(?| . "\\(?:|\\(?:->\\|=>\\||=\\|[]=>|}-]\\)\\)") ; (regexp-opt '("|=" "|>" "||" "||=" "|->" "|=>" "|]" "|}" "|-"))
|
||||
(?_ . "\\(?:_\\(?:|?_\\)\\)") ; (regexp-opt '("_|_" "__"))
|
||||
(?\( . "\\(?:(\\*\\)") ; (regexp-opt '("(*"))
|
||||
(?~ . "\\(?:~\\(?:~>\\|[=>@~-]\\)\\)")) ; (regexp-opt '("~-" "~=" "~>" "~@" "~~" "~~>"))
|
||||
"An alist of all ligatures used by `+prog-ligatures-modes'.
|
||||
|
||||
The car is the character ASCII number, cdr is a regex which will call
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue