Merge pull request #2 from adrianparvino/develop
Magit Forge Configuration
This commit is contained in:
commit
f3b745d269
39 changed files with 1146 additions and 695 deletions
36
.github/ISSUE_TEMPLATE
vendored
36
.github/ISSUE_TEMPLATE
vendored
|
@ -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
272
README.md
|
@ -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">
|
<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="/../../wiki">wiki</a> |
|
||||||
<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="/../../tree/screenshots">screenshots</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="/../../faq.org">faq</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>
|
<a href="/../../wiki/FAQ#troubleshooting">troubleshooting</a>
|
||||||
<img src="https://github.com/hlissner/doom-emacs/raw/screenshots/main.png" alt="Main screenshot" />
|
<!--a href="CHANGELOG.org">changelog</a-->
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
- - -
|
- - -
|
||||||
|
|
||||||
<p align="center">
|
Quick start
|
||||||
<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>
|
|
||||||
|
|
||||||
- - -
|
```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">
|
<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>
|
</a>
|
||||||
|
|
||||||
It is a story as old as time. A stubborn, shell-dwelling, and melodramatic
|
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
|
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
|
Doom is a configuration for [GNU Emacs](https://www.gnu.org/software/emacs/). It
|
||||||
neckbeards with blue belts or better in command-line-fu, Elisp and git.
|
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
|
Doom's mantras
|
||||||
> MacOS 10.11. YMMV on other platforms.
|
--------------
|
||||||
|
- **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
|
Troubleshooting
|
||||||
git clone https://github.com/hlissner/doom-emacs ~/.emacs.d
|
===============
|
||||||
cd ~/.emacs.d
|
|
||||||
make quickstart
|
|
||||||
```
|
|
||||||
|
|
||||||
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
|
- Run `bin/doom refresh`. This ensures Doom is properly set up and its autoloads
|
||||||
grokking Doom][wiki].
|
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
|
We've also got [a Discord server][url:discord]. Hop on! We can help!
|
||||||
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.
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
Found a problem? Here are some things to try:
|
Contributing
|
||||||
|
============
|
||||||
+ 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
|
|
||||||
|
|
||||||
Doom (and my Emacs work in general) is a labor of love and incurable madness,
|
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
|
done on my spare time. If you'd like to support my work, I welcome
|
||||||
Doom a resource for others.
|
contributions:
|
||||||
|
|
||||||
If you'd like to support my efforts, I welcome contributions of any kind:
|
- I love pull requests and bug reports. Check out the [Contributing
|
||||||
|
Guidelines][docs:contributing] (WIP) to find out how you can help out.
|
||||||
+ I love pull requests and bug reports. Elisp pointers are especially welcome.
|
- I welcome Elisp pointers! Don't hesitate to [tell me my Elisp-fu
|
||||||
Seriously, don't hesitate to [tell me my Elisp-fu sucks][doom-new-issue]!
|
sucks][github:new-issue] (but please tell me why).
|
||||||
+ Talk to me about Emacs workflow, ideas or tooling. Or talk to me about
|
- Hop on [our Discord server][url:discord] and say hi! Help others out, hang out
|
||||||
gamedev, or pixel art, or anime, or programming, or the weather, or band camp.
|
or talk to me about Emacs, or gamedev, or programming, machine learning,
|
||||||
Whatever. I don't mind. Holler at henrik@lissner.net.
|
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
|
<!-- [docs:wiki]: docs/index.org -->
|
||||||
[wiki-conventions]: /../../wiki/Conventions
|
<!-- [docs:wiki-quickstart]: docs/getting-started.org -->
|
||||||
[wiki-modules]: /../../wiki/Modules
|
<!-- [docs:wiki-modules]: docs/modules.org -->
|
||||||
[wiki-customization]: /../../wiki/Customization
|
<!-- [docs:wiki-customization]: docs/customize.org -->
|
||||||
[wiki-troubleshooting]: /../../wiki/FAQ#troubleshooting
|
<!-- [docs:contributing]: docs/contribute.org -->
|
||||||
|
<!-- [docs:faq]: docs/faq.org -->
|
||||||
|
[docs:faq]: /../../wiki/FAQ
|
||||||
|
|
||||||
[doom-my-bindings]: modules/private/hlissner/+bindings.el
|
[github:new-issue]: https://github.com/hlissner/doom-emacs/issues/new
|
||||||
[doom-my-commands]: modules/private/hlissner/+commands.el
|
[doom:bindings]: modules/config/default/+bindings.el
|
||||||
[doom-new-issue]: https://github.com/hlissner/doom-emacs/issues/new
|
[doom:commands]: modules/config/default/+evil-commands.el
|
||||||
[doom-packages]: core/autoload/packages.el
|
[doom:packages]: core/autoload/packages.el
|
||||||
[doom-popups]: modules/ui/popup
|
[doom:popups]: modules/feature/popup/README.org
|
||||||
[doom-theme]: https://github.com/hlissner/emacs-doom-theme
|
|
||||||
|
|
||||||
[company-mode]: https://github.com/company-mode/company-mode
|
[url:discord]: https://discord.gg/bcZ6P3y
|
||||||
[editorconfig]: http://editorconfig.org/
|
[url:liberapay]: https://liberapay.com/hlissner/donate
|
||||||
[evil-mode]: https://github.com/emacs-evil/evil
|
[url:paypal]: https://paypal.me/henriklissner/10
|
||||||
[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: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
|
||||||
|
|
|
@ -88,7 +88,9 @@ See `display-line-numbers' for what these values mean."
|
||||||
(let ((theme (or (car-safe custom-enabled-themes) doom-theme)))
|
(let ((theme (or (car-safe custom-enabled-themes) doom-theme)))
|
||||||
(when theme
|
(when theme
|
||||||
(mapc #'disable-theme custom-enabled-themes))
|
(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)))
|
(doom|init-fonts)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
|
|
|
@ -67,6 +67,7 @@
|
||||||
(unless (equal (vc-git-working-revision doom-emacs-dir) rev)
|
(unless (equal (vc-git-working-revision doom-emacs-dir) rev)
|
||||||
(error "Failed to checkout latest commit.\n\n%s" (buffer-string)))
|
(error "Failed to checkout latest commit.\n\n%s" (buffer-string)))
|
||||||
(doom-refresh 'force)
|
(doom-refresh 'force)
|
||||||
|
(doom-packages-update doom-auto-accept)
|
||||||
(message "Done! Please restart Emacs for changes to take effect")))
|
(message "Done! Please restart Emacs for changes to take effect")))
|
||||||
(user-error
|
(user-error
|
||||||
(message "%s Aborting." (error-message-string e)))
|
(message "%s Aborting." (error-message-string e)))
|
||||||
|
|
|
@ -58,7 +58,7 @@ If any hook returns non-nil, all hooks after it are ignored.")
|
||||||
(defvar doom-leader-alist `((t . ,doom-leader-map)))
|
(defvar doom-leader-alist `((t . ,doom-leader-map)))
|
||||||
(add-to-list 'emulation-mode-map-alists 'doom-leader-alist)
|
(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.
|
;; :keymaps cannot be overwritten.
|
||||||
(defmacro define-leader-key! (&rest args)
|
(defmacro define-leader-key! (&rest args)
|
||||||
`(general-define-key
|
`(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 :mode 'lisp-indent-function 'defun)
|
||||||
(put :prefix 'lisp-indent-function 'defun)
|
(put :prefix 'lisp-indent-function 'defun)
|
||||||
(put :unless 'lisp-indent-function 'defun)
|
(put :unless 'lisp-indent-function 'defun)
|
||||||
(put :if 'lisp-indent-function 'defun)
|
|
||||||
(put :when 'lisp-indent-function 'defun)
|
(put :when 'lisp-indent-function 'defun)
|
||||||
|
|
||||||
;; specials
|
;; specials
|
||||||
|
@ -190,7 +189,7 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See
|
||||||
collect (intern (concat (symbol-name m) "-map")))
|
collect (intern (concat (symbol-name m) "-map")))
|
||||||
rest)
|
rest)
|
||||||
(push :map rest))
|
(push :map rest))
|
||||||
((or :if :when :unless)
|
((or :when :unless)
|
||||||
(doom--map-nested (list (intern (doom-keyword-name key)) (pop rest)) rest)
|
(doom--map-nested (list (intern (doom-keyword-name key)) (pop rest)) rest)
|
||||||
(setq rest nil))
|
(setq rest nil))
|
||||||
(:prefix
|
(:prefix
|
||||||
|
@ -251,7 +250,7 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See
|
||||||
((setq def (cons 'list
|
((setq def (cons 'list
|
||||||
(if (and (equal key "")
|
(if (and (equal key "")
|
||||||
(null def))
|
(null def))
|
||||||
`(nil :which-key ,desc)
|
`(:ignore t :which-key ,desc)
|
||||||
(plist-put (general--normalize-extended-def def)
|
(plist-put (general--normalize-extended-def def)
|
||||||
:which-key desc))))))))
|
:which-key desc))))))))
|
||||||
(dolist (state states)
|
(dolist (state states)
|
||||||
|
|
|
@ -20,13 +20,9 @@
|
||||||
(when (featurep 'exec-path-from-shell)
|
(when (featurep 'exec-path-from-shell)
|
||||||
`(exec-path-from-shell-copy-envs ,@vars)))
|
`(exec-path-from-shell-copy-envs ,@vars)))
|
||||||
|
|
||||||
;; key conventions:
|
|
||||||
;; alt/option = meta
|
|
||||||
;; windows/command = super
|
|
||||||
|
|
||||||
(cond (IS-MAC
|
(cond (IS-MAC
|
||||||
(setq mac-command-modifier 'super
|
(setq mac-command-modifier 'meta
|
||||||
mac-option-modifier 'meta
|
mac-option-modifier 'alt
|
||||||
;; sane trackpad/mouse scroll settings
|
;; sane trackpad/mouse scroll settings
|
||||||
mac-redisplay-dont-reset-vscroll t
|
mac-redisplay-dont-reset-vscroll t
|
||||||
mac-mouse-wheel-smooth-scroll nil
|
mac-mouse-wheel-smooth-scroll nil
|
||||||
|
@ -68,12 +64,7 @@
|
||||||
x-underline-at-descent-line t)) ; draw underline lower
|
x-underline-at-descent-line t)) ; draw underline lower
|
||||||
|
|
||||||
(IS-WINDOWS
|
(IS-WINDOWS
|
||||||
(setq w32-get-true-file-attributes nil ; fix file io slowdowns
|
(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)
|
|
||||||
(when (display-graphic-p)
|
(when (display-graphic-p)
|
||||||
(setenv "GIT_ASKPASS" "git-gui--askpass"))))
|
(setenv "GIT_ASKPASS" "git-gui--askpass"))))
|
||||||
|
|
||||||
|
|
|
@ -226,7 +226,9 @@ packages at once.
|
||||||
|
|
||||||
Only use this macro in a module's packages.el file."
|
Only use this macro in a module's packages.el file."
|
||||||
(doom--assert-stage-p 'packages #'packages!)
|
(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)
|
(defmacro disable-packages! (&rest packages)
|
||||||
"A convenience macro like `package!', but allows you to disable multiple
|
"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."
|
Only use this macro in a module's packages.el file."
|
||||||
(doom--assert-stage-p 'packages #'disable-packages!)
|
(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)
|
(defmacro depends-on! (module submodule &optional flags)
|
||||||
"Declares that this module depends on another.
|
"Declares that this module depends on another.
|
||||||
|
|
|
@ -53,6 +53,10 @@ size.")
|
||||||
(defvar doom-init-ui-hook nil
|
(defvar doom-init-ui-hook nil
|
||||||
"List of hooks to run when the UI has been initialized.")
|
"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
|
(setq-default
|
||||||
ansi-color-for-comint-mode t
|
ansi-color-for-comint-mode t
|
||||||
bidi-display-reordering nil ; disable bidirectional text for tiny performance boost
|
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 ()
|
(defun doom|init-theme ()
|
||||||
"Set the theme and load the font, in that order."
|
"Set the theme and load the font, in that order."
|
||||||
(when (and doom-theme (not (memq doom-theme custom-enabled-themes)))
|
(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
|
;; Getting themes to remain consistent across GUI Emacs, terminal Emacs and
|
||||||
;; daemon Emacs is hairy. `doom|init-theme' sorts out the initial GUI frame.
|
;; 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)
|
(advice-add #'load-theme :around #'doom*disable-old-themes-first)
|
||||||
|
|
||||||
(defun doom*prefer-compiled-theme (orig-fn &rest args)
|
(defun doom*prefer-compiled-theme (orig-fn &rest args)
|
||||||
"Make `load-theme' prioritize the byte-compiled theme (if it exists) for a
|
"Make `load-theme' prioritize the byte-compiled theme for a moderate boost in
|
||||||
moderate boost in startup (or theme switch) time."
|
startup (or theme switch) time, so long as `doom--prefer-theme-elc' is non-nil."
|
||||||
(cl-letf* ((old-locate-file (symbol-function 'locate-file))
|
(if (or (null after-init-time)
|
||||||
((symbol-function 'locate-file)
|
doom--prefer-theme-elc)
|
||||||
(lambda (filename path &optional _suffixes predicate)
|
(cl-letf* ((old-locate-file (symbol-function 'locate-file))
|
||||||
(funcall old-locate-file filename path '("c" "") predicate))))
|
((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)))
|
(apply orig-fn args)))
|
||||||
(advice-add #'load-theme :around #'doom*prefer-compiled-theme)
|
(advice-add #'load-theme :around #'doom*prefer-compiled-theme)
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
;;; core.el --- the heart of the beast -*- lexical-binding: t; -*-
|
;;; core.el --- the heart of the beast -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
(eval-when-compile
|
(eval-when-compile
|
||||||
(and (version< emacs-version "25")
|
(and (version< emacs-version "25.3")
|
||||||
(error "Detected Emacs %s. Doom only supports Emacs 25.1 and higher"
|
(error "Detected Emacs %s. Doom only supports Emacs 25.3 and higher"
|
||||||
emacs-version)))
|
emacs-version)))
|
||||||
|
|
||||||
(defvar doom-debug-mode (or (getenv "DEBUG") init-file-debug)
|
(defvar doom-debug-mode (or (getenv "DEBUG") init-file-debug)
|
||||||
|
|
|
@ -173,9 +173,9 @@
|
||||||
:to-expand-into
|
:to-expand-into
|
||||||
`(general-define-key "a" (list :def #'a :which-key "A")))))
|
`(general-define-key "a" (list :def #'a :which-key "A")))))
|
||||||
|
|
||||||
(describe ":if/:when/:unless"
|
(describe ":when/:unless"
|
||||||
(it "wraps keys in a conditional block"
|
(it "wraps keys in a conditional block"
|
||||||
(dolist (prop '(:if :when :unless))
|
(dolist (prop '(:when :unless))
|
||||||
(let ((prop-fn (intern (doom-keyword-name prop))))
|
(let ((prop-fn (intern (doom-keyword-name prop))))
|
||||||
(expect `(map! ,prop t "a" #'a "b" #'b)
|
(expect `(map! ,prop t "a" #'a "b" #'b)
|
||||||
:to-expand-into
|
:to-expand-into
|
||||||
|
|
30
docs/ISSUE_TEMPLATE.md
Normal file
30
docs/ISSUE_TEMPLATE.md
Normal 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>
|
|
@ -36,7 +36,7 @@ sudo pacman --noconfirm --needed -S offlineimap mu
|
||||||
* Dependencies
|
* Dependencies
|
||||||
You need to do the following:
|
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)
|
2. Download your email: ~offlineimap -o~ (may take a while)
|
||||||
3. Index it with mu: ~mu index --maildir ~/.mail~
|
3. Index it with mu: ~mu index --maildir ~/.mail~
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
;;
|
;;
|
||||||
;; Packages
|
;; Packages
|
||||||
|
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.\\(?:offlineimap\\|mbsync\\)rc\\'" . conf-mode))
|
||||||
|
|
||||||
|
|
||||||
(def-package! mu4e
|
(def-package! mu4e
|
||||||
:commands (mu4e mu4e-compose-new)
|
:commands (mu4e mu4e-compose-new)
|
||||||
:init
|
:init
|
||||||
|
|
|
@ -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
|
* Description
|
||||||
+ Uses ~company-statistics~ to order results by usage frequency
|
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:
|
** Module Flags
|
||||||
- [[#install][Install]]
|
+ =+auto= Enables as-you-type completion.
|
||||||
- [[#configure][Configure]]
|
+ =+childframe= Enables displaying completion candidates in a child frame,
|
||||||
- [[#auto-completion][Auto-completion]]
|
rather than an overlay or tooltip (among with other UI enhancements). *This
|
||||||
- [[#troubleshooting][Troubleshooting]]
|
requires GUI Emacs 26.1+.*
|
||||||
|
|
||||||
* Install
|
** Plugins
|
||||||
Some languages require additional setup, and some languages may have no
|
+ [[https://github.com/company-mode/company-mode][company-mode]]
|
||||||
completion support at all.
|
+ [[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
|
However, some major modes may require additional setup for code completion to
|
||||||
** Auto-completion
|
work in them. Some major modes may have no completion support at all. Check that
|
||||||
By default, I've disabled auto-completion. This is my preference. I prefer to
|
major mode's module's documentation for details.
|
||||||
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.
|
|
||||||
|
|
||||||
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~,
|
| Keybind | Description |
|
||||||
2. and change ~company-idle-delay~ to a non-nil float (the default is 0.5)
|
|---------+------------------------------------------|
|
||||||
|
| =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
|
#+BEGIN_SRC emacs-lisp
|
||||||
(require 'company)
|
(after! js2-mode
|
||||||
(setq company-idle-delay 0.2
|
(set-company-backend! 'js2-mode 'company-tide 'company-yasnippet))
|
||||||
company-minimum-prefix-length 3)
|
|
||||||
|
(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
|
#+END_SRC
|
||||||
|
|
||||||
* Troubleshooting
|
* Troubleshooting
|
||||||
If completion isn't working for you, please consider the following before
|
If code completion isn't working for you, consider the following common causes
|
||||||
posting a bug report:
|
before you file a bug report:
|
||||||
|
|
||||||
+ If what you are expecting is popup-as-you-type completion (which is disabled
|
** Code-completion doesn't pop up automatically.
|
||||||
by default), see the "Configure > Auto-completion" section above, which will
|
This is by design. The expectation is that you invoke completion manually with
|
||||||
instruct you on how to enable this.
|
=C-SPC=. This was decided because code-completion backends can be slow, some
|
||||||
+ Some languages don't have any auto-completion support at all.
|
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.
|
||||||
|
|
|
@ -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
|
#+begin_quote
|
||||||
I prefer ivy over ido for its flexibility. I prefer ivy over helm because it's
|
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
|
#+end_quote
|
||||||
|
|
||||||
+ Project-wide search & replace powered by ~rg~ or ~ag~
|
** Module Flags
|
||||||
+ Project jump-to navigation ala Command-T, Sublime Text's Jump-to-anywhere or
|
+ =+fuzzy= Enables the fuzzy method for ivy searches.
|
||||||
Vim's CtrlP plugin.
|
+ =+childframe= Causes Ivy to display in a floating child frame, above Emacs.
|
||||||
+ Ivy integration for ~M-x~, ~imenu~, ~recentf~ and others.
|
*This requires GUI Emacs 26.1+*
|
||||||
+ A powerful, interactive in-buffer search using ~swiper~.
|
|
||||||
+ Ivy-powered TODO/FIXME navigation
|
|
||||||
|
|
||||||
* Table of Contents :TOC:
|
** Plugins
|
||||||
- [[#install][Install]]
|
+ [[https://github.com/abo-abo/swiper][ivy]]
|
||||||
- [[#macos][MacOS]]
|
+ [[https://github.com/abo-abo/swiper][counsel]]
|
||||||
- [[#arch-linux][Arch Linux]]
|
+ [[https://github.com/ericdanan/counsel-projectile][counsel-projectile]]
|
||||||
- [[#usage][Usage]]
|
+ [[https://github.com/abo-abo/swiper][swiper]]
|
||||||
- [[#project-search--replace][Project search & replace]]
|
+ [[https://github.com/abo-abo/swiper][ivy-hydra]]
|
||||||
- [[#jump-to-file-project-navigation][Jump-to-file project navigation]]
|
+ [[https://github.com/yevgnen/ivy-rich][ivy-rich]]
|
||||||
- [[#in-buffer-searching][In-buffer searching]]
|
+ [[https://github.com/mhayashi1120/Emacs-wgrep][wgrep]]
|
||||||
- [[#task-lookup][Task lookup]]
|
+ [[https://github.com/DarwinAwardWinner/amx][amx]]
|
||||||
- [[#appendix][Appendix]]
|
+ [[https://github.com/lewang/flx][flx]]* (=+fuzzy=)
|
||||||
- [[#commands][Commands]]
|
+ [[https://github.com/tumashu/ivy-posframe][ivy-posframe]]* (=+childframe=)
|
||||||
- [[#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 |
|
|
||||||
|
|
||||||
** Hacks
|
** Hacks
|
||||||
+ Functions with ivy/counsel equivalents have been globally remapped (like
|
+ 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
|
+ ~counsel-[arp]g~'s 3-character limit was reduced to 1 (mainly for the ex
|
||||||
command)
|
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
|
||||||
|
|
|
@ -17,17 +17,15 @@
|
||||||
;; Global keybindings
|
;; Global keybindings
|
||||||
|
|
||||||
(map! (:map override
|
(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
|
;; 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 evil-jump-to-tag] #'projectile-find-tag
|
||||||
[remap find-tag] #'projectile-find-tag
|
[remap find-tag] #'projectile-find-tag
|
||||||
|
|
||||||
;; Smart tab
|
;; Smart tab
|
||||||
:i [tab] (general-predicate-dispatch nil
|
:i [tab] (general-predicate-dispatch nil ; fall back to nearest keymap
|
||||||
(and (featurep! :feature snippets)
|
(and (featurep! :feature snippets)
|
||||||
(yas-maybe-expand-abbrev-key-filter 'yas-expand))
|
(yas-maybe-expand-abbrev-key-filter 'yas-expand))
|
||||||
'yas-expand
|
'yas-expand
|
||||||
|
@ -68,7 +66,7 @@
|
||||||
:m "B" #'realgud:cmd-clear)
|
:m "B" #'realgud:cmd-clear)
|
||||||
|
|
||||||
(:when (featurep! :feature eval)
|
(:when (featurep! :feature eval)
|
||||||
:g "s-r" #'+eval/buffer
|
:g "M-r" #'+eval/buffer
|
||||||
:nv "gr" #'+eval:region
|
:nv "gr" #'+eval:region
|
||||||
:n "gR" #'+eval/buffer
|
:n "gR" #'+eval/buffer
|
||||||
:v "gR" #'+eval:replace-region)
|
:v "gR" #'+eval:replace-region)
|
||||||
|
@ -83,8 +81,8 @@
|
||||||
:n "zx" #'kill-this-buffer
|
:n "zx" #'kill-this-buffer
|
||||||
:n "ZX" #'bury-buffer
|
:n "ZX" #'bury-buffer
|
||||||
:n "gp" #'+evil/reselect-paste
|
:n "gp" #'+evil/reselect-paste
|
||||||
:nv "g=" #'widen
|
:n "g=" #'widen
|
||||||
:nv "g-" #'+evil:narrow-buffer
|
:v "g=" #'+evil:narrow-buffer
|
||||||
:nv "g@" #'+evil:apply-macro
|
:nv "g@" #'+evil:apply-macro
|
||||||
:nv "gc" #'evil-commentary
|
:nv "gc" #'evil-commentary
|
||||||
:nv "gx" #'evil-exchange
|
:nv "gx" #'evil-exchange
|
||||||
|
@ -189,9 +187,9 @@
|
||||||
(:map yas-keymap
|
(:map yas-keymap
|
||||||
"C-e" #'+snippets/goto-end-of-field
|
"C-e" #'+snippets/goto-end-of-field
|
||||||
"C-a" #'+snippets/goto-start-of-field
|
"C-a" #'+snippets/goto-start-of-field
|
||||||
[s-right] #'+snippets/goto-end-of-field
|
[M-right] #'+snippets/goto-end-of-field
|
||||||
[s-left] #'+snippets/goto-start-of-field
|
[M-left] #'+snippets/goto-start-of-field
|
||||||
[s-backspace] #'+snippets/delete-to-start-of-field
|
[M-backspace] #'+snippets/delete-to-start-of-field
|
||||||
[backspace] #'+snippets/delete-backward-char
|
[backspace] #'+snippets/delete-backward-char
|
||||||
[delete] #'+snippets/delete-forward-char-or-field)
|
[delete] #'+snippets/delete-forward-char-or-field)
|
||||||
(:map yas-minor-mode-map
|
(:map yas-minor-mode-map
|
||||||
|
@ -219,7 +217,17 @@
|
||||||
:n "gt" #'+workspace/switch-right
|
:n "gt" #'+workspace/switch-right
|
||||||
:n "gT" #'+workspace/switch-left
|
:n "gT" #'+workspace/switch-left
|
||||||
:n "]w" #'+workspace/switch-right
|
: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
|
;;; :completion
|
||||||
(map! (:when (featurep! :completion company)
|
(map! (:when (featurep! :completion company)
|
||||||
|
@ -246,8 +254,8 @@
|
||||||
"C-u" #'company-previous-page
|
"C-u" #'company-previous-page
|
||||||
"C-d" #'company-next-page
|
"C-d" #'company-next-page
|
||||||
"C-s" #'company-filter-candidates
|
"C-s" #'company-filter-candidates
|
||||||
"C-S-s" `(,(cond ((featurep! :completion helm) #'helm-company)
|
"C-S-s" (cond ((featurep! :completion helm) #'helm-company)
|
||||||
((featurep! :completion ivy) #'counsel-company)))
|
((featurep! :completion ivy) #'counsel-company))
|
||||||
"C-SPC" #'company-complete-common
|
"C-SPC" #'company-complete-common
|
||||||
[tab] #'company-complete-common-or-cycle
|
[tab] #'company-complete-common-or-cycle
|
||||||
[backtab] #'company-select-previous)
|
[backtab] #'company-select-previous)
|
||||||
|
@ -448,9 +456,7 @@
|
||||||
:after markdown-mode
|
:after markdown-mode
|
||||||
:map markdown-mode-map
|
:map markdown-mode-map
|
||||||
;; fix conflicts with private bindings
|
;; fix conflicts with private bindings
|
||||||
"<backspace>" nil
|
[backspace] nil))
|
||||||
"<s-left>" nil
|
|
||||||
"<s-right>" nil))
|
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
@ -468,7 +474,12 @@
|
||||||
|
|
||||||
:desc "Toggle last popup" "~" #'+popup/toggle
|
:desc "Toggle last popup" "~" #'+popup/toggle
|
||||||
:desc "Find file" "." #'find-file
|
: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" "'"
|
:desc "Resume last search" "'"
|
||||||
(cond ((featurep! :completion ivy) #'ivy-resume)
|
(cond ((featurep! :completion ivy) #'ivy-resume)
|
||||||
|
@ -544,7 +555,11 @@
|
||||||
:desc "Sudo edit this file" "S" #'doom/sudo-this-file
|
:desc "Sudo edit this file" "S" #'doom/sudo-this-file
|
||||||
:desc "Previous buffer" "[" #'previous-buffer
|
:desc "Previous buffer" "[" #'previous-buffer
|
||||||
:desc "Next buffer" "]" #'next-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 "Kill buffer" "k" #'kill-this-buffer
|
||||||
:desc "Next buffer" "n" #'next-buffer
|
:desc "Next buffer" "n" #'next-buffer
|
||||||
:desc "Kill other buffers" "o" #'doom/kill-other-buffers
|
:desc "Kill other buffers" "o" #'doom/kill-other-buffers
|
||||||
|
@ -700,7 +715,7 @@
|
||||||
:desc "Find other file" "o" #'projectile-find-other-file
|
:desc "Find other file" "o" #'projectile-find-other-file
|
||||||
:desc "Switch project" "p" #'projectile-switch-project
|
:desc "Switch project" "p" #'projectile-switch-project
|
||||||
:desc "Recent project files" "r" #'projectile-recentf
|
: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)
|
:desc "Invalidate cache" "x" #'projectile-invalidate-cache)
|
||||||
|
|
||||||
(:prefix ("q" . "quit/restart")
|
(: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)))))
|
(let ((fn-sym (intern (format "+default*repeat-%s" (doom-unquote command)))))
|
||||||
`(progn
|
`(progn
|
||||||
(defun ,fn-sym (&rest _)
|
(defun ,fn-sym (&rest _)
|
||||||
(define-key! 'motion
|
(define-key! :states 'motion
|
||||||
(car +default-repeat-keys) #',next-func
|
(car +default-repeat-keys) #',next-func
|
||||||
(cdr +default-repeat-keys) #',prev-func))
|
(cdr +default-repeat-keys) #',prev-func))
|
||||||
(advice-add #',command :before #',fn-sym))))
|
(advice-add #',command :before #',fn-sym))))
|
||||||
|
|
|
@ -84,3 +84,10 @@ If ARG (universal argument), runs `compile' from the current directory."
|
||||||
(set-window-buffer nil buffer)
|
(set-window-buffer nil buffer)
|
||||||
(with-current-buffer buffer
|
(with-current-buffer buffer
|
||||||
(funcall (default-value 'major-mode))))))
|
(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))))
|
||||||
|
|
|
@ -127,44 +127,48 @@
|
||||||
(when IS-MAC
|
(when IS-MAC
|
||||||
;; Fix MacOS shift+tab
|
;; Fix MacOS shift+tab
|
||||||
(define-key input-decode-map [S-iso-lefttab] [backtab])
|
(define-key input-decode-map [S-iso-lefttab] [backtab])
|
||||||
|
;; Fix frame-switching key on MacOS
|
||||||
(define-key!
|
(global-set-key (kbd "M-`") #'other-frame))
|
||||||
;; 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))
|
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Doom's keybinding scheme
|
;; Doom's keybinding scheme
|
||||||
|
|
||||||
(when (featurep! +bindings)
|
(when (featurep! +bindings)
|
||||||
;; Ensure Emacsien motions are available
|
;; Make M-x more accessible
|
||||||
(map! "C-b" #'backward-word
|
(define-key! 'override
|
||||||
"C-f" #'forward-word)
|
"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)
|
(if (featurep 'evil)
|
||||||
(load! "+evil-bindings")
|
(load! "+evil-bindings")
|
||||||
|
|
|
@ -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
|
* Table of Contents :TOC_3:noexport:
|
||||||
REPLs.
|
- [[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:
|
* Description
|
||||||
- [[#install][Install]]
|
This modules adds inline code evaluation support to Emacs, and supplies a
|
||||||
- [[#usage][Usage]]
|
universal interface for opening and interacting with REPLs.
|
||||||
- [[#repls][REPLs]]
|
|
||||||
- [[#code-evaluation][*Code Evaluation*]]
|
|
||||||
- [[#configuration][Configuration]]
|
|
||||||
- [[#repls-1][REPLs]]
|
|
||||||
- [[#code-evaluation-1][Code Evaluation]]
|
|
||||||
|
|
||||||
* Install
|
** Module Flags
|
||||||
This module has no external dependencies. However, specific languages may
|
This module has no flags.
|
||||||
require additional setup.
|
|
||||||
|
|
||||||
Check the README.org in that language's module for details.
|
** Plugins
|
||||||
|
+ [[https://github.com/syohex/emacs-quickrun][quickrun]]
|
||||||
|
|
||||||
* Usage
|
** Hacks
|
||||||
** REPLs
|
+ Quickrun has been modified to:
|
||||||
Invoked via:
|
+ Use only one output window, in case of consecutive execution of code.
|
||||||
+ ~:repl~ (evil ex-command)
|
+ The quickrun window will resize itself to fit its output, once the
|
||||||
+ =<leader> o r= in normal mode (or visual mode, which sends the selection to
|
underlying process is finished executing the code.
|
||||||
the open REPL)
|
|
||||||
+ ~M-x +eval/open-repl~
|
|
||||||
+ ~M-x +eval/send-region-to-repl~ while a selection (and REPL) is active
|
|
||||||
|
|
||||||
** *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:
|
Quickrun can be invoked via:
|
||||||
+ ~M-x +eval/buffer~ (or ~gR~, or ~M-r~)
|
+ ~M-x +eval/buffer~ (or ~gR~, or ~M-r~)
|
||||||
+ ~M-x +eval/region~
|
+ ~M-x +eval/region~
|
||||||
+ ~M-x +eval/region-and-replace~
|
+ ~M-x +eval/region-and-replace~
|
||||||
+ Evil users can use the ~gr~ operator to select and run a region.
|
+ Evil users can use the ~gr~ operator to select and run a region.
|
||||||
|
|
||||||
* Configuration
|
|
||||||
** REPLs
|
** REPLs
|
||||||
REPLs are defined for most of the languages Doom supports (check its README.org
|
Invoked via:
|
||||||
to see if it does).
|
+ =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=
|
Otherwise, you can define your own for a specified major-mode with the =:repl=
|
||||||
setting.
|
setting.
|
||||||
|
|
||||||
~(set! :repl MAJOR-MODE FUNCTION)~
|
~(set! :repl MAJOR-MODE FUNCTION)~
|
||||||
|
|
||||||
FUNCTION must return the repl buffer. Any window changes are ignored, then
|
FUNCTION should be a command that opens a repl buffer. Any window changes are
|
||||||
handed off to shackle (assuming shackle-mode is on) to display in a popup
|
ignored, then handed off to shackle (assuming shackle-mode is on) to display in
|
||||||
window.
|
a popup window.
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun +emacs-lisp/repl ()
|
(defun +emacs-lisp/repl ()
|
||||||
|
@ -58,10 +86,10 @@ window.
|
||||||
(bury-buffer buf)
|
(bury-buffer buf)
|
||||||
buf)))))
|
buf)))))
|
||||||
|
|
||||||
(set! :repl 'emacs-lisp-mode #'+emacs-lisp/repl)
|
(set-repl-handler! 'emacs-lisp-mode #'+emacs-lisp/repl)
|
||||||
#+END_SRC
|
#+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.
|
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
|
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":
|
Here's how you define a "runner":
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(set! :eval 'crystal-mode
|
(set-eval-handler! 'crystal-mode
|
||||||
'((:command . "crystal")
|
'((:command . "crystal")
|
||||||
(:exec . "%c %s")
|
(:exec . "%c %s")
|
||||||
(:description . "Run Crystal script")))
|
(:description . "Run Crystal script")))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
A simpler version is simply to use the path to the binary:
|
A simpler version is simply to use the path to the binary:
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(set! :eval 'groovy-mode "groovy")
|
(set-eval-handler! 'groovy-mode "groovy")
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
Or if you'd rather run an elisp command:
|
Or if you'd rather run an elisp command:
|
||||||
|
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(set! :eval 'emacs-lisp-mode #'+emacs-lisp-eval)
|
(set-eval-handler! 'emacs-lisp-mode #'+emacs-lisp-eval)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
* Troubleshooting
|
||||||
|
|
|
@ -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.
|
This holy module brings the vim experience to Emacs.
|
||||||
|
|
||||||
* Table of Contents :TOC:
|
** Module Flags
|
||||||
- [[#removing-evil-mode][Removing evil-mode]]
|
+ =+everywhere= Enables evilified keybinds everywhere possible, utilizing the
|
||||||
- [[#features][Features]]
|
~evil-collection~ plugin.
|
||||||
- [[#multiple-cursors][Multiple-cursors]]
|
|
||||||
- [[#a-hybrid-code-folding-system][A hybrid code-folding system]]
|
|
||||||
- [[#hacks][Hacks]]
|
|
||||||
- [[#differences-from-vim][Differences from vim]]
|
|
||||||
|
|
||||||
* Removing evil-mode
|
** Plugins
|
||||||
See the [[https://github.com/hlissner/doom-emacs/wiki/FAQ#remove-vimevil-for-a-more-vanilla-emacs-experience][corresponding question in the FAQ]].
|
+ [[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
|
* Features
|
||||||
+ A better ~:g[lobal]~ command with incremental highlighting.
|
** Ported vim plugins
|
||||||
+ Adds the ~:al[ign]~ ex command: offers an ex interface to ~align-regexp~ with
|
The following vim plugins have been ported to evil:
|
||||||
incremental highlighting.
|
|
||||||
+ Support for more of vim's filename modifiers in ex commands (like ~:p~, ~:p:h~
|
| Vim Plugin | Emacs Plugin | Keybind(s) |
|
||||||
or ~:t~) than vanilla evil-mode offers.
|
|-----------------------+--------------------------------+---------------------|
|
||||||
|
| 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:
|
+ A list of new text objects:
|
||||||
+ Blocks: ~B~ (from ~evil-textobj-anyblock~)
|
+ Blocks: ~B~ (from ~evil-textobj-anyblock~)
|
||||||
+ Args: ~a~ (from ~evil-args~)
|
+ Args: ~a~ (from ~evil-args~)
|
||||||
+ Indentation: ~i~ / ~I~ / ~J~ (from ~evil-indent-plus~)
|
+ 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
|
** Custom Ex Commands
|
||||||
Two multiple-cursor implementations exist in this module: ~evil-mc~ and
|
| Ex Command | Description |
|
||||||
~evil-multiedit~. Together, these provide the functionality of
|
|----------------------+----------------------------------------------------------------------------------|
|
||||||
~vim-multiple-cursors~.
|
| ~: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 |
|
||||||
The former lets you place "clone" cursors. The latter lets you interactively
|
| ~:cp[!] NEWPATH~ | Copy the current file to NEWPATH |
|
||||||
edit many regions at once (like an interactive version of ~:%s~).
|
| ~:rm[!] [PATH]~ | Delete the current buffer's file and buffer |
|
||||||
|
|
||||||
** A hybrid code-folding system
|
** A hybrid code-folding system
|
||||||
This module combines ~evil-vimish-fold~ and ~hideshow~. The former allows
|
This module combines ~vimish-fold~ and ~hideshow~. The former allows arbitrary
|
||||||
arbitrary folds and the latter allows folds on markers and indentation.
|
folds and the latter allows folds on markers and indentation. Together, they
|
||||||
Together, they create a more consistent (and feature-complete) code-folding
|
create a more consistent (and feature-complete) code-folding system.
|
||||||
system.
|
|
||||||
|
|
||||||
Most vim folding keys should work, e.g. =zr=, =zm=, =za=, =zo=, etc.
|
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
|
** Differences from vim
|
||||||
+ Column-wise ranges in ex commands are enabled by default. i.e. the range in
|
+ 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
|
=:'<,'>s/a/b= will only affects the visual selection, not full lines (see
|
||||||
~evil-ex-visual-char-range~).
|
~evil-ex-visual-char-range~).
|
||||||
+ =:g= will incrementally highlight buffer matches.
|
+ =: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.
|
||||||
|
|
79
modules/feature/file-templates/README.org
Normal file
79
modules/feature/file-templates/README.org
Normal 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~
|
|
@ -1,12 +1,36 @@
|
||||||
#+TITLE: :feature snippets
|
#+TITLE: feature/snippets
|
||||||
|
#+DATE: February 11, 2017
|
||||||
This module adds snippets to Emacs, powered by yasnippet.
|
#+SINCE: v2.0
|
||||||
|
#+STARTUP: inlineimages
|
||||||
|
|
||||||
* Table of Contents :TOC:
|
* 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
|
* Description
|
||||||
There are no extra dependencies for this module.
|
This module adds snippets to Emacs, powered by yasnippet.
|
||||||
|
|
||||||
By default, =private/default= installs a snippet library tailored exclusively
|
** Module Flags
|
||||||
for Doom Emacs.
|
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
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
;;; lang/csharp/config.el -*- lexical-binding: t; -*-
|
;;; lang/csharp/config.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
;; `shader-mode' --- unity shaders
|
|
||||||
(add-to-list 'auto-mode-alist '("\\.shader$" . shader-mode))
|
|
||||||
|
|
||||||
|
|
||||||
(def-package! omnisharp
|
(def-package! omnisharp
|
||||||
:hook (csharp-mode . omnisharp-mode)
|
:hook (csharp-mode . omnisharp-mode)
|
||||||
:commands omnisharp-install-server
|
:commands omnisharp-install-server
|
||||||
|
@ -51,3 +47,12 @@
|
||||||
"r" (λ! (omnisharp-unit-test "fixture"))
|
"r" (λ! (omnisharp-unit-test "fixture"))
|
||||||
"s" (λ! (omnisharp-unit-test "single"))
|
"s" (λ! (omnisharp-unit-test "single"))
|
||||||
"a" (λ! (omnisharp-unit-test "all")))))
|
"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")))
|
||||||
|
|
|
@ -3,5 +3,6 @@
|
||||||
|
|
||||||
(package! csharp-mode)
|
(package! csharp-mode)
|
||||||
(package! omnisharp)
|
(package! omnisharp)
|
||||||
(package! shader-mode)
|
|
||||||
|
|
||||||
|
(when (featurep! +unity)
|
||||||
|
(package! shader-mode))
|
||||||
|
|
|
@ -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.
|
This module adds [[https://golang.org][Go]] support.
|
||||||
|
|
||||||
+ Code completion (~gocode~)
|
+ Code completion (~gocode~)
|
||||||
|
@ -12,29 +27,28 @@ This module adds [[https://golang.org][Go]] support.
|
||||||
+ [[../../feature/file-templates/templates/go-mode][File templates]]
|
+ [[../../feature/file-templates/templates/go-mode][File templates]]
|
||||||
+ [[https://github.com/hlissner/emacs-snippets/tree/master/go-mode][Snippets]]
|
+ [[https://github.com/hlissner/emacs-snippets/tree/master/go-mode][Snippets]]
|
||||||
|
|
||||||
#+begin_quote
|
** Module Flags
|
||||||
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{}~.
|
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.
|
** Plugins
|
||||||
#+end_quote
|
+ [[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:
|
* Prerequisites
|
||||||
- [[#install][Install]]
|
|
||||||
- [[#go][Go]]
|
|
||||||
- [[#dependencies][Dependencies]]
|
|
||||||
|
|
||||||
* Install
|
|
||||||
** Go
|
** Go
|
||||||
To get started with Go, you need the ~go~ tool:
|
To get started with Go, you need the ~go~ tool:
|
||||||
|
|
||||||
*** MacOS
|
*** MacOS
|
||||||
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
|
#+BEGIN_SRC bash
|
||||||
brew install go
|
brew install go
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
*** Arch Linux
|
*** Arch Linux
|
||||||
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
|
#+BEGIN_SRC bash
|
||||||
sudo pacman --needed --noconfirm -S go
|
sudo pacman -S go
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
** Dependencies
|
** Dependencies
|
||||||
|
@ -42,10 +56,10 @@ This module requires a valid ~GOPATH~, and the following Go packages:
|
||||||
|
|
||||||
+ ~gocode~ (for code completion & eldoc support)
|
+ ~gocode~ (for code completion & eldoc support)
|
||||||
+ ~godoc~ (for documentation lookup)
|
+ ~godoc~ (for documentation lookup)
|
||||||
+ ~goimports~ (for auto-formatting code on save and fixing imports)
|
|
||||||
+ ~gorename~ (for extra refactoring commands)
|
+ ~gorename~ (for extra refactoring commands)
|
||||||
+ ~gore~ (for the REPL)
|
+ ~gore~ (for the REPL)
|
||||||
+ ~guru~ (for code navigation & refactoring commands)
|
+ ~guru~ (for code navigation & refactoring commands)
|
||||||
|
+ ~goimports~ (optional: for auto-formatting code on save & fixing imports)
|
||||||
|
|
||||||
#+BEGIN_SRC sh
|
#+BEGIN_SRC sh
|
||||||
export GOPATH=~/work/go
|
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
|
go get -u golang.org/x/tools/cmd/guru
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
* TODO Features
|
||||||
|
|
||||||
|
* TODO Configuration
|
||||||
|
|
||||||
|
* TODO Troubleshooting
|
||||||
|
|
|
@ -12,8 +12,7 @@
|
||||||
(when (featurep! :feature syntax-checker)
|
(when (featurep! :feature syntax-checker)
|
||||||
(setq haskell-process-show-overlays nil)) ; flycheck makes this unnecessary
|
(setq haskell-process-show-overlays nil)) ; flycheck makes this unnecessary
|
||||||
(add-hook! 'haskell-mode-hook
|
(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))
|
interactive-haskell-mode))
|
||||||
(set-lookup-handlers! 'haskell-mode :definition #'haskell-mode-jump-to-def-or-tag)
|
(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)
|
(set-file-template! 'haskell-mode :trigger #'haskell-auto-insert-module-template :project t)
|
||||||
|
|
|
@ -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))))
|
|
||||||
|
|
|
@ -234,9 +234,3 @@
|
||||||
|
|
||||||
(def-project-mode! +javascript-gulp-mode
|
(def-project-mode! +javascript-gulp-mode
|
||||||
:when (locate-dominating-file default-directory "gulpfile.js"))
|
: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"))
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ If no viewers are found, `latex-preview-pane' is used.")
|
||||||
;; Enable rainbow mode after applying styles to the buffer
|
;; Enable rainbow mode after applying styles to the buffer
|
||||||
(add-hook 'TeX-update-style-hook #'rainbow-delimiters-mode)
|
(add-hook 'TeX-update-style-hook #'rainbow-delimiters-mode)
|
||||||
(when (featurep! :feature spellcheck)
|
(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
|
;; All these excess pairs dramatically slow down typing in latex buffers, so
|
||||||
;; we remove them. Let snippets do their job.
|
;; we remove them. Let snippets do their job.
|
||||||
(after! smartparens-latex
|
(after! smartparens-latex
|
||||||
|
|
|
@ -364,12 +364,11 @@ between the two."
|
||||||
;; more intuitive RET keybinds
|
;; more intuitive RET keybinds
|
||||||
:i [return] #'org-return-indent
|
:i [return] #'org-return-indent
|
||||||
:n [return] #'+org/dwim-at-point
|
:n [return] #'+org/dwim-at-point
|
||||||
|
;; textmate-esque newline insertion
|
||||||
:nvi [C-return] (λ! (+org/insert-item 'below))
|
:nvi [C-return] (λ! (+org/insert-item 'below))
|
||||||
:nvi [C-S-return] (λ! (+org/insert-item 'above))
|
:nvi [C-S-return] (λ! (+org/insert-item 'above))
|
||||||
(:when IS-MAC
|
:nvi [M-return] (λ! (+org/insert-item 'below))
|
||||||
;; textmate-esque newline insertion
|
:nvi [M-S-return] (λ! (+org/insert-item 'above))
|
||||||
:nvi [s-return] (λ! (+org/insert-item 'below))
|
|
||||||
:nvi [S-s-return] (λ! (+org/insert-item 'above)))
|
|
||||||
;; more vim-esque org motion keys (not covered by evil-org-mode)
|
;; 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-forward-heading-same-level nil) (org-beginning-of-line))
|
||||||
:m "[[" (λ! (org-backward-heading-same-level nil) (org-beginning-of-line))
|
:m "[[" (λ! (org-backward-heading-same-level nil) (org-beginning-of-line))
|
||||||
|
|
|
@ -1,20 +1,34 @@
|
||||||
#+TITLE: :tools ein
|
#+TITLE: tools/ein
|
||||||
|
#+DATE: April 11, 2018
|
||||||
* EIN -- Emacs IPython Notebook
|
#+SINCE: v2.0
|
||||||
|
#+STARTUP: inlineimages
|
||||||
Tool to work with Jupyter notebooks within emacs.
|
|
||||||
|
|
||||||
* Table of Contents :TOC:
|
* Table of Contents :TOC:
|
||||||
- [[EIN -- Emacs IPython Notebook][EIN -- Emacs IPython Notebook]]
|
- [[Description][Description]]
|
||||||
- [[Install][Install]]
|
- [[Module Flags][Module Flags]]
|
||||||
- [[Usage][Usage]]
|
- [[Plugins][Plugins]]
|
||||||
|
- [[Prerequisites][Prerequisites]]
|
||||||
|
- [[Features][Features]]
|
||||||
|
- [[Interaction with a Jupyter server][Interaction with a Jupyter server]]
|
||||||
- [[Configuration][Configuration]]
|
- [[Configuration][Configuration]]
|
||||||
|
- [[Setting the default location of your notebooks][Setting the default location of your notebooks]]
|
||||||
|
|
||||||
* Install
|
* Description
|
||||||
Add =:tool ein= to your ~doom!~ call in your private ~init.el~.
|
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:
|
Three functions are available to start EIN:
|
||||||
|
|
||||||
1. ~ein:jupyter-server-start~ --- Start a jupyter server within emacs
|
1. ~ein:jupyter-server-start~ --- Start a jupyter server within emacs
|
||||||
2. ~ein:notebooklist-login~ --- Login to an existing jupyter server
|
2. ~ein:notebooklist-login~ --- Login to an existing jupyter server
|
||||||
3. ~ein:notebooklist-open~ --- Open the list of jupyter notebooks
|
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
|
~ein:notebooklist-login~ and ~ein:notebooklist-open~ will be automatically
|
||||||
called.
|
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.
|
process of selecting links in the buffer.
|
||||||
|
|
||||||
If ~company-mode~ is enabled as a module, ~company-ein~ will be used for
|
If ~company-mode~ is enabled as a module, ~company-ein~ will handle completion.
|
||||||
completion purposes.
|
|
||||||
|
|
||||||
* Configuration
|
* Configuration
|
||||||
Specify the default directory where EIN searches for notebooks using:
|
** Setting the default location of your notebooks
|
||||||
|
Change ~+ein-notebook-dir~ to tell ein where to find your Jupityr notebooks.
|
||||||
~(set! :ein-notebook-dir "~/my-notebooks")~
|
|
||||||
|
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(setq +ein-notebook-dir "~/my-notebooks")
|
||||||
|
#+END_SRC
|
||||||
|
|
|
@ -58,6 +58,7 @@ what features are available.")
|
||||||
|
|
||||||
(def-package! magithub
|
(def-package! magithub
|
||||||
:after magit
|
:after magit
|
||||||
|
:when (not (featurep! :tools magit +forge))
|
||||||
:preface
|
:preface
|
||||||
;; Magithub is not well-behaved, so this needs to be set early
|
;; Magithub is not well-behaved, so this needs to be set early
|
||||||
(setq magithub-dir (concat doom-etc-dir "magithub/"))
|
(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
|
(evil-define-key* evil-magit-state git-rebase-mode-map
|
||||||
"gj" #'git-rebase-move-line-down
|
"gj" #'git-rebase-move-line-down
|
||||||
"gk" #'git-rebase-move-line-up)))
|
"gk" #'git-rebase-move-line-up)))
|
||||||
|
|
||||||
|
(def-package! forge
|
||||||
|
:when (featurep! :tools magit +forge)
|
||||||
|
:config
|
||||||
|
(map! :leader
|
||||||
|
:desc "Forge ""gF" #'forge-dispatch))
|
||||||
|
|
|
@ -126,7 +126,7 @@ fields in `+pass-url-fields' is used to find the url field."
|
||||||
'+pass/ivy
|
'+pass/ivy
|
||||||
'(("o" password-store-copy "copy password")
|
'(("o" password-store-copy "copy password")
|
||||||
("e" +pass/edit-entry "edit entry")
|
("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")
|
("b" +pass/copy-url "open url in browser")
|
||||||
("f" +pass/copy-field "get field"))))
|
("f" +pass/copy-field "get field"))))
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
|
|
||||||
(if (featurep! :ui modeline)
|
(if (featurep! :ui modeline)
|
||||||
(def-modeline-format! '+pdf
|
(def-modeline-format! '+pdf
|
||||||
'(+mode-line-bar " " +mode-line-buffer-id " " +pdf-pages)
|
'(+modeline-matches " " +modeline-buffer-id " " +pdf-pages)
|
||||||
'(+mode-line-major-mode +mode-line-vcs))
|
'(+modeline-major-mode (vc-mode (" " +modeline-vcs))))
|
||||||
(def-modeline! '+pdf
|
(def-modeline! '+pdf
|
||||||
'(bar matches " " buffer-info " " +pdf-pages)
|
'(bar matches " " buffer-info " " +pdf-pages)
|
||||||
'(major-mode vcs)))
|
'(major-mode vcs)))
|
||||||
|
|
|
@ -34,8 +34,7 @@
|
||||||
(load! "+modeline"))
|
(load! "+modeline"))
|
||||||
;; Handle PDF-tools related popups better
|
;; Handle PDF-tools related popups better
|
||||||
(set-popup-rule! "^\\*Outline*" :side 'right :size 40 :select nil)
|
(set-popup-rule! "^\\*Outline*" :side 'right :size 40 :select nil)
|
||||||
;; TODO: Add additional important windows that should be handled differently
|
;; The next rules are not needed, they are defined in modules/ui/popups/+hacks.el
|
||||||
;; TODO: These two next rules don't work (they should), investigate
|
|
||||||
;; (set-popup-rule! "\\*Contents\\*" :side 'right :size 40)
|
;; (set-popup-rule! "\\*Contents\\*" :side 'right :size 40)
|
||||||
;; (set-popup-rule! "* annots\\*$" :side 'left :size 40 :select nil)
|
;; (set-popup-rule! "* annots\\*$" :side 'left :size 40 :select nil)
|
||||||
)
|
)
|
||||||
|
|
|
@ -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
|
|
@ -503,8 +503,8 @@ Meant for `+modeline-buffer-path-function'."
|
||||||
(cond ((eq category 'coding-category-undecided)
|
(cond ((eq category 'coding-category-undecided)
|
||||||
"")
|
"")
|
||||||
((or (eq category 'coding-category-utf-8)
|
((or (eq category 'coding-category-utf-8)
|
||||||
(eq (plist-get sys :name) 'prefer-utf-8))
|
(string-match-p "utf-8" (symbol-name (plist-get sys :name))))
|
||||||
"UTF-8 ")
|
"")
|
||||||
((concat (upcase (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)))))
|
'help-echo (plist-get (coding-system-plist buffer-file-coding-system) :docstring)))))
|
||||||
|
|
|
@ -25,9 +25,9 @@ to the right fringe.")
|
||||||
(defun +version-control|git-gutter-maybe ()
|
(defun +version-control|git-gutter-maybe ()
|
||||||
"Enable `git-gutter-mode' in non-remote buffers."
|
"Enable `git-gutter-mode' in non-remote buffers."
|
||||||
(when (and buffer-file-name
|
(when (and buffer-file-name
|
||||||
(vc-backend buffer-file-name)
|
|
||||||
(or +vc-gutter-in-remote-files
|
(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)
|
(if (display-graphic-p)
|
||||||
(progn
|
(progn
|
||||||
(require 'git-gutter-fringe)
|
(require 'git-gutter-fringe)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue