国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

我擼了一個劃線翻譯工具!

系統 Linux
這里將要介紹的是一種在 Linux 平臺實現的劃詞翻譯工具,當然在考慮自己實現一個如此功能的工具前,本人也是在網上搜索了一些在 Linux 平臺實現的類似的開源工具,例如 pdfTranslator,popup-dict,但它們的安裝和配置都顯得比較麻煩,而且使用起來也并不方便。

?[[350260]]?

這里將要介紹的是一種在 Linux 平臺實現的劃詞翻譯工具,當然在考慮自己實現一個如此功能的工具前,本人也是在網上搜索了一些在 Linux 平臺實現的類似的開源工具,例如 pdfTranslator,popup-dict,但它們的安裝和配置都顯得比較麻煩,而且使用起來也并不方便。

本人實現這個工具的初衷本是方便自己看一些英文文獻和書籍的,極為方便,考慮到分享出去可以讓更多人受惠,因此這里詳細介紹一下它的實現步驟。

本文所實現的劃詞翻譯工具主要有以下特性:

  • 支持英文單詞和短語到中文的翻譯
  • 劃詞翻譯,終端顯示
  • 自動過濾選中文本中的換行等特殊字符
  • 只依賴少數幾個 Linux 命令工具

下面有動圖進行演示。

??

本人所使用的環境是運行在 VMware 虛擬機下的 Linux 發行版 Ubuntu 18.04.3 LTS,因此這里介紹的步驟可能與其他 Linux 發行版中的實現略有不同。下面就來一步一步的實現它吧。

一. 安裝必要的命令

1.xclip

$ sudo apt install xclip

xclip 命令建立了終端和剪切板之間通道,可以用命令的方式將終端輸出或文件的內容保存到剪切板中,也可以將剪切板的內容輸出到終端或文件。詳細的用法可以使用 man xclip,見其手冊。這里介紹幾個常用的用法。

$ xclip file_name # 文件內容保存到X window剪切板
$ xclip -selection c file_name #文件內容保存到外部剪切板
$ xclip -o # X window剪切板內容輸出到終端顯示
$ xclip -selection c -o # 外部剪切板內容輸出到終端顯示

值得強調的是,這里所說的 X window 剪切板,簡單的說就是你用鼠標選擇的文本會實時的存放在這個剪切板,使用鼠標中鍵可以粘貼。而外部剪切板是保存你用 ctrl+c 復制的文本,ctrl+v 可以粘貼。這兩個地方是不一樣的。

2.translate-shell

$ sudo apt install translate-shell

這是命令行版的谷歌翻譯工具,之前叫做 Google Translate CLI 是一款借助谷歌翻譯(默認)、必應翻譯等來翻譯的命令行翻譯器。它讓你可以在終端訪問這些翻譯引擎。translate-shell 在大多數 Linux 發行版中都能使用。常用的方法如下:

$ trans en:zh [word] # 英文到中文的單詞翻譯
$ trans en:zh -b [text] # 簡要的輸出,進行文本翻譯

需要注意的是,使用這個翻譯工具需要你能夠訪問外網,或者通過修改 translate-shell 的默認翻譯引擎,具體的方法這里就不闡述了。

二. 編程實現

這個工具整體的思路就是 C 程序實時檢測鼠標按鍵的動態,當檢測到用戶使用鼠標選擇一段文本之后,調用 shell 腳本獲取 X window 剪切板的內容進行翻譯后輸出到終端顯示。

1. 定位鼠標設備文件

鼠標作為輸入設備。其信息可以在文件 /proc/bus/input/devices 中,使用下列命令查看:

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

其中的 Handlers 的值 event2 表示可以在 /dev/input/event2 文件下讀取鼠標的狀態。需要注意的是,對于不同的設備,讀取鼠標的狀態的文件可能不一樣,比如也可能是 /dev/input/event3 。我們可以使用下面的命令找到你的鼠標對應的是哪一個 event。

$ sudo cat /dev/input/event2 | hexdump # 測試時改變數字即可

