Commit Graph

132 Commits

Author SHA1 Message Date
Henrik Lissner
952e9dd220
emacs/dired: auto-revert & reduce prompting 2019-07-22 02:37:45 +02:00
Henrik Lissner
96bff1076f
emacs/vc: bind gtc to git-timemachine-show-commit 2019-07-22 02:37:45 +02:00
Henrik Lissner
fdcb259bcd
Major refactor of Doom core files
- Remove core-os and move many of its settings out to other core
  libraries, where they belong
- Significantly improve commenting & compartmentalization of many
  settings
- Correct some mis-named public hooks (that were named as if they were
  private)
- Move the vast majority of optimizations to "Optimizations" section in
  core.el
- Don't activate xclip-mode or osx-clipboard-mode if we're accessing
  Emacs through an SSH connection (does more bad than good there)
- Add fast-but-imprecise-scrolling = t
- Set bidi-display-reordering = 'left-to-right, at the recommendation of
  an Emacs dev. Apparently setting it to nil is undefined, as Emacs is
  designed to always assume it's set; setting it explicitly to
  left-to-right will still do what was originally intended by turning it
  off: to reduce line/text scans for bidirectional text, which gives us
  a moderate boost in general runtime snappiness
- Set inhibit-compacting-fon-caches = t on windows (where it struggles
  especially with icon fonts)
- Disables "literal" mode for very large files (because I will be
  backporting so-long.el from Emacs 27 in the next commit)
2019-07-22 02:30:38 +02:00
Henrik Lissner
149b2617b0
💥 revise hook/var fns naming convention (2/2)
This is second of three big naming convention changes. In this commit,
we change the naming conventions for hook functions and variable
functions:

1. Replace the bar | to indicate a hook function with a -h suffix, e.g.

     doom|init-ui -> doom-init-ui-h
     doom|run-local-var-hooks -> doom-run-local-var-hooks-h

