Commit graph

69 commits

Author SHA1 Message Date
Henrik Lissner
d6a2e24a3e
fix(dired,vc-gutter): don't inhibit diff-hl-dired-mode
Dirvish uses the fringe for its vc-state diff, which isn't available in
TTY Emacs, so we still need `diff-hl-dired-mode` there.

Revert: a8ed6c9f7d
Ref: #6760
2024-08-29 01:12:29 -04:00
Henrik Lissner
14478064af
refactor(dired,vc-gutter): setup for tty frames
A recent commit (c53f63b) allows me to simplify this a bit.

Ref: c53f63b96e
Ref: #8001
2024-08-28 17:56:55 -04:00
Henrik Lissner
93c5f98ee2
fix(vc-gutter): resist errors in kill-buffer advice
A regression introduced in aa8c31c.

Fix: #8018
Ref: #8009
Amend: aa8c31cf08
2024-08-22 16:06:42 -04:00
Henrik Lissner
e59023b843
fix(vc-gutter): toggle diff-hl-margin-mode in tty frames
Fix: #8001
2024-08-22 15:50:34 -04:00
Henrik Lissner
aa8c31cf08
fix(vc-gutter): wrong-number-of-args error
A regression introduced in ded3f5e.

Fix: #8009
Amend: ded3f5ec83
2024-08-21 12:57:28 -04:00
Henrik Lissner
ff9c59df46
tweak(vc-gutter): disable diff-hl-mode in pdf-view-mode 2024-08-21 05:04:25 -04:00
Henrik Lissner
ded3f5ec83
fix(vc-gutter): runaway diff-hl threads & immortal buffers
This was an elusive bug caused by two upstream behaviors:

1. `kill-buffer` will silently refuse to kill a buffer if there is a
   thread associated with it.
2. `global-diff-hl-mode` activates `diff-hl-mode` in *most* buffers,
   even invisible ones. This calls `diff-hl-update` each time
   it does. This isn't a problem *unless* you have `diff-hl-update-async`
   enabled, because it creates a thread every time `diff-hl-update` is
   called. That means for every buffer -- real or transient -- you have
   a new thread queued.

And this caused two main issues:

1. Temporary buffers are often opened and closed very rapidly (often
   faster than the thread can complete), so they weren't getting cleaned
   up. I hope you weren't too attached to your memory, because you'll
   have a lot of buried buffers to feed before long!
2. In cases where `diff-hl-update` simply takes a long time, multiple
   calls to it would queue more threads. When Emacs eventually yields
   the CPU to them, you'll get random,
   impossible-to-predict-or-track-down freezes. Joy!

This may very well be enough reason to disable `diff-hl-update-async` by
default, but I didn't want to give up on it *just* yet, despite how
inelegant this solution is...

Fix: #7954
Fix: #7991
2024-08-21 05:03:30 -04:00
Henrik Lissner
a8ed6c9f7d
fix(vc-gutter): inhibit diff-hl-dired-mode in dirvish
Ref: #6760
2024-08-17 14:24:51 -04:00
Dan McArdle
ff3fd15b02 fix(vc-gutter): check 'diff-hl-disable-on-remote is bound
This fixes the following error message on startup:

    Symbol’s value as variable is void: diff-hl-disable-on-remote
2024-07-26 16:29:34 -04:00
Henrik Lissner
7c5d8641a1
fix(vc-gutter): respect diff-hl-disable-on-remote in dired
Neither `diff-hl-dired-mode` or `diff-hl-dired-mode-unless-remote`
respect diff-hl-disable-on-remote, so added my own enabler hook.
2024-07-25 19:43:28 -04:00
Henrik Lissner
a8b836dac3
fix(vc-gutter): use global-diff-hl-mode
Our former approach would enable diff-hl unconditionally. This way, the
`diff-hl-global-modes` variable is respected.

Ref: https://discourse.doomemacs.org/t/4710/2
2024-07-25 19:43:28 -04:00
Henrik Lissner
5485b912de
bump: :ui vc-gutter
dgutov/diff-hl@11f3113e79 -> dgutov/diff-hl@f66345ed1f

- Our diff-hl-update-async hack is no longer needed. The issue was
  addressed upstream.

