Skip to content

fix: make every effort to carry hidden states for dummy files #2814

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 30, 2025

Conversation

sxyazi
Copy link
Owner

@sxyazi sxyazi commented May 30, 2025

Which issue does this PR resolve?

Resolves #2751

Rationale of this PR

@sxyazi sxyazi requested a review from Copilot May 30, 2025 16:04
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR aims to fix the handling of dummy files by ensuring that hidden states are consistently carried over through various file operations. Key changes include:

  • Adding a "no-dummy" flag when revealing a file in the TabProxy.
  • Replacing calls to File::from and Cha::dummy with updated methods like File::new, File::from_follow, and Cha::default.
  • Updating collection construction (e.g. sets and maps) to use a more concise array-based syntax.

Reviewed Changes

Copilot reviewed 22 out of 22 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
yazi-proxy/src/tab.rs Injects an additional flag ("no-dummy") during file reveal operations to manage dummy states.
yazi-plugin/src/macros.rs Adjusts the cached field construction for the cha field using the new tuple struct style.
yazi-plugin/src/fs/fs.rs Modifies file metadata handling by replacing from_meta with from_follow.
yazi-plugin/src/external/{rga, rg, fd}.rs Switches file creation API from File::from to File::new for consistent initialization.
yazi-plugin/src/bindings/cha.rs Changes how Cha is instantiated by exposing the inner type as a public tuple field.
yazi-fs/src/{op, files, file}.rs Updates file operations to use from_follow/new methods and modern array-based collection syntax.
yazi-fs/src/cha/cha.rs Refactors Cha initialization, default values, and attachment of hidden states.
yazi-core/src/**/*.rs Replaces Cha::dummy with Cha::default and updates file API calls in tab operations, commands, watcher, and rename flows.
Comments suppressed due to low confidence (13)

yazi-core/src/tab/commands/cd.rs:99

  • Review that using File::new here ensures correct file type handling before proceeding with directory change and file reveal actions.
if let Ok(file) = File::new(url.clone()).await else { return };

yazi-plugin/src/fs/fs.rs:54

  • Confirm that renaming from 'from_meta' to 'from_follow' maintains the intended behavior, especially in handling symlink cases.
Ok(m) => Cha(yazi_fs::cha::Cha::new(&url, m)).into_lua_multi(&lua),

yazi-plugin/src/external/rga.rs:32

  • Verify that switching from File::from to File::new aligns with the updated file initialization logic and covers all edge cases.
