在用于OSX的Emacs上,如何将kill ring和剪贴板分开?
在GNU Emacs for OSX中,如何将kill环和OSX剪贴板分开?(这样我基本上有两个独立的压井环。) 对于所需的行为,这将起作用:在用于OSX的Emacs上,如何将kill ring和剪贴板分开?,emacs,clipboard,aquamacs,kill-ring,Emacs,Clipboard,Aquamacs,Kill Ring,在GNU Emacs for OSX中,如何将kill环和OSX剪贴板分开?(这样我基本上有两个独立的压井环。) 对于所需的行为,这将起作用: 1.⌘C将文本从web复制到OSX剪贴板。 2.controlk终止Emacs中的一行。 3.controly将已终止文本从Emacs终止环拖动到当前Emacs缓冲区。 4.⌘v将原始web文本从OSX剪贴板粘贴到当前Emacs缓冲区 这在Aquamacs中是现成的。如何在GNU Emacs中工作 此处讨论了与Windows相关的问题: 在这里: …
1.⌘C将文本从web复制到OSX剪贴板。
2.controlk终止Emacs中的一行。
3.controly将已终止文本从Emacs终止环拖动到当前Emacs缓冲区。
4.⌘v将原始web文本从OSX剪贴板粘贴到当前Emacs缓冲区 这在Aquamacs中是现成的。如何在GNU Emacs中工作 此处讨论了与Windows相关的问题: 在这里: …但此解决方案在OSX中不起作用。我想要一个Mac OSX的解决方案。这是否有帮助:
(setq x-select-enable-clipboard nil)
这只会将两个剪贴板分开,为了让Cmd+c和Cmd+v像前面提到的那样工作,您必须将它们重新绑定到剪贴板kill ring save
和剪贴板yank
我正在使用这个Emacs:经过大量的修改,我非常确定实现这个功能的唯一方法是重写
x-select-text
方法。查看我的答案,了解所有详细信息:中的解决方案确实有效,但不完整。您可以自己调用pbcopy
来正确粘贴剪贴板。例如,在.emacs
中尝试以下操作。请注意,s-v
用于OSX窗口系统中的Cmd+v
。s-c
也是如此
;;;测试日期:
;;; 1.GNU Emacs 24.3.1(x86_64-apple-darwin13.0.0)
;;; 2013年12月22日在Tennie-slave.macports.org上发布
;;; (麦波特)emacs@24.3_1)
;;;
;;; 2.GNU Emacs 24.3.1(x86_64-apple-darwin,NS apple-appkit-1038.36)
;;; 于2013年3月12日在bob.porkrind.org上发布
;;; (适用于Mac OS X的Emacs)
(拆卸隔离压井环()
“将Emacs压井环与OS X系统粘贴板隔离。
此功能仅在Windows系统中是必需的。”
(互动)
(setq程序间剪切功能nil)
(setq程序间粘贴函数nil))
(defun粘贴板-副本()
“将区域复制到OS X系统粘贴板。”
(互动)
(区域上的shell命令)
(地区开始)(地区结束)“pbcopy”))
(defun pasteboard-paste()
“通过'pbpaste'从OS X系统粘贴板粘贴到点。”
(互动)
(区域上的shell命令)
(点)(如果标记激活(标记)(点))“pbpaste”无)
(defun粘贴板-切割()
“剪切区域并放在OS X系统粘贴板上。”
(互动)
(粘贴板副本)
(删除区域(区域开始)(区域结束)))
(如果是窗口系统
(项目
(隔离压井环)
;将CMD+C绑定到粘贴板副本
(全局设置键(kbd“s-c”)'粘贴板副本)
;将CMD+V绑定到粘贴板粘贴
(全局设置键(kbd“s-v”)“粘贴板粘贴”
;将CMD+X绑定到粘贴板切割
(全局设置键(kbd“s-x”)‘粘贴板切割))
;您可能还希望为非窗口分配一些键绑定
;系统使用情况(即,在文本终端中
;;命令->超级不起作用)
)
<>如果你遇到UTF-8的问题,考虑以下可能的解决方案:
;;处理emacs utf-8输入
(设置终端编码系统“utf-8”)
(设置键盘编码系统“utf-8”)
(首选“utf-8”编码系统)
(setenv“LANG”en_US.UTF-8)
注意:此解决方案草案并非是一个分离剪贴板的Emacs系统范围的修改——相反,这是一个定制解决方案,旨在仅当专门使用这些定制功能时,才在交互式的基础上保持剪贴板分离。内部的其他职能
使用压井环
的EMAC可以使用类似的方法进行修改——变量程序间剪切函数
和程序间粘贴函数
可以在特定函数的持续时间内绑定为零
值(通过advice
,或修改源代码本身,或创建新函数和/或使用defalias
)。但是,后者超出了本有限示例的范围
历史 初稿(2014年12月23日):这是一个初稿,它基于这样一个想法,即只有在调用复制或粘贴函数之前使用
C-u
时才能访问OSX剪贴板。如果先调用C-u
,则使用OSX剪贴板。由于我每天更多地使用这些函数,我可能会对该代码进行其他修订,并且将不时更新相同内容:
EDIT(2014年12月24日):从交互式命令语句中删除了*
,与lawlist copy selected region
——这是粘贴而非复制所需的只读检查。添加了关于此示例一般性质的语句
编辑(2014年12月28日):修改代码,以更好地处理用户在调用lawlist copy selected region
之前忘记选择区域的情况。进行小修改,使代码更简洁
(定义法律列表复制所选区域(&可选参数)
(交互式“P”)
(让我们*(
(程序间剪切功能)
(当(等于arg'(4))程序间切割功能)
(程序间粘贴功能)
(当(等于arg'(4))程序间粘贴功能时)
(region-active-p(region-active-p))
(beg(当区域处于活动状态时-p(区域开始)))
(结束(当region-active-p(region-end))时)
(复制的字符串)
(当region-active-p(缓冲区子串无属性结束))时)
(除非区域-active-p
(let((退出时调试为零))
(信号“退出”(“未选择任何区域!”)
(将区域复制为结束)
(何时(非(活动小缓冲区窗口))
(消息“%s”
(康卡特)
(if(和程序间剪切功能程序间粘贴功能)
“OSX+Emacs:”
(global-set-key (kbd "C-x M-y")
(lambda ()
(interactive)
(insert-string (ns-get-pasteboard))))
(global-set-key (kbd "C-x M-w")
(lambda ()
(interactive)
(when (region-active-p)
(ns-set-pasteboard
(buffer-substring (region-beginning)
(region-end))))))