Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在用于OSX的Emacs上,如何将kill ring和剪贴板分开?_Emacs_Clipboard_Aquamacs_Kill Ring - Fatal编程技术网

在用于OSX的Emacs上,如何将kill ring和剪贴板分开?

在用于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相关的问题: 在这里: …

在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相关的问题:

在这里:

…但此解决方案在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))))))