Xemacs与Windows样式键绑定

时间:2009-12-12 12:38:53

标签: xemacs

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   选择),并可以打开   选项菜单

2 个答案:

答案 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代表没有突出显示

- 剪断----------------- 希望这可以帮助您了解它是多么容易。 在看到代码如何进入此消息之后,很明显我需要一些练习将代码放入此编辑器(笑)。