https://github.com/maxkagamine/wsl-tools
Clipboard (xsel), recycle, and open commands for WSL written in Rust + options to make "Open with Code" open in WSL and add "Run" to .sh files.
https://github.com/maxkagamine/wsl-tools
cli clipboard command-line linux recycle-bin rust trash windows wsl
Last synced: 4 months ago
JSON representation
Clipboard (xsel), recycle, and open commands for WSL written in Rust + options to make "Open with Code" open in WSL and add "Run" to .sh files.
- Host: GitHub
- URL: https://github.com/maxkagamine/wsl-tools
- Owner: maxkagamine
- License: apache-2.0
- Created: 2025-03-15T14:11:32.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-12-30T12:52:03.000Z (7 months ago)
- Last Synced: 2026-01-02T08:53:32.085Z (7 months ago)
- Topics: cli, clipboard, command-line, linux, recycle-bin, rust, trash, windows, wsl
- Language: Rust
- Homepage:
- Size: 256 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE.txt
Awesome Lists containing this project
README
wsl-tools
English
│
インストール
│
xsel
│
recycle
│
open
WSL用のRust製クリップボード(xsel)とごみ箱(recycle)とオーペン(open)のコマンドです。遅くて時々壊れる(Unicodeに正しく対応しないなど)PowerShellベースのソリューションにうんざりしたため、自作しました。私の他の作品と同様に人間製のコードです。
特に、`recycle`は`rm`の代替として機能し、Freedesktop.orgのごみ箱(デスクトップLinuxディストリビューションの相当)をサポートします。詳細は[以下を参照](#recycle)してください。
それぞれのプログラムはLinuxバイナリもWindowsバイナリも含まれています。前者はパスの変換やパイプの確認を行った上で、WINAPIを呼び出すためにexeに処理を渡します。そのexeはWSL専用ではなく、バッチスクリプトなどで単独で使用することも可能です。
ボーナスとして、インストーラを使う場合、私は2つのオプションを追加しました:
1. エクスプローラーからVS Codeを起動する際(ファイルをダブルクリックするか、コンテキストメニューの「
Codeで開く」を選択する場合)、WSLで開くようにします。これは[小さなプログラム](src/bin/run-in-wsl.rs)を使用してパス変換を行い、WSL内の`code`シェルスクリプトと同じようにVS Codeを起動します。
2. .shファイルのコンテクストメニューに「実行」を追加します。同様に、wsl.exeを実行するために[ヘルパーのプログラム](src/bin/run-in-wsl.rs)を使って、環境がターミナルからスクリプトを実行した場合と同じであるようにし、同時に引用符の問題を回避し、shebangを正しく扱うようにします。(※ Windowsターミナルでは、設定 → 既定値 → 詳細設定 → プロファイルの終了動作を変更すると自動的に閉じないようにできます。)
## インストール
> [!IMPORTANT]
> Linuxファイルシステム上のexeは、Windows上のexeよりも実行速度が10倍遅くなる場合があります。特にWindows 11でこの問題が顕著だと感じました。面倒を減らすために、バイナリをProgram FilesにコピーしてPATHに追加するインストーラを作成しました。
### [インストーラをダウンロード](https://github.com/maxkagamine/wsl-tools/releases/latest/download/wsl-tools-installer.exe)(おすすめ)
または[ZIPをダウンロード](https://github.com/maxkagamine/wsl-tools/releases/latest/download/wsl-tools-portable.zip)、またはソースからコンパイル:
1. [Rustをインストールして](https://rustup.rs/)(Windowsではなく、WSLで)
2. [Inno Setup 6.6+をインストールして](https://jrsoftware.org/isdl.php)(任意)
3. クロスコンパイルのために準備して:
`cargo install --locked cargo-xwin && rustup target add x86_64-pc-windows-msvc`
4. `make`を実行して
## xsel
Linuxでコピーしたり貼り付けたりするために使われる一般的なxselプログラムのドロップイン置換品です。多くのプログラムやクリップボードのライブラリがxselを探すため、これをPATHに入れるとWSLを意識していないソフトでもWindowsのクリップボードにコピーできるようになります。
```
使い方: xsel [オプション]
デフォルトでは、標準入力と標準出力の両方がターミナル(tty)であれば、クリップボードの内容が出
力されます。それ以外の場合は、標準出力がターミナル(tty)ではないとクリップボードの内容が出力
されて、標準入力がターミナル(tty)ではないとクリップボードが標準入力から読み込まれます。入力
オプションか出力オプションを使うと、プログラムが要求されたモードでのみ動作します。
入力と出力が両方必要な場合は、標準入力の内容に置き換えられる前に、前のクリップボードの内容が出
力されます。
入力オプション
-a, --append 標準入力をクリップボードに追加する
-f, --follow <サポートされない>
-z, --zeroflush <サポートされない>
-i, --input 標準入力をクリップボードに読み込む
出力オプション
-o, --output クリップボードを標準出力に書き出す
--keep-crlf <Windowsのみの追加> デフォルトでは、貼り付け時にCRLFがLFに
置き換える。このオプションを指定すると無効にできる。
操作オプション
-c, --clear クリップボードをクリアする
-d, --delete <サポートされない>
セレクションオプション
-p, --primary PRIMARYとSECONDARYセレクションはWindowsに相当がないけど、
-s, --secondary いくつかのLinuxクリップボードマネージャーがセレクションと
-b, --clipboard クリップボードのバッファを同期させるから、このxselはそうだと
ふりして、選んだセレクションを無視する
-k, --keep <何もせずに終了>
-x, --exchange <何もせずに終了>
Xオプション
--display <サポートされない>
-m, --name <サポートされない>
-t, --selectionTimeout <サポートされない>
その他のオプション
--trim 入力・出力の終わりから改行を消す
-l, --logfile <サポートされない>
-n, --nodetach <無視される>
-h, --help このヘルプを表示して終了
-v, --verbose <無視される>
--version バーション情報を表示して終了
```
## recycle
ファイルとディレクトリをインタラクティブに(エクスプローラから削除したかのように)ごみ箱に移動するか、または`rm`コマンドの代替として処理する(ごみ箱への移動を試行し、失敗した場合は完全に削除する)。Windowsのごみ箱が英語で「Recycle Bin」と呼ばれているため、この名前を付けました。詳しくは[ソースで注釈](src/recycle_bin.rs)を参照してください。[ベンチマークはここにあります。](https://github.com/maxkagamine/wsl-tools/releases/tag/v1.4.0)
WSLファイルシステム上のファイルをごみ箱に移動しようとする場合(`--rm`を含む)、インストーラーで永久に削除するか、あるいは[Freedesktop.orgのごみ箱](https://specifications.freedesktop.org/trash/1.0/)(デスクトップLinuxディストリビューションの相当)を使用するかを選択できます。必須ではありませんが、後者を選ぶと、[**trash-cli**](https://github.com/andreafrancia/trash-cli)をインストールすることをおすすめします。これを使用して、ごみ箱から古いファイルを削除するcronジョブを設定できます(そのreadmeに示されているように)。
> [!TIP]
> ごみ箱のある場所でのファイルを誤って削除しないように、.bashrcなどで`rm`を`recycle`にエイリアスできます:
> ```bash
> alias rm='recycle --rm'
> ```
> シェルスクリプトはエイリアスを認識しないので、必要に応じて`recycle --rm`を使用するように修正する必要があります。例えば:
> ```bash
> if command -v recycle &>/dev/null; then
> rm() { recycle --rm "$@"; }
> fi
> ```
> なお、[`rm`](https://linux.die.net/man/1/rm)の`-i`/`-I`と`-d`オプションは現在ここで実装されていません。
> [!NOTE]
> WSLファイルシステム上のファイルをごみ箱に移動しようとする時に「Element not found.」というエラーが出る場合は、`wsl.exe --update`を実行、および/または再起動してみてください。これはWSLの古いバージョンのバグです。([microsoft/WSL#12444](https://github.com/microsoft/WSL/issues/12444), [microsoft/WSL#11252](https://github.com/microsoft/WSL/issues/11252))
```
使い方: recycle [オプション] <パス>...
指定したファイルとディレクトリをごみ箱に移動する。
デフォルトの動作(--rmなし)は、ユーザーがエクスプローラーでファイルを削除した場合と同じ
ように、シェルの普通の進捗や確認ダイアログを表示して、エクスプローラーの元に戻す履歴に追加
することです。これはWindows APIの制限による:ダイアログなしでごみ箱に移動することは
シェルが永久に削除してしまうリスクが伴うので不可能です。ゆえに、スクリプトではユーザーが
期待していない時にこのコマンドを--rmなしで使用してはならない。
引数:
<パス>...
カレントディレクトリからの相対、ごみ箱に移動するファイルやディレクトリ。
Linuxパスは自動的にWindowsパスに変換される。
オプション:
-f, --force
存在しないファイルを無視して
--rm
すべてのダイアログを非表示にして、シェルがごみ箱に移動できないものを永久に削除
させる。--recursiveを指定しないと、ディレクトリはエラーを引き起こす。
WSLファイルシステム上のファイルはLinux側で削除される(Linux側のごみ箱を使用
していない限り)。
警告:ごみ箱に移動できたはずのファイルが削除される可能性がある。
詳細はrecycle_bin.rsのコメントを参照してください。
-r, --recursive
--rmが使用される場合、ディレクトリのごみ箱への移動と削除を許可する。--rmなしで
効果がない(代わりにシェルがダイアログを表示する)。
-v, --verbose
削除進捗をターミナルで表示する
--use-linux-trash
WSLファイルシステム上のファイルをごみ箱に移動している時にFreedesktop.org
のごみ箱を使用する。
--no-use-linux-trash
WSLファイルシステム上のファイルを永久に削除する(--rmではない場合、ダイアログ
を表示)
-h, --help
ヘルプを表示する
-V, --version
バーション情報を表示する
```
## open
[ShellExecuteExW](https://learn.microsoft.com/ja-jp/windows/win32/api/shellapi/nf-shellapi-shellexecuteexw)の簡単なラッパーです。
> [!IMPORTANT]
> .bashrcとかに`export BROWSER='open'`に追加してください。
>
> UbuntuとDebianでは[alternativesシステム](https://manpages.debian.org/wheezy/dpkg/update-alternatives.8.ja.html)が/usr/bin/openやデフォルトのブラウザでリンクを開くために使われる2つのコマンドのシンボリックリンクを管理しているかもしれません。そのリンクが代わりにwsl-toolsに指すようにできます:
> ```bash
> for cmd in open www-browser x-www-browser; do
> sudo update-alternatives --install "/usr/bin/$cmd" "$cmd" '/mnt/c/Program Files/wsl-tools/open' 999
> done
> ```
> [!TIP]
> `open -e image.png`は、image.pngを右クリックして「編集」を選択するのと同じです。デフォルトではペイントで開くんですが、Winaero Tweakerを使うか、regeditでこのキーを変更することで、好みの画像編集ソフトに設定できます: `HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit\command`
```
使い方: open [オプション] <パス>...
指定されたファイルまたはURLをデフォルトのプログラムで開きます(ディレクトリは
エクスプローラーで開きます)。
--verbに関する詳細は、次を参照してください:
https://learn.microsoft.com/ja-jp/windows/win32/shell/launch#object-verbs
引数:
<パス>... 開くファイル、ディレクトリ、および/またはURL。Linuxパスは自動的に
Windowsパスに変換される。
オプション:
-e, --edit --verb editのエイリアス
--runas --verb runasのエイリアス
--verb 実行すべき動詞
-h, --help ヘルプを表示する
-V, --version バーション情報を表示する
```
## 法的事項
Copyright © 鏡音マックス
[Apache License 2.0](LICENSE.txt)の下でライセンスされています
## 違法事項
[海賊!](https://www.youtube.com/watch?v=NSZhIAfR6dA)