比如,當我運行上面這條命令之后,我移動鼠標、按鼠標左鍵/中鍵/右鍵,終端都會輸出一些值,這就說明 event2 文件就是對應著我的鼠標。如果操作鼠標沒有反應,說明這個就不是。你可以通過這種方法找到你的鼠標對應的 event 文件。

2. Linux 下獲取按鍵響應

在 Linux 內核中,input 設備用 input_dev 結構體描述,使用 input 子系統實現輸入設備驅動的時候,驅動的核心工作就是向系統報告按鍵、觸摸屏、鍵盤、鼠標等輸入事件(event,通過 input_event 結構體描述),不再需要關心文件操作接口,因為 input 子系統已經完成了文件操作接口 Linux/input.h 這個文件定義了 event 事件的結構體,API 和標準按鍵的編碼等。

// 結構體定義見 input.h
struct input_event
{
struct timeval time; // 按鍵時間
__u16 type; // 事件類型
__u16 code; // 要模擬成什么按鍵
__s32 value; // 是按下還是釋放
};

// 下面宏定義見 input-event-coses.h
// type
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
// ...

// code
#define BTN_LEFT 0x110
#define BTN_RIGHT 0x111
#define BTN_MIDDLE 0x112
// ...

// value
#define MSC_SERIAL 0x00
#define MSC_PULSELED 0x01
// ...

這里稍微介紹一下 type,指事件類型,常見的事件類型有:EV_KEY,按鍵事件,如鍵盤的按鍵(按下哪個鍵),鼠標的左鍵右鍵(是否擊下)等;EV_REL,相對坐標,主要是指鼠標的移動事件(相對位移);EV_ABS, 絕對坐標,主要指觸摸屏的移動事件 。

3. 編寫 C 程序

下面就可以編寫程序來檢測鼠標的動態了。首先在你的用戶~目錄下建立文件夾 Translator。在 Translator 里建立一個 ct.c 源文件,代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/input.h>
#include <fcntl.h>

int main(void)
{
int keys_fd;
struct input_event t;

// 注意這里打開的文件根據你自己的設備情況作相應的改變
keys_fd = open("/dev/input/event2", O_RDONLY);
if (keys_fd <= 0)
{
printf("open /dev/input/event2 error!\n");
return -1;
}

while (1)
{
read(keys_fd, &t, sizeof(t));
if (t.type == EV_KEY) // 有鍵按下
if (t.code == BTN_LEFT) // 鼠標左鍵
if (t.value == MSC_SERIAL) // 松開
// 調用外部shell腳本
system("~/Translator/goTranslate.sh");
}
close(keys_fd);
return 0;
}

然后就是調用 gcc 編譯器生成可執行文件 ct :

$ gcc ct.c -o ct

4. 編寫 shell 腳本翻譯剪切板內容

在 Translator 里建立 goTranslate.sh 文件,內容如下:

#!/bin/bash

str_old=$(cat ~/Translator/lastContent)
str_new=$(xclip -o 2>/dev/null | xargs)
if [[ "$str_new" != "$str_old" && $str_new ]]; then
echo -e "\n"
count=$(echo "$str_new" | wc -w)
if [ "$count" == "1" ]; then
echo -n -e "$str_new " >>~/Translator/words
echo "$str_new" | trans :zh-CN | tail -1 | cut -c 5- | sed "s,\x1b\[[0-9;]*[a-zA-Z],,g" | tee -a ~/Translator/words
else
echo "$str_new" | trans :zh-CN -b
fi
echo "$str_new" >~/Translator/lastContent
fi

原理非常簡單,讀者自行了解。這里我們還要在 Translator 里建立一個 lastContent.txt 文件作為緩存,目的是本次調用腳本時能夠獲取上一次調用時翻譯的文本內容,如果和本次調用的翻譯文本一樣,則本次就不進行翻譯。

設置 ct 別名

這里已經可以通過下面的命令運行程序了:

$ sudo ~/Translator/ct

但是由于每次運行都要輸出這么長的命令,因此我們在 ~/.bashrc 文件中加入下面一條命令。

alias ct='sudo ~/Translator/ct'

