feat(clipboard): add win32yank fallback for WSL2
y, p, paste, and hist now try win32yank.exe after wl-copy/wl-paste and xclip, so clipboard access works under WSL2 once win32yank is installed and reachable through WSL interop. Updates the OS compatibility docs accordingly.
This commit is contained in:
@@ -13,7 +13,7 @@ These features couple the shell to specific external tools. Disabling
|
|||||||
spwin Kitty or WezTerm
|
spwin Kitty or WezTerm
|
||||||
tab Kitty, WezTerm, or Konsole
|
tab Kitty, WezTerm, or Konsole
|
||||||
split Kitty or WezTerm
|
split Kitty or WezTerm
|
||||||
hist fzf + wl-copy (Wayland clipboard)
|
hist fzf + wl-copy or win32yank.exe (WSL2)
|
||||||
logs fzf + ov; reads from ~/.terminal_history/
|
logs fzf + ov; reads from ~/.terminal_history/
|
||||||
upgrade paru or yay (Arch Linux only)
|
upgrade paru or yay (Arch Linux only)
|
||||||
WakaTime hook wakatime CLI and a configured API key
|
WakaTime hook wakatime CLI and a configured API key
|
||||||
|
|||||||
@@ -35,11 +35,14 @@ no fallback:
|
|||||||
- `systemd-inhibit` (`wake-lock`)
|
- `systemd-inhibit` (`wake-lock`)
|
||||||
- `zramctl` / `swapon` (`swapstat`)
|
- `zramctl` / `swapon` (`swapstat`)
|
||||||
- `sbctl` and UEFI Secure Boot state (`sbver`)
|
- `sbctl` and UEFI Secure Boot state (`sbver`)
|
||||||
- `wl-copy` / `xclip` for clipboard access (`y`, `p`, `paste`, `hist`) —
|
|
||||||
Wayland or X11 only, no `pbcopy`/`pbpaste` fallback
|
|
||||||
- GNU coreutils flags such as `stat -c` and `numfmt` (`sudo-toggle`,
|
- GNU coreutils flags such as `stat -c` and `numfmt` (`sudo-toggle`,
|
||||||
`dng2avif`), which differ or don't exist under a BSD userland
|
`dng2avif`), which differ or don't exist under a BSD userland
|
||||||
|
|
||||||
|
Clipboard access (`y`, `p`, `paste`, `hist`) is the exception: it falls back
|
||||||
|
through `wl-copy`/`wl-paste` (Wayland), `xclip` (X11), and `win32yank.exe`
|
||||||
|
(WSL2), so it works on all three. There is still no `pbcopy`/`pbpaste`
|
||||||
|
fallback for macOS.
|
||||||
|
|
||||||
**macOS** is not supported. `_fish_deps_detect_pm` does check for `brew`, but
|
**macOS** is not supported. `_fish_deps_detect_pm` does check for `brew`, but
|
||||||
that alone does not make the functions above work — they have no macOS
|
that alone does not make the functions above work — they have no macOS
|
||||||
equivalent path today.
|
equivalent path today.
|
||||||
@@ -47,10 +50,10 @@ equivalent path today.
|
|||||||
**Windows** is not supported. Fish itself has no native Windows build;
|
**Windows** is not supported. Fish itself has no native Windows build;
|
||||||
upstream's own "Windows" install docs are Cygwin/WSL workarounds, not a real
|
upstream's own "Windows" install docs are Cygwin/WSL workarounds, not a real
|
||||||
port. This config is not tested under WSL either. WSL2 runs a real Linux
|
port. This config is not tested under WSL either. WSL2 runs a real Linux
|
||||||
kernel and can run `systemd`, so basic shell use may work, but `zramctl`,
|
kernel and can run `systemd`, so basic shell use may work; `zramctl`,
|
||||||
`sbctl`, and Secure Boot state are meaningless inside a VM, and clipboard
|
`sbctl`, and Secure Boot state are still meaningless inside a VM, but
|
||||||
integration would need a WSL-specific path (`clip.exe`, `win32yank`) that
|
clipboard integration works via `win32yank.exe` (see above) once it's
|
||||||
does not exist here.
|
installed on the Windows side and reachable through WSL interop.
|
||||||
|
|
||||||
**Assumed present on any Linux system this runs on:** `git`, `gpg`, `tar`,
|
**Assumed present on any Linux system this runs on:** `git`, `gpg`, `tar`,
|
||||||
and GNU coreutils (for `stat`, `date`, `numfmt`). These are not tracked by
|
and GNU coreutils (for `stat`, `date`, `numfmt`). These are not tracked by
|
||||||
|
|||||||
+7
-2
@@ -12,7 +12,8 @@
|
|||||||
#
|
#
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
# Searches fish history interactively using fzf, inserts the selected command
|
# Searches fish history interactively using fzf, inserts the selected command
|
||||||
# into the command line, and copies it to the clipboard via wl-copy.
|
# into the command line, and copies it to the clipboard via wl-copy (falls
|
||||||
|
# back to win32yank on WSL2).
|
||||||
#
|
#
|
||||||
# EXIT STATUS
|
# EXIT STATUS
|
||||||
# 0 Command selected and inserted, or fzf was cancelled
|
# 0 Command selected and inserted, or fzf was cancelled
|
||||||
@@ -36,7 +37,11 @@ function hist --description 'Search fish history and put it in the prompt'
|
|||||||
# Strip the timestamp for the final output
|
# Strip the timestamp for the final output
|
||||||
set -l command (echo $selected | string replace -r '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} ' '')
|
set -l command (echo $selected | string replace -r '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} ' '')
|
||||||
|
|
||||||
echo $command | wl-copy 2>/dev/null
|
if type -q wl-copy
|
||||||
|
echo $command | wl-copy 2>/dev/null
|
||||||
|
else if type -q win32yank.exe
|
||||||
|
echo $command | win32yank.exe -i --crlf 2>/dev/null
|
||||||
|
end
|
||||||
commandline -r $command
|
commandline -r $command
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+5
-3
@@ -8,8 +8,8 @@
|
|||||||
# p [args...]
|
# p [args...]
|
||||||
#
|
#
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
# Outputs clipboard contents to stdout. Uses wl-paste on Wayland,
|
# Outputs clipboard contents to stdout. Uses wl-paste on Wayland, xclip on
|
||||||
# falls back to xclip on X11. Supports -h/--help for usage info.
|
# X11, or win32yank on WSL2. Supports -h/--help for usage info.
|
||||||
#
|
#
|
||||||
# ARGUMENTS
|
# ARGUMENTS
|
||||||
# -h, --help Show usage help
|
# -h, --help Show usage help
|
||||||
@@ -47,8 +47,10 @@ function p --description 'Put from clipboard'
|
|||||||
set paste_cmd wl-paste
|
set paste_cmd wl-paste
|
||||||
else if type -q xclip
|
else if type -q xclip
|
||||||
set paste_cmd xclip -selection clipboard -o
|
set paste_cmd xclip -selection clipboard -o
|
||||||
|
else if type -q win32yank.exe
|
||||||
|
set paste_cmd win32yank.exe -o --lf
|
||||||
else
|
else
|
||||||
echo "Error: No clipboard provider (wl-paste or xclip) found." >&2
|
echo "Error: No clipboard provider (wl-paste, xclip, or win32yank) found." >&2
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
# paste [args...]
|
# paste [args...]
|
||||||
#
|
#
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
# Outputs clipboard contents to stdout. Uses wl-paste on Wayland,
|
# Outputs clipboard contents to stdout. Uses wl-paste on Wayland, xclip on
|
||||||
# falls back to xclip on X11.
|
# X11, or win32yank on WSL2.
|
||||||
#
|
#
|
||||||
# ARGUMENTS
|
# ARGUMENTS
|
||||||
# args... Arguments forwarded to the clipboard tool
|
# args... Arguments forwarded to the clipboard tool
|
||||||
@@ -28,8 +28,10 @@ function paste --description 'Paste from clipboard'
|
|||||||
wl-paste $argv
|
wl-paste $argv
|
||||||
else if type -q xclip
|
else if type -q xclip
|
||||||
xclip -selection clipboard -o $argv
|
xclip -selection clipboard -o $argv
|
||||||
|
else if type -q win32yank.exe
|
||||||
|
win32yank.exe -o --lf $argv
|
||||||
else
|
else
|
||||||
echo "Error: Neither wl-paste nor xclip found." >&2
|
echo "Error: No clipboard provider (wl-paste, xclip, or win32yank) found." >&2
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+5
-3
@@ -8,8 +8,8 @@
|
|||||||
# y [text...]
|
# y [text...]
|
||||||
#
|
#
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
# Copies text to the system clipboard using wl-copy (Wayland) or xclip (X11).
|
# Copies text to the system clipboard using wl-copy (Wayland), xclip (X11),
|
||||||
# Reads from stdin when no arguments are given.
|
# or win32yank (WSL2). Reads from stdin when no arguments are given.
|
||||||
#
|
#
|
||||||
# ARGUMENTS
|
# ARGUMENTS
|
||||||
# text Text to copy; reads from stdin if omitted
|
# text Text to copy; reads from stdin if omitted
|
||||||
@@ -42,8 +42,10 @@ function y --description 'Yank to clipboard'
|
|||||||
set copy_cmd wl-copy
|
set copy_cmd wl-copy
|
||||||
else if type -q xclip
|
else if type -q xclip
|
||||||
set copy_cmd xclip -selection clipboard
|
set copy_cmd xclip -selection clipboard
|
||||||
|
else if type -q win32yank.exe
|
||||||
|
set copy_cmd win32yank.exe -i --crlf
|
||||||
else
|
else
|
||||||
echo "Error: No clipboard provider (wl-copy or xclip) found." >&2
|
echo "Error: No clipboard provider (wl-copy, xclip, or win32yank) found." >&2
|
||||||
return 1
|
return 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user