- Unreleased (develop)
- 2.0.8 (Dec 09, 2017)
- 2.0.7 (Nov 08, 2017)
- 2.0.6 (Oct 05, 2017)
- 2.0.5 (Sep 03, 2017)
- 2.0.4 (Jul 14, 2017)
- 2.0.3 (Jun 11, 2017)
- 2.0.2 (May 13, 2017)
- 2.0.1 (Apr 8, 2017)
- 2.0.0 (Jan 17, 2017)
- Module changes:
- Add
private/default
to replaceprivate/hlissner
, which is a more generic “starter” module for new users. My private module is now at hlissner/doom-emacs-private.
- Add
general
- Fix “peculiar error” messages when running
bin/doom-doctor
, caused by poorly thought out error handling (see #175). - Fix
doom/am-i-secure
command. - Add unicode symbols to package management commands. Looks a little nicer <3.
- Transform
recentf
entries into their absolute paths with symlinks resolved (usingfile-truename
). - Local data and cache files are no longer host-namespaced. Originally, this
was meant to facilitate using the same config files (symlinked) across
different computers (e.g. via dropbox). Byte-compiled packages on one
computer would cause errors on another, so I abandoned this practice, making
doom-host-dir
unnecessary. - Fix an issue during live byte-compilation (with auto-compile-on-save-mode)
where
gc-cons-threshold
would get set to 304mb in the user’s active session, causing freezes and stuttering. - Improve error handling when byte compiling Doom. It now cleans up after itself if something goes wrong, with improved error handling overall.
- Fix
stringp
error thrown bydoom-fetch
in noninteractive sessions. core
Improve GPG integration by settingepa-file-encrypt-to
touser-mail-address
, andepa-pinentry-mode
to'loopback
(so that Emacs will prompt you for the passphrase in the minibuffer).core-packages
Fixdoom-module-pairs
returning pairs in arbitrary order, causing load order errors. This is because thehash-table-values
function in Emacs 25 and under usesmaphash
, which reverses the hash-table, while newer versions usecl-loop
, which doesn’t.core-packages
Fixdoom//*
not running from the correct default-directory, causing errors.core-ui
Fix cryptic missing-font errors (also, they are warnings now).core-ui
Account for Emacs 26 line numbers when calculatingvisual-fill-column-width
.core-editor
theKILL
argument forquit-window &optional KILL WINDOW
has been flipped and now kills the window’s buffer by default.core-projects
Adddoom-project-find-file
anddoom-project-browse
for interactively fuzzy-finding and opening files in a directory/project.- Add
doom/info
command for collecting information about your system and session and puts it in the clipboard. This is to make it easier for those reporting bugs to easily include it. - Fix ibuffer windows not being handed off to popup system (see #309).
- Fix “peculiar error” messages when running
feature
file-templates
- Add a file template for fish shell scripts (thanks to amosbird).
- Fix some file templates not being inserted, like module README.org files.
version-control
When evil-mode is available, start git commit message buffers in insert mode (see #300).jump
Always prompt for provider when no major-mode specific online jumper is defined (for+jump/online
and+jump/documentation
).
ui
doom-dashboard
- Fix
whitespace-mode
andshow-trailing-whitespace
turning the dashboard into a Christmas tree. - Add the
+doom-dashboard-pwd-policy
option, giving you control over howdefault-directory
is set in the dashboard. By default this is set to'last-project
, meaning the dashboard’s cwd will match the project of the last buffer you killed.
- Fix
completion
ivy
Fix TAB only half-triggering auto-completion (see #303).
lang
cc
- Add
rtags
support for better code navigation. This replaces gxtag and etag support. Also includes automatic management of the rdm daemon. - Improved support for JSON compilation databases. Irony-mode (and by extension its flycheck and company plugins will now pick them up with more consistency). This ensures all these tools run with the same compile options as your project.
- New
+cc/reload-compile-db
commands forcibly refreshes the compilation db of your current project, updating irony and running rtags daemon, if any. - The
+cc-include-paths
and+cc-compiler-options
options have been renamed to+cc-default-include-paths
and+cc-default-compiler-options
for clarity. - Fix irony-mode complaining when it is enabled in non-C major-modes.
- Add
org
- Change repo source for org-plus-contrib to emacsmirror.
- Fix
+org-dir
being resolved too soon, robbing the user of the opportunity to change it in their private module. - Fix
invalid file location
error when capturing to a TODO template. - Prevent
org-plus-contrib
from being installed on Emacs 26+, as 9.1.4 is included with it. - Fix invalid function errors when drag’n’dropping files into org buffers (see #307).
java
Fix Doom install meghanada server while byte compiling your Emacs configuration.
- Module changes:
- New module:
lang/nix
, adds support for editing nix configuration files. Contributed by ocharles. - The
org/*
modules have been moved tolang/org
and sub-modules therein. With the introduction of module flags in 2.0.5, it was unnecessary that org-mode had its own category. - Any module can now have an
init.el
, which will be loaded before any other modules are loaded.
- New module:
general
- Removed all core def-setting! definitions, because
set!
was intended for cross-module configuration, where modules may or may not be enabled. This consideration is unnecessary for Doom core configuration. The following settings have been removed::editorconfig
,:theme
,:font
,:variable-font
,:unicode-font
,:big-font
. - Address various byte-compiler warnings that crop up in Emacs 26+, including obsolete (if|when)-let macro warnings.
- Fix byte-compiler complaining that packages couldn’t be found when that package is unwanted (e.g. conditionally installed or disabled packages).
private/{user-login-name}
is no longer a “magic” module that is automatically loaded.core-packages
BREAKING Packages are no longer deferred by default. i.e.use-package-always-defer
is now nil, as per the default.core-popup
Fix window-live-p error when usingdoom/other-popup
(or its alias,other-popup
).core-ui
Fix hl-line highlighting the rest of the window past end-of-file in Emacs 26+. This is caused by a strange dynamic between hl-line and the new line numbers feature.
- Removed all core def-setting! definitions, because
feature
version-control
Fix an issue with shackle not managing magit’s popups properly. This could cause the pointer to end up in the wrong places (e.g. when you try to commit; the commit message and diff buffers pop up and the pointer gets stuck in the diff window) (see #282).
completion
helm
Implement:agcwd
,:rg
, and:rgcwd
commands for searching with helm.ivy
- Add C-SPC binding for “previewing” the selected candidate. Useful for
previewing files in
counsel-find-file
orcounsel-projectile-find-file
. This keybinding is defined inprivate/hlissner/+bindings.el
. - Disable “very magic” regular expressions in ivy. Specifically, parentheses are now literal, and must be escaped to make them special. This is consistent with evil-search regex.
- Fix a bug where
:rgcwd
wasn’t showing any results, due to an incorrect option argument in the ripgrep command string.
- Add C-SPC binding for “previewing” the selected candidate. Useful for
previewing files in
ui
doom-modeline
Remove the let-binds forall-the-icons-scale-factor
, so that users can customize it themselves (see #278).
tools
password-store
Fix compatibility with Emacs 26.
lang
clojure
- This module has been rewritten with improved Cider and clojurescript support, as well as new refactoring commands. Thanks to teesloane!
crystal
- Add flycheck integration for the Crystal language, powered by
flycheck-crystal
. - Use the ELPA source for
crystal-mode
. The former QUELPA source (dotmilk’s fork) is no longer maintained.
- Add flycheck integration for the Crystal language, powered by
org
- Fix scenario where built-in (and incorrect) version of org-mode (8.x) was loaded instead of 9.0+.
- This module is incredibly opinionated. More opinionated than I’d like, but
org-mode is an ongoing effort. To address this,
lang/org
has been reorganized. Variables are now set withdefvar
instead ofsetq
, which makes them more accessible for configuring from private modules. - Use the ELPA source for
ob-rust
. The former QUELPA source (zweifisch’s fork) is no longer maintained. - Fix an over-aggressive smartparens config for org-mode that would cause certain markers and delimiters (like spaces or square brackets) being repeated in places you didn’t want them to be, like inside a checkbox.
- Module changes:
- BREAKING Split
lang/java
into two submodules: one for eclim, and another for meghanada. You will need to update yourinit.el
to enable one. submodule is experimental, since I have few opportunities to test it. - BREAKING Ace-window is no longer part of Doom core. It has been moved to
ui/window-select
, which offers two submodules for interactive window selection/moving: ace-window and switch-window.
- BREAKING Split
general
- New command naming convention:
doom//...
– denotes that this an interactive command meant for:- Altering or maintaining your Emacs configuration itself.
- And can be safely called through a batch session on the command line. E.g.
emacs --batch -f doom//some-command
.
- New macro for defining fuzzy-find menus (powered by whatever completion
engine you have active):
def-menu!
. - Autoload files can now specify a predicate cookie to tell the
compiler/autoload reader whether or not to ignore that file. They look like
;;;###if (featurep! :feature evil)
. core-keybinds
Add :g flag tomap!
for defining global keybinds along with vim keybinds, so you don’t have to repeat yourself, just for a global binding.core-packages
Fix an issue where Doom’s package management system wouldn’t know what to do with a package that was initially installed with one backend (e.g. ELPA), and whosepackage!
definition was later changed so that it should be handled by another (e.g. QUELPA). This would cause “FAILED” error messages while trying to install or update these packages (see #222).
- New command naming convention:
feature
file-templates
Disable file templates for .dir-locals.el files.jump
New command+jump/online-select
, which is like+jump/online
, but will always prompt for which provider to use.
ui
doom
This module no longer sets a default font. This is left to the user to set in their own private module. Use(set! :font "Font Name" :size N)
to do so.
lang
sh
- Improve how variables and subshells in double-quoted strings are fontified.
- Fix imenu not recognizing functions with dashes in their names.
java
- Polished meghanada-mode integration.
- New (and optional) +eclim submodule and module flag.
rust
- Now checks the
RUST_SRC_PATH
environment variable before looking for Rust’s source in+rust-src-dir
. - Now looks for a
racer
binary inPATH
before looking in+rust-src-dir
.
- Now checks the
- Module changes:
- Add
lang/ledger
- Add
ui/vi-tilde-fringe
– used to be incore-ui
; indicates beyond-EOB, using tildes in the fringe (inspired by vim). - Add
feature/services
– used to betools/prodigy
. Adds a way of managing external processes and services. - Add
tools/make
– for running project Makefile commands from Emacs. - Add
tools/imenu
– adds a sidebar for imenu (imenu-list
), and a way of jumping to imenu entries across all open buffers (imenu-anywhere
). - Move
feature/hydra
intocore-keybinds
. - Rename
feature/debug
tofeature/debugger
(and disabled it by default; it is currently unstable and needs some work). - Remove
org/org-notebook
. It was unused and too small to warrant its own module. Useful tidbits were merged intoorg/org
.
- Add
general
Makefile
- Fix
make update
to work even if Doom is installed somewhere other than\~/.emacs.d
(see #190). - Removed colons from makefile task target names (like
compile:core
); replaced them with dashses, e.g.compile-core
. Colons broke compatibility with certain versions of make.
- Fix
autoload
- New library:
menu.el
– allows context-sensitive and customizable fuzzy-searchable menus; this was written to replace long lists of major-mode-local key bindings, like refactoring and code building commands. This replacesfeature/eval
’s build task system. editor.el
Fix old scratch buffer commands and renamed them:doom/open-scratch-buffer
anddoom/open-project-scratch-buffer
. The former opens a temporary, transient scratch buffer, the latter opens a permanent one tied to the current project, kept indoom-scratch-files-dir
.window.el
Changeddoom-resize-window
to accept two more arguments,WINDOW
andFORCE-P
:doom-resize-window WINDOW NEW-SIZE &optional HORIZONTAL FORCE-P
. IfFORCE-P
is non-nil, this function will resize a window regardless ofwindow-size-fixed
.
- New library:
core-keybinds
Add newdef-hydra!
alias macro fordefhydra
(for consistency, and in case we want to wrap it later).core-projects
Redesigndef-project-mode!
for efficiency, and:- The
:init FORM
property is now:on-load FORM
. - Three new properties:
:on-enter FORM
,:on-exit FORM
and:add-hooks LIST
.
- The
core-popups
- Added two new popup properties:
:static
If non-nil, treat this popup like a permanent window, making it impervious to automatic closing and being tracked in popup history. This is excellent for semi-permanent popups, like sidebars (think Neotree or imenu-list).:autofit
If non-nil, this popup will resize to fit its buffer contents. This only works with popups where the buffer content is immediately available, and not for, say, buffers tied to async processes.
doom-popup-buffer
anddoom-popup-file
no longer take a variadic argument. Their signature is nowdoom-popup-buffer buffer plist &optional extend-p
anddoom-popup-file file plist &optional extend-p
, whereEXTEND-P
will causePLIST
to extend from the base rule for that buffer.- Rename
doom-popup-prop
todoom-popup-property
. - Add support for moving popup windows. See the
doom/popup-move-*
commands. There are used by+evil/window-move-*
, which provides universal support for moving windows. - Add command:
doom/popup-raise
, for promoting a popup into a regular window. - Add helper macro:
save-popup! BODY
– hides the popups before running BODY. - Fix
doom/popup-toggle
andsave-popups!
killing popups with an:autokill
property.
- Added two new popup properties:
feature
hydra
Display a separator on the bottom of hydra windows for contrast.eval
Build-task management has been removed fromfeature/eval
in favor ofdef-menu!
.
ui
doom-dashboard
- Fix horizontal centering discrepancies caused by multiple visible dashboards in windows/frames with different sizes (see #192). Still doesn’t address vertical centering.
- Fix dashboard’s default-directory not changing to the last open project when switched to.
doom-modeline
Add a new style to+doom-modeline-buffer-file-name-style
:relative-from-project
, which displays on the buffer’s path relative to (and including) the project.hl-todo
Add face-based detection for commented regions, so hl-todo can work in modes with no/poor syntax-table support.
tools
neotree
- Fix neotree shrinking by 1 when vertical splits were closed.
- Fix Neotree popup rule not taking
neo-window-width
andneo-window-position
into account.
term
Renamed commands for consistency (to+term/open
,+term/open-popup
and+term/open-popup-in-project
).eshell
Renamed commands for consistency (to+eshell/open
,+eshell/open-popup
and+eshell/open-workspace
).
lang
ruby
Add rake support. See therake
command.web
Only install company-web if:completion company
is enabled.javascript
- Add eslint_d and eslint_d-fix detection and support.
./node_modules/.bin
is now added toexec-path
in NPM project buffers.
haskell
There is no longer a ‘default’ implementation for Haskell. The+intero
and/or+dante
module flags must be specified in init.el.java
Meghanada is no longer the ‘default’ implementation for Java. The+meghanada
and/or+eclim
module flags must be specified in init.el.
org
- If a table is under point when
+org/toggle-fold
is invoked, the table is realigned. - Fix the incorrect version of org being loaded (site, instead of ELPA) by
pushing it up further in the
load-path
. - Fix
+org/insert-item
not jumping over sublists to append a new list item.
- If a table is under point when
doom
- Added new module:
tools/rgb
, with tools for dealing with colors (thanks to bandresen) - Added new module:
tools/prodigy
, with tools for managing external services (thanks to bandresen) - Added new module:
feature/hydra
, offers an extra and customizable layer of modal keybinds (thanks to bandresen) - Added two new core-lib helpers for macros:
doom-enlist
anddoom-unquote
. - Switch to
doom-fallback-buffer
after usingdoom/kill-all-buffers
(or:killall!
). make doctor
now does font detection and will complain when fonts are missing.- When switching to a new project, a new workspace is spawned and a fuzzy find-file prompt is opened. However, a buffer from the previous workspace would linger on screen and the scratch buffer would CD to HOME, rather than the project root. This is fixed now.
- Added module flags to the
doom!
macro in init.el, and modified thefeaturep!
macro so that it can be used to detect these flags from within modules. It is up to modules how to interpret them. More information in 0b7b880. - Fix projectile-find-file not respecting
default-directory
(caused by changes upstream). - Rewrote, revised and expanded module documentation, and created a wiki with more information.
- Removed the
:L
flag frommap!
and replaced it with a:local
property. - Added new function:
doom|disable-vi-tilde-fringe
for turning off vi-tilde-fringe in select buffers. - Added support for relative line numbers (see
doom-line-numbers-style
), using nlinum-relative on Emacs <26, and display-line-numbers on Emacs 26+.
- Added new module:
feature
file-templates
Added a file template for:- *.org files
- Module README.org files.
jump
- Added documentation for
:jump
setting, describing the three properties it supports (:definition
,:references
and:documentation
). - Rewrote
+jump/online
to:- Use the current selection, if active, or prompt for a query otherwise (with the thing at point as the initial input).
- Prompts for the provider (search engine) on first use, and reuses the
last provider on consecutive uses. If the universal argument is
supplied, force
+jump/online
to prompt for the provider anyway.
- Added documentation for
workspaces
Fix interactive renaming of workspaces, as well as the ability to save and load workspaces from files (see #200).
completion
- Added all-the-icons support to
ivy-switch-buffer
and+ivy/switch-workspace-buffer
. Enable this with(setq +ivy-buffer-icons t)
.
- Added all-the-icons support to
ui
- rainbow-mode is no longer activated on
prog-mode-hook
. doom-modeline
doom-dashboard
Fixed “Load last session” button on dashboard.
- rainbow-mode is no longer activated on
tools
lang
cc
The advise functionc-lineup-arglist
was missing, and has now been reimplemented.haskell
With module flags implemented, Intero support is now available to lang/haskell and is now the default. Dante support is still available with the+dante
flag.java
Now auto-installs meghanda-server on first use, and fixed code-completion in java buffers.
org
- Fixed vanilla C-j/C-k bindings overshadowing custom window navigation bindings.
- Added C-[hjkl] keybindings in insert mode for org table navigation.
- Fixed
+org/insert-item
throwingsave-excursion: Wrong type argument: listp, 1
error when used from BOL on the first sub-item in a list.
- Module changes:
- Added
tools/password-store
– Emacs as a password manager, using pass as a backend (contributed by brandresen). - Added
app/irc
– Emacs as an IRC client, using circe (contributed by brandresen).+pass/ivy
for ivy integration, with edit/copy field/open url actions.helm-pass
for helm integration.
- Added
lang/hy
– support for hylang, a combination of Lisp and Python (thanks to bandresen). - Added
lang/ocaml
– support for OCAML (thanks to Ptival) - Added
lang/plantuml
– drawing diagrams in plain text - Added
lang/perl
– Perl6 support for Emacs - Added
ui/tabbar
– add tabs to Doom via tabbar (I don’t recommend using it) - Removed
lang/org
- Added
org
– a new module category for org and org extensions - Removed
app/present
(replaced mostly withorg/org-present
)org/org-babel
– executable code snippets in org-mode, with support for a variety of languages.org/org-capture
– a better org-capture, in or outside of Emacs.org/org-export
– a centralized export system with more export backends.org/org-notebook
– org-mode as a general notebook.org/org-present
– org-mode for presentations.
- Added
tools/impatient-mode
– show off live buffers via HTTP.
- Added
core
- New variable:
doom-host-dir
, as a base path fordoom-etc-dir
anddoom-cache-dir
. - New hooks:
doom-init-hook
anddoom-post-init-hook
, which are run onemacs-startup-hook
. This is meant to simplify post-Emacs initialization hooks (after-init-hook
,emacs-startup-hook
andwindow-setup-hook
) into two unambiguous ones. - Fix
private/<user-login-name>/init.el
not being auto-loaded when the user’s private module is absent in the root init.el file. - Improve error handling across the board. Emacs should now report more helpful errors. Catastrophic errors will be less likely to inhibit later modules from being loaded.
- Unit-tests have been moved to their respective modules (and
core/test/
). - Fix
def-setting!
to act more likedefmacro
; don’t aggressively evaluate its arguments on expansion. - New function:
doom-set-buffer-real BUFFER FLAG
– makes Doom consider BUFFER real, no matter what. - Add INSTALLED-ONLY-P argument to
doom-get-packages
to filter packages that aren’t installed. core-ui
- Add quit confirmation when trying to close a frame that contains real buffers.
- Fix quit confirmations for clients connected to
emacs --daemon
withemacsclient
. - Brought back nlinum-hl, which offers some line number fixes for web-mode and markdown-mode.
- Don’t report the buffer modified when injecting (or deleting) trailing
whitespace in
doom|inject-trailing-whitespace
anddoom|init-highlight-indentation
. - all-the-icons now fails gracefully in the terminal.
- New hook:
doom-init-ui-hook
, run whenever the UI needs to be reloaded (and once at startup). Theme and font loading is also attached to this hook. - New variables for font and theme loading:
doom-theme
,doom-font
,doom-variable-pitch-font
, anddoom-unicode-font
. - New variables for customizing line numbers:
doom-line-number-lpad
,doom-line-number-rpad
, anddoom-line-number-pad-char
. These were added to facilitate custom whitespace characters in line numbers, e.g. /u2002 (a unicode character that looks like a space). Doing so fixes an issue wherewhitespace-mode
withspace-mark
would replace all space characters indiscriminately, even in line numbers. - Add hooks
doom-pre-reload-theme-hook
anddoom-post-reload-theme-hook
todoom/reload-theme
command.
core-popups
- Fix an issue where more specific popup rules were being overriden by more general rules.
- New command:
doom/other-popup
– cycles between open popup windows and the original buffer that you originated from. Discussed in #141.
core-editor
- Change what files recentf will ignore: everything in
doom-host-dir
is now ignored and anything else indoom-local-dir
won’t be. - New interactive command:
doom/scratch-buffer
(replaces+doom:scratch-buffer
in:ui doom
).
- Change what files recentf will ignore: everything in
core-packages
- Generalize
doom-package-*-p
functions into(doom-package-prop NAME PROPERTY)
. - Fix quelpa temporary files (in
quelpa-build-dir
) not being removed when a quelpa package was uninstalled. - New hook:
doom-reload-hook
(sort of). This has been around for a while, but now it is defined and documented. It runs whendoom/reload-load-path
is called (which gets called remotely if you run package management while an Emacs session is active). load!
can now accept a string as its first argument (the path).
- Generalize
- New variable:
feature
feature/evil
- Remove
goto-last-change
, which conflicts withgoto-chg
, which is a dependency of evil (that does the exact same thing, but is what evil uses).
- Remove
feature/jump
- Remove
:xref-backend
setting (replaced with:jump
). - Add
:jump MAJOR-MODE &rest PLIST
setting, which recognizes four properties (that accept functions/commands)::definition
: jumps to the definition of the symbol under point.:references
: lists all references of the symbol at point and lets you jump to them.:documentation
: shows documentation for the symbol at point.:xref-backend
: a function that serves as an xref backend; this replaces:definition
and:references
.
- Remove
feature/workspaces
- New function:
+workspace-contains-buffer-p &optional BUFFER PERSP
– return non-nil if BUFFER (defaults to current buffer) is in PERSP (defaults to current perspective). - Fix
+workspace-p
not detecting a perspective struct. - Fix
+workspace-buffer-list
not preserving buffer order (by recency).
- New function:
completion
completion/company
- Add
company-dabbrev
andcompany-ispell
to the default Company backends. This ensures you have some completion available in buffers previously without any. This is especially useful for text-mode buffers. Discussed in #134.
- Add
ui
ui/doom
- Vastly improve daemon and terminal support for doom-themes by reloading the theme when a new client is attached, or new terminal/daemon frame is created. This prevents incorrect colors from bleeding across face class barriers.
- Removed evil command
+doom:scratch-buffer
(replaced withdoom/scratch-buffer
incore-ui
). - Decoupled font and theme loading from this module. This has now been
delegated to
core-ui
. These variables no longer exist:+doom-theme
,+doom-font
,+doom-variable-pitch-font
,+doom-unicode-font
. Discussed in #117.
ui/doom-dashboard
- Fix dashboard not opening in emacsclient/daemon frames.
- Add
gg
andG
keybinds in dashboard for moving to the first and last button (respectively).
ui/doom-modeline
- Reorganize order of modeline segments, placing the vc branch last. This minimizes the non-uniform spacing caused by all-the-icon icons.
- Fix blank mode-line caused by a nil buffer-file-name (used in vcs segment). For example, in org indirect buffers.
tools
tools/neotree
- Fix neotree refusing to open when it was already open in another frame. This is especially frustrating when neotree is open in a (likely buried) terminal emacsclient session, and you’re trying to open neotree in another.
lang
lang/cc
- Add code completion to glsl-mode (powered by company-glsl).
lang/markdown
- Source blocks are now fontified natively, with the fontification of their
native major-modes (see
markdown-fontify-code-blocks-natively
).
- Source blocks are now fontified natively, with the fontification of their
native major-modes (see
lang/sh
- Fix fontification of command substitutions in double-quoted strings to help distinguish them from the rest of string literals.
lang/web
- Fix HTML entity encoding/decoding functions.
org
org/org
- Fix M-RET in plain lists not preserving indent level for new items.
- Fix cursor jumping away when toggling folds or realigning org tables (pressing TAB).
- Minimized keybindings into the bare necessities; most custom bindings have been moved to my private module.
org/org-capture
- Start org-capture-mode in insert-mode (if evil is loaded).
- New modules
ui/unicode
– fixes unicode font-rendering for a variety of languages, using unicode-fonts.ui/evil-goggles
– visual feedback for edit operations in evil-mode, using evil-goggles.ui/nav-flash
(extracted fromui/doom
) – flashes current line when moving cursor considerable distrances, using nav-flash.tools/neotree
(extracted fromfeature/evil
) – a file explorer sidebar, using neotree.
core
- New special file:
private/<user-login-name>/init.el
is now loaded before modules (after core). :private <user-login-name>
is now automatically loaded bydoom!
.- New help command:
doom/describe-module
– for DOOM modules. - New help command:
doom/describe-setting
– for possibleset!
targets. - Add
make doctor
to diagnose common issues with your setup & environment. - Removed
def-bootstrap
&doom-bootstrap
. It was a clumsy system. I’ll replace it with README.org files in each module, with working, tangle-able source blocks. core-os
- Don’t use GTK tooltips on Linux (ugly!).
core-ui
- New plugin: vi-tilde-fringe – subtle, vim-ish empty-line indicator.
- New variable:
doom-ui-mode-names
(alist) – for changingmode-name
of major-modes. - Fix left-over hl-line overlays when hl-line-mode is uncleanly killed (e.g. when the major-mode is changed).
- Fix disappearing line numbers in nlinum (thanks to gilbertw1).
- Move theme/font bootstrap to core-ui.
- New hook:
doom-init-ui-hook
- New global minor-mode
doom-big-font-mode
and variabledoom-big-font
.
core-keybinds
- New property for
map!
::textobj
– for binding to evil text objects keymaps. - Fix
:after
&:map*
properties inmap!
macro (wasn’t working at all). - Change keybinding scheme; the leader key is now
SPC
and localleaderSPC m
, inspired by spacemacs. - Enable which-key pops up for all keys.
- New property for
core-popups
- Properly persist
popup
window parameter between sessions. - Improve magit+shackle integration; ensures that links will be followed within the popup they were opened.
- Add
doom-popup-no-fringe
option (default = t). When non-nil, fringes will be disabled in popup windows (indoom-popup-mode
).
- Properly persist
core-packages
- Fix failure to detect out-of-date QUELPA packages.
- Fix
custom-file
(and custom settings) not being loaded. - Fix crash in
doom-update-package
caused by unreachable, new dependencies. - Make
doom-update-package
atomic in case of failure. - Make
doom-refresh-packages
async. - Improve the security of package management (via ELPA) by a) forcing Emacs to verify TLS connections and b) use HTTPS sources for MELPA and ELPA.
- Make
doom-get-outdated-packages
asynchronous, producing a substantial speed-up when updating packages from Quelpa sources.
- New special file:
feature
feature/evil
- Add
+evil:mc
command evil-mc. - Add
+evil/mc-make-cursor-here
, with visual-block support for evil-mc. d
(operator) now invokeswgrep-mark-deletion
in wgrep buffers.- New code folding system that combines hideshow (built-in; for indent/marker-based folds) and evil-vimish-fold (for arbitrary folds).
- Fix evil-matchit in visual mode.
- Fix evil-multiedit M-d bindings.
- Fix stringp error caused by unintialized state in hideshow.
- Fix evil normal-mode keybindings in help-mode popups.
- Change how
+evil-esc-hook
hooks are handled: they now short-circuit on the first hook to return non-nil. - Remove
+evil/matchit
(thin wrapper aroundevilmi-jump-items
). - Remove neotree plugin (moved to
tools/neotree
).
- Add
feature/jump
- Call
recenter
after using dumb-jump.
- Call
feature/workspaces
- No longer saves session on quit if session was blank.
- Fix persp-mode switching to main workspace if auto-resume is on.
- Fix
+workspace-get
returning a non-nil “null perspective” on some occasions where NAME doesn’t exist. This is becausepersp-get-by-name
returns the value ofpersp-not-persp
to signify null instead of actual nil. - Decouple workspace buffer-list functions from doom buffer library. Now,
the workspaces module will explicitly advise
doom-buffer-list
. +workspace-list
now returns a list of perspective structs, rather than a list of strings.+workspace-list-names
was introduced for the latter.
completion
completion/company
- Change
:company-backends
to accept a variadic list of backends to prepend tocompany-backends
. Its signature is now(set! :company-backends MODES &rest BACKENDS)
(#125).
- Change
completion/ivy
- Flexible column width for
+ivy/tasks
.
- Flexible column width for
ui
ui/doom
- New plugin: solaire-mode – replaces
doom-buffer-mode
; brightens source windows and dims transient, temporary, or popup windows. - BREAKING CHANGE: Decoupled theme and font loading from ui/doom. This has
been moved to core-ui. The following variables have been renamed:
+doom-theme
=>doom-theme
+doom-font
=>doom-font
+doom-variable-pitch-font
=>doom-variable-pitch-font
+doom-unicode-font
=>doom-unicode-font
- New plugin: solaire-mode – replaces
ui/doom-modeline
- Reduce excess whitespace on right of flycheck segment.
- Buffer-path and file-name segments now use different faces.
- The vcs segment now uses a slightly darker color (in clean branches).
- Fix blank mode-line when buffer-file-name is nil (#130)
ui/nav-flash
- Fix over-aggressive nav-flash’ing on evil-multiedit or in eshell/term buffers.
tools
tools/gist
- Changed new gists to be private by default.
lang
lang/haskell
- New plugin: company-ghc – code-completion support for haskell (requires
ghc-mod
).
- New plugin: company-ghc – code-completion support for haskell (requires
lang/php
- New plugin: company-php – code-completion support for php (requires a TAGs file created with phpctags).
lang/emacs-lisp
- Omit defuns inside macros from the imenu index.
- Don’t enable
flycheck-mode
in emacs.d files.
lang/org
- Replace org-bullets source with more up-to-date fork.
lang/scala
- Fix
void-variable imenu-auto-rescan
error caused byensime--setup-imenu
trying to use imenu variables before loading imenu.
- Fix
private/hlissner
- Add
gzz
binding (+evil/mc-make-cursor-here
) - Add
:mc
ex command (+evil:mc
) - Add
:lookup
ex command (+jump:online
). - Add
:gblame
ex command (magit-blame
). - Add
:grevert
ex command (git-gutter:revert-hook
).
- Add
- New modules
tools/gist
– allows you to manage and create gists, using gist.el.tools/term
– quickly spawn a terminal (in a popup or buffer) using multi-termapp/twitter
– Emacs as a twitter client, using twittering-mode
core
- Stop “buffer is read-only” messages while in minibuffer, when I accidentally try to edit the prompt. It’s correct behavior, but it consumes the minibuffers, hiding what I’m typing.
- Fix Emacs daemon compatibility with DOOM, which assumed a frame will always be visible on startup, causing errors when Emacs is launched as a daemon.
- Code-style change: use sharp-quote for functions. This makes the byte-compiler output missing-function warnings when they can’t be found, which is helpful.
- Stop projectile & git-gutter checks when in a TRAMP buffer; it causes tremendous slowdowns, to the point of being unusable.
- Add
message!
&format!
macros for printing colored output either a) in a popup buffer when in an interactive session or b) with ansi codes when in an noninteractive session. - Changed
doom/recompile
to aggresively recompilecore/core.el
to fix load-path inconsistencies when you’ve byte-compiled your config and run a package management command. core-lib
- Add
:append
support toadd-transient-hook!
macro.
- Add
core-popups
- Fix over-eager ESC binding killing all popups indiscriminantly
core-ui
- Remove references to
ace-maximize-window
(obsolete) - Fix whitespace adjustment in
highlight-indentation-current-column-mode
- Remove references to
core-packages
- Package management now produces colored and detailed feedback.
ui
ui/doom
- Git-gutter fringe bitmaps no longer appear truncated.
- Fix lack of syntax highlighting in scratch buffer
- Use comment face as default color for
+doom-folded-face
ui/doom-modeline
- Fix modeline disappearing due to loss of state.
doom--modeline-format
was being killed when switching major modes.
- Fix modeline disappearing due to loss of state.
feature
feature/eval
- Fix
:repl
&+eval/repl-send-region
. - Fix
+eval/region
failing only on first invocation because+eval-runners
wasn’t populated until quickrun is loaded. - Add TAB auto-completion in comint-mode and REPL buffers
- Fix
feature/evil
feature/version-control
- New plugin: git-timemachine – stepping through a file’s git history.
- New plugin: git-link – generates and opens links to “this file“‘s remote repo with your default browser.
- Add
:gbrowse
: find this file on github/gitlab/bitbucket in your browser. - Add
:gissues
: open this project’s issues page in your browser. - Fix
+vcs/git-browse
and+vcs/git-browse-issues
.
feature/workspaces
- Add BANG modifier to
:cleanup
to span all workspaces. - Since persp-mode handles its “nil” perspective differently from others, pretend that it doesn’t exist and spawn a new “main” perspective.
- Add BANG modifier to
completion
completion/ivy
- Add
+ivy-do-action!
factory macro. Use it for in-ivy keybindings. - Add ripgrep file search support. Ripgrep doesn’t support multiline
searches, but is faster. Use
ag
for multiline (or more PCRE-compliant) searches. - Reverse ivy’s built-in behavior of reversing escaping of parentheses when using the_silver_searcher or ripgrep. If you want literal parentheses, escape them explicitly.
- Removed
def-counsel-action!
- When a selection is used for
:ag
, the selected text is now regexp-escaped.
- Add
tools
tools/tmux
- Fix and refactor library (general update).
lang
lang/cc
- Integrate counsel-ivy into irony-mode
lang/javascript
- Improve electric indent support for
js2-mode
andrjsx-mode
- Improve electric indent support for
lang/org
- Fix org-checkbox-statistics not respecting underlying faces
- Disable
show-paren-mode
in org-mode due to conflicts with org-indent which cause indentation flickering. - Bind
M-z
(undo
),C-u
(delete-line
) andC-w
(delete-word
) inorg-store-link
andorg-insert-link
prompts. - Apply org-headline-done face to checked-checkbox lines, to match how DONE headlines look. Also applies this to items whose subitems are all complete.
- Changed default fold behavior when loading an org-file to unfold first level folds.
- Add
bin/org-capture
shell script for invoking the org-capture frame from outside Emacs. - Add babel support for: rust, restclient, sql, google translate, haskell and go.
- Add
+org-pretty-mode
for toggling “pretty” fontification. Prettified entities or hidden regions can make editing difficult.
lang/python
- Add ipython detection and REPL support
- Simplify matchit key (%) in python. The default is to prioritize if-else and other blocks over brackets. I found this frustrating.
lang/web
- Fix
+web-encode-entities
,+web-decode-entities
,+web/encode-entities-region
and+web/decode-entities-region
.
- Fix
app
app/email
- Replace mbsync with offlineimap.
- Add support for marking multiple emails when in visual-mode (evil) in a
mu4e-headers-mode
buffer. - Fix trash mark causing duplicates upstream.
- Make refiling more compatible with archiving in gmail.
private/hlissner
- Add keybinds for evil-mc: based around
gz
(likegzz
to toggle cursor freeze, andgzc
to create a cursor “here”). - Add keybinds for evil-multiedit: based around
M-d
andM-D
. - Replace
:find
with:ag
,:agc[wd]
,:rg
and:rgc[wd]
. - Fix
:x
ex command (open scratch buffer)
- Add keybinds for evil-mc: based around
- New modules
core
- Fix
doom-kill-process-buffers
not killing process buffers. - Fix
hippie-expand
in ex mode/the minibuffer. - Remove unnecessary
provide
’s in core autoloaded libraries. - Fix
doom-buffers-in-mode
not detecting buffers in major-modes derived from the target mode. - Fix out-of-bounds error in
doom/backward-delete-whitespace-to-column
. - Remove
doom/append-semicolon
; use evil append mode instead. - Add module bootstrapping mechanism (for installing external dependencies);
see
doom-bootstrap
,make bootstrap
anddef-bootstrap!
. - Use
doom-local-dir
for TRAMP’s temp files. - New variable:
doom-real-buffer-functions
– for customizing howdoom-real-buffer-p
determines what a “real” buffer is. - Add
def-memoize!
for defining memoized functions anddoom-memoize
for memoizing existing ones. core-lib
- Fix
remove-hook!
macro not expanding correctly. - New macro:
add-transient-hook!
; attach a hook to a hook or function that will remove itself once it runs.
- Fix
core-packages
- Add
doom/recompile
, for re-byte-compiling DOOM. - Add
doom/compile-lite
/make compile-lite
, which will only byte-compile DOOM’s core files, which is a lighter alternative todoom/compile
. - Fix duplicates packages appearing in package-management retrieval library.
- Add
core-os
- Reducing how aggressive
exec-path
caching is. Apersistent-soft
and byte-compilation cache is excessive. The latter is good (and flexible) enough.
- Reducing how aggressive
core-popups
- Set default
:align
and:select
shackle properties (of8
andbelow
).
- Set default
core-editor
- Advise
delete-trailing-whitespace
to not affect current line. If evil is loaded, then it may affect the current line if we’re not in insert mode.
- Advise
core-projects
- Recognize
package.json
as a project-root file (seeprojectile-project-root-files
). - Fix
:files
property indef-project-mode!
not detecting project files.
- Recognize
core-ui
- Replace highlight-indent-guides-mode with highlight-indentation-mode; the former won’t display indent guides on blank lines, even with my whitespace injection hook.
- Fix
feature
feature/eval
- Fix build tasks system; now tested and works.
- Complete rewrite of the module.
feature/evil
- Fix error in
+evil:file-move
ifsave-place-mode
is disabled.
- Fix error in
feature/snippets
- Don’t hijack TAB in other modes.
- Enable
yas-triggers-in-field
, which adds support for nested snippets. - Fix snippet aliases (
%alias
).
feature/version-control
- Remove
evil-magit
and evil-ified bindings for magit in general. Instead, just use emacs mode. If evil is needed, toggle it withC-z
.
- Remove
feature/workspaces
- Fix
+workspace/kill-session
not actually killing the session. - Revert forcing persp-mode to stay quiet when it saves the session to file. It just isn’t important enough.
- Create a new perspective when switching projects (integrates projectile with persp-mode).
- Create a new perspective for new frames.
- Fix
ui
ui/doom
ui/doom-modeline
- Complete rewrite of the module for code readability and performance.
ui/doom-dashboard
- Fix a
max-specpdl-size
error caused on MacOS, having to do with akill-buffer-query-function
hook being attached way too soon in the startup process.
- Fix a
lang
lang/cc
- Fix empty
buffer-file-name
inmagic-mode-alist
rule for obj-c. - Fix irony-mode initialization in cc modes.
- Fix empty
lang/emacs-lisp
- Add xref support for elisp.
lang/go
- Add code-completion support with gocode and company-go.
- Add code navigation support with go-guru (built-in to go-mode).
- Add REPL support with gore and gorepl-mode.
lang/haskell
- New plugin: dante – offers xref and flycheck integration, as well as code-navigation tools, like finding definitions, references, type info, etc.
- Fix errors on haskell-mode (caused by missing dependencies).
lang/javascript
- New plugin: skewer-mode – provides live JS/CSS/HTML evaluation in a browser.
- New plugin: web-beautify – js reformatting.
- New plugin: xref-js2 – xref integration for javascript.
- New plugin: rjsx-mode – adds jsx support.
- Fix
doom/newline-and-indent
in rjsx-mode - Remove electric
<
in rjsx-mode - Enable emmet-mode in rjsx-mode
- Fix
- Fix empty
buffer-file-name
inmagic-mode-alist
rule forrjsx-mode
. - Force tern use projectile for project path detection and resolution.
- Add gulpfile.js detection (
+javascript-gulp-mode
).
lang/latex
- Improve integration between auctex, evil and
reftex-toc-mode
: j/k motion keys have been bound in reftex-toc-mode, the modeline is hidden, andreftex-toc-rescan
is run automatically.
- Improve integration between auctex, evil and
lang/org
- Add
+notes
submodule, which makes it easy to access org-mode based notes for the current major-mode or the current project. See+org/browse-notes-for-major-mode
and+org/browse-notes-for-project
. - Ensure newer org-mode 9.0+ (downloaded from ELPA) is loaded instead of the older, built-in version of org-mode (8.3).
- Update
+org/dwim-at-point
,+org/insert-item
&+org/toggle-checkbox
for org-mode 9.0 - Fix shackle popup integration with org-export dispatch window.
- Add
lang/ruby
- Add
{Pod,Puppet,Berks}file
detection forruby-mode
.
- Add
lang/web
- New plugin: web-beautify – html/css reformatting
- Remove
+web-bower-mode
. I don’t use it anymore; I prefer npm as my sole package manager. - Improve
+web-angularjs-mode
detection by searching for angular 1 and 2 dependencies in package.json. - Add
+web-react-mode
and detect it by searching for reactjs dependencies in package.json.
app
app/rss
- Hide modeline in
elfeed-search-mode
buffer.
- Hide modeline in
app/present
- New plugin: ox-reveal – export a presentation to html, js & css from org-mode using reveal.js.
- New plugin: org-tree-slides – use
org-mode
directly for presentations. - Add
+present/big-mode
; which will toggle large fonts, controlled by+present-big-font
. - New plugin: impatient-mode – show off current buffer(s) over HTTP.
app/email
- Add support for writing emails in org-mode, which renders to HTML on send.
- Add support for sending email through SMTP on a secure port.
- Add basic mu4e support.
private/hlissner
- Fix TAB hijacking in magit.
- New modules
tools/upload
– map local files to remotes, allowing you to upload/download files between them.feature/jump
– offers a system for navigating codebases that “just works”, powered by xref (new experimental Emacs reference API) & dumb-jump.feature/workspaces
– offers grouped buffers/windows and persistent sessions. Recently replaced workgroups2 with the much-faster persp-mode.
core
- Add .travis.yml and unit-tests.
- Remove mplist library – it was unused and poorly written.
core-popups
- Replaced popwin with shackle; which is significantly lighter and more stable.
feature/spellcheck
- Add selection popup for correcting spelling mistakes highlighted by flyspell.
completion/ivy
- Add
+ivy:todo
for jumping to TODO/FIXME tags in your project.
- Add
lang/org
- Make TAB do-what-I-mean (
+org/dwim-at-point
), which will either: follow a link, realign/recalculate tables, toggle checkboxes, toggle TODO/DONE tags, cycle archived subtrees, toggle latex preview fragments, execute babel blocks, or refresh inline images – depending on where the cursor is.
- Make TAB do-what-I-mean (
lang/web
- Add
+css/toggle-inline-or-block
command; it will expand/contract curly-braced blocks.
- Add
private/hlissner
- Add
:todo
ex command (+ivy:todo
)
- Add