clip command (macOS)

前回ので思いついた。
コマンド出力をクリップボードに直接入れるコマンドがあったらいいな。
パイプで渡せば即コピー、変数を引数にするとそれをコピー。
JXA で簡単に作れそう。

#!/usr/bin/osascript -l JavaScript

ObjC.import("Cocoa");
ObjC.import("unistd");

function run(argv) {
    let clipboard = $.NSPasteboard.generalPasteboard;
    clipboard.clearContents;
    if ($.isatty(0)) {
        let s = argv.join('\n');
        clipboard.setStringForType($(s), $.NSPasteboardTypeString);
    } else {
        let fhi = $.NSFileHandle.fileHandleWithStandardInput;
        let data = fhi.availableData;
        let res = $.NSString.alloc.initWithDataEncoding(data, $.NSUTF8StringEncoding).js.trim();
        clipboard.setStringForType(res, $.NSPasteboardTypeString);
    }
}

clip.js

# macOS 使いなら知っているだろうけど一応
cp clip.js clip
chmod +x clip
mv ($PATH の中のどこか)

# 使い方
ls -l | clip
clip $SHELL

こんな感じ。

Terminal.app からコピーする手間が省ける。
需要があるかどうかは微妙。