32

使用OSC52实现iTerm2远程pbcopy

 3 years ago
source link: https://www.laruence.com/2020/05/21/5880.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最高效的码字方式,一定有一个特点,那就是手指离开键盘的次数尽可能的少。 并且手指码字的时候的在键盘的跨度尽可能的短, 这也是我认识不少老牌程序员用Vim也不用ESC, 而是使用ctrl+[, 甚至还有这:

vuUfIfA.png!web

从而避免手指在键盘上的跨越幅度太大。

我一直用MacBook做工作用机,也一直用iTerm2来登陆远程服务器开发,因为PHP是一个比较巨大的工程,编译速度很慢,自己的笔记本再高配,也是做不到make -j不卡死的。

言归正传, 在mac上有一个很有用的命令pbcopy, 它能让我们避免去使用鼠标选择文本,复制到剪贴板。从而让我们的双手可以一直在键盘上,但很可惜的是,pbcopy只能在本机使用,而我大量的时间都是使用远程机。

最近发现了一个很有趣的OSC 52,也就是 ANSI escape code 中的 ESC ] (Operating System Command), 中的52, 它提供了访问访问本地剪贴板的能力。

它的形式为:

echo -e "\e]52;c;$(base64 <<< php)\a"

也就是,以\e]52;c;开头,然后是base64 encode后的内容,以\a结尾, 如果terminal支持,那么上面例子中的文字“php”就会进入到你的剪贴板了,你就可以使用command + V粘贴了。

对于我常用的iTerm2来说, 只要打开这个选项即可:

raiyeiN.png!web

有了这个,那么我们就可以很容写出一个支持远程服务器的pbcopy了, 以PHP为例:

#!/bin/env php
<?php
$data = trim(file_get_contents("php://stdin"));
echo "\033]52;;", base64_encode($data), "\007";

然后给这个文件增加执行权限, 重命名成pbcopy,试试:

echo "osc52 codes" | ./pbcopy

然后command+v粘贴下试试?

这下就香很多了,避免了需要用鼠标来选择复制一些text。 让手可以一直在键盘上,极大提升生产力!

然而,我现在开始用iPad办公了, 目前为止还没有发现iPad下的terminal App有支持OSC 52的。 大家要是发现哪个App支持,一定留言告诉我哈。 :)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK