Emacs之实现鼠标/键盘选中即拷贝外界内容(一百二十)

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

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

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注:Android系统攻城狮

1.前言

本篇目的:实现鼠标划词拷贝Emacs以外程序中内容,回到Emacs中时需要关闭鼠标的划词拷贝,因为在emacs中mark选中的时候,又会拷贝内容,会把之前外界的内容给冲掉,基于这个原因,实现一套鼠标和键盘选中时,自动的拷贝的功能,但是在Emacs中必须关掉,在Emacs中还是需要手动拷贝。

2.应用实例

lisp 复制代码
;;Emacs 27或更高版本
(xclip-mode 1)
;;Linux系统剪切板
(setq select-enable-clipboard t)
;;Linux primary区域剪切板
(setq select-enable-primary t)

;;需要先requre 'select
(require 'select)

;;实现emacs焦点进来时,设置select-enable-primary为nil;
;;当emacs焦点离开时,设置select-enable-primary为t.
;;保证剪切板不为空,否则需要自己执行一下复制命令,否则以下命令不生效.
(kill-new (buffer-name))

(defvar last-focus-out-time nil)
;;300毫秒内执行多次的话,只执行一次.
(defun focus-out-emacs ()
  (interactive)
  (let ((current-time (float-time))) ; 当前时间
    (when (or (null last-focus-out-time) ; 上次执行的时间为空
              (> (- current-time last-focus-out-time) 0.3)) ; 时间差超过300毫秒
      (setq last-focus-out-time current-time)
      (setq select-enable-primary t)
      ;;(message "focus out hook")
      )))

(defun focus-in-emacs ()
  (interactive)
  (let ((current-time (float-time))) ; 当前时间
    (when (or (null last-focus-out-time) ; 
              (> (- current-time last-focus-out-time) 0.3)) ; 时间差超过300毫秒
      (setq last-focus-out-time current-time)
      ;;延时1秒执行(setq select-enable-primary nil),否则在emacs外来不及copy就被关闭
      ;;delay 1s
      (run-with-timer 1 nil (lambda ()
			      (setq select-enable-primary nil)
			      ;;(message "focus in hook")
			      ))
      )))

;;只要切换窗口就触发,切换一次窗口会调用4次,实现focus-in-emacs和focus-out-emacs每次调用只执行一次。
(add-hook 'focus-in-hook (lambda (&rest _)(focus-in-emacs)))
(add-hook 'focus-out-hook (lambda (&rest _) (focus-out-emacs)))
相关推荐
春日见2 小时前
从底层思维3分钟彻底弄清卷积神经网络CNN
人工智能·深度学习·神经网络·计算机视觉·docker·cnn·计算机外设
AIminminHu5 小时前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(6)番外篇:让视图“活”起来——鼠标拖拽、缩放背后的数学魔法
计算机外设
TESmart碲视5 小时前
雷电4 vs. USB-C:哪款TESmart双显示器KVM切换器更适合你的工作流?
计算机外设·mst·kvm切换器·双屏kvm切换器·雷电kvm切换器
小夭。5 小时前
工具使用-windows在vscode内集成opencode
ide·vscode·编辑器
不才小强6 小时前
VIM从入门指南
编辑器·vim
亿洋1 天前
vscode的continue插件接入第三方自定义中转api
人工智能·vscode·编辑器
沃普天科技1 天前
IF8032芯片TYPE C全功能输出支持C口显示器,支持AR眼镜 显示,支持接扩展坞,支持PD100W 4K144
游戏·智能手机·计算机外设·电脑·ar·音视频·显示器
AI浩1 天前
第 5 章:集成开发环境 (IDE) 协作 —— 终端与编辑器的双剑合璧
ide·人工智能·编辑器
日出等日落1 天前
用 Kavita实现我的远程数字书屋搭建记!
java·开发语言·ide·vscode·编辑器
桌面运维家1 天前
Windows 10 USB鼠标失灵:驱动、电源问题排查指南
windows·单片机·计算机外设