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)))
相关推荐
晚风叙码3 小时前
Linux(三)apt/yum 软件安装与 vim 编辑器入门指南
linux·编辑器·vim
民乐团扒谱机3 小时前
【超详细】PyQt6 实现 AU 风格波形图编辑器:多级缩放与采样点逐级渲染,附全过程代码
开发语言·python·编辑器·pyqt·audition·时域·频谱图
谁刺我心4 小时前
【vscode问题】远程remote cpptools导致linux板子cpu爆炸问题
ide·vscode·编辑器
励志不掉头发的内向程序员4 小时前
LibreCAD 2D架构】从鼠标点击到屏幕像素:LibreCAD绘图架构全链路解析之鼠标事件与RS_ActionDrawLine
c++·qt·学习·架构·计算机外设
不想看见4041 天前
一次关于“鼠标是不是串口”的追问:从USB协议到CAN总线
c++·qt·计算机外设
驱动小百科1 天前
雷柏鼠标驱动下载教程:雷柏鼠标驱动怎么安装
计算机外设·雷柏鼠标驱动下载·雷柏鼠标驱动·雷柏鼠标驱动安装·雷柏鼠标驱动官网
Data_Journal2 天前
Scrapyd:分步教程
开发语言·python·microsoft·golang·编辑器·html·iphone
逐步前行2 天前
ESP32-S3-VSCode扩展ESP-IDF
ide·vscode·编辑器
playboy1342 天前
NAS不能访问共享文件夹数据恢复
大数据·计算机外设
Masimaro2 天前
《elisp 每日一练》——minibuffer输入读取和set-transient-map 临时热键状态机
emacs