if let Ok(file) = File::new(opt.cwd.join(line)).await {

yazi-fs/src/op.rs:128

  • [nitpick] Confirm that the new array-based initialization for sets is consistent with our project style and does not introduce performance issues.
Self::Deleting(p, [n].into()).emit();

yazi-fs/src/files.rs:44

  • Make sure that the behavior of File::from_follow meets the intended semantics, especially in scenarios where dummy file states are relevant.
Ok(meta) => File::from_follow(url, meta).await,

yazi-fs/src/file.rs:26

  • Check that the transition from 'from' to 'new' (and using from_follow internally) correctly preserves and adapts file metadata retrieval logic.
pub async fn new(url: Url) -> Result<Self> {

yazi-core/src/tab/preview.rs:51

  • Review the use of Cha::default() in place of Cha::dummy() to ensure it correctly represents the intended file state for stale directories.
let Some(new) = Files::assert_stale(&wd, dir.unwrap_or_default()).await else { return };

yazi-core/src/tab/folder.rs:49

  • Confirm that replacing Cha::dummy() with Cha::default() preserves the proper semantics for folder loading scenarios.
(self.cha, self.stage) = (Cha::default(), FolderStage::Loading);

yazi-core/src/tab/commands/search.rs:73

  • Ensure that switching from Cha::dummy() to Cha::default() in search commands properly reflects the file state in the search results.
FilesOp::Done(cwd, Cha::default(), ticket).emit();

yazi-core/src/mgr/watcher.rs:137

  • Double-check that File::new properly handles symlink resolution and edge cases in the watcher context.
let Ok(file) = File::new(u).await else {

yazi-core/src/mgr/commands/open.rs:59

  • Validate that invoking File::new in the open command correctly distinguishes between directories and files.
if let Ok(f) = File::new(u).await {

yazi-core/src/mgr/commands/create.rs:59

  • Ensure that switching to File::new during file creation integrates well with subsequent file operations and state updates.
if let Ok(f) = File::new(new.clone()).await {

yazi-core/src/mgr/commands/bulk_rename.rs:97

  • Confirm that using File::new in bulk rename operations maintains the integrity of file metadata during batch processing.
else if let Ok(f) = File::new(new.into()).await {

@@ -13,7 +13,7 @@ impl TabProxy {

#[inline]
pub fn reveal(target: &Url) {
emit!(Call(Cmd::args("mgr:reveal", &[target])));
emit!(Call(Cmd::args("mgr:reveal", &[target]).with("no-dummy", true)));
Copy link
Preview

Copilot AI May 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please document the purpose and effect of the "no-dummy" flag so future maintainers understand its impact.

Copilot uses AI. Check for mistakes.

@@ -83,7 +83,7 @@ macro_rules! impl_style_shorthands {
#[macro_export]
macro_rules! impl_file_fields {
($fields:ident) => {
yazi_binding::cached_field!($fields, cha, |_, me| Ok($crate::bindings::Cha::from(me.cha)));
yazi_binding::cached_field!($fields, cha, |_, me| Ok($crate::bindings::Cha(me.cha)));
Copy link
Preview

Copilot AI May 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Ensure that constructing Cha with a tuple struct (Cha(me.cha)) is consistent with our type conversion conventions throughout the codebase.

Copilot uses AI. Check for mistakes.

@@ -4,18 +4,14 @@ use mlua::{ExternalError, FromLua, IntoLua, Lua, Table, UserData, UserDataFields
use yazi_fs::cha::ChaKind;

#[derive(Clone, Copy, FromLua)]
pub struct Cha(yazi_fs::cha::Cha);
pub struct Cha(pub yazi_fs::cha::Cha);
Copy link
Preview

Copilot AI May 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Evaluate whether exposing the inner yazi_fs::cha::Cha directly via a public tuple field is intended and does not break abstraction boundaries.

Copilot uses AI. Check for mistakes.

} else {
FilesOp::Deleting(p_old, HashSet::from_iter([n_old])).emit();
FilesOp::Upserting(p_new, HashMap::from_iter([(n_new, file)])).emit();
FilesOp::Deleting(p_old, [n_old].into()).emit();
Copy link
Preview

Copilot AI May 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Ensure consistent set initialization across rename operations to avoid potential mismatches in file identifiers.

Suggested change
FilesOp::Deleting(p_old, [n_old].into()).emit();
FilesOp::Deleting(p_old, [UrnBuf::from(n_old)].into()).emit();

Copilot uses AI. Check for mistakes.

@sxyazi sxyazi merged commit 4fdc0f1 into main May 30, 2025
6 checks passed
@sxyazi sxyazi deleted the pr-72791a46 branch May 30, 2025 16:08
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Jun 12, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [sxyazi/yazi](https://github.com/sxyazi/yazi) | minor | `v25.4.8` -> `v25.5.31` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>sxyazi/yazi (sxyazi/yazi)</summary>

### [`v25.5.31`](https://github.com/sxyazi/yazi/releases/tag/v25.5.31)

[Compare Source](sxyazi/yazi@v25.5.28...v25.5.31)

This is a maintenance release, focusing on bug fixes.

#### What's Changed

-   fix: expose `ui.Wrap` by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2810
-   fix: `forward --end-of-word` of the input should consider the mode's delta by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2811
-   fix: make every effort to carry hidden states for dummy files by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2814

**Full Changelog**: sxyazi/yazi@v25.5.28...v25.5.31

### [`v25.5.28`](https://github.com/sxyazi/yazi/releases/tag/v25.5.28)

[Compare Source](sxyazi/yazi@v25.4.8...v25.5.28)

#### Breaking Changes

-   `[manager]` is deprecated in favor of the new `[mgr]`. sxyazi/yazi#2803
-   `tab_width` has been removed as it no longer needs to be set manually. sxyazi/yazi#2745
-   `tab_active` and `tab_inactive` are moved under the new `[tabs]` section. sxyazi/yazi#2745
-   `sixel_fraction` has been removed as it's no longer needed. sxyazi/yazi#2707

#### Deprecated

-   `ya.mgr_emit()`, `ya.app_emit()` and `ya.input_emit()` are deprecated. sxyazi/yazi#2653
-   `ya.preview_widgets()` is deprecated. sxyazi/yazi#2706
-   `Command:args()` is deprecated. sxyazi/yazi#2752
-   The `ya pack` subcommand is deprecated. sxyazi/yazi#2770
-   `LEFT`, `CENTER`, `RIGHT` on `ui.Line`, `ui.Text` are deprecated. sxyazi/yazi#2802
-   `NONE`, `TOP`, `RIGHT`, `BOTTOM`, `LEFT`, `ALL` on `ui.Bar`, `ui.Border` are deprecated. sxyazi/yazi#2802
-   `WRAP_NO`, `WRAP`, `WRAP_TRIM` on `ui.Text` are deprecated. sxyazi/yazi#2802

#### Redesign Tabs

sxyazi/yazi#2745 decouples tabs from the header into an independent tab bar component to enhance UX:

-   A standalone single-line component increases the available space for displaying tabs.
-   Tab titles are displayed by default to increase recognizability.
-   Supports switching tabs via mouse for easier navigation.

The new tab bar is only shown when there is more than one tab, ensuring no space is wasted for users who don't use tabs.

https://github.com/user-attachments/assets/5ca33561-7558-4b9c-8b6a-9dfbc0bc8aa4

#### Calculate Real-Time Directory Size in Spotter

sxyazi/yazi#2695 adds directory sizes to the `folder` spotter. The size is computed dynamically in real time and asynchronously, which means:

-   Every time a user clicks `<Tab>` on a directory, the latest size is calculated.
-   For large directories, real-time changes in size are reported to the user, with "(?)" appended at the end to indicate that the calculation is in progress.
-   If the user closes the spotter or switches directories using the left/right arrow keys, any ongoing calculations will be canceled to avoid wasting resources.

Also, the computed directory size will be updated in the file list:

-   If the user sets `linemode = size`, the latest size will be shown on the right of the file line.
-   If the user sets `sort_by = size`, the file list will be sorted by the latest sizes (if necessary).

https://github.com/user-attachments/assets/eb2981e6-3e02-4997-abfc-83cc456a1677

#### 9x Faster Sixel Image Preview

sxyazi/yazi#2707 replaces the existing neural network quantization algorithm with Wu's Color Quantizer, which offers [better performance](https://github.com/Ivordir/quantette/blob/main/docs/Benchmarks%20and%20Accuracy.md#time) while [maintaining comparable quality](https://github.com/Ivordir/quantette/blob/main/docs/Benchmarks%20and%20Accuracy.md#accuracydssim).

Old implementation (neural network via [`color_quant`](https://github.com/image-rs/color_quant), with default `sixel_fraction = 20`) – average 189.5763999ms:

```sh
time: 190.025ms
time: 191.054417ms
time: 187.696792ms
time: 188.060791ms
time: 189.381958ms
time: 191.618042ms
time: 192.383125ms
time: 190.511291ms
time: 187.8395ms
time: 187.193083ms
```

New implementation (Wu - sRGB via [`quantette`](https://github.com/Ivordir/quantette)) – average 20.9199916ms:

```sh
time: 21.226458ms
time: 20.719542ms
time: 21.207583ms
time: 20.815875ms
time: 21.071291ms
time: 21.273459ms
time: 20.811792ms
time: 20.723166ms
time: 20.52675ms
time: 20.824ms
```

#### [`piper.yazi` Plugin](https://github.com/yazi-rs/plugins/tree/main/piper.yazi)

With [`piper.yazi`](https://github.com/yazi-rs/plugins/tree/main/piper.yazi), you can use the output of any shell command as preview content. This eliminates the need to write a separate plugin for each command, making the use of custom previewers much more convenient.

![screenshot-002418](https://github.com/user-attachments/assets/59618aed-fa80-46e6-a6fc-82918317e9c2)

See https://github.com/yazi-rs/plugins/tree/main/piper.yazi#examples for more examples!

#### Double Directory Size Calculation Speed

sxyazi/yazi#2683 greatly improves directory computation performance by dividing the task into chunks and reusing existing threads. Directory sorting and file trashing will be observably twice as fast.

Run the benchmark script against a 10.16GB folder 5 times in release mode:

```sh
Old: elapsed 759.877791ms
New: elapsed 364.802583ms

Old: elapsed 734.5155ms
New: elapsed 360.103375ms

Old: elapsed 734.124167ms
New: elapsed 365.662458ms

Old: elapsed 733.27325ms
New: elapsed 365.694042ms

Old: elapsed 743.394875ms
New: elapsed 364.455083ms
```

#### Input Component Now Supports Password Mode

With sxyazi/yazi#2675, a new `obscure = true` option is available:

```lua
local value = ya.input {
  title = "Password:",
  obscure = true,
  position = { "center", w = 50 },
}
```

https://github.com/user-attachments/assets/ff5b21f2-977b-4e9f-a279-e4cb15b51a57

#### Truncate Long Items in the File List

sxyazi/yazi#2754, sxyazi/yazi#2759, and sxyazi/yazi#2778 add truncation support for long filenames in the file list and archive preview, and display file extensions at the end, ensuring that even if a filename is truncated, you can still know what file type it is by its extension.

https://github.com/user-attachments/assets/0f1afbdb-17ec-410f-adea-e8b1d2ed6341

#### [`types.yazi` Plugin](https://github.com/yazi-rs/plugins/tree/main/types.yazi)

For a long time, Yazi lacked a type definition file, which made plugin development very painful. Now, it's here!

[`types.yazi`](https://github.com/yazi-rs/plugins/tree/main/types.yazi) provides type definitions for Yazi's Lua API, empowering an efficient plugin development experience.

#### Improved Built-In Previewers

-   The `video` previewer now supports displaying embedded video covers, sxyazi/yazi#2640
-   The `magick` previewer will respect the user's `image_alloc` and `image_bound` settings, to limit its maximum resource usage, sxyazi/yazi#2602, thanks to [@&#8203;ze0987](https://github.com/ze0987)
-   The `video` previewer will respect the user's `max_width` setting, sxyazi/yazi#2560, thanks to [@&#8203;ze0987](https://github.com/ze0987)

#### Improve Path Auto-Completion Results

The auto-completion results for interactive cd (key: `g` => `<Space>`) will now more closely match the user's input keywords.

Done in sxyazi/yazi#2765

#### What's Changed

-   fix: reverse the mixing order of theme and flavor configuration by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2594
-   feat: limit memory usage for previewing large images by [@&#8203;ze0987](https://github.com/ze0987) in sxyazi/yazi#2602
-   fix: respect the user's `max_width` setting for the built-in video previewer by [@&#8203;ze0987](https://github.com/ze0987) in sxyazi/yazi#2560
-   feat: allow custom exit code with `quit --code` by [@&#8203;Nicholas42](https://github.com/Nicholas42) in sxyazi/yazi#2609
-   fix: ensure state synchronization even when the package update fails midway by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2613
-   fix: do not change revision when package deployment fails by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2627
-   feat: copy-on-write support for field caching by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2629
-   feat: fall back to `CSI 16 t` when PowerShell OpenSSH returns a fake terminal size by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2636
-   feat: support embedded cover for video preview by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2640
-   fix: lazily update files to avoid triggering issues dependent on sort order by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2643
-   feat: new `ya.emit()` API by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2653
-   feat: fine-grained `peek` and `watch` by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2655
-   feat: new `--no-dummy` option for `reveal` command by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2664
-   feat: obscure input component for inputting passwords by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2675
-   feat: increase the maximum allowed value of `sixel_fraction` to `30` by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2682
-   perf: double directory size calculation speed by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2683
-   feat: new `fs.calc_size()` API by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2691
-   feat: promote `Id` to a first-class type by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2692
-   feat: calculate real-time directory size in spotter by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2695
-   feat: checks in `ya pub` and `ya emit` subcommands to verify receiver exists and has necessary abilities by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2696
-   feat: add `s` and `S` keybinds in the input component by [@&#8203;hankertrix](https://github.com/hankertrix) in sxyazi/yazi#2678
-   fix: no title is set when starts the first time by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2700
-   refactor: move `tty` to the new `yazi-term` crate by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2701
-   feat: show error when image preview fails by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2706
-   feat!: 9x faster Sixel image preview by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2707
-   fix: reset the cursor position with `arrow()` after deleting files by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2708
-   fix: `ya pub-to 0` checks if any peer is able to receive the message by [@&#8203;mikavilpas](https://github.com/mikavilpas) in sxyazi/yazi#2697
-   feat: add `--hovered` to the `copy` command by [@&#8203;hankertrix](https://github.com/hankertrix) in sxyazi/yazi#2709
-   fix: missing a `hover` event after `cd` by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2719
-   fix: detach background and orphan processes from the controlling terminal with `setsid()` by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2723
-   fix: avoid tmux interfering with kitty graphical sequences by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2734
-   fix: `windows-sys` missing a `Win32_Security` feature by [@&#8203;Kreijstal](https://github.com/Kreijstal) in sxyazi/yazi#2728
-   feat: make `ui.Line` renderable by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2743
-   feat!: redesign tabs by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2745
-   refactor: deprecate the `Command:args()` method by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2752
-   perf: avoid unnecessary memory allocation in `ya.truncate()` by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2753
-   fix: icon rules mixing by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2755
-   feat: show file extension for truncated file list items by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2759
-   perf: remove intermediate variables in natural sorting algorithm to avoid unnecessary allocation by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2764
-   feat: improve path auto-completion results by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2765
-   fix: always try to create state directory before draining DDS data by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2769
-   feat: truncate long paths in archive preview file list by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2778
-   feat: add a `/` to the interactive cd auto-completion candidates by [@&#8203;ineu](https://github.com/ineu) in sxyazi/yazi#2777
-   feat: make custom tab bar easier by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2782
-   fix: update `rust-onig` to v6.5.1 for GCC 15 compatibility by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2794
-   feat: new `ui.Align`, `ui.Wrap`, and `ui.Edge` by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2802
-   refactor!: deprecate `[manager]` in favor of `[mgr]` by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2803
-   chore: bump version to 25.5.28 by [@&#8203;sxyazi](https://github.com/sxyazi) in sxyazi/yazi#2804

#### New Contributors

-   [@&#8203;Nicholas42](https://github.com/Nicholas42) made their first contribution in sxyazi/yazi#2609
-   [@&#8203;Kreijstal](https://github.com/Kreijstal) made their first contribution in sxyazi/yazi#2728
-   [@&#8203;ineu](https://github.com/ineu) made their first contribution in sxyazi/yazi#2777

**Full Changelog**: sxyazi/yazi@v25.4.8...v25.5.28

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC41MC4wIiwidXBkYXRlZEluVmVyIjoiNDAuNTAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jun 30, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Renaming to hidden causes a broken entry display (under no-hidden mode)
1 participant