* 2.3.0

** What's changed

+ add =file-modes= attribute
+ prevent =tab-bar-mode= from messing up window layout
+ add =dirvish-hl-line-inactive= face
+ remove =dirvish-open-with-programs= | improve =dirvish-find-entry-hook= (#182 #186 #275 #315)
+ fix race condition in =dirvish-subtree=
+ add =dirvish-peek-key= user option
+ asynchronous filtering and match highlighting with =dirvish-narrow=
+ add =dirvish-large-directory-threshold= user option, integrate =fd= to dirvish core

* 2.2.7

** What's changed

+ use different handlers for local / sudo / remote connections
+ responsive & aligned ~git-msg~ attribute (github style)
+ support changing display order of some attributes
+ bug fixes for ~dirvish-subtree~

* 2.2.3

Emergency fixes for 2 bugs in 2.2.0:

+ Error caused by mismatched vc-backend when expanding subtree
+ Incorrect resetting after quitting `dirvish-side`

New feature:

+ `dirvish-quit` now works in all dirvish windows (#309)

* 2.2.0

** BREAKING Changes

+ preview text files using proxy buffer (#184 #195 #270 #295)
+ replace magick with libvips for faster image preview (#218)
+ use 7-zip for archive preview
+ support font preview

** Other changes

+ ~dirvish-reuse-session~ now accepts new value =quit= and =open=
+ allow setting ~dirvish-default-layout~ to =nil=
+ add ~dirvish-subtree-icon-scale-factor~ user option (#185)
+ fetch =vc-info= attribute asynchronously
+ add ~dirvish-inactive~ face
+ add ~dirvish-collapse-separator~ user option (#263)
+ support session|buffer locally attributes and mode-line-format (#286)
+ add ~dirvish-special-preview-mode~ and ~dirvish-misc-mode~
+ support ~dired-find-alternate-file~ (#186)
+ sort history entries with access time (#265)
+ add ~dirvish-mode-line-bar-image-width~ option (#252)

** Screenshots

[[https://github.com/user-attachments/assets/ef44bf63-ff49-4d62-8126-36a5bc21ff57][https://github.com/user-attachments/assets/ef44bf63-ff49-4d62-8126-36a5bc21ff57]]

** Full Changelog

https://github.com/alexluigit/dirvish/compare/2.1.0...2.2.0

* 2.1.0

** What's changed

+ Fixed incorrect vc states https://github.com/alexluigit/dirvish/issues/224
+ ~dirvish-hide-cursors~ and ~dirvish-hide-details~ now support list of symbols
+ A lot of window dedication issues fixed (#194 #258 #262 #264 #293)
+ Mode line errors (#233)
+ Modular directory data fetching (#162 #238)
+ Fixed image preview with ~dirvish-peek~.
+ Performance imporvements with ~dirvish-side~.
+ Respect ~dired-kill-when-opening-new-dired-buffer~.
+ Fixed compatibility issue with =find-dired=.

** Fixes from community

+ Fix #158 : Delete emerge overlays when turning off the mode by @aikrahguzar in https://github.com/alexluigit/dirvish/pull/159
+ docs: fix some typos by @feltcat in https://github.com/alexluigit/dirvish/pull/176
+ fix(core): don't quote conditions in condition-case by @tarsius in https://github.com/alexluigit/dirvish/pull/206
+ add nerd-icons support by @rainstormstudio in https://github.com/alexluigit/dirvish/pull/201
+ fix(core): resolve emacs binary path in a more reliable way by @isamert in https://github.com/alexluigit/dirvish/pull/192
+ Report error from fd to user by @dvzubarev in https://github.com/alexluigit/dirvish/pull/178
+ Use rsync for local file copying in dirvish-rsync by @dvzubarev in https://github.com/alexluigit/dirvish/pull/180
+ Add rsync transient map by @dvzubarev in https://github.com/alexluigit/dirvish/pull/181
+ fd: add function that reads pattern from user by @dvzubarev in https://github.com/alexluigit/dirvish/pull/187
+ Update CUSTOMIZING.org by @liguangsheng in https://github.com/alexluigit/dirvish/pull/198
+ Fix an error: void-variable dv in Emacs-30.0.50 by @dvzubarev in https://github.com/alexluigit/dirvish/pull/251
+ Remove the restriction on printing for `dirvish-data-for-dir` by @isamert in https://github.com/alexluigit/dirvish/pull/266
+ Define new faces for all VC states by @protesilaos in https://github.com/alexluigit/dirvish/pull/222
+ fix(dired-noselect): Support both lists and strings by @jcf in https://github.com/alexluigit/dirvish/pull/257
+ subtree respect dired-omit-mode now by @eki3z in https://github.com/alexluigit/dirvish/pull/268
+ refactor(yank): rework copying r2r case for rsync by @dvzubarev in https://github.com/alexluigit/dirvish/pull/215
+ fix(subtree): "toggle or open" should open file, not view it by @brownts in https://github.com/alexluigit/dirvish/pull/281
+ fix(yank): silence byte-compiler by @tarsius in https://github.com/alexluigit/dirvish/pull/220
+ Fix typos by @tarsius in https://github.com/alexluigit/dirvish/pull/227
+ Fix custom type specifications by @tarsius in https://github.com/alexluigit/dirvish/pull/239
+ yank: fixes for recent r2r refactor commit by @dvzubarev in https://github.com/alexluigit/dirvish/pull/287
+ Fix broken link to purcell's emacs in EMACS-NEWCOMERS.org by @LV in https://github.com/alexluigit/dirvish/pull/278
+ docs: document the nil case for dirvish-default-layout. by @nicolas-graves in https://github.com/alexluigit/dirvish/pull/231
+ Split dirvish-yank--execute into two functions by @dvzubarev in https://github.com/alexluigit/dirvish/pull/290
+ fix: prevent killing emacsclient started on a directory by @prati0100 in https://github.com/alexluigit/dirvish/pull/293
+ perf(dirvish-peek): prevent redundant updates by tracking previous candidate by @zsxh in https://github.com/alexluigit/dirvish/pull/297

* 2.0.53

** Breaking changes

+ Use simulated dired buffers for parent directory and directory preview

  Prior to V2.0, `dirvish` command would create a ton of dired buffers because
  `dired-noselect` function were used to generate parent buffers and preview
  buffers for directory entries.  Now these buffers are created internally by
  dirvish, meaning they'll not showing up as dired/dirvish buffers in your
  buffer list.

** Changes since 1.9.23

+ =core=:
  - bind ~dirvish-dispatch~ to ~q~
  - add basic perspective.el support
  - allow user to have classic dired header (#96)
  - basic mouse support
  - add ~dirvish-hide-cursor~ user option (#119)
  - add ~dirvish-redisplay-debounce~ option
+ =quick-access=:
  - add ~dirvish-quick-access-function~ option
+ =media=:
  - display media properties automatically
+ =fd=:
  - allow user to select root directory for fd jump (#141)
  - new option for default directory in dirvish-fd-jump (#138)
  - interactive narrowing and orderless support
+ =widgets=:
  - support mouse click on path header line segment
  - add `dirvish-path-separators` option, closes #142
+ =side=:
  - auto-expand to buffer file name (#113)
+ =extras=:
  - add `dirvish-desktop-save-mode` (#133)
  - add `dirvish-copy-remote-path` command, closes #110
+ =vc=:
  - add `dirvish-vc-menu` prefix
  - add `vc-log` `vc-blame` preview dispatchers
+ =subtree=:
  - add indent guide
  - make `dirvish-subtree-remove` an interactive function (#105)
  - add subtree-up/clear commands

** Fixes since 1.9.23

- fix(core): set `dirvish--this` after session rebuild
- fix(core): avoid unexpected fullscreen session
- fix(core): disable font-lock-mode in shell preview
- fix(core): allow wildcard as entry
- fix(core): do not run dired-mode-hook in parent buffers
- fix(core): session reuse issue #135 #136
- fix(core): do not reuse sessions in other frames
- fix(core): only revert window config when buffer is the current one
- fix(core): `cursor-type` in `wdired-mode`, closes #132
- fix(core): use local value of `other-window-scroll-buffer` (#131)
- fix(core): remove `mod` from `dirvish-audio-exts`, closes #114
- fix(core): revert buffer upon wdired exit
- fix(core): inhibit undo-tree when previewing files (#107)
- fix(core): use hollow cursor for evil normal state in wdired-mode (#104)
- fix(core): emacs -q -> emacs -Q (#84)
- fix(core): `window system should be used` warning on terminal (#93)
- fix(core): escape %-constructs in path mode line segments (#97)
- fix(core): mode-line not update on Emacs 27 (#93)
- fix(core): use `start-file-process-shell-command` to print dir
- fix(core): shell quote filenames for git-msg (#86)
- fix(side): issues on frame resize update / subtree expansion #140
- fix(side): show project in header line after project switching
- fix(tramp): support TRAMP connections with nongnu ls
- fix(yank): backup existed files instead of new files
- fix(subtree): revert buffer correctly in emerged buffer
- fix(subtree): ensure directory name ends with / on TRAMP
- fix(extras): autoload `dirvish-copy-*`, closes #129
- fix(extras): add offset when aligning text in TTY sessions (#115)
- fix(extras): args-out-of-range error on file-size attribute
- fix(fd): handle systems using `fdfind` by default (#122)
- fix(fd): improve GNU ls detection (#92)
- fix(collapse): endless while loop

* 1.9.23
** Breaking changes

+ Extract =dirvish-media= from =dirvish=

  - ~dirvish-auto-cache-threshold~ -> ~dirvish-media-auto-cache-threshold~
  - New faces: ~dirvish-media-info-heading~, ~dirvish-media-info-property-key~
  - New command: ~dirvish-media-properties~

** Changes since 1.8.14

+ =ls=: apply switches to current session on M-RET ([[https://github.com/alexluigit/dirvish/issues/63][#63]])
+ =narrow=: C-g to cancel the narrowing / custom regex builder
+ =emerge=:
  - Add ~dirvish-emerge-toggle-current-group~ command to to toggle the visibility of the group
  - Add ~dirvish-emerge-group-heading-map~, TAB -> ~dirvish-emerge-toggle-current-group~
  - Add ~dirvish-emerge-next/previous-group~ commands
  - Add some predicates

** Fixes since 1.8.14

+ =core=:
  - revert to `dirvish-mode` after quit `wdired-mode`
  - guard `dired-current-directory` in dwim target ([[https://github.com/alexluigit/dirvish/issues/78][#78]])
  - scroll preview util buffer with `scroll-other-window`
  - set buffer-modified-p to nil at startup
  - kill session util buffers on dirvish-kill-buffer-h
  - rename obsolete command in `dirvish-dispatch`
  - highlight current line in any case
  - reuse fullscreen sessions unconditionally ([[https://github.com/alexluigit/dirvish/issues/64][#64]])
  - kill overlapping session correctly ([[https://github.com/alexluigit/dirvish/issues/64][#64]])
+ =emerge=:
  - apply changes in transient menu to buffer
  - infinite while loop
  - expunge invisible overlay property
+ =subtree=: revert subtrees after emerging groups
+ =extras=: increase file size string length to 8 ([[https://github.com/alexluigit/dirvish/issues/77][#77]])
+ =peek=: get candidate retriever at runtime ([[https://github.com/alexluigit/dirvish/issues/70][#70]])
+ =bookmark=: void variable error ([[https://github.com/alexluigit/dirvish/issues/75][#75]])
+ =narrow=: drop the overlay approach, accommodate subtree ([[https://github.com/alexluigit/dirvish/issues/67][#67]])

* 1.8.14
** Breaking changes

+ New extension: =dirvish-subtree=
+ New extension: =dirvish-collapse=
+ New extension: =dirvish-emerge=
+ New extension: =dirvish-fd=
+ New extension: =dirvish-narrow=
+ Require =transient.el= (inbuilt with Emacs 28)
  + Extract =dirvish-ls= from =dirvish-menu=
  + Extract =dirvish-bookmark= from =dirvish-menu=
  + Extract =dirvish-history= from =dirvish-menu=
  + Move ~dirvish-dispatch~ command from =dirvish-menu= to core.
+ Extract =dirvish-icons= from =dirvish-extras=

** Changes since 1.3.20

The lazy rendering and async I/O mechanism got a lot of improvements, Dirvish
even outperforms Dired in terms of opening big directories.

+ =vc=: use fringe-bitmap to display vc-state attribute
+ =yank=: use TRAMP when SRC and DEST are in the same host ([[https://github.com/alexluigit/dirvish/issues/37][#37]])
+ =core=: add ~dirvish-open-with-programs~ user option
+ =core=: add ~dirvish-mode-line-position~ user option
+ =core=: deprecate ~dirvish-dired~ command

** Fixes since 1.3.20

+ =core=: remove killed buffers from ~dv-roots~
+ =core=: hide dired header when exiting wdired-mode
+ =core=: ensure ~quit-window~ kill all dirvish buffers
+ =core=: incorrect ~default-directory~ for ~find-file~ ([[https://github.com/alexluigit/dirvish/issues/53][#53]])
+ =core=: do not quote filename when open externally ([[https://github.com/alexluigit/dirvish/issues/51][#51]])
+ =core=: Emacs crashes from dead index dirvish buffer ([[https://github.com/alexluigit/dirvish/issues/49][#49]])
+ =core=: uppercased file extensions
+ =core=: file name error on external file opening
+ =core=: make header/footer window dedicated ([[https://github.com/alexluigit/dirvish/issues/46][#46]])
+ =extras=: wrong-type-argument error in ~file-size-human-readable~
+ =core=: ensure the right cursor position when resuming
+ =core=: use new dirvish session for bookmark restoring
+ =core=: void :child prop caused by ~with-ivy-window~
+ =core=: ensure cursor hiding in ~evil-mode~ ([[https://github.com/alexluigit/dirvish/issues/43][#43]])

* 1.3.20
** Breaking changes

+ Add TRAMP support for ~dirvish-yank~ and friends

** Changes since 1.2.0

+ =extras=: more mode-line segments ([[https://github.com/alexluigit/dirvish/issues/42][#42]])
+ =extras=: add ~dirvish-switch-layout~ command ([[https://github.com/alexluigit/dirvish/issues/33][#33]])
+ =core=: add symlink mode line ([[https://github.com/alexluigit/dirvish/issues/41][#41]])
+ =extras=: make ~file-size~ files count in directories ([[https://github.com/alexluigit/dirvish/issues/40][#40]])
+ =core=: add ~dirvish-dwim~ command
+ =core=: add auto cache facility ([[https://github.com/alexluigit/dirvish/issues/28][#28]])
+ =extras=: add ~dirvish-go-forward/backward-history~ cmds ([[https://github.com/alexluigit/dirvish/issues/32][#32]])
+ =yank=: add ~dirvish-yank-overwrite-existing-files~ option ([[https://github.com/alexluigit/dirvish/issues/38][#38]])
+ =core=: add ~free-space~ mode-line segment [[https://github.com/alexluigit/dirvish/issues/31][#31]])
+ =menu=: add ~dirvish-quicksort~ command ([[https://github.com/alexluigit/dirvish/issues/27][#27]])
+ =core=: add ~dirvish-hide-details~ user option
+ =menu=: add ~dirvish-ls-switches-menu~ prefix
+ =side=: add ~dirvish-side-follow-project-switch~ option ([[https://github.com/alexluigit/dirvish/issues/24][#24]])
+ =side=: make window of ~dirvish-side~ dedicated
+ =side=: add ~dirvish-side-follow-buffer-file~ option
+ =preview=: support remote files
+ =core=: add ~dirvish-enabled-features-on-remote~ option
+ =extras=: add ~dirvish-total-file-size~ command
+ =extras=: add ~dirvish-copy-file-true-path~ command

** Fixes since 1.2.0

+ =core=: avoid util buffer get created after session kill
+ =core=: remove builtin attributes from dirvish--available-attrs
+ =core=: remove redundant session initialization
+ =core=: find-dired mode-line segment
+ =core=: retrieve path for auto cache correctly
+ =extras=: file permission error
+ =yank=: remote-to-remote handler
+ =core=: preserve size of header window when showing transient
+ =yank=: ensure new names when not overwrite ([[https://github.com/alexluigit/dirvish/issues/38][#38]])
+ =yank=: ensure live source file buffers
+ =yank=: autoload, recursive hardlink, errors on name collision
+ =menu=: add dirvish-quicksort to available-prefixs
+ =vc=: vc-info modeline segment
+ =core=: get correct dwim target
+ =core=: set ~face-remapping-alist~ only when it's non-nil ([[https://github.com/alexluigit/dirvish/issues/36][#36]])
+ =core=: reuse old session when calling ~dirvish--noselect~ ([[https://github.com/alexluigit/dirvish/issues/35][#35]])
+ =core=: inhibit vc follow link prompt while previewing ([[https://github.com/alexluigit/dirvish/issues/25][#25]])
+ =core=: initialize ~dirvish~ from side window correctly
+ =side=: remember new project root
+ =core=: raise error for overlapping fullscreen session
+ =core=: goto correct child-entry
+ =side=: problematic ~delete-window~ call
+ =core=: get project root properly
+ =core=: ensure correct index path
+ =yank=: disable file size calculation upon task start ([[https://github.com/alexluigit/dirvish/issues/23][#23]])
+ =core=: slow navigation on TRAMP ([[https://github.com/alexluigit/dirvish/issues/21][#21]])
+ =peek=: invalid metadata in ivy-read ([[https://github.com/alexluigit/dirvish/issues/20][#20]])

* 1.2.0
** Breaking changes

+ support asynchronous Dired listing.
+ scope awareness

** Changes since 1.0.0

+ =side=: enable isolated atts/preview-dps/mode-line-format
+ =side=: add ~dirvish-side-open-file-window-function~ option
+ =vc=: add ~vc-info~ mode line segment
+ =extras=: add ~expand-state~ attribute
+ =peek=: support ~ivy-mode~ and builtin ~icomplete[-vertical]-mode~
+ =core=: allow user to disable the history tracking
+ =core=: add ~dirvish-hl-line~ face

** Fixes since 1.0.0

+ =core=: ensure correct cache image path on Windows ([[https://github.com/alexluigit/dirvish/issues/15][#15]])
+ =core=: video thumbnail generation ([[https://github.com/alexluigit/dirvish/issues/19][#19]])
+ =vc=:   adjust position of ~vc-state~ attribute
+ =side=: ensure preview update on fullscreen toggle
+ =side=: use fixed width for side window
+ =side=: keep the side window alive on =delete-other-windows=
+ =core=: avoid void session error on window quit
+ =core=: error at initialization when ~dired-hide-details-mode~ is turned off
+ =core=: ensure retrieving dwim-target from live window
+ =core=: hide cursor in utility buffers

* 1.0.0

First release.
