2

Windows Style Key Bindingsで Xemacs を利用できますか? Emacs には、これらのWindows キー バインディングがあります。

Emacs のキーバインドは最新の GUI よりも前から存在し、後の GUI で切り取りとコピーのために選択されたキーには、Emacs の拡張キーマップとして重要な機能が与えられました。CUA モードは、Cx と Cc を kill-region および copy-region-as-kill として領域がアクティブなときに定義し、領域がアクティブでないときに通常の Emacs バインディングを持つようにすることで、両方のバインディングを共存させようとします。多くの人は、これが許容できる妥協点であると考えています。CUA モードは、他の多くのキー (Cv、Shift 選択) も定義し、[オプション] メニューからオンにすることができます。

4

2 に答える 2

1

Xemacs の代わりに emacs を使用できる場合は、EmacsW32 があります。これは 、Windows との統合を改善するために変更された単純な emacs です。emacs/win キーバインドの選択など、多くの機能があります。

ウェブページから:

EmacsW32 は、Emacs から使用できる Emacs Lisp モジュールと MS Windows プログラムのコレクションです。これにより、Emacs のキーボードやその他の機能を、通常の MS Windows プログラムと同じように機能させることができます。

EmacsW32 は MS Windows 用の Emacs ではありません。代わりに、MS Windows 用の Emacs へのアドオンです。ただし、Emacs+EmacsW32 を 1 つのインストーラーでダウンロードできます。

于 2009-12-12T13:47:03.093 に答える
0

どの Windows キー バインドを探しているのかわかりません。おそらく、カット、コピー、ペーストですか? それはCUAと呼ばれ、デフォルトではこれらのキーバインディングは付属していませんが、簡単に追加できます. xemacs の CUA モードがあるサイトへのリンクを次に示します。XEmacs をインストールしてから、CUA モードを追加して、必要なものを効果的に作成できるはずです。 http://sites.google.com/site/olegalexandrov/xemacs

または、init.el ファイルに数行のキー割り当てを追加して、自分で追加することもできます。最初に Cx Ce を使用してバッファで実行し、動作することを確認してください。

私はキルリングを使用せず、別の方法でブロックをマークしたかったので、ここに挿入または添付しようとするファイル skm-mark-blocks.el にいくつかの関数を書きました。ファイルの最後に global-set-key 行があり、それらをテンプレートとして使用して、Windows キーを Windows と同じように機能させることができます。

-をちょきちょきと切る - - - - - - - - - - - - - - - - - - -

; skm-blocks.el

; バイレルとスティーブ・ミッチェル

; 2009 年 11 月 12 日

; ブロックを次のようにマークします。

; 最初と 2 番目のブロック エンド マーカーをマーキングするための同じキー

; 両端がマークされたら、ブロックをコピー、カット、移動、および削除するためのキー

;

; ゴール:

; すべてのブロック コマンドを実行するには: 左手でマーク、コピー、移動、デルなど

; 右手はカーソルキーでバッファ内に配置するために使用されます。

; Vedit+ メソッドを模倣して最初に書かれた方法 (右手用)::

; F9 で最初の端をマークし、

; F9 で 2 番目の端をマークし、

; 次に、Cntl-F9 (カーソルにコピー) または Alt-F9 (カーソルに移動)

; Vedit+ は、ブロックが強調表示されているときに削除キーを使用してブロックを削除します。ここでは機能しません

; そのため、強調表示されたブロックを削除するために、同じプレフィックス (super) を持つキーを定義します

;

; 可能な改善:

; vars を追加して、ブロック時にポイント (またはカーソル位置またはブロック マーカー) を移動する方法を選択します

; コピーされるなど。

; つまり、これらのものはブロックとともに移動し、元の場所にとどまり、

; または新しいブロックの最後に移動するなど。

; すべてのブロック端のマークを外す機能を追加しますか?

; 現在「3 番目の」端点をマークしている場合は、以前に選択した 2 つのブロック端点のマークを解除します

; 3番目の端をブロックの新しい最初の端をマークするものとしてカウントします

