No description
Find a file
Henrik Lissner 51d3b1b424
💥 revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.

In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.

  doom*shut-up -> doom-shut-up-a
  doom*recenter -> doom-recenter-a
  +evil*static-reindent -> +evil--static-reindent-a

The rationale behind this change is:

1. Elisp's own formatting/indenting tools would occasionally struggle
   with | and * (particularly pp and cl-prettyprint). They have no
   problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
   github markdown) struggle with it, sometimes refusing to highlight
   code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
   intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
   on haphazardly way back when Doom was simply "my private config".

Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.

Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
  macro. The old pair weren't as useful. The new def-advice! saves on a
  lot of space.
- Removed "stage" assertions to make sure you were using the right
  macros in the right place. Turned out to not be necessary, we'll
  employ better checks later.
2019-07-22 02:27:45 +02:00
.github Update issue/PR templates 2019-07-11 17:23:10 +02:00
bin 💥 revise advice naming convention (1/2) 2019-07-22 02:27:45 +02:00
core 💥 revise advice naming convention (1/2) 2019-07-22 02:27:45 +02:00
modules 💥 revise advice naming convention (1/2) 2019-07-22 02:27:45 +02:00
.gitignore Change .gitignore to exclude "modules/private" when attached as symlink. 2018-12-25 02:36:36 +04:00
.travis.yml Update travis config 2019-07-01 19:41:23 +02:00
early-init.el Minor experimental startup optimizations 2019-03-02 03:54:04 -05:00
init.el Move GC optimization to init.el 2019-05-15 18:30:20 -04:00
init.example.el Add :term shell module 2019-07-13 13:00:24 +02:00
init.test.el :tools password-store -> :tools pass 2019-05-19 02:18:25 -04:00
LICENSE Update license year 2019-02-25 01:37:46 -05:00
Makefile Deprecate Makefile for managing Doom 2019-07-20 11:40:03 +02:00
README.md Spice up README 2019-07-14 18:57:05 +02:00

Made with Doom Emacs Made for Emacs 25.3+ Build status: master Build status: develop Join our discord server

Doom Emacs Screenshot


Quick start

git clone https://github.com/hlissner/doom-emacs ~/.emacs.d
~/.emacs.d/bin/doom quickstart

Table of Contents

What is Doom Emacs

It is a story as old as time. A stubborn, shell-dwelling, and melodramatic vimmer -- envious of the features of modern text editors -- spirals into despair before succumbing to the dark side. This is his config.

Doom is a configuration for GNU Emacs. It can be used as framework for your own configuration, or as a resource for fellow Emacs enthusiasts who want to learn more about our favorite OS.

Doom's mantras

  • Gotta go fast. Startup and runtime speed are priorities; many expensive, heavy-handed packages have been modified to allow lazy loading or exploit caching.
  • Close to metal. There's less between you and vanilla Emacs, by design; that means less to grok. Modules should be syntactically sweet and backend logic explicit and abstraction-light.
  • Assembly required. Doom trusts you, for better or worse. It inherits your shell configuration, warts et all. If your system is misconfigured, Doom is misconfigured.
  • Opinionated, but not stubborn. Doom Emacs is a bundle of reasonable defaults and curated opinions, catered particularly to vimmers, but that's no reason you should be stuck with it. Use as little or as much of Doom as you like. Use it as a complete Emacs distribution, a baseline for your own, or anywhere in between.

Feature Highlights

  • A fabulous, minimalistic interface and theme inspired by modern editors (particularly Atom and sublime text).
  • A modular architecture for your Emacs configuration with sane defaults.
  • A declarative package management system managed from the command line, which allows you to install packages from anywhere.
  • A popup management system with customizable rules to dictate how temporary/disposable buffers are displayed.
  • A vim-centric (and optional) experience with evil-mode, including ports of several popular vim plugins, C-x omnicompletion and a slew of custom ex commands.
  • A Spacemacs-esque keybinding scheme, centered around leader and localleader prefix keys (SPC and SPCm, by default).
  • Indentation detection and editorconfig integration. Let someone else argue about tabs vs spaces.
  • Code completion for many languages, powered by company-mode (some may have external dependencies).
  • Project-awareness powered by 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, ripgrep, git-grep and wgrep, with integration for ivy (the default) and helm.
  • Isolated and persistent workspaces powered by persp-mode. Also substitutes as vim tabs.
  • Inline/live code evaluation (using 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.

Troubleshooting

Encountered strange behavior or an error? Here are some things to try before you shoot off that bug report:

  • Run bin/doom refresh. This ensures Doom is properly set up and its autoloads files are up-to-date.
  • If you have byte-compiled your config (with bin/doom compile), see if bin/doom clean makes the issue go away. Never debug issues with a byte-compiled config, it will 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 to see if your issue is listed.

If all else fails, file that bug report! Please include the behavior you've observed, the behavior you expected, and any error messages or warnings logged to the *Messages* buffer (can be opened with SPC h e or M-x view-echo-area-messages).

It's a great help if you included a backtrace with errors, i.e. M-x toggle-debug-on-error then recreating the error(s).

We've also got a Discord server. Hop on! We can help!

Contributing

Doom (and my Emacs work in general) is a labor of love and incurable madness, done on my spare time. If you'd like to support my work, I welcome contributions:

  • I love pull requests and bug reports. Check out the Contributing Guidelines to find out how you can help out.
  • I welcome Elisp pointers! Don't hesitate to tell me my Elisp-fu sucks (but please tell me why).
  • Hop on our Discord server and say hi! Help others out, hang out or talk to me about Emacs, or gamedev, or programming, machine learning, physics, pixel art, anime, gaming -- anything you like. Nourish this lonely soul!
  • If you'd like to support my work financially, consider buying me a drink through liberapay or paypal. Donations are a great help. My work here contends with studies, ventures in indie gamedev, and my freelance work.