Skip to content
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

feat: word wrapping in builtin code preview #1159

Merged
merged 4 commits into from
Aug 26, 2024

Conversation

ArtyomArtamonov
Copy link
Contributor

@ArtyomArtamonov ArtyomArtamonov commented Jun 16, 2024

This PR adds a new wrap option under [preview], which can be set to "no" or "yes". When set to "yes", line wrapping is enabled:

# ~/.config/yazi/yazi.toml
[preview]
wrap = "yes"

Note that this feature may still be unstable and its behavior might change in the future because it relies on ratatui's text wrapping implementation, which is itself still unstable, see ratatui/ratatui#293 for details.

@mskvsk
Copy link
Contributor

mskvsk commented Jun 17, 2024

Thank you for the PR! It works perfectly, the only thing I would change is hard wrap to soft wrap.

Hard wrap example:
The quick brown fox jum
ps over the lazy dog

Soft wrap example:
The quick brown fox
jumps over the lazy dog

As an extra suggestion, the crate I have used previously provides some algorithm that tries to optimize the wrapping so it looks more even. But that's completely optional, just regular soft wrap will be enough.

Appreciate the solution!

@ArtyomArtamonov ArtyomArtamonov marked this pull request as draft June 18, 2024 16:26
@ArtyomArtamonov ArtyomArtamonov marked this pull request as ready for review June 18, 2024 21:51
@ArtyomArtamonov
Copy link
Contributor Author

Instead of hard wrap I tried to implement soft wrap. It tries to wrap lines on characters ,.; . If a line does not contain any of these characters, we use the old logic - hard wrapping

@mskvsk
Copy link
Contributor

mskvsk commented Jun 19, 2024

Works like a charm, thank you.

Please, DM me your Ethereum wallet so I could send you 50 USDT (let me know if you prefer USDC).

As far as I am concerned, the problem is solved so looking forward to @sxyazi 's review.

Comment on lines 203 to 205
} else if !line.ends_with(b"\n") {
line.push(b'\n')
}
Copy link
Owner

Choose a reason for hiding this comment

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

It seems like this branch isn't in the original code - can you explain why you added it?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Every line in original code had \n at the end, but if we want to wrap long line, we have to place \n at the end of each piece of smaller line. There should not be any issues with old solution because all lines there already have \n at the end

false
}

