Xemacs是否可以使用Windows Style Key Bindings? Emacs有这些Windows key bindings
Emacs的键绑定比较早 现代的GUI,以及那些关键 后来的GUI选择剪切和复制 被赋予了重要的功能 Emacs中扩展的键盘映射。 CUA模式 试图让两个绑定共存 通过将C-x和C-c定义为杀伤区域 和copy-region-as-kill当 区域是活跃的,并让他们 当他们有正常的Emacs绑定 该地区不活跃。很多人 发现这是可以接受的 妥协。 CUA模式还定义了一个 其他键数(C-v,Shift 选择),并可以打开 选项菜单
答案 0 :(得分:1)
如果您可以使用emacs而不是Xemacs,那么EmacsW32 这是简单的emacs修改,以更好地与Windows集成。它有很多功能,包括emacs / win键绑定之间的选择。
来自网页:
EmacsW32是Emacs的集合 lisp模块和MS Windows程序 你可以使用Emacs。它可以 Emacs中的键盘和其他东西 功能更像他们通常所做的 MS Windows程序。
EmacsW32不是MS Windows的Emacs。 相反,它是Emacs的附加组件 MS Windows。但是你可以下载 Emacs + EmacsW32在一个安装程序中。
答案 1 :(得分:0)
我不确定您要查找哪些Windows键绑定,可能是cut.copy,粘贴?这被称为CUA,默认情况下它没有附带这些键绑定,但它们可以很容易地添加。 这是指向具有xemacs CUA模式的网站的链接。您应该能够安装XEmacs,然后添加CUA模式,有效地创建您想要的东西。 http://sites.google.com/site/olegalexandrov/xemacs
或者,您可以自行添加它们,并在init.el文件中添加几行键分配。首先在带有C-x C-e的缓冲区中尝试运行它们并确保它们正常工作。
我没有使用kill-ring并希望以不同的方式标记块,所以我在skm-mark-blocks.el文件中编写了一些函数,我将尝试在此处插入或附加。在文件末尾,您可以看到global-set-key行,并将它们用作模板,使Windows键的工作方式与Windows中的相同。
-snip --------------------------------------
SKM-blocks.el
Byrel和Steve Mitchell
2009年11月12日
标记块:
用于标记第一个和第二个块结束标记的相同键
一旦两端标记,键,复制,切割,移动,&删除块
目标:
执行所有块命令:用左手标记,复制,移动,删除等
而右手用于使用光标键在缓冲区中定位 ;
首先写的模仿Vedit +方法(右手)::
F9标志着第一个结束,
F9标志着第二个结束,
然后是Cntl-F9(复制到光标)或Alt-F9(移动到光标)
Vedit +使用删除键,而块突出显示以删除 块。在这里工作
所以我们定义一个具有相同前缀(超级)的键来删除突出显示的块
可能的改进:
添加变量以选择块
时如何移动点(或光标位置或块标记)复制等等。
也就是说,这些东西随着街区移动,保持原状,
或者移动到新区块的末尾等。
添加功能以取消标记所有块结束?
目前标志着第三个"结束了以前的2 选定的块结束
并将第三个结束视为标记块的新第一个结尾
找到除了我的内容之外的这种块标记的名称。
添加函数以使用新的键组合进行柱状块标记(矩形)。
添加vars以配置柱状块标记应如何工作,插入,覆盖等。
(defvar block-marker-highlight-mode 1
"block-marker-highlight-mode can have 3 values:
0 = highlighing is removed following a block copy or block move
1 = w/ a copy, orig block remains highlighted
w/ a move, block is highlighted at new position
2 = w/ copy or move, block is highlighted at new position" )
(defvar block-marker-end-position-mode t
"block-marker-end-position-mode has 2 values:
t = after a block copy/move, cursor is positioned at end of
插入块
nil = after a block copy/move, cursor is positioned at beginning of inserted block
note: t is similar to the way Xemacs works by default")
(defvar block-mark1(point-marker)); var保存块的第一端
(defvar block-mark2(point-marker)); var保存块的第二端
(defvar block-ends-marked-marked 0);如果没有结束标记为0, ;标记为
的结尾数为1或2(defvar block-copiedp nil);如果是块复制,则为t
; -------- mark-block --------------------------
(defun mark-block()
"使用skm类型块标记块的任一端。"
(交互式)
(if(或(eq block-ends-marked 0)(eq block-ends-marked-marked 2)) ;我们是否标记了一个区块的第一个结尾?
(progn
(setq block-mark1 (point-marker))
(setq block-ends-marked 1)
(clear-highlighting )
(set-mark-command nil)) ;starts highlighting
( if (eq block-ends-marked 1) ; if there is 1 block marker already, we are marking the second end.
(progn (setq block-mark2 (point-marker))
(setq block-ends-marked 2)
(highlight-region ) ))) )
; -------- copy-block-to-point -----------------
(defun copy-block-to-point()
"将skm标记的块复制到cur。光标位置。 "
(交互式)
(let((start-pos(point)))
(if ( < block-ends-marked 2)
(message "Both ends not marked: %d end(s) marked." block-ends-marked ) ;error if there aren't 2 ends marked
(save-excursion
(set-buffer (marker-buffer block-mark1))
(copy-to-register ?c block-mark1 block-mark2))
(insert-register ?c t)
(setq block-copiedp t)
(let ((end-pos (point)))
(if (eq block-marker-highlight-mode 0) ;0 = clear all highlighting
(clear-highlighting-at-point ( marker-buffer block-mark1) block-mark1)
(if (eq block-marker-highlight-mode 2 ) ;2 = highlight at new position
(progn
(clear-highlighting-at-point ( marker-buffer block-mark1) block-mark1)
(goto-char start-pos)
(push-mark)
(goto-char end-pos)
(highlight-region))))))
(if (not block-marker-end-position-mode) ;determine where to leave cursor
(goto-char start-pos)) ))
; -------- move-block-to-point -----------------
(defun move-block-to-point()
&#34;将skm标记的块移动到当前光标pos。 &#34;
(交互式)
(if(&lt; block-ends-marked 2)
(message "Both ends not marked: %d end(s) marked." block-ends-marked )
(save-excursion
(set-buffer (marker-buffer block-mark1))
(copy-to-register ?c block-mark1 block-mark2 t))
(let ((start-pos (point)) end-pos )
(insert-register ?c t)
(setq end-pos (point))
(setq block-copiedp t)
(clear-highlighting-at-point ( marker-buffer block-mark1) block-mark1)
(if (eq block-marker-highlight-mode 0) ;0 = clear all highlighting
nil
(goto-char start-pos)
(push-mark)
(goto-char end-pos)
(highlight-region))
(if (not block-marker-end-position-mode) ;determine where to leave cursor
(goto-char start-pos)) )))
; -------- cut-block ---------------------------
(defun cut-block()
&#34;从文件中删除skm标记的块。&#34;
(互动)
(if(&lt; block-ends-marked 2)
(message "Both ends not marked: %d end(s) marked." block-ends-marked )
(copy-to-register ?c block-mark1 block-mark2 t)
(setq block-copiedp t)))
; -------坚持突出一个块-----------
(defun highlight-region()
(交互式)
(let(new-extent)(setq new-extent(make-extent(mark t) (点)))
(set-extent-property new-extent 'face 'zmacs-region)
(set-extent-property new-extent 'wordstar-block t)))
; -------清除缓冲区中突出显示的块-----------
(defun clear-highlighting-whole-buffer(&amp; optional buffer)
(交互式)
(let((highlight-list(extent-list buffer nil nil nil&#39; face&#39; zmacs-region)))
(while highlighted-list
(delete-extent (car highlighted-list))
(setq highlighted-list (cdr highlighted-list)))))
(defun clear-highlighting-at-point(&amp; optional buffer position)
(交互式)
(如果(不是位置)
(setq position (point)))
(同时(范围 - 位置缓冲区&#39; wordstar-block nil&#39; at)
(delete-extent (extent-at position buffer 'wordstar-block nil 'at )) ))
; ------------关键作业------------------
; ---模仿VEdit +方法的关键任务
; ---验证我们的算法是否正确
; ---一旦不需要就注释掉
(global-set-key [f9]&#39; mark-block)
(global-set-key [(control f9)]&#39; copy-block-to-point)
(global-set-key [(meta f9)]&#39; move-block-to-point)
(global-set-key [(control meta f9)]&#39; cut-block);不在Vedit中,而是用于测试
(global-set-key [(control shift f9)]&#39; clear-highlighting);不在Vedit中,而是用于测试
; -------左手使用的关键作业
; ---仅使用超级键(左侧windows-logo键)移位
;因为Windows抢占了超级密钥,所以不能在Windows中使用xemacs
必须尝试找到适合windows的东西。 xemacs的...
(global-set-key [(超级空间)]&#39; mark-block)
(global-set-key [(super v)]&#39; copy-block-to-point);助记符:V表示插入,驱动V(楔形)
(global-set-key [(super m)]&#39; move-block-to-point);助记符:M代表移动
(global-set-key [(super c)]&#39; cut-block);助记符:C for Cut
(global-set-key [(super n)]&#39; clear-highlighting-at-point)
;助记:认为N代表没有突出显示
- 剪断----------------- 希望这可以帮助您了解它是多么容易。 在看到代码如何进入此消息之后,很明显我需要一些练习将代码放入此编辑器(笑)。