Merge pull request #2 from adrianparvino/develop

Magit Forge Configuration
This commit is contained in:
Oleksii Filonenko 2019-01-04 04:17:31 +02:00 committed by GitHub
commit f3b745d269
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 1146 additions and 695 deletions

View file

@ -1,36 +0,0 @@
Please check off the following before submitting your issue:
+ [ ] I ran `make clean && make` and restarted Emacs, but the issue persists.
+ [ ] I ran `make doctor` and it produced nothing conclusive.
+ [ ] [The troubleshooting section of the FAQ](/wiki/FAQ#troubleshooting) says
nothing about my issue.
+ [ ] I read the README.org files of any modules that are relevant (that I am
aware of).
+ [ ] I filled out the four fields in the template below.
+ [ ] I have deleted this checklist and message.
---
### Observed behavior
Describe what happened.
### Expected behavior
Describe what you expected to happen.
### Steps to reproduce
1. Select these example steps,
2. Delete them,
3. And replace them with precise steps to reproduce your issue.
### System information
<details>
<summary>Click to expand</summary>
```
Replace this line with the output of `M-x doom/info` OR `DEBUG=1 make doctor`
```
</details>

272
README.md
View file

@ -1,137 +1,197 @@
<img src="https://raw.githubusercontent.com/hlissner/doom-emacs/screenshots/main.png" alt="Main screenshot" />
<img src="https://img.shields.io/github/tag/hlissner/doom-emacs.svg?label=release"
alt="Current release"
align="left" />
<a href="https://travis-ci.org/hlissner/doom-emacs">
<img src="https://img.shields.io/travis/hlissner/doom-emacs/master.svg?label=master"
alt="build status (master)"
align="left" />
</a>
<a href="https://travis-ci.org/hlissner/doom-emacs">
<img src="https://img.shields.io/travis/hlissner/doom-emacs/master.svg?label=develop"
alt="build status (develop)"
align="left" />
</a>
<a href="https://discord.gg/bcZ6P3y">
<img src="https://img.shields.io/badge/Discord-blue.svg?logo=discord"
alt="Discord Server"
align="left" />
</a>
<p align="center">
<img src="https://img.shields.io/github/tag/hlissner/doom-emacs.svg?label=release&style=flat-square" alt="Current release" />
<a href="https://travis-ci.org/hlissner/doom-emacs"><img src="https://img.shields.io/travis/hlissner/doom-emacs/master.svg?label=master&style=flat-square" alt="build status (master)" /></a>
<a href="https://travis-ci.org/hlissner/doom-emacs"><img src="https://img.shields.io/travis/hlissner/doom-emacs/develop.svg?label=develop&style=flat-square" alt="build status (develop)" /></a>
<a href="https://discord.gg/bcZ6P3y"><img src="https://img.shields.io/badge/discord-chat-blue.svg?style=flat-square&logo=discord&colorB=%237289DA" alt="Chat on discord" /></a>
<img src="https://github.com/hlissner/doom-emacs/raw/screenshots/main.png" alt="Main screenshot" />
<a href="/../../wiki">wiki</a>&nbsp; |&nbsp;
<a href="/../../tree/screenshots">screenshots</a>&nbsp; |&nbsp;
<a href="/../../faq.org">faq</a>&nbsp; |&nbsp;
<a href="/../../wiki/FAQ#troubleshooting">troubleshooting</a>
<!--a href="CHANGELOG.org">changelog</a-->
</p>
- - -
<p align="center">
<a href="/../../wiki">Wiki</a> |
<a href="/../../tree/screenshots">Screenshots</a> |
<a href="/../../wiki/FAQ#troubleshooting">Troubleshooting</a> |
<a href="/../../wiki/FAQ">FAQ</a> |
<a href="/../develop/CHANGELOG.org">Changelog</a>
</p>
Quick start
-----------
- - -
```bash
git clone https://github.com/hlissner/doom-emacs ~/.emacs.d
~/.emacs.d/bin/doom quickstart
```
> Doom supports Emacs 25.3 and newer, but **Emacs 26.1 is recommended.** Doom
> works best on Linux & MacOS. Your mileage may vary on Windows.
Table of Contents
==================
- [What is Doom Emacs](#what-is-doom-emacs)
- [Doom's mantras](#dooms-mantras)
- [Feature highlights](#feature-highlights)
- [Getting Help](#getting-help)
- [Contributing](#contributing)
What is Doom Emacs
==================
<a href="http://ultravioletbat.deviantart.com/art/Yay-Evil-111710573">
<img src="/../screenshots/cacochan.png" align="right" />
<img src="https://github.com/hlissner/doom-emacs/raw/screenshots/cacochan.png" align="right" />
</a>
It is a story as old as time. A stubborn, shell-dwelling, and melodramatic
vimmer -- envious of the features of modern text editors -- spirals into despair
before finally succumbing to the [dark side][evil-mode]. This is his config.
before succumbing to the [dark side][url:evil-mode]. This is his config.
Doom strives to be fast, fabulous and hacker friendly. It is tailored for
neckbeards with blue belts or better in command-line-fu, Elisp and git.
Doom is a configuration for [GNU Emacs](https://www.gnu.org/software/emacs/). It
can be used as framework for your own configuration, or as a resource for fellow
Emacs enthusiasts who want to learn more about our favorite OS.
> Doom **only** supports Emacs >= 25.1, and is tested on Arch Linux 4.7+ and
> MacOS 10.11. YMMV on other platforms.
Doom's mantras
--------------
- **Gotta go fast.** Startup and runtime speed are high priorities; many
expensive, heavy-handed features and packages have been fine-tuned to that
end.
- **Hacker-friendly.** Doom caters to the command line denizen unafraid of
writing a little (or a lot of) code to tailor their editor. It also inherits
your shell configuration, warts 'n all, and expects frequent trips into the
terminal to manage Doom with its `bin/doom` utility.
- **Opinionated, but not stubborn.** Doom has _many_ opinions spread out across
its 120+ modules designed to iron out idiosynchrosies and provide a better and
more consistent baseline experience of Emacs and its plugins. However, they
mustn't ever compromise your ability to change, rewrite or disable any or all
of it, if you ask nicely.
- **Written to be read.** Doom's source ought to be self documenting and easy to
grok. Modules should be syntactically sweet and concise, and backend logic
should be explicit and abstraction-light. Where complexity arises, comments
and documentation shouldn't be far away.
- - -
Feature Highlights
------------------
- A declarative [package management system][doom:packages] with a command line
interface that combines package.el, [use-package] and [quelpa], allowing you
to install packages from anywhere.
- A [popup management system][doom:popups] with customizable rules to dictate
how temporary/disposable buffers are displayed.
- A vim-centric (and optional) experience with [evil-mode][url:evil-mode],
including ports of several popular vim plugins, <kbd>C-x</kbd> omnicompletion
and a slew of [custom ex commands][doom:commands].
- A Spacemacs-esque [keybinding scheme][doom:bindings], centered around leader
and localleader prefix keys (<kbd>SPC</kbd> and <kbd>SPC</kbd><kbd>m</kbd>, by
default).
- Indentation detection and optional integration with
[editorconfig][url:editorconfig]. Let someone else argue about tabs vs
___***spaces***___.
- Code completion for many languages, powered by
[company-mode][url:company-mode] (some may have external dependencies).
- Project-awareness powered by [projectile][url:projectile], with tools and an
API to navigate and manage projects, as well as project/framework-specific
minor modes and snippets libraries (and the ability to define your own).
- Project search (and replace) utilities, powered by
[the_silver_searcher][url:ag], [ripgrep][url:rg], git-grep and
[wgrep][url:wgrep], with integration for [ivy][url:ivy] (the default) and
[helm][url:helm].
- Isolated and persistent workspaces powered by [persp-mode][url:persp-mode].
Also substitutes as vim tabs.
- Inline/live code evaluation (using [quickrun][url:quickrun]), with REPL
support for a variety of languages.
- A jump-to-definition/references implementation for all languages that tries to
"just work," resorting to mode-specific functionality, before falling back on
[dump-jump][url:dumb-jump].
## Quick start
```bash
git clone https://github.com/hlissner/doom-emacs ~/.emacs.d
cd ~/.emacs.d
make quickstart
```
Troubleshooting
===============
Don't forget to run `make` each time you modify init.el or update Doom!
Encountered strange behavior or an error? Here are some things to try before you
shoot off that bug report:
Visit the wiki for [a more detailed guide on installing, customizing and
grokking Doom][wiki].
- Run `bin/doom refresh`. This ensures Doom is properly set up and its autoloads
files are up-to-date.
- If you have byte-compiled your config (with `bin/doom compile`), see if
`bin/doom clean` makes your issue go away. Never debug issues with a
byte-compiled config, it will only make your job harder.
- Run `bin/doom doctor` to detect common issues in your development environment.
- Search Doom's issue tracker for mention of any error messages you've received.
- [Visit our FAQ][docs:faq] to see if your issue is listed.
## Feature highlights
If all else fails, [file that bug report][github:new-issue]! Please include the
behavior you've observed, the behavior you expected, and any error message in
the \*Messages\* buffer (can be opened with <kbd>SPC h m</kbd> or `M-x
view-echo-area-messages`). It'd be a great help if you included a backtrace with
them as well.
+ A fast, organized and opinionated Emacs configuration with a command line
interface.
+ A custom, declarative [package management system][doom-packages] that combines
package.el, [use-package] and [quelpa], allowing you to manage packages from
the command line and install packages from sources other than ELPA.
+ A [popup management system][doom-popups] (powered by [shackle]) that minimizes
the presence and footprint of temporary and/or disposable buffers.
+ A vim-like experience with [evil-mode], including ports for several vim
plugins, <kbd>C-x</kbd> omnicompletion and a slew of [custom ex
commands][doom-my-commands].
+ Integration with [editorconfig]. Let someone else argue about tabs and spaces.
(spaces, duh).
+ Code completion for many languages, powered by [company-mode] (some languages
may have external dependencies).
+ Project-awareness powered by [projectile], with tools and an API to navigate
and manage projects and their files.
+ Fast project search (and replace) utilities, powered by [the_silver_searcher],
[ripgrep] and [wgrep], with integration for [ivy] (the default), [helm] and
ido.
+ Isolated and persistent workspaces powered by [persp-mode]. Also substitutes
for vim tabs.
+ Inline/live code evaluation (using [quickrun]), including REPLs for a variety
of languages.
We've also got [a Discord server][url:discord]. Hop on! We can help!
## Troubleshooting
Found a problem? Here are some things to try:
+ Run `make install` to ensure all plugins are installed.
+ `void-function` or `void-variable` errors could signal an out-of-date
autoloads file. Run `make autoloads` or `M-x doom//reload-autoloads` to update
it.
+ Scan for common OS/environment issues with `make doctor`.
+ **Never debug byte-compiled code. It will interfere in subtle ways.** Clean up
\*.elc files with `make clean` or `M-x doom//clean-byte-compiled-files`.
+ Check [the FAQ][wiki-troubleshooting] to see if your issue is mentioned.
+ Check the relevant module's README.org, if one exists. There may be extra
steps to getting certain features to work.
If all else has failed, [file a bug report][doom-new-issue].
## Contribute
Contributing
============
Doom (and my Emacs work in general) is a labor of love and incurable madness,
done on my spare time. It wasn't intended for public use, but I enjoy making
Doom a resource for others.
done on my spare time. If you'd like to support my work, I welcome
contributions:
If you'd like to support my efforts, I welcome contributions of any kind:
+ I love pull requests and bug reports. Elisp pointers are especially welcome.
Seriously, don't hesitate to [tell me my Elisp-fu sucks][doom-new-issue]!
+ Talk to me about Emacs workflow, ideas or tooling. Or talk to me about
gamedev, or pixel art, or anime, or programming, or the weather, or band camp.
Whatever. I don't mind. Holler at henrik@lissner.net.
- I love pull requests and bug reports. Check out the [Contributing
Guidelines][docs:contributing] (WIP) to find out how you can help out.
- I welcome Elisp pointers! Don't hesitate to [tell me my Elisp-fu
sucks][github:new-issue] (but please tell me why).
- Hop on [our Discord server][url:discord] and say hi! Help others out, hang out
or talk to me about Emacs, or gamedev, or programming, machine learning,
physics, pixel art, anime, gaming -- anything you like. Nourish this lonely
soul!
- If you'd like to support my work financially, consider buying me a drink
through [liberapay][url:liberapay] or [paypal][url:paypal]. Donations are a
great help. My work here contends with full-time studies, my ventures in indie
gamedev, and my freelance work.
[wiki]: /../../wiki
[wiki-conventions]: /../../wiki/Conventions
[wiki-modules]: /../../wiki/Modules
[wiki-customization]: /../../wiki/Customization
[wiki-troubleshooting]: /../../wiki/FAQ#troubleshooting
<!-- [docs:wiki]: docs/index.org -->
<!-- [docs:wiki-quickstart]: docs/getting-started.org -->
<!-- [docs:wiki-modules]: docs/modules.org -->
<!-- [docs:wiki-customization]: docs/customize.org -->
<!-- [docs:contributing]: docs/contribute.org -->
<!-- [docs:faq]: docs/faq.org -->
[docs:faq]: /../../wiki/FAQ
[doom-my-bindings]: modules/private/hlissner/+bindings.el
[doom-my-commands]: modules/private/hlissner/+commands.el
[doom-new-issue]: https://github.com/hlissner/doom-emacs/issues/new
[doom-packages]: core/autoload/packages.el
[doom-popups]: modules/ui/popup
[doom-theme]: https://github.com/hlissner/emacs-doom-theme
[github:new-issue]: https://github.com/hlissner/doom-emacs/issues/new
[doom:bindings]: modules/config/default/+bindings.el
[doom:commands]: modules/config/default/+evil-commands.el
[doom:packages]: core/autoload/packages.el
[doom:popups]: modules/feature/popup/README.org
[company-mode]: https://github.com/company-mode/company-mode
[editorconfig]: http://editorconfig.org/
[evil-mode]: https://github.com/emacs-evil/evil
[git-gutter-fringe]: https://github.com/syohex/emacs-git-gutter-fringe
[helm]: https://github.com/emacs-helm/helm
[ivy]: https://github.com/abo-abo/swiper
[persp-mode]: https://github.com/Bad-ptr/persp-mode.el
[projectile]: https://github.com/bbatsov/projectile
[quelpa]: https://github.com/quelpa/quelpa
[quickrun]: https://github.com/syohex/emacs-quickrun
[ripgrep]: https://github.com/BurntSushi/ripgrep
[shackle]: https://github.com/wasamasa/shackle
[the_silver_searcher]: https://github.com/ggreer/the_silver_searcher
[use-package]: https://github.com/jwiegley/use-package
[vim]: https://github.com/hlissner/.vim
[wgrep]: https://github.com/mhayashi1120/Emacs-wgrep
[url:discord]: https://discord.gg/bcZ6P3y
[url:liberapay]: https://liberapay.com/hlissner/donate
[url:paypal]: https://paypal.me/henriklissner/10
[url:company-mode]: https://github.com/company-mode/company-mode
[url:doom-themes]: https://github.com/hlissner/emacs-doom-themes
[url:editorconfig]: http://editorconfig.org/
[url:evil-mode]: https://github.com/emacs-evil/evil
[url:helm]: https://github.com/emacs-helm/helm
[url:ivy]: https://github.com/abo-abo/swiper
[url:persp-mode]: https://github.com/Bad-ptr/persp-mode.el
[url:projectile]: https://github.com/bbatsov/projectile
[url:quelpa]: https://github.com/quelpa/quelpa
[url:quickrun]: https://github.com/syohex/emacs-quickrun
[url:ripgrep]: https://github.com/BurntSushi/ripgrep
[url:the_silver_searcher]: https://github.com/ggreer/the_silver_searcher
[url:use-package]: https://github.com/jwiegley/use-package
[url:wgrep]: https://github.com/mhayashi1120/Emacs-wgrep

View file

@ -88,7 +88,9 @@ See `display-line-numbers' for what these values mean."
(let ((theme (or (car-safe custom-enabled-themes) doom-theme)))
(when theme
(mapc #'disable-theme custom-enabled-themes))
(doom|init-theme)
(when (and doom-theme (not (memq doom-theme custom-enabled-themes)))
(let (doom--prefer-theme-elc)
(load-theme doom-theme t)))
(doom|init-fonts)))
;;;###autoload

View file

@ -67,6 +67,7 @@
(unless (equal (vc-git-working-revision doom-emacs-dir) rev)
(error "Failed to checkout latest commit.\n\n%s" (buffer-string)))
(doom-refresh 'force)
(doom-packages-update doom-auto-accept)
(message "Done! Please restart Emacs for changes to take effect")))
(user-error
(message "%s Aborting." (error-message-string e)))

View file

@ -58,7 +58,7 @@ If any hook returns non-nil, all hooks after it are ignored.")
(defvar doom-leader-alist `((t . ,doom-leader-map)))
(add-to-list 'emulation-mode-map-alists 'doom-leader-alist)
;; We avoid `general-create-definer' to ensure that :states, :wk-full-keys and
;; We avoid `general-create-definer' to ensure that :states, :prefix and
;; :keymaps cannot be overwritten.
(defmacro define-leader-key! (&rest args)
`(general-define-key
@ -148,7 +148,6 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See
(put :mode 'lisp-indent-function 'defun)
(put :prefix 'lisp-indent-function 'defun)
(put :unless 'lisp-indent-function 'defun)
(put :if 'lisp-indent-function 'defun)
(put :when 'lisp-indent-function 'defun)
;; specials
@ -190,7 +189,7 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See
collect (intern (concat (symbol-name m) "-map")))
rest)
(push :map rest))
((or :if :when :unless)
((or :when :unless)
(doom--map-nested (list (intern (doom-keyword-name key)) (pop rest)) rest)
(setq rest nil))
(:prefix
@ -251,7 +250,7 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See
((setq def (cons 'list
(if (and (equal key "")
(null def))
`(nil :which-key ,desc)
`(:ignore t :which-key ,desc)
(plist-put (general--normalize-extended-def def)
:which-key desc))))))))
(dolist (state states)

View file

@ -20,13 +20,9 @@
(when (featurep 'exec-path-from-shell)
`(exec-path-from-shell-copy-envs ,@vars)))
;; key conventions:
;; alt/option = meta
;; windows/command = super
(cond (IS-MAC
(setq mac-command-modifier 'super
mac-option-modifier 'meta
(setq mac-command-modifier 'meta
mac-option-modifier 'alt
;; sane trackpad/mouse scroll settings
mac-redisplay-dont-reset-vscroll t
mac-mouse-wheel-smooth-scroll nil
@ -68,12 +64,7 @@
x-underline-at-descent-line t)) ; draw underline lower
(IS-WINDOWS
(setq w32-get-true-file-attributes nil ; fix file io slowdowns
;; map window keys to super (unreliable)
w32-pass-lwindow-to-system nil
w32-pass-rwindow-to-system nil
w32-lwindow-modifier 'super
w32-rwindow-modifier 'super)
(setq w32-get-true-file-attributes nil) ; fix file io slowdowns
(when (display-graphic-p)
(setenv "GIT_ASKPASS" "git-gui--askpass"))))

View file

@ -226,7 +226,9 @@ packages at once.
Only use this macro in a module's packages.el file."
(doom--assert-stage-p 'packages #'packages!)
`(progn ,@(cl-loop for desc in packages collect `(package! ,@(doom-enlist desc)))))
(macroexp-progn
(cl-loop for desc in packages
collect (macroexpand `(package! ,@(doom-enlist desc))))))
(defmacro disable-packages! (&rest packages)
"A convenience macro like `package!', but allows you to disable multiple
@ -234,7 +236,9 @@ packages at once.
Only use this macro in a module's packages.el file."
(doom--assert-stage-p 'packages #'disable-packages!)
`(setq doom-disabled-packages (append ',packages doom-disabled-packages)))
(macroexp-progn
(cl-loop for pkg in packages
collect (macroexpand `(package! ,pkg :disable t)))))
(defmacro depends-on! (module submodule &optional flags)
"Declares that this module depends on another.

View file

@ -53,6 +53,10 @@ size.")
(defvar doom-init-ui-hook nil
"List of hooks to run when the UI has been initialized.")
(defvar doom--prefer-theme-elc nil
"If non-nil, `load-theme' will prefer the compiled theme (unlike its default
behavior). Do not set this directly, this is let-bound in `doom|init-theme'.")
(setq-default
ansi-color-for-comint-mode t
bidi-display-reordering nil ; disable bidirectional text for tiny performance boost
@ -360,7 +364,8 @@ frame's window-system, the theme will be reloaded.")
(defun doom|init-theme ()
"Set the theme and load the font, in that order."
(when (and doom-theme (not (memq doom-theme custom-enabled-themes)))
(load-theme doom-theme t)))
(let ((doom--prefer-theme-elc t))
(load-theme doom-theme t))))
;; Getting themes to remain consistent across GUI Emacs, terminal Emacs and
;; daemon Emacs is hairy. `doom|init-theme' sorts out the initial GUI frame.
@ -477,12 +482,15 @@ instead). Meant for `kill-buffer-query-functions'."
(advice-add #'load-theme :around #'doom*disable-old-themes-first)
(defun doom*prefer-compiled-theme (orig-fn &rest args)
"Make `load-theme' prioritize the byte-compiled theme (if it exists) for a
moderate boost in startup (or theme switch) time."
(cl-letf* ((old-locate-file (symbol-function 'locate-file))
((symbol-function 'locate-file)
(lambda (filename path &optional _suffixes predicate)
(funcall old-locate-file filename path '("c" "") predicate))))
"Make `load-theme' prioritize the byte-compiled theme for a moderate boost in
startup (or theme switch) time, so long as `doom--prefer-theme-elc' is non-nil."
(if (or (null after-init-time)
doom--prefer-theme-elc)
(cl-letf* ((old-locate-file (symbol-function 'locate-file))
((symbol-function 'locate-file)
(lambda (filename path &optional _suffixes predicate)
(funcall old-locate-file filename path '("c" "") predicate))))
(apply orig-fn args))
(apply orig-fn args)))
(advice-add #'load-theme :around #'doom*prefer-compiled-theme)

View file

@ -1,8 +1,8 @@
;;; core.el --- the heart of the beast -*- lexical-binding: t; -*-
(eval-when-compile
(and (version< emacs-version "25")
(error "Detected Emacs %s. Doom only supports Emacs 25.1 and higher"
(and (version< emacs-version "25.3")
(error "Detected Emacs %s. Doom only supports Emacs 25.3 and higher"
emacs-version)))
(defvar doom-debug-mode (or (getenv "DEBUG") init-file-debug)

View file

@ -173,9 +173,9 @@
:to-expand-into
`(general-define-key "a" (list :def #'a :which-key "A")))))
(describe ":if/:when/:unless"
(describe ":when/:unless"
(it "wraps keys in a conditional block"
(dolist (prop '(:if :when :unless))
(dolist (prop '(:when :unless))
(let ((prop-fn (intern (doom-keyword-name prop))))
(expect `(map! ,prop t "a" #'a "b" #'b)
:to-expand-into

30
docs/ISSUE_TEMPLATE.md Normal file
View file

@ -0,0 +1,30 @@
+ [ ] I've checked for duplicates of this issue.
+ [ ] `bin/doom clean` and `bin/doom refresh` (then restarting Emacs) did not
fix my issue.
+ [ ] I ran `make doctor` and it produced no leads.
+ [ ] My issue cannot be found [in the FAQ](/../../wiki/FAQ)
+ [ ] I filled out the four fields in the template below.
+ [ ] I have deleted this checklist and message.
### Observed behavior
(Describe what happened)
### Expected behavior
(Describe what you expected to happen)
### Steps to reproduce
1. Select these example steps,
2. Delete them,
3. And replace them with precise steps to reproduce your issue.
4. Fill in "system information" below.
### System information
<details>
<summary>Click to expand</summary>
Replace this line with the output of `M-x doom/info` OR `~/.emacs.d/bin/doom info`
</details>

View file

@ -36,7 +36,7 @@ sudo pacman --noconfirm --needed -S offlineimap mu
* Dependencies
You need to do the following:
1. Write a ~\~/.offlineimaprc~. 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.
1. Write a ~\~/.offlineimaprc~. 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.
2. Download your email: ~offlineimap -o~ (may take a while)
3. Index it with mu: ~mu index --maildir ~/.mail~

View file

@ -11,6 +11,9 @@
;;
;; Packages
(add-to-list 'auto-mode-alist '("\\.\\(?:offlineimap\\|mbsync\\)rc\\'" . conf-mode))
(def-package! mu4e
:commands (mu4e mu4e-compose-new)
:init

View file

@ -1,48 +1,148 @@
#+TITLE: :completion company
#+TITLE: completion/company
#+DATE: February 19, 2017
#+SINCE: v2.0
#+STARTUP: inlineimages
This module adds code-completion support, powered by [[https://github.com/company-mode/company-mode][company]].
* Table of Contents :TOC_3:noexport:
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Prerequisites][Prerequisites]]
- [[Features][Features]]
- [[Code completion][Code completion]]
- [[Vim-esque omni-completion prefix (C-x)][Vim-esque omni-completion prefix (C-x)]]
- [[Configuration][Configuration]]
- [[Enable as-you-type code completion][Enable as-you-type code completion]]
- [[Enable company backend(s) in certain modes][Enable company backend(s) in certain modes]]
- [[Troubleshooting][Troubleshooting]]
- [[Code-completion doesn't pop up automatically.][Code-completion doesn't pop up automatically.]]
- [[X-mode doesn't have code completion support or requires extra setup.][X-mode doesn't have code completion support or requires extra setup.]]
- [[No backends (or the incorrect ones) have been registered for X-mode.][No backends (or the incorrect ones) have been registered for X-mode.]]
+ Uses ~company-quickhelp~ for documentation tooltips
+ Uses ~company-statistics~ to order results by usage frequency
* Description
This module provides code completion, powered by [[https://github.com/company-mode/company-mode][company-mode]]. It is required
for code completion in many of Doom's :lang modules.
[[/../screenshots/company.png]]
https://assets.doomemacs.org/completion/company/overlay.png
* Table of Contents :TOC:
- [[#install][Install]]
- [[#configure][Configure]]
- [[#auto-completion][Auto-completion]]
- [[#troubleshooting][Troubleshooting]]
** Module Flags
+ =+auto= Enables as-you-type completion.
+ =+childframe= Enables displaying completion candidates in a child frame,
rather than an overlay or tooltip (among with other UI enhancements). *This
requires GUI Emacs 26.1+.*
* Install
Some languages require additional setup, and some languages may have no
completion support at all.
** Plugins
+ [[https://github.com/company-mode/company-mode][company-mode]]
+ [[https://github.com/hlissner/emacs-company-dict][company-dict]]
+ [[https://github.com/raxod502/prescient.el][company-prescient]]
+ [[https://github.com/sebastiencs/company-box][company-box]]
Check the README.org in that language's module for details.
* Prerequisites
This module has no direct prerequisites.
* Configure
** Auto-completion
By default, I've disabled auto-completion. This is my preference. I prefer to
invoke company when I need it by calling ~company-complete~ manually (typically,
bound to =C-SPC= in insert mode). However, some may not share my preference.
However, some major modes may require additional setup for code completion to
work in them. Some major modes may have no completion support at all. Check that
major mode's module's documentation for details.
To enable auto-completion you must:
* Features
** Code completion
Ccompletion must be triggered manually with the =C-SPC= key. If you want
as-you-type code completion, the ~+auto~ module flag will enable it.
1. Load ~company~,
2. and change ~company-idle-delay~ to a non-nil float (the default is 0.5)
| Keybind | Description |
|---------+------------------------------------------|
| =C-SPC= | Invoke code completion manually |
| =C-n= | Go to next candidate |
| =C-p= | Go to previous candidate |
| =C-j= | (evil) Go to next candidate |
| =C-k= | (evil) Go to previous candidate |
| =C-h= | Display documentation (if available) |
| =C-u= | Move to previous page of candidates |
| =C-d= | Move to next page of candidates |
| =C-s= | Filter candidates |
| =C-S-s= | Search candidates with helm/ivy |
| =C-SPC= | Complete common |
| =TAB= | Complete common or select next candidate |
| =S-TAB= | Select previous candidate |
For example:
** Vim-esque omni-completion prefix (C-x)
In the spirit of Vim's omni-completion, the following insert mode keybinds are
available to evil users to access specific company backends:
| Keybind | Description |
|-----------+-----------------------------------|
| =C-x C-]= | Complete etags |
| =C-x C-f= | Complete file path |
| =C-x C-k= | Complete from dictionary/keyword |
| =C-x C-l= | Complete full line |
| =C-x C-o= | Invoke complete-at-point function |
| =C-x C-n= | Complete next symbol at point |
| =C-x C-p= | Complete previous symbol at point |
| =C-x C-s= | Complete snippet |
| =C-x s= | Complete spelling suggestions |
* Configuration
** Enable as-you-type code completion
The =+auto= module flag enables this. You may customize ~company-idle-delay~ to
control how quickly the popup should appear.
The ~+company/toggle-auto-completion~ command is also available to toggle this
interactively.
** Enable company backend(s) in certain modes
The ~set-company-backend!~ function exists for setting ~company-backends~
buffer-locally in MODES, which is either a major-mode symbol, a minor-mode
symbol, or a list of either. BACKENDS are prepended to ~company-backends~ for
those modes.
#+BEGIN_SRC emacs-lisp
(require 'company)
(setq company-idle-delay 0.2
company-minimum-prefix-length 3)
(after! js2-mode
(set-company-backend! 'js2-mode 'company-tide 'company-yasnippet))
(after! sh-script
(set-company-backend! 'sh-mode
'(company-shell :with company-yasnippet)))
(after! cc-mode
(set-company-backend! 'c-mode
'(:separate company-irony-c-headers company-irony)))
#+END_SRC
To unset the backends for a particular mode, pass ~nil~ to it:
#+BEGIN_SRC emacs-lisp
(after! sh-script
(set-company-backend! 'sh-mode nil))
#+END_SRC
* Troubleshooting
If completion isn't working for you, please consider the following before
posting a bug report:
If code completion isn't working for you, consider the following common causes
before you file a bug report:
+ If what you are expecting is popup-as-you-type completion (which is disabled
by default), see the "Configure > Auto-completion" section above, which will
instruct you on how to enable this.
+ Some languages don't have any auto-completion support at all.
** Code-completion doesn't pop up automatically.
This is by design. The expectation is that you invoke completion manually with
=C-SPC=. This was decided because code-completion backends can be slow, some
dreadfully so, and invoking them every time you move your cursor can add pauses
and delays while editing.
If, despite that, you still want this functionality, use the =+auto= flag to
enable it.
** X-mode doesn't have code completion support or requires extra setup.
There is no guarantee your language mode will have completion support.
Some, like ~lua-mode~, don't have completion support in Emacs at all. Others may
requires additional setup to get code completion working. For instance,
~go-mode~ requires ~guru~ to be installed on your system, and ~enh-ruby-mode~
requires that you have a Robe server running (~M-x robe-start~).
Check the relevant module's documentation for this kind of information.
** No backends (or the incorrect ones) have been registered for X-mode.
Doom expects every mode to have an explicit list of company-backends (and as
short a list as possible). This may mean you aren't getting all the completion
you want or any at all.
Check the value of ~company-backends~ (=SPC h v company-backends=) from that
mode to see what backends are available. Check the [[*Assigning company backend(s) to modes][Configuration section]] for
details on changing what backends are available for that mode.

View file

@ -1,128 +1,57 @@
#+TITLE: :completion ivy
#+TITLE: completion/ivy
#+DATE: February 13, 2017
#+SINCE: v2.0
#+STARTUP: inlineimages
This module adds Ivy, a completion backend.
* Table of Contents :TOC_3:noexport:
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Hacks][Hacks]]
- [[Prerequisites][Prerequisites]]
- [[Install][Install]]
- [[MacOS][MacOS]]
- [[Arch Linux][Arch Linux]]
- [[Features][Features]]
- [[Jump-to-file project navigation][Jump-to-file project navigation]]
- [[Project search & replace][Project search & replace]]
- [[In-buffer searching][In-buffer searching]]
- [[Task lookup][Task lookup]]
- [[Ivy integration for various completing commands][Ivy integration for various completing commands]]
- [[General][General]]
- [[Jump to files, buffers or projects)][Jump to files, buffers or projects)]]
- [[Search][Search]]
- [[Configuration][Configuration]]
- [[Enable fuzzy/non-fuzzy search for specific commands][Enable fuzzy/non-fuzzy search for specific commands]]
- [[Change the position of the ivy childframe][Change the position of the ivy childframe]]
- [[Troubleshooting][Troubleshooting]]
* Description
This module provides Ivy integration for a variety of Emacs commands, as well as
a unified interface for project search and replace, powered by ag, rg, pt,
git-grep & grep (whichever is available).
#+begin_quote
I prefer ivy over ido for its flexibility. I prefer ivy over helm because it's
lighter.
lighter, simpler and faster in many cases.
#+end_quote
+ Project-wide search & replace powered by ~rg~ or ~ag~
+ Project jump-to navigation ala Command-T, Sublime Text's Jump-to-anywhere or
Vim's CtrlP plugin.
+ Ivy integration for ~M-x~, ~imenu~, ~recentf~ and others.
+ A powerful, interactive in-buffer search using ~swiper~.
+ Ivy-powered TODO/FIXME navigation
** Module Flags
+ =+fuzzy= Enables the fuzzy method for ivy searches.
+ =+childframe= Causes Ivy to display in a floating child frame, above Emacs.
*This requires GUI Emacs 26.1+*
* Table of Contents :TOC:
- [[#install][Install]]
- [[#macos][MacOS]]
- [[#arch-linux][Arch Linux]]
- [[#usage][Usage]]
- [[#project-search--replace][Project search & replace]]
- [[#jump-to-file-project-navigation][Jump-to-file project navigation]]
- [[#in-buffer-searching][In-buffer searching]]
- [[#task-lookup][Task lookup]]
- [[#appendix][Appendix]]
- [[#commands][Commands]]
- [[#hacks][Hacks]]
* Install
This module optionally depends on [[https://github.com/BurntSushi/ripgrep][ripgrep]] and [[https://github.com/ggreer/the_silver_searcher][the_silver_searcher]].
~rg~ is faster, but its results aren't deterministic, neither does it support
multiline search or full PCRE (at the time of writing), that's where ~ag~ is
useful.
** MacOS
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
brew install ripgrep the_silver_searcher
#+END_SRC
** Arch Linux
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
sudo pacman --needed --noconfirm -S ripgrep the_silver_searcher
#+END_SRC
* Usage
Here is some insight into how I use this module.
** Project search & replace
There are four Ex interfaces for the silver searcher and ripgrep. They are:
+ ~:ag[!]~
+ ~:agcwd[!]~
+ ~:rg[!]~
+ ~:rgcwd[!]~
The optional BANG tells ag/rg to include ignored files in the search. And the
\*cwd variant of each command will only search in the current directory
(non-recursively).
[[/../screenshots/modules/completion/ivy/ivy-search.gif]]
Now, how do we do text replacements? With the ivy popup open you can press
=S+Tab= to create an wgrep buffer out of the results.
[[/../screenshots/modules/completion/ivy/ivy-search-replace.gif]]
Make your modifications and press =C-c C-c= to commit them, or =C-c C-k= to
abort.
** Jump-to-file project navigation
Inspired by Sublime Text's jump-to-anywhere, Vim's CtrlP/Unite plugins, and
Textmate's Command-T, a marriage of ~projectile~ and ~ivy~ makes this available
in Emacs.
Invoke it with =SPC f /=, =SPC SPC= or ~M-x counsel-projectile-find-file~.
[[/../screenshots/modules/completion/ivy/ivy-projectile.gif]]
** In-buffer searching
I use ~evil-search~ (invoked by pressing =/= in normal mode) when jumping
small/moderate (or predictable) distances. However, there are occasions where I
need more feedback, so I turn to ~swiper~ (available directly with =M-x swiper
RET=, or via ~:sw[iper]~).
[[/../screenshots/modules/completion/ivy/ivy-swiper.gif]]
** Task lookup
I sprinkle my projects with TODO's & FIXME's. You can navigate to and peruse
them via ~M-x +ivy/tasks~ or ~:todo[!]~ (ex command).
[[/../screenshots/modules/completion/ivy/ivy-todo.gif]]
* Appendix
** Commands
Here is a list of my commonly used commands, their default keybinds (defined in
[[../../private/default/+bindings.el][private/default/+bindings.el]]), and their corresponding ex command (defined in
[[../../private/default/+evil-commands.el][private/default/+evil-commands.el]]).
| command | key / ex command | description |
|-------------------------------------+------------------------+------------------------------------------------------------------|
| ~counsel-M-x~ | =M-x= | Smarter, smex-powered M-x |
| ~counsel-bookmark~ | =SPC RET= | Find bookmark |
| ~counsel-find-file~ | =SPC f .= or =SPC .= | Browse from current directory |
| ~counsel-projectile-find-file~ | =SPC f /= or =SPC SPC= | Find file in project |
| ~counsel-projectile-switch-project~ | =SPC p p= | Open another project |
| ~counsel-recentf~ | =SPC f r= | Find recently opened file |
| ~+ivy/switch-workspace-buffer~ | =SPC b b= | Jump to buffer in current workspace |
| ~ivy-switch-buffer~ | =SPC b B= | Jump to buffer across workspaces |
| ~+ivy:ag~ | ~:ag[!] [QUERY]~ | Search project (BANG = ignore gitignore) |
| ~+ivy:ag-cwd~ | ~:agcwd[!] [QUERY]~ | Search this directory (BANG = don't recurse into subdirectories) |
| ~+ivy:rg~ | ~:rg[!] [QUERY]~ | Search project (if BANG, ignore gitignore) |
| ~+ivy:rg-cwd~ | ~:rgcwd[!] [QUERY]~ | Search this directory (BANG = don't recurse into subdirectories) |
| ~+ivy:swiper~ | ~:sw[iper] [QUERY]~ | Search current buffer |
| ~+ivy:todo~ | ~:todo[!]~ | List all TODO/FIXMEs in project (or current file if BANG) |
While in a search (e.g. invoked from ~+ivy:ag~ or ~+ivy:rg~), these new
keybindings are available to you:
| key | description |
|-------------+--------------------------------------------------------------------------------|
| =<backtab>= | Perform search/replace on the search results (open occur buffer in wgrep mode) |
| =C-SPC= | Preview the current candidate |
| =M-RET= | Open the selected candidate in other-window |
** Plugins
+ [[https://github.com/abo-abo/swiper][ivy]]
+ [[https://github.com/abo-abo/swiper][counsel]]
+ [[https://github.com/ericdanan/counsel-projectile][counsel-projectile]]
+ [[https://github.com/abo-abo/swiper][swiper]]
+ [[https://github.com/abo-abo/swiper][ivy-hydra]]
+ [[https://github.com/yevgnen/ivy-rich][ivy-rich]]
+ [[https://github.com/mhayashi1120/Emacs-wgrep][wgrep]]
+ [[https://github.com/DarwinAwardWinner/amx][amx]]
+ [[https://github.com/lewang/flx][flx]]* (=+fuzzy=)
+ [[https://github.com/tumashu/ivy-posframe][ivy-posframe]]* (=+childframe=)
** Hacks
+ Functions with ivy/counsel equivalents have been globally remapped (like
@ -131,4 +60,161 @@ keybindings are available to you:
+ ~counsel-[arp]g~'s 3-character limit was reduced to 1 (mainly for the ex
command)
* Prerequisites
This module optionally depends on one of:
+ [[https://github.com/BurntSushi/ripgrep][ripgrep]] (rg)
+ [[https://github.com/ggreer/the_silver_searcher][the_silver_searcher]] (ag)
+ [[https://github.com/monochromegane/the_platinum_searcher][the_platinum_searcher]] (pt)
Ripgrep is recommended, but the order of its results aren't deterministic and it
doesn't support full PCRE (at the time of writing). The_silver_searcher is a
good alternative if either of these bother you.
If none of these are installed, file search commands will use git-grep (falling
back to grep, otherwise).
** Install
*** MacOS
#+BEGIN_SRC sh
brew install ripgrep the_silver_searcher
#+END_SRC
*** Arch Linux
#+BEGIN_SRC sh :dir /sudo::
sudo pacman --needed --noconfirm -S ripgrep the_silver_searcher
#+END_SRC
* Features
Ivy and its ilk are large plugins. Covering everything about them is outside of
this documentation's scope, so only Doom-specific Ivy features are listed here:
** Jump-to-file project navigation
Inspired by Sublime Text's jump-to-anywhere, CtrlP/Unite in Vim, and Textmate's
Command-T, this module provides similar functionality by bringing ~projectile~
and ~ivy~ together.
https://assets.doomemacs.org/completion/ivy/projectile.png
| Keybind | Description |
|----------------------+-------------------------------------|
| =SPC f /=, =SPC SPC= | Jump to file in project |
| =SPC f .=, =SPC .= | Jump to file from current directory |
** Project search & replace
This module provides interactive text search and replace using the first search
program available on your system (rg, ag, pt, git-grep or grep).
| Keybind | Description |
|----------------------+-------------------------------------|
| =SPC / b=, =M-f= | Search the current buffer |
| =SPC / p= | Search project |
| =SPC / d= | Search this directory |
| =SPC p t= | List all TODO/FIXMEs in project |
https://assets.doomemacs.org/completion/ivy/search.png
The ~+ivy-project-search-engines~ variable is consulted to determine which
underlying program to check for (and in what order). It's default value is ~'(rg
ag pt)~. If none of these are available, it will resort to =git-grep= (falling
back to =grep= after that).
To use a specific program, the following engine-specific commands are available
(but not bound to any key by default) for searching from the project root or the
current directory (recursively), respectively:
+ ~+ivy/ag~ / ~+ivy/ag-from-cwd~
+ ~+ivy/rg~ / ~+ivy/rg-from-cwd~
+ ~+ivy/pt~ / ~+ivy/pt-from-cwd~
+ ~+ivy/grep~ / ~+ivy/grep-from-cwd~
The universal argument (=SPC u= for evil users; =C-u= otherwise) changes the
behavior of these commands, instructing the underlying search engine to include
ignored files.
This module also provides Ex Commands for evil users:
| Ex command | Description |
|-----------------------+------------------------------------------------|
| ~:ag[!] [QUERY]~ | Search project w/ ag[fn:1] |
| ~:rg[!] [QUERY]~ | Search project w/ rg[fn:1] |
| ~:pt[!] [QUERY]~ | Search project w/ pt[fn:1] |
| ~:grep[!] [QUERY]~ | Search project w/ git-grep/grep[fn:1] |
| ~:agcwd[!] [QUERY]~ | Search this directory w/ the_silver_searcher |
| ~:rgcwd[!] [QUERY]~ | Search this directory w/ ripgrep |
| ~:ptcwd[!] [QUERY]~ | Search this directory w/ the_platinum_searcher |
| ~:grepcwd[!] [QUERY]~ | Search this directory w/ git-grep/grep |
The optional BANG functions is equivalent to the universal argument for the
previous commands.
-----
While in a search (e.g. invoked from ~+ivy:ag~ or ~:rg~), these extra
keybindings are available to you:
| Keybind | Description |
|---------+------------------------------------------------|
| =S-TAB= | Open a writable buffer of your search results |
| =C-SPC= | Preview the current candidate |
| =M-RET= | Open the selected candidate in other-window |
Changes to the resulting wgrep buffer (opened by =S-TAB=) can be committed with
=C-c C-c= and aborted with =C-c C-k=.
https://assets.doomemacs.org/completion/ivy/search-replace.png
** In-buffer searching
The =swiper= package provides an interactive buffer search powered by ivy. It
can be invoked with:
+ =SPC / b=
+ =M-f=
+ ~:sw[iper] [QUERY]~
https://assets.doomemacs.org/completion/ivy/swiper.png
A wgrep buffer can be opened from swiper with =S-TAB=.
** Task lookup
Some projects have TODO's and FIXME's littered across them. The ~+ivy/tasks~
command allows you to search and jump to them. It can be invoked with:
+ =SPC p t= (C-u = restrict search to current file)
+ ~:todo[!]~ (BANG = restrict search to current file)
https://assets.doomemacs.org/completion/ivy/todo.png
** Ivy integration for various completing commands
*** General
| Keybind | Description |
|----------------+---------------------------|
| =M-x=, =SPC := | Smarter, smex-powered M-x |
| =SPC '= | Resume last ivy session |
*** Jump to files, buffers or projects)
| Keybind | Description |
|---------------------------------+---------------------------------------|
| =SPC RET= | Find bookmark |
| =SPC f .=, =SPC .= | Browse from current directory |
| =SPC f /=, =SPC p /=, =SPC SPC= | Find file in project |
| =SPC f r= | Find recently opened file |
| =SPC p p= | Open another project |
| =SPC b b=, =SPC ,= | Switch to buffer in current workspace |
| =SPC b B=, =SPC <= | Switch to buffer |
*** Search
| Keybind | Description |
|------------------+------------------------------------------|
| =SPC / i= | Search for symbol in current buffer |
| =SPC / I= | Search for symbol in all similar buffers |
| =SPC / b=, =M-f= | Search the current buffer |
| =SPC / p= | Search project |
| =SPC / d= | Search this directory |
| =SPC p t= | List all TODO/FIXMEs in project |
* Configuration
** TODO Enable fuzzy/non-fuzzy search for specific commands
** TODO Change the position of the ivy childframe
* TODO Troubleshooting

View file

@ -17,17 +17,15 @@
;; Global keybindings
(map! (:map override
;; Make M-x more accessible
"s-x" 'execute-extended-command
"M-x" 'execute-extended-command
;; A little sandbox to run code in
"s-;" 'eval-expression)
"A-;" 'eval-expression
"M-;" 'eval-expression)
[remap evil-jump-to-tag] #'projectile-find-tag
[remap find-tag] #'projectile-find-tag
;; Smart tab
:i [tab] (general-predicate-dispatch nil
:i [tab] (general-predicate-dispatch nil ; fall back to nearest keymap
(and (featurep! :feature snippets)
(yas-maybe-expand-abbrev-key-filter 'yas-expand))
'yas-expand
@ -68,7 +66,7 @@
:m "B" #'realgud:cmd-clear)
(:when (featurep! :feature eval)
:g "s-r" #'+eval/buffer
:g "M-r" #'+eval/buffer
:nv "gr" #'+eval:region
:n "gR" #'+eval/buffer
:v "gR" #'+eval:replace-region)
@ -83,8 +81,8 @@
:n "zx" #'kill-this-buffer
:n "ZX" #'bury-buffer
:n "gp" #'+evil/reselect-paste
:nv "g=" #'widen
:nv "g-" #'+evil:narrow-buffer
:n "g=" #'widen
:v "g=" #'+evil:narrow-buffer
:nv "g@" #'+evil:apply-macro
:nv "gc" #'evil-commentary
:nv "gx" #'evil-exchange
@ -189,9 +187,9 @@
(:map yas-keymap
"C-e" #'+snippets/goto-end-of-field
"C-a" #'+snippets/goto-start-of-field
[s-right] #'+snippets/goto-end-of-field
[s-left] #'+snippets/goto-start-of-field
[s-backspace] #'+snippets/delete-to-start-of-field
[M-right] #'+snippets/goto-end-of-field
[M-left] #'+snippets/goto-start-of-field
[M-backspace] #'+snippets/delete-to-start-of-field
[backspace] #'+snippets/delete-backward-char
[delete] #'+snippets/delete-forward-char-or-field)
(:map yas-minor-mode-map
@ -219,7 +217,17 @@
:n "gt" #'+workspace/switch-right
:n "gT" #'+workspace/switch-left
:n "]w" #'+workspace/switch-right
:n "[w" #'+workspace/switch-left))
:n "[w" #'+workspace/switch-left
:g "M-1" (λ! (+workspace/switch-to 0))
:g "M-2" (λ! (+workspace/switch-to 1))
:g "M-3" (λ! (+workspace/switch-to 2))
:g "M-4" (λ! (+workspace/switch-to 3))
:g "M-5" (λ! (+workspace/switch-to 4))
:g "M-6" (λ! (+workspace/switch-to 5))
:g "M-7" (λ! (+workspace/switch-to 6))
:g "M-8" (λ! (+workspace/switch-to 7))
:g "M-9" (λ! (+workspace/switch-to 8))
:g "M-0" #'+workspace/switch-to-last))
;;; :completion
(map! (:when (featurep! :completion company)
@ -246,8 +254,8 @@
"C-u" #'company-previous-page
"C-d" #'company-next-page
"C-s" #'company-filter-candidates
"C-S-s" `(,(cond ((featurep! :completion helm) #'helm-company)
((featurep! :completion ivy) #'counsel-company)))
"C-S-s" (cond ((featurep! :completion helm) #'helm-company)
((featurep! :completion ivy) #'counsel-company))
"C-SPC" #'company-complete-common
[tab] #'company-complete-common-or-cycle
[backtab] #'company-select-previous)
@ -448,9 +456,7 @@
:after markdown-mode
:map markdown-mode-map
;; fix conflicts with private bindings
"<backspace>" nil
"<s-left>" nil
"<s-right>" nil))
[backspace] nil))
;;
@ -468,7 +474,12 @@
:desc "Toggle last popup" "~" #'+popup/toggle
:desc "Find file" "." #'find-file
:desc "Switch to buffer" "," #'switch-to-buffer
(:when (featurep! :feature workspaces)
:desc "Switch workspace buffer" "," #'persp-switch-to-buffer
:desc "Switch buffer" "<" #'switch-to-buffer)
(:unless (featurep! :feature workspaces)
:desc "Switch buffer" "," #'switch-to-buffer)
:desc "Resume last search" "'"
(cond ((featurep! :completion ivy) #'ivy-resume)
@ -544,7 +555,11 @@
:desc "Sudo edit this file" "S" #'doom/sudo-this-file
:desc "Previous buffer" "[" #'previous-buffer
:desc "Next buffer" "]" #'next-buffer
:desc "Switch buffer" "b" #'switch-to-buffer
(:when (featurep! :feature workspaces)
:desc "Switch workspace buffer" "b" #'persp-switch-to-buffer
:desc "Switch buffer" "B" #'switch-to-buffer)
(:unless (featurep! :feature workspaces)
:desc "Switch buffer" "b" #'switch-to-buffer)
:desc "Kill buffer" "k" #'kill-this-buffer
:desc "Next buffer" "n" #'next-buffer
:desc "Kill other buffers" "o" #'doom/kill-other-buffers
@ -700,7 +715,7 @@
:desc "Find other file" "o" #'projectile-find-other-file
:desc "Switch project" "p" #'projectile-switch-project
:desc "Recent project files" "r" #'projectile-recentf
:desc "List project tasks" "t" #'+ivy/tasks ; TODO: Add +helm/tasks
:desc "List project tasks" "t" #'+default/project-tasks
:desc "Invalidate cache" "x" #'projectile-invalidate-cache)
(:prefix ("q" . "quit/restart")
@ -755,7 +770,7 @@ customized by changing `+default-repeat-forward-key' and
(let ((fn-sym (intern (format "+default*repeat-%s" (doom-unquote command)))))
`(progn
(defun ,fn-sym (&rest _)
(define-key! 'motion
(define-key! :states 'motion
(car +default-repeat-keys) #',next-func
(cdr +default-repeat-keys) #',prev-func))
(advice-add #',command :before #',fn-sym))))

View file

@ -84,3 +84,10 @@ If ARG (universal argument), runs `compile' from the current directory."
(set-window-buffer nil buffer)
(with-current-buffer buffer
(funcall (default-value 'major-mode))))))
;;;###autoload
(defun +default/project-tasks ()
"Invokes `+ivy/tasks' or `+helm/tasks', depending on which is available."
(interactive)
(cond ((featurep! :completion ivy) (+ivy/tasks)
(featurep! :completion helm) (+helm/tasks))))

View file

@ -127,44 +127,48 @@
(when IS-MAC
;; Fix MacOS shift+tab
(define-key input-decode-map [S-iso-lefttab] [backtab])
(define-key!
;; Buffer-local font scaling
"s-+" (λ! (text-scale-set 0))
"s-=" #'text-scale-increase
"s--" #'text-scale-decrease
;; Fix frame-switching on MacOS
"s-`" #'other-frame
;; Simple window/frame navigation/manipulation
"s-w" #'delete-window
"s-W" #'delete-frame
"s-n" #'+default/new-buffer
"s-N" #'make-frame
;; Textmate-esque bindings
"s-a" #'mark-whole-buffer
"s-b" #'+default/compile
"s-f" #'swiper
"s-q" (if (daemonp) #'delete-frame #'evil-quit-all)
;; Restore OS undo, save, copy, & paste keys (without cua-mode, because
;; it imposes some other functionality and overhead we don't need)
"s-z" #'undo
"s-s" #'save-buffer
"s-c" (if (featurep 'evil) 'evil-yank 'copy-region-as-kill)
"s-v" #'yank
;; textmate-esque newline insertion
[s-return] #'evil-open-below
[S-s-return] #'evil-open-above
;; textmate-esque deletion
[s-backspace] #'doom/backward-kill-to-bol-and-indent))
;; Fix frame-switching key on MacOS
(global-set-key (kbd "M-`") #'other-frame))
;;
;; Doom's keybinding scheme
(when (featurep! +bindings)
;; Ensure Emacsien motions are available
(map! "C-b" #'backward-word
"C-f" #'forward-word)
;; Make M-x more accessible
(define-key! 'override
"M-x" #'execute-extended-command
"A-x" #'execute-extended-command)
(define-key!
;; Ensure Emacsien motions are available
"C-b" #'backward-word
"C-f" #'forward-word
;; Buffer-local font scaling
"M-+" (λ! (text-scale-set 0))
"M-=" #'text-scale-increase
"M--" #'text-scale-decrease
;; Simple window/frame navigation/manipulation
"M-w" #'delete-window
"M-W" #'delete-frame
"M-n" #'+default/new-buffer
"M-N" #'make-frame
;; Restore OS undo, save, copy, & paste keys (without cua-mode, because
;; it imposes some other functionality and overhead we don't need)
"M-z" #'undo
"M-s" #'save-buffer
"M-c" (if (featurep 'evil) 'evil-yank 'copy-region-as-kill)
"M-v" #'yank
;; Textmate-esque bindings
"M-a" #'mark-whole-buffer
"M-b" #'+default/compile
"M-f" #'swiper
"M-q" (if (daemonp) #'delete-frame #'evil-quit-all)
;; textmate-esque newline insertion
[M-return] #'evil-open-below
[M-S-return] #'evil-open-above
;; textmate-esque deletion
[M-backspace] #'doom/backward-kill-to-bol-and-indent)
(if (featurep 'evil)
(load! "+evil-bindings")

View file

@ -1,52 +1,80 @@
#+TITLE: :feature eval
#+TITLE: feature/eval
#+DATE: February 13, 2017
#+SINCE: v2.0
#+STARTUP: inlineimages
This modules adds support for evaluating code from inside Emacs, including
REPLs.
* Table of Contents :TOC_3:noexport:
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Hacks][Hacks]]
- [[Prerequisites][Prerequisites]]
- [[Features][Features]]
- [[Inline Code Evaluation][Inline Code Evaluation]]
- [[REPLs][REPLs]]
- [[Configuration][Configuration]]
- [[Register a REPL for a major-mode][Register a REPL for a major-mode]]
- [[Change how code is evaluated in a major mode][Change how code is evaluated in a major mode]]
- [[Troubleshooting][Troubleshooting]]
* Table of Contents :TOC:
- [[#install][Install]]
- [[#usage][Usage]]
- [[#repls][REPLs]]
- [[#code-evaluation][*Code Evaluation*]]
- [[#configuration][Configuration]]
- [[#repls-1][REPLs]]
- [[#code-evaluation-1][Code Evaluation]]
* Description
This modules adds inline code evaluation support to Emacs, and supplies a
universal interface for opening and interacting with REPLs.
* Install
This module has no external dependencies. However, specific languages may
require additional setup.
** Module Flags
This module has no flags.
Check the README.org in that language's module for details.
** Plugins
+ [[https://github.com/syohex/emacs-quickrun][quickrun]]
* Usage
** REPLs
Invoked via:
+ ~:repl~ (evil ex-command)
+ =<leader> o r= in normal mode (or visual mode, which sends the selection to
the open REPL)
+ ~M-x +eval/open-repl~
+ ~M-x +eval/send-region-to-repl~ while a selection (and REPL) is active
** Hacks
+ Quickrun has been modified to:
+ Use only one output window, in case of consecutive execution of code.
+ The quickrun window will resize itself to fit its output, once the
underlying process is finished executing the code.
** *Code Evaluation*
* Prerequisites
This module has no direct prerequisites.
However, specific languages may require additional setup. Check the
documentation of that language's module for details.
* Features
** Inline Code Evaluation
Quickrun can be invoked via:
+ ~M-x +eval/buffer~ (or ~gR~, or ~M-r~)
+ ~M-x +eval/region~
+ ~M-x +eval/region-and-replace~
+ Evil users can use the ~gr~ operator to select and run a region.
* Configuration
** REPLs
REPLs are defined for most of the languages Doom supports (check its README.org
to see if it does).
Invoked via:
+ =SPC o r= or ~:repl~ will open a REPL in a popup window. =C-u SPC o r= or
~:repl!~ will open a REPL in the current window. If a REPL is already open and
a selection is active, it will be sent to the REPL.
+ ~M-x +eval/open-repl~
+ ~M-x +eval/send-region-to-repl~ while a selection (and REPL) is active
* Configuration
** Register a REPL for a major-mode
REPLs are defined for most languages Doom supports. Check that language module's
README.org to see if it does (and if it requires additional setup).
To use them, you may use ~M-x +eval/open-repl~, ~:repl~ (for evil users) or the
default binding: =SPC o r=. These will open a REPL in a popup window.
#+begin_quote
You can simply call that mode's REPL command manually. e.g. ~M-x ielm~, but
#+end_quote
Otherwise, you can define your own for a specified major-mode with the =:repl=
setting.
~(set! :repl MAJOR-MODE FUNCTION)~
FUNCTION must return the repl buffer. Any window changes are ignored, then
handed off to shackle (assuming shackle-mode is on) to display in a popup
window.
FUNCTION should be a command that opens a repl buffer. Any window changes are
ignored, then handed off to shackle (assuming shackle-mode is on) to display in
a popup window.
#+BEGIN_SRC emacs-lisp
(defun +emacs-lisp/repl ()
@ -58,10 +86,10 @@ window.
(bury-buffer buf)
buf)))))
(set! :repl 'emacs-lisp-mode #'+emacs-lisp/repl)
(set-repl-handler! 'emacs-lisp-mode #'+emacs-lisp/repl)
#+END_SRC
** Code Evaluation
** Change how code is evaluated in a major mode
Run regions or entire buffers with [[https://github.com/syohex/emacs-quickrun][Quickrun]]. Output is show in a popup window.
Quickrun includes support for many languages, usually by sending text directly
@ -72,21 +100,22 @@ without support (like [[https://crystal-lang.org/][Crystal]]), or a language wit
Here's how you define a "runner":
#+BEGIN_SRC emacs-lisp
(set! :eval 'crystal-mode
'((:command . "crystal")
(:exec . "%c %s")
(:description . "Run Crystal script")))
(set-eval-handler! 'crystal-mode
'((:command . "crystal")
(:exec . "%c %s")
(:description . "Run Crystal script")))
#+END_SRC
A simpler version is simply to use the path to the binary:
#+BEGIN_SRC emacs-lisp
(set! :eval 'groovy-mode "groovy")
(set-eval-handler! 'groovy-mode "groovy")
#+END_SRC
Or if you'd rather run an elisp command:
#+BEGIN_SRC emacs-lisp
(set! :eval 'emacs-lisp-mode #'+emacs-lisp-eval)
(set-eval-handler! 'emacs-lisp-mode #'+emacs-lisp-eval)
#+END_SRC
* Troubleshooting

View file

@ -1,61 +1,127 @@
#+TITLE: :feature evil
#+TITLE: feature/evil
#+DATE: February 2, 2017
#+SINCE: v2.0
#+STARTUP: inlineimages
* Table of Contents :TOC_3:noexport:
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Hacks][Hacks]]
- [[Prerequisites][Prerequisites]]
- [[Features][Features]]
- [[Ported vim plugins][Ported vim plugins]]
- [[Custom Text Objects][Custom Text Objects]]
- [[Custom Ex Commands][Custom Ex Commands]]
- [[A hybrid code-folding system][A hybrid code-folding system]]
- [[Differences from vim][Differences from vim]]
- [[Configuration][Configuration]]
- [[Removing evil-mode][Removing evil-mode]]
* Description
This holy module brings the vim experience to Emacs.
* Table of Contents :TOC:
- [[#removing-evil-mode][Removing evil-mode]]
- [[#features][Features]]
- [[#multiple-cursors][Multiple-cursors]]
- [[#a-hybrid-code-folding-system][A hybrid code-folding system]]
- [[#hacks][Hacks]]
- [[#differences-from-vim][Differences from vim]]
** Module Flags
+ =+everywhere= Enables evilified keybinds everywhere possible, utilizing the
~evil-collection~ plugin.
* Removing evil-mode
See the [[https://github.com/hlissner/doom-emacs/wiki/FAQ#remove-vimevil-for-a-more-vanilla-emacs-experience][corresponding question in the FAQ]].
** Plugins
+ [[https://github.com/emacs-evil/evil][evil]]
+ [[https://github.com/wcsmith/evil-args][evil-args]]
+ [[https://github.com/linktohack/evil-commentary][evil-commentary]]
+ [[https://github.com/PythonNut/evil-easymotion][evil-easymotion]]
+ [[https://github.com/cute-jumper/evil-embrace.el][evil-embrace]]
+ [[https://github.com/syl20bnr/evil-escape][evil-escape]]
+ [[https://github.com/Dewdrops/evil-exchange][evil-exchange]]
+ [[https://github.com/TheBB/evil-indent-plus][evil-indent-plus]]
+ [[https://github.com/redguardtoo/evil-matchit][evil-matchit]]
+ [[https://github.com/cofi/evil-numbers][evil-numbers]]
+ [[https://github.com/noctuid/evil-textobj-anyblock][evil-textobj-anyblock]]
+ [[https://github.com/hlissner/evil-snipe][evil-snipe]]
+ [[https://github.com/emacs-evil/evil-surround][evil-surround]]
+ [[https://github.com/alexmurray/evil-vimish-fold][evil-vimish-fold]]
+ [[https://github.com/bling/evil-visualstar][evil-visualstar]]
+ [[https://github.com/ninrod/exato][exato]]
+ [[https://github.com/emacs-evil/evil-collection][evil-collection]]*
** Hacks
+ When a window is split, the new window will be focused.
+ The o/O keys will respect and continue commented lines (can be disabled by
setting ~+evil-want-o/O-to-continue-comments~ to ~nil~).
+ From visual mode, =*= and =#= will search for the current selection instead of
the word-at-point.
+ The ~:g[lobal]~ ex command has been modified to highlight matches
incrementally.
+ More of vim's filename modifiers are supported in ex commands (like ~:p~,
~:p:h~ or ~:t~) than vanilla evil-mode offers.
+ A custom filename modifier is available in Doom: ~:P~, which expands to the
project root (throws an error if not in a project).
* Prerequisites
This module has no external prerequisites.
* Features
+ A better ~:g[lobal]~ command with incremental highlighting.
+ Adds the ~:al[ign]~ ex command: offers an ex interface to ~align-regexp~ with
incremental highlighting.
+ Support for more of vim's filename modifiers in ex commands (like ~:p~, ~:p:h~
or ~:t~) than vanilla evil-mode offers.
** Ported vim plugins
The following vim plugins have been ported to evil:
| Vim Plugin | Emacs Plugin | Keybind(s) |
|-----------------------+--------------------------------+---------------------|
| vim-commentary | evil-commentary | omap =gc= |
| vim-easymotion | evil-easymotion | omap =gs= |
| vim-seek or vim-sneak | evil-snipe | mmap =s=/=S= |
| vim-surround | evil-embrace and evil-surround | vmap =S=, omap =ys= |
In other modules:
+ The tools/neotree & tools/treemacs modules contain a =NERDTree= equivalent.
+ The editor/multiple-cursors module contains:
+ ~vim-multiedit~ => evil-multiedit
+ ~vim-multiple-cursors~ => evil-mc
** Custom Text Objects
+ A list of new text objects:
+ Blocks: ~B~ (from ~evil-textobj-anyblock~)
+ Args: ~a~ (from ~evil-args~)
+ Indentation: ~i~ / ~I~ / ~J~ (from ~evil-indent-plus~)
+ Incorporates vim functionality ported to evil:
+ ~vim-commentary~ => ~evil-commentary~
+ ~vim-easymotion~ => ~evil-easymotion~
+ ~vim-multiedit~ => ~evil-multiedit~
+ ~vim-multiple-cursors~ => ~evil-mc~ & ~evil-multiedit~
+ ~vim-seek~ or ~vim-sneak~ => ~evil-snipe~
+ ~vim-surround~ => ~evil-embrace~ & ~evil-surround~
+ =NERDTree= equivalent is available in =:tools neotree=
** Multiple-cursors
Two multiple-cursor implementations exist in this module: ~evil-mc~ and
~evil-multiedit~. Together, these provide the functionality of
~vim-multiple-cursors~.
The former lets you place "clone" cursors. The latter lets you interactively
edit many regions at once (like an interactive version of ~:%s~).
** Custom Ex Commands
| Ex Command | Description |
|----------------------+----------------------------------------------------------------------------------|
| ~:al[ign][!] REGEXP~ | Align text to the first match of REGEXP. If BANG, align all matches on each line |
| ~:mv[!] NEWPATH~ | Move the current file to NEWPATH |
| ~:cp[!] NEWPATH~ | Copy the current file to NEWPATH |
| ~:rm[!] [PATH]~ | Delete the current buffer's file and buffer |
** A hybrid code-folding system
This module combines ~evil-vimish-fold~ and ~hideshow~. The former allows
arbitrary folds and the latter allows folds on markers and indentation.
Together, they create a more consistent (and feature-complete) code-folding
system.
This module combines ~vimish-fold~ and ~hideshow~. The former allows arbitrary
folds and the latter allows folds on markers and indentation. Together, they
create a more consistent (and feature-complete) code-folding system.
Most vim folding keys should work, e.g. =zr=, =zm=, =za=, =zo=, etc.
** Hacks
+ Automatically moves to new window when splitting
+ From visual mode, =*= and =#= will search for the current selection instead of
the word-at-point.
** Differences from vim
+ Column-wise ranges in ex commands are enabled by default. i.e. the range in
=:'<,'>s/a/b= will only affects the visual selection, not full lines (see
~evil-ex-visual-char-range~).
+ =:g= will incrementally highlight buffer matches.
* Configuration
** Removing evil-mode
You must do two things to remove Evil:
1. Remove =:feature evil= from =~/.doom.d/init.el=,
2. Run ~bin/doom refresh~ to clean up lingering dependencies and refresh yuor
autoloads files.
3. [OPTIONAL] You may want a new ~doom-leader-alt-key~ and
~doom-localleader-alt-key~. By default, these are bound to =M-SPC= and =M-SPC
m=.
#+begin_quote
Ignore ~doom-leader-key~ and ~doom-localleader-key~, they don't apply to
non-evil sessions.
#+end_quote
Note that evil-specific configuration and keybinds (defined with ~map!~) will be
ignored without evil present (and stripped out when byte-compiling).
Unfortunately, since Doom was designed by a vimmer, for vimmers, little
consideration into a keybinding scheme for vanilla Emacs users.

View file

@ -0,0 +1,79 @@
#+TITLE: feature/file-templates
#+DATE: February 11, 2017
#+SINCE: v2.0
#+STARTUP: inlineimages
* Table of Contents :TOC_2:noexport:
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Prerequisites][Prerequisites]]
- [[Usage][Usage]]
- [[Inserting OSS licenses][Inserting OSS licenses]]
- [[Configuration][Configuration]]
- [[Registering a new file template][Registering a new file template]]
- [[Changing existing file templates][Changing existing file templates]]
- [[Adding new OSS licenses][Adding new OSS licenses]]
- [[Troubleshooting][Troubleshooting]]
- [[Appendix][Appendix]]
- [[API][API]]
- [[Commands][Commands]]
- [[Variables][Variables]]
* Description
This module adds file templates for blank files, powered by yasnippet.
** Module Flags
This module provides no flags.
** Plugins
This module installs no plugins.
* Prerequisites
This module has no prerequisites.
* Usage
File templates are automatically expanded when opening empty files.
They are also regular yasnippet snippets, which can be expanded by typing their
trigger and pressing =TAB=. By convention, the triggers for file templates are
prefixed with two underscores ~__~.
** Inserting OSS licenses
A special command is available for inserting software licenses: ~M-x
+file-templates/insert-license~.
#+begin_quote
Licenses with a ~-bp~ suffix are boilerplate templates; shorter versions meant
for comment headers in code.
#+end_quote
* Configuration
** TODO Registering a new file template
** TODO Changing existing file templates
** Adding new OSS licenses
The ~+file-templates/insert-license~ command searches for snippets under
~text-mode~ that are named ~__license-ABC~, where ABC is the short name of the
license. e.g. ~__license-mit~.
So long as these files exist, ~+file-templates/insert-license~ will recognize
them.
* Troubleshooting
If a file template isn't expanding where you expect it to, run ~M-x
+file-templates/debug~. This will report to you what file template rule would
apply for the correct file.
* Appendix
** API
+ ~set-file-template! PRED &rest PLIST~
+ ~set-file-templates! &rest TEMPLATES~
** Commands
+ ~+file-templates/insert-license~
+ ~+file-templates/debug~
** Variables
+ ~+file-templates-dir~
+ ~+file-templates-default-trigger~
+ ~+file-templates-alist~

View file

@ -1,12 +1,36 @@
#+TITLE: :feature snippets
This module adds snippets to Emacs, powered by yasnippet.
#+TITLE: feature/snippets
#+DATE: February 11, 2017
#+SINCE: v2.0
#+STARTUP: inlineimages
* Table of Contents :TOC:
- [[#install][Install]]
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Hacks][Hacks]]
- [[Prerequisites][Prerequisites]]
- [[Features][Features]]
- [[Configuration][Configuration]]
- [[Troubleshooting][Troubleshooting]]
* Install
There are no extra dependencies for this module.
* Description
This module adds snippets to Emacs, powered by yasnippet.
By default, =private/default= installs a snippet library tailored exclusively
for Doom Emacs.
** Module Flags
This module exposes no flags.
** Plugins
+ [[https://github.com/joaotavora/yasnippet][yasnippet]]
+ [[https://github.com/abo-abo/auto-yasnippet][auto-yasnippet]]
+ [[https://github.com/hlissner/emacs-snippets][emacs-snippets]]
** TODO Hacks
* Prerequisites
This module has no external dependencies.
* TODO Features
* TODO Configuration
* TODO Troubleshooting

View file

@ -1,9 +1,5 @@
;;; lang/csharp/config.el -*- lexical-binding: t; -*-
;; `shader-mode' --- unity shaders
(add-to-list 'auto-mode-alist '("\\.shader$" . shader-mode))
(def-package! omnisharp
:hook (csharp-mode . omnisharp-mode)
:commands omnisharp-install-server
@ -51,3 +47,12 @@
"r" (λ! (omnisharp-unit-test "fixture"))
"s" (λ! (omnisharp-unit-test "single"))
"a" (λ! (omnisharp-unit-test "all")))))
(when (featurep! +unity)
;; `shader-mode' --- unity shaders
(add-to-list 'auto-mode-alist '("\\.shader$" . shader-mode))
(def-project-mode! +csharp-unity-mode
:modes (csharp-mode shader-mode)
:files (and "Assets" "Library/MonoManager.asset" "Library/ScriptMapper")))

View file

@ -3,5 +3,6 @@
(package! csharp-mode)
(package! omnisharp)
(package! shader-mode)
(when (featurep! +unity)
(package! shader-mode))

View file

@ -1,5 +1,20 @@
#+TITLE: :lang go
#+TITLE: lang/go
#+DATE: January 16, 2017
#+SINCE: v2.0
#+STARTUP: inlineimages
* Table of Contents :TOC:
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Prerequisites][Prerequisites]]
- [[Go][Go]]
- [[Dependencies][Dependencies]]
- [[Features][Features]]
- [[Configuration][Configuration]]
- [[Troubleshooting][Troubleshooting]]
* Description
This module adds [[https://golang.org][Go]] support.
+ Code completion (~gocode~)
@ -12,29 +27,28 @@ This module adds [[https://golang.org][Go]] support.
+ [[../../feature/file-templates/templates/go-mode][File templates]]
+ [[https://github.com/hlissner/emacs-snippets/tree/master/go-mode][Snippets]]
#+begin_quote
I have mixed feelings about Go. It's a decent compromise between C and higher-level languages, is pleasantly straight-forward and elegant, but lacks /native/ support for luxuries I miss from other languages, like generics, optional arguments, and function overloading. You've got to learn to love ~interface{}~.
** Module Flags
This module provides no flags.
Still, Go is a remarkably useful (and fast!) companion for a variety of small-to-medium backend web and CLI projects.
#+end_quote
** Plugins
+ [[https://github.com/dominikh/go-mode.el][go-mode]]
+ [[https://github.com/syohex/emacs-go-eldoc][go-eldoc]]
+ [[https://github.com/dominikh/go-mode.el][go-guru]]
+ [[https://github.com/manute/gorepl-mode][gorepl-mode]]
+ [[https://github.com/mdempsky/gocode][company-go]]*
* Table of Contents :TOC:
- [[#install][Install]]
- [[#go][Go]]
- [[#dependencies][Dependencies]]
* Install
* Prerequisites
** Go
To get started with Go, you need the ~go~ tool:
*** MacOS
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
#+BEGIN_SRC bash
brew install go
#+END_SRC
*** Arch Linux
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
sudo pacman --needed --noconfirm -S go
#+BEGIN_SRC bash
sudo pacman -S go
#+END_SRC
** Dependencies
@ -42,10 +56,10 @@ This module requires a valid ~GOPATH~, and the following Go packages:
+ ~gocode~ (for code completion & eldoc support)
+ ~godoc~ (for documentation lookup)
+ ~goimports~ (for auto-formatting code on save and fixing imports)
+ ~gorename~ (for extra refactoring commands)
+ ~gore~ (for the REPL)
+ ~guru~ (for code navigation & refactoring commands)
+ ~goimports~ (optional: for auto-formatting code on save & fixing imports)
#+BEGIN_SRC sh
export GOPATH=~/work/go
@ -58,3 +72,8 @@ go get -u golang.org/x/tools/cmd/gorename
go get -u golang.org/x/tools/cmd/guru
#+END_SRC
* TODO Features
* TODO Configuration
* TODO Troubleshooting

View file

@ -12,8 +12,7 @@
(when (featurep! :feature syntax-checker)
(setq haskell-process-show-overlays nil)) ; flycheck makes this unnecessary
(add-hook! 'haskell-mode-hook
#'(subword-mode ; improves text navigation with camelCase
haskell-collapse-mode ; support folding haskell code blocks
#'(haskell-collapse-mode ; support folding haskell code blocks
interactive-haskell-mode))
(set-lookup-handlers! 'haskell-mode :definition #'haskell-mode-jump-to-def-or-tag)
(set-file-template! 'haskell-mode :trigger #'haskell-auto-insert-module-template :project t)

View file

@ -1,174 +0,0 @@
;;; lang/javascript/+screeps.el -*- lexical-binding: t; -*-
;; TODO Constants may be out-of-date
(defconst screeps-objects
'("ConstructionSite" "Creep" "Flag" "Game" "Memory" "Mineral" "Nuke"
"OwnedStructure" "PathFinder" "RawMemory" "Resource" "Room"
"RoomObject" "RoomPosition" "Source"
"Structure" "StructureController" "StructureExtension"
"StructureExtractor" "StructureKeeperLair" "StructureLab"
"StructureLink" "StructureNuker" "StructureObserver"
"StructurePortal" "StructurePowerBank" "StructurePowerSpawn"
"StructureRampart" "StructureRoad" "StructureSpawn"
"StructureStorage" "StructureTerminal" "StructureTower"
"StructureWall"))
(defconst screeps-constants
'("OK" "ERR_NOT_OWNER" "ERR_NO_PATH" "ERR_NAME_EXISTS" "ERR_BUSY"
"ERR_NOT_FOUND" "ERR_NOT_ENOUGH_ENERGY" "ERR_NOT_ENOUGH_RESOURCES"
"ERR_INVALID_TARGET" "ERR_FULL" "ERR_NOT_IN_RANGE"
"ERR_INVALID_ARGS" "ERR_TIRED" "ERR_NO_BODYPART"
"ERR_NOT_ENOUGH_EXTENSIONS" "ERR_RCL_NOT_ENOUGH"
"ERR_GCL_NOT_ENOUGH"
"FIND_EXIT_TOP" "FIND_EXIT_RIGHT" "FIND_EXIT_BOTTOM"
"FIND_EXIT_LEFT" "FIND_EXIT" "FIND_CREEPS" "FIND_MY_CREEPS"
"FIND_HOSTILE_CREEPS" "FIND_SOURCES_ACTIVE" "FIND_SOURCES"
"FIND_DROPPED_ENERGY" "FIND_DROPPED_RESOURCES" "FIND_STRUCTURES"
"FIND_MY_STRUCTURES" "FIND_HOSTILE_STRUCTURES" "FIND_FLAGS"
"FIND_CONSTRUCTION_SITES" "FIND_MY_SPAWNS" "FIND_HOSTILE_SPAWNS"
"FIND_MY_CONSTRUCTION_SITES" "FIND_HOSTILE_CONSTRUCTION_SITES"
"FIND_MINERALS" "FIND_NUKES"
"TOP" "TOP_RIGHT" "RIGHT" "BOTTOM_RIGHT" "BOTTOM" "BOTTOM_LEFT"
"LEFT" "TOP_LEFT"
"COLOR_RED" "COLOR_PURPLE" "COLOR_BLUE" "COLOR_CYAN" "COLOR_GREEN"
"COLOR_YELLOW" "COLOR_ORANGE" "COLOR_BROWN" "COLOR_GREY"
"COLOR_WHITE"
"LOOK_CREEPS" "LOOK_ENERGY" "LOOK_RESOURCES" "LOOK_SOURCES"
"LOOK_MINERALS" "LOOK_STRUCTURES" "LOOK_FLAGS"
"LOOK_CONSTRUCTION_SITES" "LOOK_NUKES" "LOOK_TERRAIN"
"OBSTACLE_OBJECT_TYPES"
"MOVE" "WORK" "CARRY" "ATTACK" "RANGED_ATTACK" "TOUGH" "HEAL"
"CLAIM"
"BODYPART_COST"
"CREEP_LIFE_TIME" "CREEP_CLAIM_LIFE_TIME" "CREEP_CORPSE_RATE"
"CARRY_CAPACITY" "HARVEST_POWER" "HARVEST_MINERAL_POWER"
"REPAIR_POWER" "DISMANTLE_POWER" "BUILD_POWER" "ATTACK_POWER"
"UPGRADE_CONTROLLER_POWER" "RANGED_ATTACK_POWER" "HEAL_POWER"
"RANGED_HEAL_POWER" "REPAIR_COST" "DISMANTLE_COST"
"RAMPART_DECAY_AMOUNT" "RAMPART_DECAY_TIME" "RAMPART_HITS"
"RAMPART_HITS_MAX"
"ENERGY_REGEN_TIME" "ENERGY_DECAY"
"SPAWN_HITS" "SPAWN_ENERGY_START" "SPAWN_ENERGY_CAPACITY"
"CREEP_SPAWN_TIME"
"SOURCE_ENERGY_CAPACITY" "SOURCE_ENERGY_NEUTRAL_CAPACITY"
"SOURCE_ENERGY_KEEPER_CAPACITY"
"WALL_HITS" "WALL_HITS_MAX"
"EXTENSION_HITS" "EXTENSION_ENERGY_CAPACITY"
"ROAD_HITS" "ROAD_WEAROUT" "ROAD_DECAY_AMOUNT" "ROAD_DECAY_TIME"
"LINK_HITS" "LINK_HITS_MAX" "LINK_CAPACITY" "LINK_COOLDOWN"
"LINK_LOSS_RATIO"
"STORAGE_CAPACITY" "STORAGE_HITS"
"STRUCTURE_SPAWN" "STRUCTURE_EXTENSION" "STRUCTURE_ROAD"
"STRUCTURE_WALL" "STRUCTURE_RAMPART" "STRUCTURE_KEEPER_LAIR"
"STRUCTURE_PORTAL" "STRUCTURE_CONTROLLER" "STRUCTURE_LINK"
"STRUCTURE_STORAGE" "STRUCTURE_TOWER" "STRUCTURE_OBSERVER"
"STRUCTURE_POWER_BANK" "STRUCTURE_POWER_SPAWN" "STRUCTURE_EXTRACTOR"
"STRUCTURE_LAB" "STRUCTURE_TERMINAL" "STRUCTURE_CONTAINER"
"STRUCTURE_NUKER"
"CONSTRUCTION_COST"
"CONSTRUCTION_COST_ROAD_SWAMP_RATIO"
"CONTROLLER_LEVELS" "CONTROLLER_STRUCTURES" "CONTROLLER_DOWNGRADE"
"CONTROLLER_CLAIM_DOWNGRADE" "CONTROLLER_RESERVE"
"CONTROLLER_RESERVE_MAX" "CONTROLLER_MAX_UPGRADE_PER_TICK"
"CONTROLLER_ATTACK_BLOCKED_UPGRADE"
"TOWER_HITS" "TOWER_CAPACITY" "TOWER_ENERGY_COST"
"TOWER_POWER_ATTACK" "TOWER_POWER_HEAL" "TOWER_POWER_REPAIR"
"TOWER_OPTIMAL_RANGE" "TOWER_FALLOFF_RANGE" "TOWER_FALLOFF"
"OBSERVER_HITS" "OBSERVER_RANGE"
"POWER_BANK_HITS" "POWER_BANK_CAPACITY_MAX"
"POWER_BANK_CAPACITY_MIN" "POWER_BANK_CAPACITY_CRIT"
"POWER_BANK_DECAY" "POWER_BANK_HIT_BACK"
"POWER_SPAWN_HITS" "POWER_SPAWN_ENERGY_CAPACITY"
"POWER_SPAWN_POWER_CAPACITY" "POWER_SPAWN_ENERGY_RATIO"
"EXTRACTOR_HITS"
"LAB_HITS" "LAB_MINERAL_CAPACITY"
"LAB_ENERGY_CAPACITY" "LAB_BOOST_ENERGY" "LAB_BOOST_MINERAL"
"LAB_COOLDOWN"
"GCL_POW" "GCL_MULTIPLY" "GCL_NOVICE"
"MODE_SIMULATION" "MODE_SURVIVAL" "MODE_WORLD" "MODE_ARENA"
"TERRAIN_MASK_WALL" "TERRAIN_MASK_SWAMP" "TERRAIN_MASK_LAVA"
"MAX_CONSTRUCTION_SITES" "MAX_CREEP_SIZE"
"MINERAL_REGEN_TIME" "MINERAL_MIN_AMOUNT" "MINERAL_RANDOM_FACTOR"
"TERMINAL_CAPACITY" "TERMINAL_HITS" "TERMINAL_SEND_COST"
"TERMINAL_MIN_SEND"
"CONTAINER_HITS" "CONTAINER_CAPACITY" "CONTAINER_DECAY"
"CONTAINER_DECAY_TIME" "CONTAINER_DECAY_TIME_OWNED"
"NUKER_HITS" "NUKER_COOLDOWN" "NUKER_ENERGY_CAPACITY"
"NUKER_GHODIUM_CAPACITY" "NUKE_LAND_TIME" "NUKE_RANGE" "NUKE_DAMAGE"
"RESOURCE_ENERGY" "RESOURCE_POWER"
"RESOURCE_HYDROGEN" "RESOURCE_OXYGEN" "RESOURCE_UTRIUM"
"RESOURCE_LEMERGIUM" "RESOURCE_KEANIUM" "RESOURCE_ZYNTHIUM"
"RESOURCE_CATALYST" "RESOURCE_GHODIUM"
"RESOURCE_HYDROXIDE" "RESOURCE_ZYNTHIUM_KEANITE"
"RESOURCE_UTRIUM_LEMERGITE"
"RESOURCE_UTRIUM_HYDRIDE" "RESOURCE_UTRIUM_OXIDE"
"RESOURCE_KEANIUM_HYDRIDE" "RESOURCE_KEANIUM_OXIDE"
"RESOURCE_LEMERGIUM_HYDRIDE" "RESOURCE_LEMERGIUM_OXIDE"
"RESOURCE_ZYNTHIUM_HYDRIDE" "RESOURCE_ZYNTHIUM_OXIDE"
"RESOURCE_GHODIUM_HYDRIDE" "RESOURCE_GHODIUM_OXIDE"
"RESOURCE_UTRIUM_ACID" "RESOURCE_UTRIUM_ALKALIDE"
"RESOURCE_KEANIUM_ACID" "RESOURCE_KEANIUM_ALKALIDE"
"RESOURCE_LEMERGIUM_ACID" "RESOURCE_LEMERGIUM_ALKALIDE"
"RESOURCE_ZYNTHIUM_ACID" "RESOURCE_ZYNTHIUM_ALKALIDE"
"RESOURCE_GHODIUM_ACID" "RESOURCE_GHODIUM_ALKALIDE"
"RESOURCE_CATALYZED_UTRIUM_ACID"
"RESOURCE_CATALYZED_UTRIUM_ALKALIDE"
"RESOURCE_CATALYZED_KEANIUM_ACID"
"RESOURCE_CATALYZED_KEANIUM_ALKALIDE"
"RESOURCE_CATALYZED_LEMERGIUM_ACID"
"RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE"
"RESOURCE_CATALYZED_ZYNTHIUM_ACID"
"RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE"
"RESOURCE_CATALYZED_GHODIUM_ACID"
"RESOURCE_CATALYZED_GHODIUM_ALKALIDE"
"REACTIONS" "BODYPARTS_ALL" "RESOURCES_ALL" "COLORS_ALL"))
(defun +javascript|init-screeps-mode ()
(when (eq major-mode 'js2-mode)
(push 'javascript-jshint flycheck-disabled-checkers)
(setq js2-additional-externs (append '("_") screeps-objects screeps-constants))))

View file

@ -234,9 +234,3 @@
(def-project-mode! +javascript-gulp-mode
:when (locate-dominating-file default-directory "gulpfile.js"))
(def-project-mode! +javascript-screeps-mode
:match "/screeps\\(?:-ai\\)?/.+$"
:modes (+javascript-npm-mode)
:add-hooks (+javascript|init-screeps-mode)
:on-load (load! "+screeps"))

View file

@ -66,7 +66,7 @@ If no viewers are found, `latex-preview-pane' is used.")
;; Enable rainbow mode after applying styles to the buffer
(add-hook 'TeX-update-style-hook #'rainbow-delimiters-mode)
(when (featurep! :feature spellcheck)
(add-hook 'TeX-mode-local-vars-hook #'flyspell-mode))
(add-hook 'latex-mode-local-vars-hook #'flyspell-mode))
;; All these excess pairs dramatically slow down typing in latex buffers, so
;; we remove them. Let snippets do their job.
(after! smartparens-latex

View file

@ -364,12 +364,11 @@ between the two."
;; more intuitive RET keybinds
:i [return] #'org-return-indent
:n [return] #'+org/dwim-at-point
;; textmate-esque newline insertion
:nvi [C-return] (λ! (+org/insert-item 'below))
:nvi [C-S-return] (λ! (+org/insert-item 'above))
(:when IS-MAC
;; textmate-esque newline insertion
:nvi [s-return] (λ! (+org/insert-item 'below))
:nvi [S-s-return] (λ! (+org/insert-item 'above)))
:nvi [M-return] (λ! (+org/insert-item 'below))
:nvi [M-S-return] (λ! (+org/insert-item 'above))
;; more vim-esque org motion keys (not covered by evil-org-mode)
:m "]]" (λ! (org-forward-heading-same-level nil) (org-beginning-of-line))
:m "[[" (λ! (org-backward-heading-same-level nil) (org-beginning-of-line))

View file

@ -1,20 +1,34 @@
#+TITLE: :tools ein
* EIN -- Emacs IPython Notebook
Tool to work with Jupyter notebooks within emacs.
#+TITLE: tools/ein
#+DATE: April 11, 2018
#+SINCE: v2.0
#+STARTUP: inlineimages
* Table of Contents :TOC:
- [[EIN -- Emacs IPython Notebook][EIN -- Emacs IPython Notebook]]
- [[Install][Install]]
- [[Usage][Usage]]
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Prerequisites][Prerequisites]]
- [[Features][Features]]
- [[Interaction with a Jupyter server][Interaction with a Jupyter server]]
- [[Configuration][Configuration]]
- [[Setting the default location of your notebooks][Setting the default location of your notebooks]]
* Install
Add =:tool ein= to your ~doom!~ call in your private ~init.el~.
* Description
Adds Jupyter notebook integration into emacs.
* Usage
** Module Flags
This module provides no flags.
** Plugins
+ [[https://github.com/millejoh/emacs-ipython-notebook][ein]]
* Prerequisites
This module has no prereqisites.
* Features
** Interaction with a Jupyter server
Three functions are available to start EIN:
1. ~ein:jupyter-server-start~ --- Start a jupyter server within emacs
2. ~ein:notebooklist-login~ --- Login to an existing jupyter server
3. ~ein:notebooklist-open~ --- Open the list of jupyter notebooks
@ -25,15 +39,15 @@ When ~ein:jupyter-server-start~ is called, after successfully finishing,
~ein:notebooklist-login~ and ~ein:notebooklist-open~ will be automatically
called.
When in the ~Notebook List~ buffer, the key ~o~ calls ~ace-link~ to speed up the
When in the ~Notebook List~ buffer, the key =o= calls ~ace-link~ to speed up the
process of selecting links in the buffer.
If ~company-mode~ is enabled as a module, ~company-ein~ will be used for
completion purposes.
If ~company-mode~ is enabled as a module, ~company-ein~ will handle completion.
* Configuration
Specify the default directory where EIN searches for notebooks using:
~(set! :ein-notebook-dir "~/my-notebooks")~
** Setting the default location of your notebooks
Change ~+ein-notebook-dir~ to tell ein where to find your Jupityr notebooks.
#+BEGIN_SRC emacs-lisp
(setq +ein-notebook-dir "~/my-notebooks")
#+END_SRC

View file

@ -58,6 +58,7 @@ what features are available.")
(def-package! magithub
:after magit
:when (not (featurep! :tools magit +forge))
:preface
;; Magithub is not well-behaved, so this needs to be set early
(setq magithub-dir (concat doom-etc-dir "magithub/"))
@ -100,3 +101,9 @@ what features are available.")
(evil-define-key* evil-magit-state git-rebase-mode-map
"gj" #'git-rebase-move-line-down
"gk" #'git-rebase-move-line-up)))
(def-package! forge
:when (featurep! :tools magit +forge)
:config
(map! :leader
:desc "Forge ""gF" #'forge-dispatch))

View file

@ -126,7 +126,7 @@ fields in `+pass-url-fields' is used to find the url field."
'+pass/ivy
'(("o" password-store-copy "copy password")
("e" +pass/edit-entry "edit entry")
("u" +pass/copy-login "copy username")
("u" +pass/copy-user "copy username")
("b" +pass/copy-url "open url in browser")
("f" +pass/copy-field "get field"))))

View file

@ -6,8 +6,8 @@
(if (featurep! :ui modeline)
(def-modeline-format! '+pdf
'(+mode-line-bar " " +mode-line-buffer-id " " +pdf-pages)
'(+mode-line-major-mode +mode-line-vcs))
'(+modeline-matches " " +modeline-buffer-id " " +pdf-pages)
'(+modeline-major-mode (vc-mode (" " +modeline-vcs))))
(def-modeline! '+pdf
'(bar matches " " buffer-info " " +pdf-pages)
'(major-mode vcs)))

View file

@ -34,8 +34,7 @@
(load! "+modeline"))
;; Handle PDF-tools related popups better
(set-popup-rule! "^\\*Outline*" :side 'right :size 40 :select nil)
;; TODO: Add additional important windows that should be handled differently
;; TODO: These two next rules don't work (they should), investigate
;; The next rules are not needed, they are defined in modules/ui/popups/+hacks.el
;; (set-popup-rule! "\\*Contents\\*" :side 'right :size 40)
;; (set-popup-rule! "* annots\\*$" :side 'left :size 40 :select nil)
)

View file

@ -0,0 +1,116 @@
#+TITLE: ui/modeline
#+DATE: July 29, 2018
#+SINCE: v2.0.9
#+STARTUP: inlineimages
* Table of Contents :TOC_2:noexport:
- [[Description][Description]]
- [[Module Flags][Module Flags]]
- [[Plugins][Plugins]]
- [[Prerequisites][Prerequisites]]
- [[Usage][Usage]]
- [[Hiding the modeline][Hiding the modeline]]
- [[Switching the modeline and header line][Switching the modeline and header line]]
- [[Configuration][Configuration]]
- [[Changing the default modeline][Changing the default modeline]]
- [[Activating a format][Activating a format]]
- [[Defining a modeline format][Defining a modeline format]]
- [[Defining a modeline segment][Defining a modeline segment]]
- [[Extracting Doom's modeline into your config][Extracting Doom's modeline into your config]]
- [[Troubleshooting][Troubleshooting]]
- [[Where are my minor modes?][Where are my minor modes?]]
- [[Icons in my modeline look strange][Icons in my modeline look strange]]
- [[Appendix][Appendix]]
- [[Commands][Commands]]
- [[Autodefs][Autodefs]]
- [[Functions][Functions]]
- [[Variables][Variables]]
- [[Faces][Faces]]
- [[Modeline segments][Modeline segments]]
* Description
This module provides an Atom-inspired, minimalistic modeline for Doom Emacs, as
well as an API for building your own.
+ A match count panel (for ~evil-search~, ~iedit~ and ~evil-substitute~)
+ An indicator for recording a macro
+ Local python/ruby version in the major-mode
+ A customizable mode-line height (see ~+doom-modeline-height~)
+ An error/warning count segment for flycheck
[[/../screenshots/ml.png]]
[[/../screenshots/ml-search.png]]
[[/../screenshots/ml-subst.png]]
[[/../screenshots/ml-macro.png]]
[[/../screenshots/ml-version.png]]
[[/../screenshots/ml-errors.png]]
** Module Flags
This module provides no flags.
** Plugins
+ [[https://github.com/syohex/emacs-anzu][anzu]]
+ [[https://github.com/syohex/emacs-evil-anzu][evil-anzu]]
+ [[https://gitlab.com/bennya/shrink-path.el][shrink-path]]
* Prerequisites
This module has no prerequisites.
* Usage
** TODO Hiding the modeline
** TODO Switching the modeline and header line
* Configuration
** TODO Changing the default modeline
** TODO Activating a format
** TODO Defining a modeline format
** TODO Defining a modeline segment
** TODO Extracting Doom's modeline into your config
* Troubleshooting
** Where are my minor modes?
I rarely need to know what minor modes are active, so I removed them. ~M-x
doom/what-minor-mode~ was written to substitute for it.
** TODO Icons in my modeline look strange
* Appendix
** Commands
This module exposes no public commands.
** Autodefs
+ ~def-modeline-format! NAME LEFT &optional RIGHT~
+ ~def-modeline-segment! NAME &rest REST~
+ ~set-modeline! NAME &optional DEFAULT~
** Functions
+ +modeline-file-path
** Variables
+ +modeline-width
+ +modeline-height
+ +modeline-buffer-path-function
+ +modeline-format-left
+ +modeline-format-rigth
** Faces
+ doom-modeline-buffer-path
+ doom-modeline-buffer-file
+ doom-modeline-buffer-modified
+ doom-modeline-buffer-major-mode
+ doom-modeline-highlight
+ doom-modeline-panel
+ doom-modeline-info
+ doom-modeline-warning
+ doom-modeline-urgent
+ doom-modeline-bar
** Modeline segments
+ +modeline-buffer-state
+ +modeline-buffer-id
+ +modeline-buffer-directory
+ +modeline-vcs
+ +modeline-encoding
+ +modeline-major-mode
+ +modeline-matches
+ +modeline-selection-info

View file

@ -503,8 +503,8 @@ Meant for `+modeline-buffer-path-function'."
(cond ((eq category 'coding-category-undecided)
"")
((or (eq category 'coding-category-utf-8)
(eq (plist-get sys :name) 'prefer-utf-8))
"UTF-8 ")
(string-match-p "utf-8" (symbol-name (plist-get sys :name))))
"")
((concat (upcase (symbol-name (plist-get sys :name)))
" ")))
'help-echo (plist-get (coding-system-plist buffer-file-coding-system) :docstring)))))

View file

@ -25,9 +25,9 @@ to the right fringe.")
(defun +version-control|git-gutter-maybe ()
"Enable `git-gutter-mode' in non-remote buffers."
(when (and buffer-file-name
(vc-backend buffer-file-name)
(or +vc-gutter-in-remote-files
(not (file-remote-p buffer-file-name))))
(not (file-remote-p buffer-file-name)))
(vc-backend buffer-file-name))
(if (display-graphic-p)
(progn
(require 'git-gutter-fringe)