Amend: 778fc9ad3f
Ref: dgutov/diff-hl#213
Ref: dgutov/diff-hl@e264d13a3d
2024-07-15 00:23:31 -04:00
Henrik Lissner
778fc9ad3f
fix(vc-gutter): disable diff-hl-update-async in with-editor-mode
`diff-hl-update-async` was enabled in f2696d7, causing a regression
where with-editor buffers wouldn't get cleaned up properly. This would
particularly affect Magit's COMMIT_EDITMSG buffers. To quote jds on
Discord:

  It seems like after committing (with cc in the magit buffer), it
  leaves COMMIT_EDITMSG around. The next time I try & commit, a single c
  keypress immediately jumps to the old COMMIT_EDITMSG buffer, but it's
  inactive - C-c C-c closes that buffer but makes no change to git.

I opt for advice instead of find-file or with-editor-mode hooks to
restore normal behavior should with-editor-mode be later disabled
without the death of its buffer (not relevant to magit, specifically,
but it might be to other consumers of with-editor, now or in the
future).

Ref: dgutov/diff-hl#213
Amend: f2696d7302
2024-07-10 18:27:54 -04:00
Henrik Lissner
f1f72c291a
refactor(vc-gutter): simplify & DRY
These advice were unnecessary when not only does diff-hl expose
variables to change them, but one of the overridden definitions is
identical to the function it's replacing.

Also includes some other minor refactors.
2024-07-10 03:54:45 -04:00
Henrik Lissner
78304f4d79
perf(vc-gutter): optimize bitmaps
The NS build of Emacs (on MacOS) seems to struggle rendering our old
fringe bitmaps for diff-hl, leading to noticably slow-downs when
scrolling in buffers with diff-hl enabled. By pre-computing the pixel
height and width of the bitmap, rather than relying on passing `repeat`
to define-fringe-bitmap's ALIGN argument, this seems to spare it a chunk
of wasted cycles.

Ref: https://www.reddit.com/r/emacs/comments/1do1wgj/fringes_incredibly_slow_on_emacs_ns_with_macos/
Fix: #7923
2024-07-10 03:18:46 -04:00
Henrik Lissner
f2696d7302
perf(vc-gutter): diff-hl-update-async = t
Don't block Emacs when updating the gutter.

Ref: #7923
2024-07-08 22:16:05 -04:00
Henrik Lissner
b405225b90
refactor!(vc-gutter): drop git-gutter for diff-hl
BREAKING CHANGE: This removes git-gutter as an implementation for the
`:ui vc-gutter` module, leaving only the diff-hl implementation. There
are no longer any +git-gutter or +diff-hl flags for this module. Users
don't have to do anything to keep the vc gutter, unless they prefer
git-gutter for any reason (in which case they'll need to install and set
it up themselves).

This has been planned for some time, because of a roadmap goal for Doom
to lean into native/built-in functionality where it's equal or better
than the third party alternatives. diff-hl relies on the built-in vc.el
library instead of talking to git directly (thus expanding support to
whatever VCS's vc.el supports, and not git alone), which also means it
can take advantage of its caching and other user configuration for
vc.el. Overall, it is faster and lighter.

What I've also been waiting for was a stage-hunk command, similar to
git-gutter:stage-hunk, which arrived in dgutov/diff-hl@a0560551cd and
dgutov/diff-hl@133538973b, and have evolved since.

Ref: dgutov/diff-hl@a0560551cd
Ref: dgutov/diff-hl@133538973b
Ref: https://github.com/orgs/doomemacs/projects/5/views/1?pane=issue&itemId=58747789
2024-06-22 18:14:04 -04:00
Ellis Kenyő
dc3b5c3710
fix(format): handle git-gutter nicely 2023-09-13 20:21:01 +01:00
roife
f6616e8a06
fix(vc-gutter): add missing autoloads
Add required autoloads for vc-gutter to fix errors from which-key. See the issue
below.

Fix: #6957
2023-02-18 01:00:59 -05:00
Henrik Lissner
3ae8c520d5
nit(vc-gutter): reformat annotated comments 2022-09-06 23:41:28 +02:00
Henrik Lissner
ad6a3d0f33
refactor: deprecate featurep! for modulep!
featurep! will be renamed modulep! in the future, so it's been
deprecated. They have identical interfaces, and can be replaced without
issue.

featurep! was never quite the right name for this macro. It implied that
it had some connection to featurep, which it doesn't (only that it was
similar in purpose; still, Doom modules are not features). To undo such
implications and be consistent with its namespace (and since we're
heading into a storm of breaking changes with the v3 release anyway),
now was the best opportunity to begin the transition.
2022-08-14 20:43:35 +02:00
Henrik Lissner
de62c5449d
nit(vc-gutter): add summary tags to comments
A new convention I'm slowly rolling out to modules to help readers
quickly identify the purpose of a change. E.g.

  UX    - a change done to improve user experience
  STYLE - for aesthetics
  FIX   - addresses a perceived or potential issue
  PERF  - intended to improve performance