fn chunk_by_width(line: Vec<u8>, width: usize) -> Vec<Vec<u8>> {
Copy link
Owner

Choose a reason for hiding this comment

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

Please combine all instances of String::from_utf8 and String::from_utf8_lossy in this function into a single one, as it is a time-consuming operation.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I tried to optimize this solution a bit by using two buffers: one is string and second is Vec. First one is used only to calculate width every iteration. Second is used to take slices when slicing a line

let mut buf = vec![];
// If we want to indent plain text, we have to decide if it is plain
while reader.read_until(b'\n', &mut buf).await.is_ok() {
Copy link
Owner

Choose a reason for hiding this comment

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

Why do we need both while and for loops here? It seems like while will keep reading until the end of the file without stopping early, I think we should exit the loop as soon as we have enough lines for preview.

Is it possible to move if long_line.is_empty() || lines_handled > skip + area.height as usize { up into the while loop and combine the while and for into one loop?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

At first I thought we have to go line by line twice, but now it seems it's possible to do it once. I tried to refactor code according to this. Now we traverse a file once, like before

}
long_lines.push(mem::take(&mut buf));
buf.clear()
Copy link
Owner

Choose a reason for hiding this comment

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

Suggested change
buf.clear()

This is unnecessary. After mem::take, buf will be initialized as a new Vec.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

done

Comment on lines 198 to 202
if line.as_str().ends_with("\r\n") {
let mut chars = line.chars();
chars.next_back();
chars.next_back();
line = chars.as_str().to_string();
Copy link
Owner

Choose a reason for hiding this comment

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

Please keep the original code here. The new implementation using to_string() will cause unnecessary memory reallocations. Since \r\n are known to be ASCII characters, there's no need to treat them as Unicode chars.

Copy link
Owner

Choose a reason for hiding this comment

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

i.e.

		if line.ends_with("\r\n") {
			line.pop();
			line.pop();
			line.push('\n');

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Fixed

chars.next_back();
chars.next_back();
line = chars.as_str().to_string();
} else if !line.as_str().ends_with('\n') {
Copy link
Owner

Choose a reason for hiding this comment

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

Suggested change
} else if !line.as_str().ends_with('\n') {
} else if !line.ends_with('\n') {

Copy link
Contributor Author

Choose a reason for hiding this comment

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

also fixed this

@sxyazi sxyazi added this to the v0.3.1 milestone Jul 5, 2024
@sxyazi sxyazi force-pushed the main branch 5 times, most recently from 6c0a482 to f5598eb Compare July 13, 2024 06:22
@sxyazi sxyazi force-pushed the main branch 2 times, most recently from 4eec20b to ed6ae00 Compare July 16, 2024 10:50
@sxyazi sxyazi force-pushed the main branch 6 times, most recently from 33d04f9 to 3fdbbfe Compare August 2, 2024 09:43
@sxyazi sxyazi changed the title feat: word wrapping in preview feat: word wrapping in code previewer Aug 26, 2024
Copy link
Owner

@sxyazi sxyazi left a comment

Choose a reason for hiding this comment

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

Thanks!

@sxyazi sxyazi merged commit cd7209c into sxyazi:main Aug 26, 2024
6 checks passed
@sxyazi sxyazi changed the title feat: word wrapping in code previewer feat: word wrapping in builtin code preview Aug 26, 2024
@plejd-sebman
Copy link

It seems that the schema for yazi.toml files haven't been updated with the new wrap option yet. I've tried to find the schema file in this repo but couldn't find it. Where could I find it so that I could create an PR?

@sxyazi
Copy link
Owner

sxyazi commented Aug 29, 2024

renovate bot referenced this pull request in scottames/dots Sep 2, 2024
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [aquaproj/aqua](https://togithub.com/aquaproj/aqua) | minor |
`v2.30.0` -> `v2.31.0` |
| [aquaproj/aqua-registry](https://togithub.com/aquaproj/aqua-registry)
| minor | `v4.217.0` -> `v4.219.0` |
| [casey/just](https://togithub.com/casey/just) | minor | `1.34.0` ->
`1.35.0` |
| [eza-community/eza](https://togithub.com/eza-community/eza) | patch |
`v0.19.0` -> `v0.19.1` |
| [fujiwara/awslim](https://togithub.com/fujiwara/awslim) | patch |
`v0.3.3` -> `v0.3.4` |
| [junegunn/fzf](https://togithub.com/junegunn/fzf) | minor | `v0.54.3`
-> `v0.55.0` |
| [nektos/act](https://togithub.com/nektos/act) | patch | `v0.2.65` ->
`v0.2.66` |
| [snyk/cli](https://togithub.com/snyk/cli) | minor | `v1.1292.4` ->
`v1.1293.0` |
| [sxyazi/yazi](https://togithub.com/sxyazi/yazi) | patch | `v0.3.1` ->
`v0.3.2` |
|
[withgraphite/homebrew-tap](https://togithub.com/withgraphite/homebrew-tap)
| patch | `v1.4.3` -> `v1.4.4` |

---

### Release Notes

<details>
<summary>aquaproj/aqua (aquaproj/aqua)</summary>

### [`v2.31.0`](https://togithub.com/aquaproj/aqua/releases/tag/v2.31.0)

[Compare
Source](https://togithub.com/aquaproj/aqua/compare/v2.30.0...v2.31.0-1)

[Pull
Requests](https://togithub.com/aquaproj/aqua/pulls?q=is%3Apr+milestone%3Av2.31.0)
|
[Issues](https://togithub.com/aquaproj/aqua/issues?q=is%3Aissue+milestone%3Av2.31.0)
| aquaproj/aqua@v2.30.0...v2.31.0

##### Overview

##### Featuers

[#&#8203;2978](https://togithub.com/aquaproj/aqua/issues/2978)
[#&#8203;2994](https://togithub.com/aquaproj/aqua/issues/2994) Support
verifying packages with minisign
[#&#8203;3052](https://togithub.com/aquaproj/aqua/issues/3052) Support
passing variables

##### Fixes

[#&#8203;3012](https://togithub.com/aquaproj/aqua/issues/3012) Fix typo
`temporal`. Replace them with `temporary`
[#&#8203;3017](https://togithub.com/aquaproj/aqua/issues/3017)
[#&#8203;3024](https://togithub.com/aquaproj/aqua/issues/3024) Stop
using `replace` directive

##### Others

Update Go 1.22.5 to 1.22.6

##### Feature - Support verifying packages with minisign

[#&#8203;2978](https://togithub.com/aquaproj/aqua/issues/2978)
[#&#8203;2994](https://togithub.com/aquaproj/aqua/issues/2994)

Support verifying packages with
[minisign](https://togithub.com/jedisct1/minisign).

##### Why is the feature needed?

To install some packages securely.
For example, [zig](https://ziglang.org/download/) is signed by minisign.

##### Example Code

This feature is similar to Cosign and slsa-verifier.

https://aquaproj.github.io/docs/reference/registry-config/cosign/

This feature depends on minisign.
So aqua should install minisign transparently same as Cosign and
slsa-verifier.

registry.yaml

```yaml
minisign:
  enabled: true
  public_key: "RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U"

##### public_key_url: https://example/signature.pub
```

##### Feature - Support passing variables

[#&#8203;3052](https://togithub.com/aquaproj/aqua/issues/3052)

Add the optional field `vars` in aqua.yaml and Registry.

##### `vars` in Registry

e.g.

```yaml
packages:
  - type: github_release
    repo_owner: indygreg
    repo_name: python-build-standalone
    asset: cpython-{{.Vars.python_version}}+{{.Version}}-{{.Arch}}-{{.OS}}-install_only.{{.Format}} # .Vars.python_version
    vars:
      - name: python_version
        required: true

##### ...
```

`vars` is a list of variables.
Fields of a variable

-   name: string (Required): A variable name
- required: boolean (Optional): If true, the variable is required. To
use the package, users need to set the variable in aqua.yaml
-   default: any (Optional): The default value of the variable

Variables are passed to template strings as `.Vars.<template name>`.

e.g.

asset:
cpython-{{.Vars.python_version}}+{{.Version}}-{{.Arch}}-{{.OS}}-install_only.{{.Format}}

##### `vars` in aqua.yaml

e.g.

```yaml
packages:
  - name: indygreg/python-build-standalone@20240726
    vars:
      python_version: 3.11.9
```

`vars` is a map of variables.
The key is a variable name and the value is a variable value.

</details>

<details>
<summary>aquaproj/aqua-registry (aquaproj/aqua-registry)</summary>

###
[`v4.219.0`](https://togithub.com/aquaproj/aqua-registry/releases/tag/v4.219.0)

[Compare
Source](https://togithub.com/aquaproj/aqua-registry/compare/v4.218.0...v4.219.0)


[Issues](https://togithub.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.219.0)
| [Pull
Requests](https://togithub.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.219.0)
| aquaproj/aqua-registry@v4.218.0...v4.219.0

#### 🎉 New Packages


[#&#8203;26329](https://togithub.com/aquaproj/aqua-registry/issues/26329)
[k1LoW/oldstable](https://togithub.com/k1LoW/oldstable): Check if
version of go directive in go.mod is oldstable
[@&#8203;ponkio-o](https://togithub.com/ponkio-o)

#### Fixes


[#&#8203;26341](https://togithub.com/aquaproj/aqua-registry/issues/26341)
ollama/ollama: Regenerate the setting

[#&#8203;26330](https://togithub.com/aquaproj/aqua-registry/issues/26330)
zyedidia/micro: Regenerate the setting

[#&#8203;26303](https://togithub.com/aquaproj/aqua-registry/issues/26303)
kcp-dev/kcp/kubectl-kcp: Follow up changes of kcp v0.25.0

[#&#8203;26339](https://togithub.com/aquaproj/aqua-registry/issues/26339)
Rename the package `daguflow/dagu` to `dagu-org/dagu`

[#&#8203;26259](https://togithub.com/aquaproj/aqua-registry/issues/26259)
Rename the package `soywod/himalaya` to `pimalaya/himalaya`

###
[`v4.218.0`](https://togithub.com/aquaproj/aqua-registry/releases/tag/v4.218.0)

[Compare
Source](https://togithub.com/aquaproj/aqua-registry/compare/v4.217.0...v4.218.0)


[Issues](https://togithub.com/aquaproj/aqua-registry/issues?q=is%3Aissue+milestone%3Av4.218.0)
| [Pull
Requests](https://togithub.com/aquaproj/aqua-registry/pulls?q=is%3Apr+milestone%3Av4.218.0)
| aquaproj/aqua-registry@v4.217.0...v4.218.0

##### 🎉 New Packages


[#&#8203;26241](https://togithub.com/aquaproj/aqua-registry/issues/26241)
[ogen-go/ogen](https://togithub.com/ogen-go/ogen) OpenAPI v3 code
generator for go [@&#8203;ntk221](https://togithub.com/ntk221)

##### Fixes


[#&#8203;26249](https://togithub.com/aquaproj/aqua-registry/issues/26249)
rossmacarthur/sheldon: Regenerate the setting

</details>

<details>
<summary>casey/just (casey/just)</summary>

###
[`v1.35.0`](https://togithub.com/casey/just/blob/HEAD/CHANGELOG.md#1350---2024-08-28)

[Compare
Source](https://togithub.com/casey/just/compare/1.34.0...1.35.0)

##### Changed

- Allow fallback with recipes in submodules
([#&#8203;2329](https://togithub.com/casey/just/pull/2329) by
[casey](https://togithub.com/casey))
- Allow `[private]` attribute on assignments
([#&#8203;2300](https://togithub.com/casey/just/pull/2300) by
[adsnaider](https://togithub.com/adsnaider))

##### Misc

- Generate `.sha256sum` files for release artifacts
([#&#8203;2323](https://togithub.com/casey/just/pull/2323) by
[twm](https://togithub.com/twm))
- Clarify that subsequent dependencies run immediately after recipe
([#&#8203;2326](https://togithub.com/casey/just/pull/2326) by
[casey](https://togithub.com/casey))
- Fix readme typo
([#&#8203;2321](https://togithub.com/casey/just/pull/2321) by
[arminius-smh](https://togithub.com/arminius-smh))
- Remove Config::run
([#&#8203;2320](https://togithub.com/casey/just/pull/2320) by
[neunenak](https://togithub.com/neunenak))
- Bump MSRV to 1.74
([#&#8203;2306](https://togithub.com/casey/just/pull/2306) by
[casey](https://togithub.com/casey))
- Remove logging
([#&#8203;2305](https://togithub.com/casey/just/pull/2305) by
[casey](https://togithub.com/casey))
- Group commands under dedicated heading in `--help` output
([#&#8203;2302](https://togithub.com/casey/just/pull/2302) by
[casey](https://togithub.com/casey))
- Fix readme typo
([#&#8203;2297](https://togithub.com/casey/just/pull/2297) by
[nyurik](https://togithub.com/nyurik))

</details>

<details>
<summary>eza-community/eza (eza-community/eza)</summary>

###
[`v0.19.1`](https://togithub.com/eza-community/eza/releases/tag/v0.19.1):
eza v0.19.1

[Compare
Source](https://togithub.com/eza-community/eza/compare/v0.19.0...v0.19.1)

### Changelog

#### \[0.19.1] - 2024-08-28

##### Bug Fixes

-   FreeBSD build.
-   Typo

##### Miscellaneous Tasks

-   Release eza v0.19.1

##### Build

-   Bump uzers from 0.12.0 to 0.12.1

### Checksums

#### sha256sum

5fdfd44e7a413520cddca3ccd55860d8a31d83ce7a2853c219fb2f42738317b3
./target/bin-0.19.1/eza_aarch64-unknown-linux-gnu.tar.gz
48f5519a502de8fc9604f9e830b6cc0fff3e4b073b7938c56ede10ae4bb2bd5e
./target/bin-0.19.1/eza_aarch64-unknown-linux-gnu.zip
9831abbea6aada54faacd81a912c594e606a0f8a498af4815d4d970e66388b6d
./target/bin-0.19.1/eza_arm-unknown-linux-gnueabihf.tar.gz
50d43e3b0bcbcf5fe1c858b40446feff64723f8a2faf2936f50a8d411f40de3e
./target/bin-0.19.1/eza_arm-unknown-linux-gnueabihf.zip
732a425a33f9cbd4913613c03fed183845d1a824d2184239d7e6f681602919c1
./target/bin-0.19.1/eza.exe_x86_64-pc-windows-gnu.tar.gz
5f3b5b3cc0a42007fc8143e169bf427d5388e1fe58ff0d779685974b3db44ccc
./target/bin-0.19.1/eza.exe_x86_64-pc-windows-gnu.zip
0d621083ebd4c49f482633f582f39e4fbc11d33c374d48ff9c6dc22b85d2095f
./target/bin-0.19.1/eza_x86_64-unknown-linux-gnu.tar.gz
c943d5f2509eb24129ed4f5044e761156c5485249fa93ac080964be1052566d6
./target/bin-0.19.1/eza_x86_64-unknown-linux-gnu.zip
0af306c97b39c4751dc5f45ac6907f7e9e09d2302af1b4ea8c586a867ce44535
./target/bin-0.19.1/eza_x86_64-unknown-linux-musl.tar.gz
6ba0657ae4a32b1c889b7098097fbbc814f811d454e1750b60c7fbe043c1212f
./target/bin-0.19.1/eza_x86_64-unknown-linux-musl.zip

#### md5sum

16d3e99f3fe6972c30ebcc46a7ed5975
./target/bin-0.19.1/eza_aarch64-unknown-linux-gnu.tar.gz
6c39d3471eb4852bafd7045ed75fb54f
./target/bin-0.19.1/eza_aarch64-unknown-linux-gnu.zip
64e23697b7ea01169cda720bea1feebb
./target/bin-0.19.1/eza_arm-unknown-linux-gnueabihf.tar.gz
58275092eb47c2fcda28363b38b0875e
./target/bin-0.19.1/eza_arm-unknown-linux-gnueabihf.zip
84cc697f0e62be6976ce6b07be8ada24
./target/bin-0.19.1/eza.exe_x86_64-pc-windows-gnu.tar.gz
931047398365928014243dd342582ba8
./target/bin-0.19.1/eza.exe_x86_64-pc-windows-gnu.zip
dd0b503e2cfdbe987c3d0fed49db1dfd
./target/bin-0.19.1/eza_x86_64-unknown-linux-gnu.tar.gz
cf23637754986ff5b623896c2d96ed03
./target/bin-0.19.1/eza_x86_64-unknown-linux-gnu.zip
1e2f60c01f47d237107a5ec86ef858f9
./target/bin-0.19.1/eza_x86_64-unknown-linux-musl.tar.gz
c87b7fe92044f7f6c9fa6b4717ba2bf5
./target/bin-0.19.1/eza_x86_64-unknown-linux-musl.zip

#### blake3sum

9dda018bce3f7a968e91af7daedd346ba25906d2c79d12c6dd4e95bf0d077468
./target/bin-0.19.1/eza_aarch64-unknown-linux-gnu.tar.gz
60cae504108d1dc579015de420c8a5856e13e046d6ee805310e756416fa60f79
./target/bin-0.19.1/eza_aarch64-unknown-linux-gnu.zip
5fb17e8ef705ff2738c99cef0c6f777f484ee3a0812d430a54c9b666b4a6ca44
./target/bin-0.19.1/eza_arm-unknown-linux-gnueabihf.tar.gz
45ec2d14e03a1b5f1e21e50cc499859c37285011e13aa06db99f3c0f273c9f6a
./target/bin-0.19.1/eza_arm-unknown-linux-gnueabihf.zip
3cb4e94f3b436b3c7a9b281bbbff430f056bd7da6ba6423e2ee29614f09b6728
./target/bin-0.19.1/eza.exe_x86_64-pc-windows-gnu.tar.gz
3f8120fb4fa02ac441c7542f1928350e294ec82c3f8ad793583d1ff2a701ed92
./target/bin-0.19.1/eza.exe_x86_64-pc-windows-gnu.zip
86afd29d8d563c210feed810500b65c49424cebb5007ab96280dc26fdd84871b
./target/bin-0.19.1/eza_x86_64-unknown-linux-gnu.tar.gz
dd6ae9afc46fd7f2a76dd674e23f9bdd590f684a718bc93b8368fb1f2a7607aa
./target/bin-0.19.1/eza_x86_64-unknown-linux-gnu.zip
18b10dbe2f12a60f2ba7ea6657ae0dd429b90200b91d6b8440dbbadc29c3f52f
./target/bin-0.19.1/eza_x86_64-unknown-linux-musl.tar.gz
d7f35c22b1bf8b4830f3beef8f2976fcd677797f45f6f017e8aeb9490f6fdced
./target/bin-0.19.1/eza_x86_64-unknown-linux-musl.zip

</details>

<details>
<summary>fujiwara/awslim (fujiwara/awslim)</summary>

###
[`v0.3.4`](https://togithub.com/fujiwara/awslim/blob/HEAD/CHANGELOG.md#v034---2024-08-29)

[Compare
Source](https://togithub.com/fujiwara/awslim/compare/v0.3.3...v0.3.4)

- Update all-services.yaml by
[@&#8203;github-actions](https://togithub.com/github-actions) in
[https://github.com/fujiwara/awslim/pull/47](https://togithub.com/fujiwara/awslim/pull/47)

</details>

<details>
<summary>junegunn/fzf (junegunn/fzf)</summary>

### [`v0.55.0`](https://togithub.com/junegunn/fzf/releases/tag/v0.55.0):
0.55.0

[Compare
Source](https://togithub.com/junegunn/fzf/compare/v0.54.3...v0.55.0)

*Release highlights: https://junegunn.github.io/fzf/releases/0.55.0/*

- Added `exact-boundary-match` type to the search syntax. When a search
term is single-quoted, fzf will search for the exact occurrences of the
string with both ends at word boundaries.
    ```sh
    fzf --query "'here'" << EOF
    come here
    not there
    EOF
    ```
-   \[bash] Fuzzy path completion is enabled for all commands
    -   1.  If the default completion is not already set
    -   2.  And if the current bash supports `complete -D` option
- However, fuzzy completion for some commands can be "dynamically"
disabled by the dynamic completion loader
- See the comment in `__fzf_default_completion` function for more
information
- Comments are now allowed in `$FZF_DEFAULT_OPTS` and
`$FZF_DEFAULT_OPTS_FILE`
    ```sh
    export FZF_DEFAULT_OPTS='
    ```

### Layout options

    --layout=reverse
--info=inline-right # Show info on the right side of the prompt line

### ...

'

- Hyperlinks (OSC 8) are now supported in the preview window and in the
main window
    ```sh
printf '<< \e]8;;http://github.com/junegunn/fzf\e\\Link to
\e[32mfz\e[0mf\e]8;;\e\\ >>' | fzf --ansi

fzf --preview "printf '<< \e]8;;http://github.com/junegunn/fzf\e\\Link
to \e[32mfz\e[0mf\e]8;;\e\\ >>'"

-   The default `--ellipsis` is now `··` instead of `..`.
- \[vim] A spec can have `exit` callback that is called with the exit
status of fzf
- This can be used to clean up temporary resources or restore the
original state when fzf is closed without a selection
-   Fixed `--tmux bottom` when the status line is not at the bottom
-   Fixed extra scroll offset in multi-line mode (`--read0` or `--wrap`)
-   Added fallback `ps` command for `kill` completion on Cygwin

</details>

<details>
<summary>nektos/act (nektos/act)</summary>

### [`v0.2.66`](https://togithub.com/nektos/act/releases/tag/v0.2.66)

[Compare
Source](https://togithub.com/nektos/act/compare/v0.2.65...v0.2.66)

#### Changelog

##### New Features

- [`102e6cb`](https://togithub.com/nektos/act/commit/102e6cb) feat:
Validate GitHub Actions schema
([#&#8203;2416](https://togithub.com/nektos/act/issues/2416))

##### Other

- [`38e43bd`](https://togithub.com/nektos/act/commit/38e43bd) chore:
bump VERSION to 0.2.66
- [`c9ae534`](https://togithub.com/nektos/act/commit/c9ae534)
build(deps): bump golang.org/x/term from 0.22.0 to 0.23.0
([#&#8203;2421](https://togithub.com/nektos/act/issues/2421))
- [`ca292cd`](https://togithub.com/nektos/act/commit/ca292cd)
build(deps): bump megalinter/megalinter from 7.13.0 to 8.0.0
([#&#8203;2436](https://togithub.com/nektos/act/issues/2436))
- [`f79a13e`](https://togithub.com/nektos/act/commit/f79a13e)
build(deps): bump dario.cat/mergo from 1.0.0 to 1.0.1
([#&#8203;2430](https://togithub.com/nektos/act/issues/2430))
- [`60a2fed`](https://togithub.com/nektos/act/commit/60a2fed) fix GOOS
parsing to match expected GHA RUNNER_OS values
([#&#8203;2422](https://togithub.com/nektos/act/issues/2422))

</details>

<details>
<summary>snyk/cli (snyk/cli)</summary>

### [`v1.1293.0`](https://togithub.com/snyk/cli/releases/tag/v1.1293.0)

[Compare
Source](https://togithub.com/snyk/cli/compare/v1.1292.4...v1.1293.0)

The Snyk CLI is being deployed to different deployment channels, users
can select the stability level according to their needs. For details
please see [this
documentation](https://docs.snyk.io/snyk-cli/releases-and-channels-for-the-snyk-cli)

##### News

- Starting with this version, Snyk cli binaries will be distributed via
`downloads.snyk.io` instead of `static.snyk.io`. This includes
intallation from `npm`, `homebrew` and `scoop` as well as many of the
CI/CD integrations.

##### Features

- **sbom:** add support for license issues in sbom test
([6948668](https://togithub.com/snyk/snyk/commit/6948668d57523c2e7fd76ff363cf2d1625b6f0f3))
- **auth:** Use OAuth2 as default authentication mechanism
([35949c4](https://togithub.com/snyk/snyk/commit/35949c4acdd3bcbd510a6ac076523f21366b91c2))
- **config:** Introduce config environment command
([0d8dd2b](https://togithub.com/snyk/snyk/commit/0d8dd2b04278e38fe5fd335ec3023f753c944988))
- **container:** When docker is not installed, platform parameter is now
supported
([64b405d](https://togithub.com/snyk/snyk/commit/64b405d02733fb2423798f4cfbff19fa04110c2d))

##### Bug Fixes

- **auth:** align auth failure error messages for oauth
([e3bfec3](https://togithub.com/snyk/snyk/commit/e3bfec354e56499a2266a45804d0a93d17f46bce))
- **auth:** ensure environment variable precedence for auth tokens
([24417d6](https://togithub.com/snyk/snyk/commit/24417d6e7c7661c1a288a1f01502af17fdb54e64))
- **test:** fix a bug related to multi-project .NET folder structures
([755a38f](https://togithub.com/snyk/snyk/commit/755a38fc6b5c7b4f7631fced9e8f0fd8ed391819))
- **test:** multiple pnpm workspace improvements
([da5c14f](https://togithub.com/snyk/snyk/commit/da5c14fc344f17c7ac8c0969f2e0cb24ba59b6cd))
- **test:** fixes a bug regarding Snyk attempting to get the
dependencies from the wrong nuget \*.deps.json
file.([2e17434](https://togithub.com/snyk/snyk/commit/2e17434de99d342ea7dcedf5ba5bd250aae85eb3))
- **test:** support for pipenv with python 3.12
([09df3bc](https://togithub.com/snyk/snyk/commit/09df3bc7dbcb184a56021ead7703732fa66ea273))
- **test:** support multi-part comparison for python pip versions.
([b625eb9](https://togithub.com/snyk/snyk/commit/b625eb90410d69047ef87b65cc0289f9360251fe))
- **container:** container monitor with --json now outputs valid
json([039c9bd](https://togithub.com/snyk/snyk/commit/039c9bd13efa9397a8e442e80206bfabcc529125))
- **container:** support hashing large .jar files
([6f82231](https://togithub.com/snyk/snyk/commit/6f822317209e8b60bb07bf073bdcb9c78f402eb8))
- **sbom:** fix issues in JSON output of `sbom test` command, include
CWE values on `CWE` property
([#&#8203;5331](https://togithub.com/snyk/snyk/issues/5331))
([99773c3](https://togithub.com/snyk/snyk/commit/99773c3eac6c41c61c9da7fc0f1b991e5298dc37))
- **sbom:** include all detected dep-graphs of a container image
([ea43977](https://togithub.com/snyk/snyk/commit/ea439770e88093d1a99d88957f48ea63ea82b09a))
- **iac:** fixed an issue where the resource path was missing for
certain Terraform resources.
[IAC-3015](\[0b5823a]\(https://github.com/snyk/snyk/commit/0b5823ae2673bfbec7a055c881e8055eeb8c01ee\))
- **general:** map previously unhandled exit codes to exit code 2
([9fde4fe](https://togithub.com/snyk/snyk/commit/9fde4fec680f2ae0650baf6b1cfed5908984e9ef))
- **general:** use entitlements when signing bundled macos binaries
([bebc59c](https://togithub.com/snyk/snyk/commit/bebc59cbfbd20aef2e8531845579f2d78c5b07ca))

</details>

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

### [`v0.3.2`](https://togithub.com/sxyazi/yazi/releases/tag/v0.3.2)

[Compare
Source](https://togithub.com/sxyazi/yazi/compare/v0.3.1...v0.3.2)

This version introduces two eagerly awaited new features: a brand-new
`confirm` component, and word wrapping.

#### Brand-new `confirm` component


[https://github.com/sxyazi/yazi/pull/1167](https://togithub.com/sxyazi/yazi/pull/1167)
(thanks to [@&#8203;thelamb](https://togithub.com/thelamb)) introduces a
brand-new `confirm` component that handles various confirmations (like
trashing files, deleting files, overwriting files, and exit
confirmations). The goal is to provide a safer and more efficient user
experience:

- **Safer**: Now, when you trash, delete, or overwrite files, it'll show
a list of affected files for a second confirmation, instead of just the
number of files like before.
- **More efficient**: Confirmation now only requires pressing `Enter`
once, instead of typing `"y"` and then pressing `Enter`. This should be
a nice quality-of-life improvement.


https://github.com/user-attachments/assets/51c5c533-06ab-4661-b9f9-fcdbe8b0324c

#### Word wrapping


[https://github.com/sxyazi/yazi/pull/1159](https://togithub.com/sxyazi/yazi/pull/1159)
(thanks to [@&#8203;mskvsk](https://togithub.com/mskvsk) and
[@&#8203;ArtyomArtamonov](https://togithub.com/ArtyomArtamonov)) adds a
new `wrap` option under `[preview]`, which can be set to `"no"` or
`"yes"`. When set to `"yes"`, word wrapping is enabled:

```toml

### ~/.config/yazi/yazi.toml
[preview]
wrap = "yes"
```

#### Image preview performance optimization

I've been working on optimizing Yazi's image preview speed, and with
multi-threading, preloading, and a built-in image decoder, it should
already be the fastest among all terminal file managers.

However, I noticed some lag during fast scrolling and realized that at
this point, the performance bottleneck isn't Yazi itself, but rather the
terminal. When users scroll quickly, Yazi processes the images at a very
high speed and sends them to the terminal, but the terminal can't keep
up with processing them in time, which gives the impression of lag. In
reality, it's not Yazi that's lagging, but the terminal.


[https://github.com/sxyazi/yazi/pull/1512](https://togithub.com/sxyazi/yazi/pull/1512)
introduces a new `image_delay` configuration option to address this
issue. When previewing images, it will wait at least `image_delay`
milliseconds before starting to send the decoded image data to the
terminal.

This gives the terminal a breather and creates the perception that the
file list is still scrolling smoothly. Additionally, this can reduce the
CPU overhead caused by immediate image decoding during fast scrolling,
thereby extending battery life.

##### Before:


https://github.com/user-attachments/assets/549fc6bb-3dbb-4f4f-ae61-1dd0fa9a88e8

##### Now:


https://github.com/user-attachments/assets/17d5010c-eae2-4230-bc00-71945f22370b

#### New `--dir` option for the `create` command

The `create` command is designed to support creating both files and
directories (with `/` or `\` at the end to indicate a directory).

However, this isn't user-friendly for those who need to create many
directories but few files, as they always have to type `/` or `\`.


[https://github.com/sxyazi/yazi/pull/1505](https://togithub.com/sxyazi/yazi/pull/1505)
(thanks to [@&#8203;abstrakct](https://togithub.com/abstrakct))
introduces a new `--dir` option that explicitly specifies creating
directories without needing to type `/` or `\` every time.

#### What's Changed

- fix: overlong single-line text containing escape sequences was not
being properly escaped by [@&#8203;sxyazi](https://togithub.com/sxyazi)
in
[https://github.com/sxyazi/yazi/pull/1497](https://togithub.com/sxyazi/yazi/pull/1497)
- fix: upgrade `ansi-to-tui` to `5.0.0-rc.1` to resolve `ratatui`
version conflict by [@&#8203;sxyazi](https://togithub.com/sxyazi) in
[https://github.com/sxyazi/yazi/pull/1499](https://togithub.com/sxyazi/yazi/pull/1499)
- feat: add `--dir` option to `create` command by
[@&#8203;abstrakct](https://togithub.com/abstrakct) in
[https://github.com/sxyazi/yazi/pull/1505](https://togithub.com/sxyazi/yazi/pull/1505)
- feat: add `ext()` method to `Url` userdata by
[@&#8203;sxyazi](https://togithub.com/sxyazi) in
[https://github.com/sxyazi/yazi/pull/1528](https://togithub.com/sxyazi/yazi/pull/1528)
- feat: new `confirm` component by
[@&#8203;thelamb](https://togithub.com/thelamb) in
[https://github.com/sxyazi/yazi/pull/1167](https://togithub.com/sxyazi/yazi/pull/1167)
- chore: set `MACOSX_DEPLOYMENT_TARGE` to 10.11 to make the binary
compatible with old macOS by
[@&#8203;hronro](https://togithub.com/hronro) in
[https://github.com/sxyazi/yazi/pull/1532](https://togithub.com/sxyazi/yazi/pull/1532)
- fix: use a different cache directory for each user to avoid permission
issues by [@&#8203;sxyazi](https://togithub.com/sxyazi) in
[https://github.com/sxyazi/yazi/pull/1541](https://togithub.com/sxyazi/yazi/pull/1541)
- fix: wait till mimetype is resolved to avoid flickering by
[@&#8203;sxyazi](https://togithub.com/sxyazi) in
[https://github.com/sxyazi/yazi/pull/1542](https://togithub.com/sxyazi/yazi/pull/1542)
- docs: add links to all terminal emulators by
[@&#8203;nyurik](https://togithub.com/nyurik) in
[https://github.com/sxyazi/yazi/pull/1538](https://togithub.com/sxyazi/yazi/pull/1538)
- feat: make the builtin `code` previewer handle invalid carriage return
chars and binary streams better by
[@&#8203;sxyazi](https://togithub.com/sxyazi) in
[https://github.com/sxyazi/yazi/pull/1550](https://togithub.com/sxyazi/yazi/pull/1550)
- perf: only scan the first 1024 bytes to detect if it's binary, apply
`\r` fixes only to content within the visible range, avoid unnecessary
allocations during natural sorting by
[@&#8203;sxyazi](https://togithub.com/sxyazi) in
[https://github.com/sxyazi/yazi/pull/1551](https://togithub.com/sxyazi/yazi/pull/1551)
- feat: word wrapping in builtin code preview by
[@&#8203;ArtyomArtamonov](https://togithub.com/ArtyomArtamonov) in
[https://github.com/sxyazi/yazi/pull/1159](https://togithub.com/sxyazi/yazi/pull/1159)
- fix: filter out the `which` candidates that overlap with longer key
chords by [@&#8203;sxyazi](https://togithub.com/sxyazi) in
[https://github.com/sxyazi/yazi/pull/1562](https://togithub.com/sxyazi/yazi/pull/1562)
- fix: `DECSET` and `DECRQM` tmux passthrough by
[@&#8203;sxyazi](https://togithub.com/sxyazi) in
[https://github.com/sxyazi/yazi/pull/1564](https://togithub.com/sxyazi/yazi/pull/1564)

#### New Contributors

- [@&#8203;abstrakct](https://togithub.com/abstrakct) made their first
contribution in
[https://github.com/sxyazi/yazi/pull/1505](https://togithub.com/sxyazi/yazi/pull/1505)
- [@&#8203;hronro](https://togithub.com/hronro) made their first
contribution in
[https://github.com/sxyazi/yazi/pull/1532](https://togithub.com/sxyazi/yazi/pull/1532)
- [@&#8203;nyurik](https://togithub.com/nyurik) made their first
contribution in
[https://github.com/sxyazi/yazi/pull/1538](https://togithub.com/sxyazi/yazi/pull/1538)
- [@&#8203;ArtyomArtamonov](https://togithub.com/ArtyomArtamonov) made
their first contribution in
[https://github.com/sxyazi/yazi/pull/1159](https://togithub.com/sxyazi/yazi/pull/1159)

**Full Changelog**:
sxyazi/yazi@v0.3.1...v0.3.2

</details>

<details>
<summary>withgraphite/homebrew-tap (withgraphite/homebrew-tap)</summary>

###
[`v1.4.4`](https://togithub.com/withgraphite/homebrew-tap/compare/v1.4.3...v1.4.4)

[Compare
Source](https://togithub.com/withgraphite/homebrew-tap/compare/v1.4.3...v1.4.4)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 4pm on thursday" in timezone
America/Los_Angeles, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/scottames/dots).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC41Ni4wIiwidXBkYXRlZEluVmVyIjoiMzguNTYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: scottames-github-bot[bot] <162828115+scottames-github-bot[bot]@users.noreply.github.com>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Sep 28, 2024
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.

4 participants