; 私のイニシャル以外のこの種のブロックマーキングの名前を見つけてください.

; 新しいキーの組み合わせで、柱状のブロック マーキング (長方形) を行う関数を追加します。

; 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)) ; ブロックの 2 番目の端を保持する var

(defvar block-ends-marked 0) ; マークされた端がない場合は 0、マークされた端の数は ;1 または 2

(defvar block-copiedp nil) ;t ブロックがコピーされた場合

;-------- マークブロック --------------------------

(defun マークブロック ()

「ブロックの両端を skm タイプのブロックでマークします。」

(相互の作用)

(if ( or (eq block-ends-marked 0 ) (eq block-ends-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 )  ))) )

;-------- ブロックからポイントへのコピー -----------------

(defun copy-block-to-point ()

"skm でマークされたブロックを cur.cursor pos. にコピーします。"

(相互の作用)

(let ((開始位置 (点)))

(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)) ))

;-------- ブロックからポイントへの移動 -----------------

(defun move-block-to-point ()

"skm でマークされたブロックを現在のカーソル位置に移動します。"

(相互の作用)

(if ( < ブロック終了マーク付き 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)) )))

;-------- カットブロック ---------------------------

(defun カットブロック ()

「ファイルから skm でマークされたブロックを切り取ります。」

(相互の作用)

(if ( < ブロック終了マーク付き 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 ハイライト領域 ()

(相互の作用)

(let (new-extent) (setq new-extent (make-extent (マーク t) (ポイント)))

   (set-extent-property new-extent 'face 'zmacs-region)

   (set-extent-property new-extent 'wordstar-block t)))

;--------- バッファ内のハイライトされたブロックをクリア -----------

(defun clear-highlighting-whole-buffer (&optional バッファ)

(相互の作用)

(let ((highlighted-list (extent-list buffer nil nil nil 'face 'zmacs-region)))

(while highlighted-list

  (delete-extent (car highlighted-list))

  (setq highlighted-list (cdr highlighted-list)))))

(defun clear-highlighting-at point (&optional バッファ位置)

(相互の作用)

(if (位置ではない)

  (setq position (point)))

(while (extent-at position buffer 'wordstar-block nil 'at )

(delete-extent (extent-at position buffer 'wordstar-block nil 'at )) ))

;------------ キー割り当て ------------------

;--- VEdit+ メソッドを模倣するキー割り当て

;--- アルゴリズムが正しいことを確認する

;--- 不要になったらコメントアウトする

(グローバル セット キー [ f9 ] 'マーク ブロック)

(global-set-key [ (control f9) ] 'copy-block-to-point)

(global-set-key [ (meta f9) ] 'move-block-to-point)

(global-set-key [ (control meta f9) ] 'cut-block) ; Vedit ではなく、テスト用

(global-set-key [ (control shift f9) ] 'clear-highlighting) ; Vedit ではなく、テスト用

;------- 左手用のキー割り当て

;--- スーパー キー (左の Windows ロゴ キー) シフトのみを使用

; Windows はスーパー キーを先取りするため、Windows の xemacs では機能しません

; Windowsのxemacsで動作するものを見つけるために実験する必要があります...

(グローバル セット キー [ (スーパー スペース) ] 'マーク ブロック)

(global-set-key [ (super v) ] 'copy-block-to-point) ;ニーモニック: 挿入の V、V (くさび) をドライブ

(global-set-key [ (super m) ] 'move-block-to-point) ;ニーモニック: 移動の M

(global-set-key [ (super c) ] 'cut-block) ;ニーモニック: CutのC

(global-set-key [ (super n) ] 'clear-highlighting-at-point)

;ニーモニック: N は強調表示なしと考えてください

--中略----------------- これがいかに簡単かを理解するのに役立つことを願っています. コードがこのメッセージにどのように挿入されたかを見た後、このエディターにコードを挿入する練習が必要であることは明らかです (にやにや笑い)。

于 2012-05-31T04:09:07.483 に答える