Combined tags will be delimited with commas. E.g. "UX,PERF:"

There may be more later, and these will be further documented in the new
docs about to come up.
2022-08-10 14:06:52 +02:00
Henrik Lissner
99b0b70c49
fix(vc-gutter): remove advice removal for diff-hl-overlay-modified
Originally, this intended to *stop* diff-hl from too aggressively
deleting the diff overlays while editing. This is either no longer the
case or the old advice was mistaken; the intended behavior is achieved
without it.
2022-08-10 13:18:34 +02:00
Henrik Lissner
d55d7f3088
feat(vc-gutter): shrink revert-hunk popup to contents 2022-08-10 13:18:33 +02:00
Henrik Lissner
24623f9959
refactor!(dired): move diff-hl config to :ui vc-gutter
BREAKING CHANGE: users who are used to diff-hl displaying diffs in dired
will notice they have vanished. diff-hl's conig has been moved to :ui
vc-gutter +diff-hl (added in 27a448b). Enable it to get it back.

Ref: 27a448b04b
2022-08-09 16:30:43 +02:00
Henrik Lissner
e76f327e0a
fix(vc-gutter): apply +pretty to diff-hl-dired-mode
Amend: cd9bc5a1fd
2022-08-09 16:30:43 +02:00
Henrik Lissner
e30eb03f83
refactor(vc-gutter): remove redundant hooks
The refresh hooks address the stage/unstage cases already.
2022-08-09 16:30:43 +02:00
Henrik Lissner
15b00b78fe
refactor(vc-gutter): use local modes instead of global 2022-08-09 16:30:43 +02:00
Henrik Lissner
27a448b04b
feat(vc-gutter): add +diff-hl backend
This adds an alternative backend to the :ui vc-gutter module, enabled
with the +diff-hl flag. In the future, I intend for diff-hl to replace
git-gutter, as it is slightly faster and depends on more native
functionality (vc.el), but it's still a little buggy. It will remain
opt-in until those issues are sorted out.
2022-08-08 18:23:47 +02:00
Henrik Lissner
cd9bc5a1fd
refactor!(vc-gutter): move style defaults behind +pretty
BREAKING CHANGE: This changes moves its default configuration of the
fringe behind a +pretty flag. This won't cause breakage, but will cause
a (possibly unwanted) visual change: git-gutter will use its default
indicators (e.g. + and - symbols) instead of the continuous bars from
before.

To get back the old look, enable `+pretty` on the `:ui vc-gutter`
module.

This was done to make the defaults toggleable, to standardize +pretty,
to document issues with this customization that have been brought up by
members of the Emacs community, and to better document it in comments
for posterity.
2022-08-08 18:23:47 +02:00
Henrik Lissner
2b3dd9df4b Fix #4815: respect git-gutter:disabled-modes 2021-03-21 00:42:49 -04:00
Henrik Lissner
d9dac055a6 ui/vc-gutter: minor refactor 2021-03-05 20:09:22 -05:00
Henrik Lissner
15f7a26be6 Refactor +vc-gutter-init-maybe-h
Also addresses a few edge cases where git-gutter-mode wasn't later
activated in file-less buffers that are later saved to files.
2021-02-26 21:33:00 -05:00
Henrik Lissner
e00bfc7612
Minor refactors & reformatting 2020-05-25 03:43:40 -04:00
Henrik Lissner
a9316525c4
Backport variadic setq-local from Emacs 27 2020-05-24 16:45:55 -04:00
Henrik Lissner
a2714f414a
Minor refactors 2020-04-16 21:55:59 -04:00
Henrik Lissner
aa1f11af4f
Enable git-gutter backends conditionally
Follow up to #2634
2020-03-01 01:36:16 -05:00
Sebastian Sturm
2ce58c6df3 Extend backend-agnostic vc functionality
this commit adds a default keybinding for the vc-gutter hydra (leader-g
.) if both vc-gutter and hydra are enabled. It ensures that the various
vc-*-log-view-modes open up in emacs state, and it adds hg, svn and bzr
to the list of vc backends handled by git-gutter
2020-02-29 14:41:20 +01:00
Henrik Lissner
eb69073578
Fix infinite redrawing/freezing with {centaur,awesome}-tabs
Caused by over-zealous doom-switch-window-hook.