這樣,以后每次看英文文獻時就可以在命令行下輸入:

$ ct

三. 結束語

這里有一些小技巧。可以更方便的使用這個工具。比如,把終端設為置頂并縮小到合適的尺寸,這樣在閱讀文獻劃詞翻譯時終端屏幕不會遮擋我們的視線。

值得說明的是,由于本人完全是為了方便自己的使用,而且在搞出這么個工具時僅僅接觸 Linux 系統才不到兩周,所以里面的實現對于有經驗的朋友來說略顯的有些笨拙了,請理解哈。

個人覺得這個工具使用起來還是很方便的,你覺得呢?

本文轉載自微信公眾號「Java建設者」,可以通過以下二維碼關注。轉載本文請聯系Java建設者公眾號。

??

 

責任編輯:武曉燕 來源: Java建設者
相關推薦

2021-04-27 07:52:19

StarterSpring Boot配置

2022-08-02 09:40:09

代碼翻譯神器

2021-02-22 11:13:17

VS Code代碼編程

2022-02-14 07:34:23

工具類GET、POST

2022-03-01 08:21:32

工具類代碼封裝網絡請求

2021-02-03 07:56:08

版本游戲邏輯

2022-01-21 07:35:06

LRU緩存java

2021-11-04 17:23:03

Java對象 immutable

2021-03-26 05:59:10

內存檢測工具

2021-11-29 07:47:57

gRPCGUI客戶端

2020-07-20 10:00:52

Python翻譯工具命令行

2022-04-22 08:22:50

MVCCMySQLC++

2022-05-07 13:52:22

Feign 增強包K8s

2020-09-27 14:13:50

Spring BootJava框架

2022-05-16 08:42:26

Pandasbug

2021-09-13 08:41:52

職場互聯網自閉

2025-04-25 09:00:00

2020-09-10 06:58:34

C語言DBProxy

2021-12-12 18:18:15

代碼元宇宙Python

2018-04-12 17:00:07

云計算燒烤SaaS
點贊
收藏

51CTO技術棧公眾號

