Skip to content

Latest commit

 

History

History
1005 lines (993 loc) · 54.8 KB

CHANGELOG.org

File metadata and controls

1005 lines (993 loc) · 54.8 KB

Changelog

Unreleased (develop)

  • Module changes:
    • Add private/default to replace private/hlissner, which is a more generic “starter” module for new users. My private module is now at hlissner/doom-emacs-private.
  • 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 (using file-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 by doom-fetch in noninteractive sessions.
    • core Improve GPG integration by setting epa-file-encrypt-to to user-mail-address, and epa-pinentry-mode to 'loopback (so that Emacs will prompt you for the passphrase in the minibuffer).
    • core-packages Fix doom-module-pairs returning pairs in arbitrary order, causing load order errors. This is because the hash-table-values function in Emacs 25 and under uses maphash, which reverses the hash-table, while newer versions use cl-loop, which doesn’t.
    • core-packages Fix doom//* 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 calculating visual-fill-column-width.
    • core-editor the KILL argument for quit-window &optional KILL WINDOW has been flipped and now kills the window’s buffer by default.
    • core-projects Add doom-project-find-file and doom-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).
  • 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 and show-trailing-whitespace turning the dashboard into a Christmas tree.
      • Add the +doom-dashboard-pwd-policy option, giving you control over how default-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.
  • 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.
    • 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.