For my own sanity (and if you're curious), I'll break it down here:

1. Doom has a `doom-switch-window-hook` hook. It triggers when window
   focus is changed.
2. We use `buffer-list-update-hook` to trigger
   `doom-switch-window-hook`. (That may sound weird, but this hook is
   reliably executed when window focus is changed -- there are
   safeguards to prevent this from triggering too often)
3. `buffer-list-update-hook` triggers whenever a buffer is created, but
   `doom-switch-window-hook` only triggers if the created buffer is in
   a new window.
4. The use of `with-temp-buffer` in `centaur-tabs-line-format` counts as
   "buffer creation" in a "new window".
5. `+vc-gutter-update-h` is in `doom-switch-window-hook`. This refreshes
   git-gutter, which initiates a redraw of Emacs.
6. When Emacs redraws, it recalculates its mode and header lines. which
   triggers `doom-switch-window-hook` once, which triggers
   `+vc-gutter-update-h`, which redraws the screen, then Emacs recalculates
   the header line, running `centaur-tabs-line-format`...

Infinite loop ensues

Hopefully fixes:
- hlissner/doom-emacs#2436
- ema2159/centaur-tabs#18
- ema2159/centaur-tabs#88
2020-02-27 21:47:32 -05:00
Henrik Lissner
4830f9784f
Fix load order of vc-gutter default style
So you can unset `+vc-gutter-default-style` in your config.el to disable
it.
2020-02-27 14:52:53 -05:00
Henrik Lissner
e20f574b2e
Fix git-gutter in indirect buffers 2020-02-25 12:49:59 -05:00
Henrik Lissner
d522a7816d
Move flycheck customization out of git-gutter after block
To simplify the load path users would have to be aware of in order to
customize flycheck-indication-mode.
2020-02-25 12:45:30 -05:00
Henrik Lissner
b30f38ac06
Minor refactor & reformatting across the board 2020-02-23 15:42:43 -05:00
Henrik Lissner
e079b4b1e3
ui/vc-gutter: fix {next,previous}-hunk commands
They would sometimes jump to random hunks.
2019-09-27 15:18:44 -04:00
Henrik Lissner
a3e262c7ac
💥 Refactor add-hook! macro & change arg order
This update may potentially break your usage of add-hook! if you pass
the :local or :append properties to it. This is how they used to work:

  (add-hook! :append 'some-mode-hook #'do-something)

Thsoe properties must now follow the hooks, e.g.

  (add-hook! 'some-mode-hook :append #'do-something)

Other changes:
- Various add-hook calls have been renamed to add-hook! because I
  incorrectly assumed `defun` always returned its definition's symbol,
  when in fact, its return value is "undefined" (so sayeth the
  documentation). This should fix #1597.
- This update adds the ability to add multiple functions to hooks
  without a list:

    (add-hook! 'some-mode-hook
               #'do-something
               #'do-something-else)

- The indentation logic has been changed so that consecutive function
  symbols at indented at the same level as the first argument, but forms
  are indent like a defun.

    (add-hook! 'some-mode-hook
               #'do-something
               #'do-something-else)

    (add-hook! 'some-mode-hook
      (message "Hello"))
2019-07-26 20:17:29 +02:00
Henrik Lissner
629249aa43
Enable git-gutter on find-file-hook and org-mode
And disable it in pdf-view-mode. Perhaps this is too comprehensive?
2019-07-23 20:43:35 +02:00
Henrik Lissner
fec53f7b1d
Fix git-gutter not updating when whole file is staged
But we don't want it triggering on git-gutter:*-hunk, because they do
their own refreshing work.
2019-07-23 18:18:43 +02:00
Henrik Lissner
76cacb5bfe
💥 Rename def-package! -> use-package!
Calling this pivotal macro "def-package!" has frequently been a source
of confusion. It is a thin wrapper around use-package, and it should be
obvious that it is so. For this reason, and to match the naming
convention used with other convenience macros/wrappers, it is now
use-package!.

Also changes def-package-hook! -> use-package-hook!

The old macros are now marked obsolete and will be removed when straight
integration is merged.
2019-07-23 12:50:45 +02:00
Henrik Lissner
88813ff196
Minor reformatting across the board
Gotta

Look

Nice
2019-07-22 22:34:08 +02:00
Henrik Lissner
7058facf9d
ui/vc-gutter: disable git-gutter in some modes
Disabling git-gutter in fundamental-mode theoretically reduces the
number of times git-gutter is initialized (because it has to switch to
and from fundamental-mode once, sometimes twice, when changing major
modes).

git-gutter also has trouble with org-indent-mode, so we disable it
there.

And it isn't useful in image-mode.
2019-07-22 02:30:41 +02:00