Emacs之elisp调用xdotool模拟鼠标事件for有道词典(八十五)

公众号:Android系统攻城狮
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

1.前言
在开发过程中,需要用到有道词典,但是有道词典必须使用鼠标选中,才能翻译.这样就和编辑器脱离了,一边使用鼠标一边,使用键盘,这样会导致效率低下.
所以写一个解决方案,可以所有操作在Emacs中完成!
2.键盘模拟鼠标左键双击内容和双击Ctrl键(for有道词典)
<1>.v3.0
;;v3.0
;;功能描述:有时第一次需要将所选内容拷贝,第二次选中后直接可以双击Ctrl键翻译.
(defun translate-for-youdao()
  (interactive)
  (progn
    ;;ok: 延时10ms,双击所选内容
    ;;(shell-command (concat "xdotool type " (funcall '(lambda () (progn (unless buffer-read-only (setq buffer-read-only t)) (current-kill 0))))  " && xdotool click --repeat 2 --delay 10 1"))
    ;;ok: 不延时
    (shell-command (concat "xdotool type " (funcall '(lambda () (progn (unless buffer-read-only (setq buffer-read-only t)) (current-kill 0))))  " && xdotool click --repeat 2 1"))    
    )
  )
;;--repeat 2: 点击左键两次.
;;--delay 10 1: 10表示: 延时10ms.
;;1表示: 点击左键.
;;模拟按两次Ctrl键,调起有道词典的翻译功能.
(defun double-ctrl ()
  (interactive)
  (progn
    ;;延时1ms,第一次按下并抬起Ctrl键
    (sit-for 0.001)
    (shell-command "xdotool keydown ctrl keyup ctrl")
    ;;ok

    ;;延时1ms,第二次按下并抬起Ctrl键
    (sit-for 0.001)
    (shell-command "xdotool keydown ctrl keyup ctrl")
    
    ;; (setq use-dialog-box nil)
    ;; (setq use-file-dialog nil)
    ))

(advice-add 'double-ctrl  :before 'translate-for-youdao)
(global-set-key [f2] 'double-ctrl)

<1>.v4.0
;;v4.0
;;功能描述:需要将所选内容拷贝,然后双击Ctrl键翻译.
(defun double-ctrl ()
  (interactive)
  (progn
    (shell-command (concat "xdotool type " (funcall '(lambda () (progn (read-only-mode 1) (current-kill 0))))  " && xdotool click --repeat 2 --delay 10 1"))

    (shell-command "xdotool keydown ctrl")
    (shell-command "xdotool keyup ctrl")
    (shell-command "xdotool keydown ctrl")
    (shell-command "xdotool keyup ctrl")
    ))

(global-set-key [f2] 'double-ctrl)

<1>.v5.0
;;v5.0--->最终简化版本.
;;功能描述:有时第一次需要将所选内容拷贝,第二次选中后直接可以双击Ctrl键翻译.
(defun double-ctrl ()
  (interactive)
  (progn    
    (shell-command (concat "xdotool type " (funcall '(lambda () (progn (unless buffer-read-only (setq buffer-read-only t)) (current-kill 0))))  " && xdotool click --repeat 2 --delay 1 1"))

    ;;延时1ms,第一次按下并抬起Ctrl键
    (sit-for 0.001)
    (shell-command "xdotool keydown ctrl keyup ctrl")
    ;;ok

    ;;延时1ms,第二次按下并抬起Ctrl键
    (sit-for 0.001)
    (shell-command "xdotool keydown ctrl keyup ctrl")
    ))

(global-set-key [f2] 'double-ctrl)
更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值