我随手写了一个划线翻译工具!

一. 安装必要的命令

1.xclip


  1. $ sudo apt install xclip 

xclip 命令建立了终端和剪切板之间通道,可以用命令的方式将终端输出或文件的内容保存到剪切板中,也可以将剪切板的内容输出到终端或文件。详细的用法可以使用 man xclip,见其手册。这里介绍几个常用的用法。


  1. $ xclip file_name # 文件内容保存到X window剪切板 
  2. $ xclip -selection c file_name #文件内容保存到外部剪切板 
  3. $ xclip -o # X window剪切板内容输出到终端显示 
  4. $ xclip -selection c -o # 外部剪切板内容输出到终端显示 

值得强调的是,这里所说的 X window 剪切板,简单的说就是你用鼠标选择的文本会实时的存放在这个剪切板,使用鼠标中键可以粘贴。而外部剪切板是保存你用 ctrl+c 复制的文本,ctrl+v 可以粘贴。这两个地方是不一样的。

2.translate-shell


  1. $ sudo apt install translate-shell 

这是命令行版的谷歌翻译工具,之前叫做 Google Translate CLI 是一款借助谷歌翻译(默认)、必应翻译等来翻译的命令行翻译器。它让你可以在终端访问这些翻译引擎。translate-shell 在大多数 Linux 发行版中都能使用。常用的方法如下:


  1. $ trans en:zh [word] # 英文到中文的单词翻译 
  2. $ trans en:zh -b [text] # 简要的输出,进行文本翻译 

需要注意的是,使用这个翻译工具需要你能够访问外网,或者通过修改 translate-shell 的默认翻译引擎,具体的方法这里就不阐述了。

二. 编程实现

这个工具整体的思路就是 C 程序实时检测鼠标按键的动态,当检测到用户使用鼠标选择一段文本之后,调用 shell 脚本获取 X window 剪切板的内容进行翻译后输出到终端显示。

1. 定位鼠标设备文件

鼠标作为输入设备。其信息可以在文件 /proc/bus/input/devices 中,使用下列命令查看:


  1. $ sudo cat /proc/bus/input/devices 
  2. I: Bus=0011 Vendor=0002 Product=0013 Version=0006 
  3. N: Name="VirtualPS/2 VMware VMMouse" 
  4. P: Phys=isa0060/serio1/input1 
  5. S: Sysfs=/devices/platform/i8042/serio1/input/input4 
  6. U: Uniq= 
  7. H: Handlers=mouse0 event2  
  8. B: PROP=0 
  9. B: EV=b 
  10. B: KEY=70000 0 0 0 0 
  11. B: ABS=3 

其中的 Handlers 的值 event2 表示可以在 /dev/input/event2 文件下读取鼠标的状态。需要注意的是,对于不同的设备,读取鼠标的状态的文件可能不一样,比如也可能是 /dev/input/event3 。我们可以使用下面的命令找到你的鼠标对应的是哪一个 event。


  1. $ sudo cat /dev/input/event2 | hexdump # 测试时改变数字即可 

比如,当我运行上面这条命令之后,我移动鼠标、按鼠标左键/中键/右键,终端都会输出一些值,这就说明 event2 文件就是对应着我的鼠标。如果操作鼠标没有反应,说明这个就不是。你可以通过这种方法找到你的鼠标对应的 event 文件。

2. Linux 下获取按键响应

在 Linux 内核中,input 设备用 input_dev 结构体描述,使用 input 子系统实现输入设备驱动的时候,驱动的核心工作就是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过 input_event 结构体描述),不再需要关心文件操作接口,因为 input 子系统已经完成了文件操作接口 Linux/input.h 这个文件定义了 event 事件的结构体,API 和标准按键的编码等。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章