2. And add a -fn suffix for functions meant to be set on variables,
   e.g.

     (setq magit-display-buffer-function #'+magit-display-buffer-fn)

See ccf327f8 for the reasoning behind these changes.
2019-07-22 02:30:38 +02:00
Henrik Lissner
51d3b1b424
💥 revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.

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

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

The rationale behind this change is:

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

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

Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
  macro. The old pair weren't as useful. The new def-advice! saves on a
  lot of space.
- Removed "stage" assertions to make sure you were using the right
  macros in the right place. Turned out to not be necessary, we'll
  employ better checks later.
2019-07-22 02:27:45 +02:00
Henrik Lissner
ba71d95066
emacs/vc: add git-timemachine-show-commit fix
See https://gitlab.com/pidu/git-timemachine/issues/77
2019-07-18 13:13:31 +02:00
birdgg
64d88bb956 fix: file not found in autoload 2019-06-21 16:45:07 +08:00
Henrik Lissner
47530bd19f
emacs/vc: refactor
And declare vc, vc-annotate & smerge-mode as built-ins (for
doom/help-packages).
2019-06-10 09:38:56 +02:00
Henrik Lissner
a6490020c7
emacs/dired: remove duplicate evil keybinds
Redundant with evil-collection-dired
2019-06-10 09:38:55 +02:00
Henrik Lissner
36a8e02857
Fix +vc/git-browse-region-or-line
git-link-use-commit = t breaks +vc/git-browse-region-or-line.
2019-06-10 09:38:55 +02:00
Henrik Lissner
ed69d580fb
emacs/dired: fix ranger oddities
Added two hacks to fix two obnoxious issues Ranger has, having to do
with it failing to clean up after itself. In particular:

1. A left over mouse-1 bind that traps focus in a particular
   window (easy to get around with keyboard-based window switch
   commands, but this renders the mouse useless),

2. And the lingering ranger header bar (i.e. it doesn't clean up
   header-line-format).

This commit also ensures Deer overrides dired if +ranger is enabled.
2019-05-20 21:09:12 -04:00
Henrik Lissner
e76765e0b8
emacs/dired: add dired-rsync
And bind it to C-c C-r
2019-05-20 21:09:12 -04:00
Henrik Lissner
c4af1a807c
emacs/dired: enable diredfl & dired-k in ranger/deer 2019-05-20 21:09:12 -04:00
Henrik Lissner
57697efb62
emacs/dired: add diredfl & refactor
- Adds C-c C-e for invoking wdired
- Adds diredfl for more colors in dired (and disables dired-k's coloring
  based on mtime, which was confusing)
2019-05-20 21:09:12 -04:00
Henrik Lissner
0674e4b4b0
Remove :emacs imenu module
Some of it was moved into core as reasonable defaults, but the rest of
it doesn't warrant a whole module dedicated to it.
2019-05-19 02:18:00 -04:00
Henrik Lissner
8c65a63b1c
Move eshell, term & vterm modules to :term 2019-05-19 02:17:59 -04:00
Henrik Lissner
40d2d4d222
Minor tweaks & byte-compiler offerings 2019-05-15 20:53:11 -04:00
Henrik Lissner
c549091ce5
ui/popup: polish default rules
- Establish popup naming convention:
  - *doom:name* -> a temporary editing buffer (requires interaction)
  - *doom name* -> a transient buffer (no interaction required)
2019-05-15 15:22:09 -04:00
Henrik Lissner
75777756e1
Remove redundant dired sort hook #1414
This still means dired will be unsorted for BSD ls users, but that's
acceptable (for now).
2019-05-14 18:45:38 -04:00
Henrik Lissner
6b69eaa397
Minor refactors across the board 2019-04-26 17:42:44 -04:00
Henrik Lissner
a4c5396558
Add better-jumper
Replaces evil's jumplist; makes its functionality available for non evil
users.
2019-04-24 18:16:04 -04:00
Henrik Lissner
77e4cc4d58
💥 Remove :feature category
:feature was a "catch-all" category. Many of its modules fit better in
other categories, so they've been moved:

- feature/debugger -> tools/debugger
- feature/evil -> editor/evil
- feature/eval -> tools/eval
- feature/lookup -> tools/lookup
- feature/snippets -> editor/snippets
- feature/file-templates -> editor/file-templates
- feature/workspaces -> ui/workspaces

More potential changes in the future:

- A new :term category for terminal emulation modules (eshell, term and
  vterm).
- A new :os category for modules dedicated to os-specific functionality.
  The :tools macos module would fit here, but so would modules for nixos
  and arch.
- A new :services category for web-service integration, like wakatime,
  twitter, elfeed, gist and pastebin services.
2019-04-24 18:16:04 -04:00
Henrik Lissner
0a1de03ca1
Remove eshell/term from dtrt excluded modes
Unnecessary because their buffers don't make it through
doom|detect-indentation's condition anyway.
2019-03-28 01:56:09 -04:00
Henrik Lissner
2dc52bc9be
💥 Replace exec-path-from-shell w/ 'bin/doom env'
IMPORTANT: This is a breaking update for Mac users, as your shell
environment will no longer be inherited correctly (with the removal of
exec-path-from-shell). The quick fix is: 'bin/doom env refresh'. Also,
the set-env! autodef now does nothing (and is deprecated), be sure to
remove calls to it in your config.

Smaller changes:
+ This update also adds --no-* switches to doom quickstart
+ Includes general improvements to the documentation of several bin/doom
  commands.
+ Moves doom/reload* commands to core/autoload/config.el
+ doom/reload-project has been removed (it didn't actually do anything)

The breaking change:
This update adds an "envvar file" to Doom Emacs. This file is generated
by `doom env refresh`, populated with variables scraped from your shell
environment (from both non-interactive and interactive sessions). This
file is then (inexpensively) loaded at startup, if it exists.

+ The file is manually generated with `doom env refresh`.
+ It can be regenerated automatically whenever `doom refresh` is run by
  running `doom env enable` (`doom env clear` will reverse this and
  delete the env file).
+ `doom quickstart` will ask if you want to auto-generate this envvar
  file. You won't need it if you're confident Emacs will always be
  started from the correct environment, however.
+ Your env file can be reloaded from a running Emacs session with `M-x
  doom/reload-env`. Note: this won't work if the Emacs session you're
  running it in doesn't have a correct SHELL set. i.e. don't use this to
  create your first env file!

The idea isn't mine -- it's borrowed from Spacemacs -- and was
introduced to me in #1053 by @yurimx. I was impressed with it. Prior to
this, I was unhappy with exec-path-from-shell (no hate to the dev, I
understand its necessity), and 'doom patch-macos' wasn't ideal for mac
users (needed to be reapplied every time you update Emacs). What's more,
many users (even Linux users) had to install exec-path-from-shell
anyway.

This solution suffers from none of their shortcomings. More reliable
than patch-macos, more performant and complete than
exec-path-from-shell, and easily handled by bin/doom.
2019-03-28 01:56:09 -04:00
Henrik Lissner
f02e7faefb
emacs/dired: ranger-show-literal = nil 2019-03-09 19:56:48 -05:00
Henrik Lissner
c07f43bba3
Remove --group-directories-first arg for bsd ls 2019-03-02 13:49:39 -05:00
Henrik Lissner
7b2e80c711
Remove bash, zsh, fish from eshell-visual-commands
It would affect non-interactive shell scripts run through these
shells (like homebrew).
2019-03-02 02:04:11 -05:00
Henrik Lissner
6d3df42352
More conservative electric-indent-local-mode
Prevent them from propagating to derived modes (I'm looking at you c
modes!)
2019-03-02 01:36:53 -05:00
Henrik Lissner
6fc7b8c1c4
Better electric-indent uninhibiter
Will now work in C modes as well as Csharp, Java and Python; possibly
others that forcibly set electric-indent-inhibit.
2019-02-27 18:38:28 -05:00
Henrik Lissner
7d0caf3efd
New editor/fold module
Extracted from feature/evil and emacs/hideshow.
2019-02-18 00:47:46 -05:00
Henrik Lissner
3dcd253f71
Remove emacs/ediff & move to core-ui 2019-02-17 21:54:26 -05:00
Henrik Lissner
a72a0e6a62
Replace magithub with forge
Should also fix void-function/void-variable errors caused by evil-magit
depending on the newer version of magit (#1174).

Also introduces a redesign of the SPC g prefix.
2019-02-16 18:26:17 -05:00
Henrik Lissner
4b129cb17d
Fix rg/ag in eshell #1122
Arguments aren't implicitly passed to aliases.
2019-01-22 19:29:13 -05:00
Henrik Lissner
b56639e31b
Remove deprecated set! & def-setting! macros 2019-01-05 17:48:46 -05:00
Henrik Lissner
19987df00a
Add IS-BSD constant
Fixes dired gls support on BSD OSes (and not just MacOS).
2019-01-05 16:06:26 -05:00
Alex Ragone
69c277ffce fix: disable verbose message for dired-omit
To avoid endless spam in *Messages*, disable "Omitted 2 lines" every
time a new dired buffer is opened.
2018-12-27 16:37:44 +13:00
Henrik Lissner
d6cb0ec5f5
General cleanup & minor refactoring 2018-12-22 04:25:15 -05:00
Henrik Lissner
4daa9271a0
Introduce general.el & rewrite map!
+ Now uses an overriding keymap for leader keys, so that it is always
  available, even outside of normal/visual states. In insert/emacs
  states, or in sessions where evil is absent, an alternative prefix is
  used for leader/localleader keys. See these variables:
  + doom-leader-prefix
  + doom-leader-alt-prefix
  + doom-localleader-prefix
  + doom-localleader-alt-prefix
+ Keybinds now support alternative prefixes through the new :alt-prefix
  property. This is useful for non-evil users and non-normal evil
  states. By default, this is M-SPC (leader) and M-SPC m (localleader).
+ Removed +evil-commands flag from config/default (moved to
  feature/evil/+commands.el).
+ config/default/+bindings.el has been split into
  config/default/+{evil,emacs}-bindings.el, which one is loaded depends
  on whether evil is present or not. The latter is blank, but will soon
  be populated with a keybinding scheme for non-evil users (perhaps
  inspired by #641).
+ The define-key! macro has been replaced; it is now an alias for
  general-def.
+ Added unmap! as an alias for general-unbind.
+ The following modifier key conventions are now enforced for
  consistency, across all OSes:
    alt/option      = meta
    windows/command = super
  It used to be
    alt/option      = alt
    windows/command = meta
  Many of the default keybinds have been updated to reflect this switch,
  but it is likely to affect personal meta/super keybinds!

The map! macro has also been rewritten to use general-define-key. Here
is what has been changed:

+ map! no longer works with characters, e.g. (map! ?x #'do-something) is
  no longer supported. Keys must be kbd-able strings like "C-c x" or
  vectors like [?C-c ?x].
+ The :map and :map* properties are now the same thing. If specified
  keymaps aren't defined when binding keys, it is automatically
  deferred.
+ The way you bind local keybinds has changed:

    ;; Don't do this
    (map! :l "a" #'func-a
          :l "b" #'func-b)
    ;; Do this
    (map! :map 'local "a" #'func-a
                      "b" #'func-b)

+ map! now supports the following new blocks:
  + (:if COND THEN-FORM ELSE-FORM...)
  + (:alt-prefix PREFIX KEYS...) -- this prefix will be used for
    non-normal evil states. Equivalent to :non-normal-prefix in general.
+ The way you declare a which-key label for a prefix key has changed:

    ;; before
    (map! :desc "label" :prefix "a" ...)
    ;; now
    (map! :prefix ("a" . "label") ...)

+ It used to be that map! supported binding a key to a key sequence,
  like so:

    (map! "a" [?x])  ; pressing a is like pressing x

  This functionality was removed *temporarily* while I figure out the
  implementation.

Addresses: #448, #814, #860
Mentioned in: #940
2018-12-22 04:14:43 -05:00
Henrik Lissner
ce38a80cf8
emacs/dired: refactor #1038
+ Removed ranger/dired-setup hook and performed its config globally
+ Lazy-loaded ranger
+ Removed unnecessary `:defer t`s (redundant with :commands and :hook)
  and `:commands` (redundant with :hook)
+ Set image-dired-dir before trying to create it, to give users an
  opportunity to modify it before it is created
+ Use sharp quotes consistently for keybind commands
2018-12-13 15:44:43 -05:00
Ting Zhou
eedbbdd9c1 emacs/dired: use all-the-icons font lock fix recipe 2018-12-08 21:52:24 -08:00
Ting Zhou
d6ad5942be emacs/dired: move ranger module to ranger feature in dired module 2018-12-07 22:27:03 -08:00
Ting Zhou
5698066c0a emacs/ranger: check GUI for all-the-icons-dired-mode 2018-12-05 23:15:23 -08:00
Ting Zhou
b00ce82ef9 emacs/ranger: add ranger module to doom 2018-12-05 23:11:26 -08:00
Henrik Lissner
51190fa771
More descriptive signature for set-electric!
And mention that electric-indent-local-mode is enabled by this in its
docstring.
2018-10-16 18:30:44 -04:00
Henrik Lissner
868a0ab9b9
emacs/eshell: fix wrong-type-arg: stringp errors
Fix old usage of projectile API.
2018-10-01 12:06:08 -04:00
Henrik Lissner
53fe7a1f04 Refactor Project API to reflect changes upstream
projectile-project-root no longer returns `default-directory` if not in
a project (it returns nil). As such, doom-project-* functions (and their
uses) have been refactored.

+ doom-project-p & doom-project-root are aliases for
  projectile-project-p & projectile-project-root.
+ doom-project-{p,root,name,expand} now has a DIR argument (for
  consistency, since projectile-project-name and
  projectile-project-expand do not).
+ The nocache parameter is no longer necessary, as projectile's caching
  behavior is now more sane.
+ Removed some projectile advice/hacks that are no longer necessary.
+ Updated unit tests
2018-09-28 21:13:27 -04:00
Henrik Lissner
6fce87bd06 feature/evil: refactor folding & outline support
Code folding commands will now obey outline headers (if
outline-minor-mode is on and in outline-mode).
2018-09-20 22:26:36 -04:00
Edwin Török
b9c966ec54 Backport to Emacs 25: avoid (setf (alist-get ... 'equal))
We would need to use `'equal` for comparison, but Emacs 25 only allows `'eq`.
Using `advice-add` to override `alist-get` does not work, because `setf`
has special handling for `alist-get`.

`repl.el`: Switch to a hash table which already supports multiple comparison
functions, and changing of elements even in Emacs 25.
`eshell/autoload/settings.el`: use conditional set-or-push.
Drop `doom*alist-get`, it is unused now.

Thanks to @hlissner for the reimplementation.
2018-09-12 23:03:02 +01:00
Henrik Lissner
7d3ffdff06
Remove third line in section headers
This is truly important stuff. We've saved many lives with this update.
2018-09-09 09:58:19 -04:00
Henrik Lissner
628b40f882
emacs/ediff: fix hooks not being appended 2018-09-09 09:58:19 -04:00