2.0.8 (Dec 09, 2017)

  • Module changes:
    • New module: lang/nix, adds support for editing nix configuration files. Contributed by ocharles.
    • The org/* modules have been moved to lang/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.
  • 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 using doom/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.
  • 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 or counsel-projectile-find-file. This keybinding is defined in private/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.
  • ui
    • doom-modeline Remove the let-binds for all-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.
    • 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 with defvar instead of setq, 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.

2.0.7 (Nov 08, 2017)

  • Module changes:
    • BREAKING Split lang/java into two submodules: one for eclim, and another for meghanada. You will need to update your init.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.
  • 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 to map! 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 whose package! 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).
  • 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 in PATH before looking in +rust-src-dir.

2.0.6 (Oct 05, 2017)

  • Module changes:
    • Add lang/ledger
    • Add ui/vi-tilde-fringe – used to be in core-ui; indicates beyond-EOB, using tildes in the fringe (inspired by vim).
    • Add feature/services – used to be tools/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 into core-keybinds.
    • Rename feature/debug to feature/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 into org/org.
  • 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.
    • 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 replaces feature/eval’s build task system.
      • editor.el Fix old scratch buffer commands and renamed them: doom/open-scratch-buffer and doom/open-project-scratch-buffer. The former opens a temporary, transient scratch buffer, the latter opens a permanent one tied to the current project, kept in doom-scratch-files-dir.
      • window.el Changed doom-resize-window to accept two more arguments, WINDOW and FORCE-P: doom-resize-window WINDOW NEW-SIZE &optional HORIZONTAL FORCE-P. If FORCE-P is non-nil, this function will resize a window regardless of window-size-fixed.
    • core-keybinds Add new def-hydra! alias macro for defhydra (for consistency, and in case we want to wrap it later).
    • core-projects Redesign def-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.
    • 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 and doom-popup-file no longer take a variadic argument. Their signature is now doom-popup-buffer buffer plist &optional extend-p and doom-popup-file file plist &optional extend-p, where EXTEND-P will cause PLIST to extend from the base rule for that buffer.
      • Rename doom-popup-prop to doom-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 and save-popups! killing popups with an :autokill property.
  • feature
    • hydra Display a separator on the bottom of hydra windows for contrast.
    • eval Build-task management has been removed from feature/eval in favor of def-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 and neo-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 the rake 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 to exec-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.

2.0.5 (Sep 03, 2017)

  • 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 and doom-unquote.
    • Switch to doom-fallback-buffer after using doom/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 the featurep! 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 from map! 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+.
  • 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.
    • 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).
  • ui
    • rainbow-mode is no longer activated on prog-mode-hook.
    • doom-modeline
      • Modeline now uses shrink-path.el to shrink the buffer name in the case of a small frame (thanks to bandresen). See #176
      • Fixed mode-line going blank in terminal Emacs (thanks to bandresen).
    • doom-dashboard Fixed “Load last session” button on dashboard.
  • tools
    • eshell General improvements made to further integrate eshell with Doom (thanks to bandresen). See #160
    • pass +pass-get-field now no-ops if used in a non-interactive session (e.g. during testing or byte compilation).
    • neotree Add r and d bindings for renaming and deleting files, respectively.
  • lang
    • cc The advise function c-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 throwing save-excursion: Wrong type argument: listp, 1 error when used from BOL on the first sub-item in a list.

2.0.4 (Jul 14, 2017)

  • 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 with org/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.
  • core
    • New variable: doom-host-dir, as a base path for doom-etc-dir and doom-cache-dir.
    • New hooks: doom-init-hook and doom-post-init-hook, which are run on emacs-startup-hook. This is meant to simplify post-Emacs initialization hooks (after-init-hook, emacs-startup-hook and window-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 like defmacro; 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 with emacsclient.
      • 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 and doom|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, and doom-unicode-font.
      • New variables for customizing line numbers: doom-line-number-lpad, doom-line-number-rpad, and doom-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 where whitespace-mode with space-mark would replace all space characters indiscriminately, even in line numbers.
      • Add hooks doom-pre-reload-theme-hook and doom-post-reload-theme-hook to doom/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 in doom-local-dir won’t be.
      • New interactive command: doom/scratch-buffer (replaces +doom:scratch-buffer in :ui doom).
    • 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 when doom/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).
  • feature
    • feature/evil
      • Remove goto-last-change, which conflicts with goto-chg, which is a dependency of evil (that does the exact same thing, but is what evil uses).
    • 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.
    • 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).
  • completion
    • completion/company
      • Add company-dabbrev and company-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.
  • 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 with doom/scratch-buffer in core-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 and G 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).
    • 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).

2.0.3 (Jun 11, 2017)

  • 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 from ui/doom) – flashes current line when moving cursor considerable distrances, using nav-flash.
    • tools/neotree (extracted from feature/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 by doom!.
    • New help command: doom/describe-module – for DOOM modules.
    • New help command: doom/describe-setting – for possible set! 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 changing mode-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 variable doom-big-font.
    • core-keybinds
      • New property for map!: :textobj – for binding to evil text objects keymaps.
      • Fix :after & :map* properties in map! macro (wasn’t working at all).
      • Change keybinding scheme; the leader key is now SPC and localleader SPC m, inspired by spacemacs.
      • Enable which-key pops up for all keys.
    • 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 (in doom-popup-mode).
    • 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.
  • 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 invokes wgrep-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 around evilmi-jump-items).
      • Remove neotree plugin (moved to tools/neotree).
    • feature/jump
    • 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 because persp-get-by-name returns the value of persp-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 to company-backends. Its signature is now (set! :company-backends MODES &rest BACKENDS) (#125).
    • completion/ivy
      • Flexible column width for +ivy/tasks.
  • 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
    • 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).
    • 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 by ensime--setup-imenu trying to use imenu variables before loading imenu.
  • 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).

2.0.2 (May 13, 2017)

  • 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-term
    • app/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 recompile core/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 to add-transient-hook! macro.
    • 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
    • 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.
  • 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
    • feature/evil
      • Fix :mv & :rm.
      • Fix Neotree forgetting that it’s a neotree window when switching perspectives.
      • New plugin: evil-mc – multiple cursors for evil-mode (thanks to gilbertw1)
      • Achieve vim parity w/ file modifiers (+evil*ex-replace-special-filenames)
    • 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.
  • 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.
  • tools
    • tools/tmux
      • Fix and refactor library (general update).
  • lang
    • lang/cc
    • lang/javascript
      • Improve electric indent support for js2-mode and rjsx-mode
    • 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) and C-w (delete-word) in org-store-link and org-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.
  • 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 (like gzz to toggle cursor freeze, and gzc to create a cursor “here”).
    • Add keybinds for evil-multiedit: based around M-d and M-D.
    • Replace :find with :ag, :agc[wd], :rg and :rgc[wd].
    • Fix :x ex command (open scratch buffer)

2.0.1 (Apr 8, 2017)

  • New modules
    • feature/jump – extra code navigation tools, a jump-to-definition implementation that just works (dumb-jump), and tools for looking things up online.
    • app/rss – Emacs as an RSS reader, using elfeed
  • 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 and def-bootstrap!.
    • Use doom-local-dir for TRAMP’s temp files.
    • New variable: doom-real-buffer-functions – for customizing how doom-real-buffer-p determines what a “real” buffer is.
    • Add def-memoize! for defining memoized functions and doom-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.
    • 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 to doom/compile.
      • Fix duplicates packages appearing in package-management retrieval library.
    • core-os
      • Reducing how aggressive exec-path caching is. A persistent-soft and byte-compilation cache is excessive. The latter is good (and flexible) enough.
    • core-popups
      • Set default :align and :select shackle properties (of 8 and below).
    • 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.
    • core-projects
      • Recognize package.json as a project-root file (see projectile-project-root-files).
      • Fix :files property in def-project-mode! not detecting project files.
    • core-ui
  • feature
    • feature/eval
      • Fix build tasks system; now tested and works.
      • Complete rewrite of the module.
    • feature/evil
      • Fix error in +evil:file-move if save-place-mode is disabled.
    • 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 with C-z.
    • 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.
  • ui
    • ui/doom
      • Improve doom-buffer-mode heuristics with doom-real-buffer-p, so that only truly real buffers are enlightened.
      • Replace plugin beacon with nav-flash – the former had a habit of causing pauses and pushing my cursor. It also didn’t look as nice.
    • 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 a kill-buffer-query-function hook being attached way too soon in the startup process.
  • lang
    • lang/cc
      • Fix empty buffer-file-name in magic-mode-alist rule for obj-c.
      • Fix irony-mode initialization in cc modes.
    • lang/emacs-lisp
      • Add xref support for elisp.
    • lang/go
    • 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 empty buffer-file-name in magic-mode-alist rule for rjsx-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, and reftex-toc-rescan is run automatically.
    • 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.
    • lang/ruby
      • Add {Pod,Puppet,Berks}file detection for ruby-mode.
    • 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.
    • 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.

2.0.0 (Jan 17, 2017)

  • 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.
  • 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.
  • lang/web
    • Add +css/toggle-inline-or-block command; it will expand/contract curly-braced blocks.
  • private/hlissner
    • Add :todo ex command (+ivy:todo)