丁香六月综合| 黄网页在线观看| 欧美日韩福利| 精品中文字幕久久久久久| 国产视频资源| 国产经典欧美精品| 成人午夜电影免费在线观看| 日韩免费高清视频网站| 欧美成人性战久久| gay视频丨vk| 成人在线一区二区三区| 黑人另类av| 久久伊人精品| 久久综合福利| 国产三级在线看| 国产羞羞视频在线播放| 亚洲永久免费av| 国产人妻777人伦精品hd| 婷婷中文字幕一区| 欧美高清视频一区二区| 天堂av最新在线| 亚洲成av人综合在线观看| 黄色免费视频大全| 精品一区二区三区香蕉蜜桃| 国产亚洲情侣一区二区无| 视频一区欧美| 欧美国产日韩精品| 亚洲成人毛片| 亚洲色图综合久久| 牛牛精品一区二区| 国产成人精品免费久久久久| 国产午夜在线视频| 99久久亚洲精品| 亚洲欧美日韩成人| 综合视频免费看| 国产日韩专区| 99精品国产高清在线观看| 黑丝美女一区二区| 欧洲亚洲在线视频| 九九精品在线| 欧美在线观看视频| 国语产色综合| 国产在线观看精品| 久久久久久久久国产一区| 国产精品嫩草视频| 亚洲影视一区| 国产欧美一区二区视频| 99精品福利视频| 日韩久久在线| 免费在线观看视频一区| 老司机av福利| 久久久久久综合网天天| 精品国产乱码久久久久久蜜柚| 日韩欧美在线视频观看| 视频国产在线观看| 亚洲综合第一页| 91成人精品视频| 99re在线观看| 一区二区三区精品视频在线观看| 国产一区视频观看| 免费观看在线色综合| 青青草免费在线视频观看| 国产最新精品| 玖玖精品视频| 日韩国产高清污视频在线观看| 亚洲这里只有精品| 中文字幕亚洲一区二区av在线| www.97| 天天免费综合色| 在线看的av网站| 日韩欧美一级二级| 国产传媒在线观看| 亚洲欧美日韩精品一区二区| 国内av一区二区三区| 欧美性黄网官网| 黄在线免费看| 欧美丰满少妇xxxbbb| 国产综合色产在线精品| 国产男女无遮挡| 欧美日韩一区二区免费在线观看| 黄色永久免费网站| 中文字幕有码在线观看| 欧美日韩亚洲高清一区二区| videoxxxx另类日本极品| 国产欧美一区二区三区鸳鸯浴 | 欧美一区二区美女| 日韩av电影国产| 欧洲精品在线观看| 一个人看的免费视频色| 中文字幕国产亚洲2019| 亚洲娇小娇小娇小| 久久久久久久网站| 国产在线精品不卡| 爆乳熟妇一区二区三区霸乳| 中文字幕成人在线| 国产精品亚洲午夜一区二区三区| 毛片一级免费一级| www日韩中文字幕在线看| 日韩福利视频导航| 欧美日韩五码| 国产精品视频一区二区三区四区五区| 久久综合色影院| 亚洲国产精品麻豆| 日韩午夜av| 97se亚洲| 欧美激情免费| 日本欧美视频在线观看| 欧美激情国产高清| 亚洲精品国产成人久久av盗摄| 卡通动漫精品一区二区三区| 久久久久免费看黄a片app| 欧美一级淫片aaaaaaa视频| 午夜精品久久久久久久蜜桃app| 韩日精品视频| 姬川优奈av一区二区在线电影| 天天色综合6| 久久青青草综合| 俺也去精品视频在线观看| 国产福利一区二区三区视频| 麻豆传媒在线免费| 久久久久国产精品熟女影院 | 国产免费黄色av| 欧美中文字幕在线观看| 日韩精品一区二区在线观看| 国产色婷婷亚洲99精品小说| 免播放器亚洲一区| 日韩成人三级| 国产一区一一区高清不卡| 久久久999视频| 久久艳妇乳肉豪妇荡乳av| 色悠悠久久88| 91成人免费网站| 国产精品理论在线观看| 国产日韩欧美三级| 99久精品视频在线观看视频| 桃色一区二区| 自拍视频在线播放| 亚洲色图图片网| 三级视频中文字幕| 天天想你在线观看完整版电影免费| 国产精品二区在线观看| 日韩欧美一区二区视频| 2022国产精品视频| 日韩黄色小视频| 欧美日韩影院| 亚洲va欧美va人人爽成人影院| 粉嫩av国产一区二区三区| 欧洲一区二区三区| www在线播放| 交视频在线观看国产| 天天色综合社区| 中文字幕高清在线观看| 日本a在线免费观看| 中文字幕中文字幕在线中一区高清 | 欧美黄视频在线观看| 色爱综合区网| 美女高潮视频在线看| 忘忧草在线影院两性视频| 欧洲性视频在线播放| 亚洲国产精选| 欧美日韩激情在线一区二区三区| 欧美精品国产白浆久久久久| 美女毛片一区二区三区四区最新中文字幕亚洲| 日韩久久一区| 日韩大片在线| 天堂成人国产精品一区| 国产酒店精品激情| 久久综合国产精品| 亚洲欧洲制服丝袜| 成人综合在线网站| 99精品国产99久久久久久白柏 | 在线免费观看成人网| 国产精品免费在线免费| 国产精品丝袜一区二区三区| 成人性生交大片免费观看嘿嘿视频| 91av在线国产| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 色中色在线视频| 好吊日av在线| 成人免费直播在线| 欧美国产精品| 久久综合五月天婷婷伊人| 亚洲一区二区精品视频| 久久综合亚州| 精品国产一区一区二区三亚瑟| 亚洲欧洲视频| 欧美国产精品劲爆| 欧美一区二区三级| 国产精品99导航| 国产精品无码人妻一区二区在线 | 米奇在线777| 日韩伦理在线| 欧美美女一区| 中文字幕在线一区免费| 色视频成人在线观看免| 久久伊人色综合| 在线免费一区| 精品三级久久| 国产精品911| 在线欧美一区二区|