Devil Modeマニュアル


- Devilモードの0.6.0のMANUAL.orgの日本語訳です

- 元の文書: [https://github.com/susam/devil/blob/main/MANUAL.org](https://github.com/susam/devil/blob/main/MANUAL.org)

- ライセンス: [パッケージのライセンス](https://github.com/susam/devil/blob/main/LICENSE.org)と同じ、すなわちMITライセンスです

- - -
# TOC

* [Devilモード](#devilモード)
   * [1. イントロダクション](#1-イントロダクション)
   * [2. 表記](#2-表記)
   * [3. インストール](#3-インストール)
      * [3.1 MELPA経由のインタラクティブなインストール](#31-melpa経由のインタラクティブなインストール)
      * [3.2 MELPA経由の自動インストール](#32-melpa経由の自動インストール)
      * [3.3 Gitソースのインストール](#33-gitソースのインストール)
   * [4. Devilを使う](#4-devilを使う)
   * [5. カンマのタイプ](#5-カンマのタイプ)
   * [6. Devilのリーダー](#6-devilのリーダー)
   * [7. 変換メカニズム](#7-変換メカニズム)
   * [8. デフォルトの変換ルール](#8-デフォルトの変換ルール)
   * [9. DevilキーのDescribe](#9-devilキーのdescribe)
   * [10. ボーナスのキーバインディング](#10-ボーナスのキーバインディング)
   * [11. カスタム設定の例](#11-カスタム設定の例)
      * [11.1 ローカルモード](#111-ローカルモード)
      * [11.2 バッファーのデフォルトモード](#112-バッファーのデフォルトモード)
      * [11.3 外観のカスタマイズ](#113-外観のカスタマイズ)
      * [11.4 ", SPC"をマークのセットにするには](#114--spcをマークのセットにするには)
      * [11.5 カスタムDevilキー](#115-カスタムdevilキー)
      * [11.6 Devilキーを別のキーにカスタマイズする](#116-devilキーを別のキーにカスタマイズする)
      * [11.7 複数のDevilキー](#117-複数のdevilキー)
      * [11.8 すべてのキーをrepeat可能に](#118-すべてのキーをrepeat可能に)
      * [11.9 Repeatモードとの相互作用](#119-repeatモードとの相互作用)
      * [11.10 Repeatモードとの比較](#1110-repeatモードとの比較)
   * [12. どうしてこうなった?](#12-どうしてこうなった)
   * [13. Godモードとの比較](#13-godモードとの比較)
   * [14. FAQ](#14-faq)
   * [15. 結び](#15-結び)

# Devilモード

<!-- Devil mode trades your comma key in exchange for a modifier-free editing experience in Emacs. Yes, the comma key! The key you would normally wield for punctuation in nearly every corner of text. Yes, this is twisted! It would not be called the Devil otherwise, would it? If it were any more rational, we might call it something divine, like, uh, the God mode? But alas, there is nothing divine to be found here. Welcome, instead, to the realm of the Devil! You will be granted the occasional use of the comma key for punctuation, but only if you can charm the Devil. But beware, for in this sinister domain, you must relinquish your comma key and embrace an editing experience that whispers wicked secrets into your fingertips! -->

Devilモードはカンマキーと引き換えに、Emacsでの修飾キーなしの編集経験を提供するモードだ。そう、カンマキー(comma key)だ! これは普通ならテキストのほぼすべての隅に句読点を挿入するためのキーである。そう、このモードは少しへそ曲がりなモードと言えよう! でなければ悪魔(Devil)などと呼ばれないのではないだろうか? もっと理に適ったモードであればもっと神聖な、そうGod(神)モードとでも呼ぶかもしれない。しかし悲しいかな、このモードには神聖な何かなどは存在しない。かわりにと言っては何だが、悪魔のテリトリーにようこそ! ときには句読点を入力するためにカンマキーを使用する権利が与えられることもあるが、それは悪魔を誘惑できた場合に限られる。この邪悪なドメインにおいてはカンマキーを諦めること、そしてよこしまな秘密を指先に唱えるような編集体験を受容しなければならないことに注意して欲しい!

## 1. イントロダクション

<!-- Devil mode intercepts our keystrokes and translates them to Emacs key sequences according to a configurable set of translation rules. For example, with the default translation rules, when we type , x , f, Devil translates it to C-x C-f. The choice of the comma key (,) to mean the control modifier key (C-) may seem outrageous. After all, the comma is a very important punctuation both in prose as well as in code. Can we really get away with using , to mean the C- modifier? It turns out, this terrible idea can be made to work without too much of a hassle. At least it works for me. It might work for you too. If it does not, Devil can be configured to use another key instead of , to mean the C- modifier. See the section *Custom Devil Key and the subsequent sections for a few examples. -->

Devilモードは設定可能な変換ルールにしたがって、横取りしたキーストロークをEmacsのキーシーケンスに変換する。たとえばデフォルトの変換ルールでは`, x , f`とタイプすると、Devilモードがそれを`C-x C-f`に変換する。カンマキー(`,`)を修飾キーのcontrol(`C-`)とみなすのはとんでもない選択に思えるかもしれない。結局のところカンマキーは散文とコードの両方において、非常に重要な句読点文字なのだ。本当に`,`を修飾キー`C-`として使っていくことができるのだろうか? この恐ろしいアイデアだが、実際にはそれほど手間を掛けずに機能させられることが判ったのだ。少なくともわたしの場合は問題なかったので、あなたも問題なく使うことができるだろう。もしカンマキーの使用に問題があっても、Devilでは別のキーを修飾キー`C-`に設定することもできる。[カスタムDevilキー](#115-カスタムdevilキー)とそれに続くセクションに、いくつか例を挙げてあるので参考にして欲しい。

<!-- A sceptical reader may rightfully ask: If , is translated to C-, how on earth are we going to insert a literal , into the text when we need to? The section *Typing Commas answers this. But before we get there, we have some fundamentals to cover. Take the plunge and see what unfolds. Maybe you will like this. Maybe you will not. If you do not like this, you can always retreat to God mode, Evil mode, the vanilla key bindings, or whatever piques your fancy. -->

疑り深い読者であれば当然こう尋ねるだろう: `,`が`C-`に変換されるとしたら、一体どうやってリテラルの`,`をテキストに挿入できるのか? その答えについてはセクション[カンマのタイプ](#5-カンマのタイプ)を参照して欲しい。しかしその前に基本事項をいくつか補足しておく必要がある。本腰を入れて解明していこう。多分気に入る筈だ。もしお気に召さなければGodモードやEvilモード、素のキーバインディング、あるいは何か他の面白いことに戻るのは何時でもできるのだから。

## 2. 表記

<!-- A quick note about the notation used in the document: The previous example shows that , x , f is translated to C-x C-f. What this really means is that the keystrokes ,x,f is translated to ctrl+x ctrl+f. We do not really type any space after the commas. The key , is directly followed by the key x. However, the key sequence notation used in this document contains spaces between each keystroke. This is consistent with how key sequences are represented in Emacs in general and how Emacs functions like key-description, describe-key, etc. represent key sequences. When we really need to type a space, it is represented as SPC. -->

ドキュメント内で使用する表記に関する簡単な注意: 前に挙げた例では`, x , f`を`C-x C-f`に変換する例を見てもらった。これはキーストローク`,x,f`が`ctrl+x ctrl+f`に変換されというのが本当の意味だ。実際にはカンマの後のスペースはタイプせず、キー`,`の後に直接キー`x`をタイプすることになる。しかしこのドキュメントで使用するキーシーケンスでは、、キーストロークそれぞれの間にスペースを挟んだ表記を使用する。この表記はEmacsにおいてキーシーケンスを表すときや`key-description`、`describe-key`といったEmacs関数がキーシーケンスを表す際に一般的に用いる方法と整合性があるからだ。本当にスペースをタイプする必要がある場合には、`SPC`と表すことにしよう。

## 3. インストール

<!-- Devil is available via NonGNU ELPA and MELPA. You may already have a preferred way of installing packages from ELPA/MELPA. If so, install the package named devil to get Devil. If you have Emacs 28.1 or a more recent version, it has NonGNU ELPA enabled by default, so you can install Devil quite easily with M-x package-install RET devil RET without having to perform any further steps. However, for the sake of completeness, a few very different and basic ways of installing Devil are presented in the next few subsections. -->

DevilはNonGNU ELPAかMELPAから入手できる。あなたには既にELPA/MELPAからパッケージをインストールする際のお気に入りのやり方があるのかもしれない。その場合にはdevilというパッケージ名で入手したDevilをインストールすればよい。Emacsのバージョンが28.1以降であればデフォルトでNonGNU ELPAが有効になっているので追加ステップなし、`M-x package-install RET devil RET`とするだけで、Devilを簡単にインストールできるだろう。しかしより万全を期する場合向けに、次のいくつかのサブセクションではDevilをインストールできる基本的な方法をいくつか紹介しよう(具体的なやり方としてはそれぞれまったく異なる方法だ)。

### 3.1 MELPA経由のインタラクティブなインストール

<!-- To install the latest version of Devil from MELPA, perform the following steps: -->

<!-- 1. Add the following to the Emacs initialization file (i.e.,    =~/.emacs= or =~/.emacs.d/init.el= or =~/.config/emacs/init.el=): -->

<!-- ```lisp -->
<!--      (require 'package) -->
<!--      (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) -->
<!--      (package-initialize) -->
<!-- ``` -->

<!-- 2. Start Emacs with the updated initialization file.  Then type these   commands: -->

<!-- ```lisp -->
<!--      M-x package-refresh-contents RET -->
<!--      M-x package-install RET devil RET -->
<!-- ``` -->

<!-- 3. Confirm that Devil is installed successfully with this command: -->

<!-- ```lisp -->
<!--      C-h f devil RET -->
<!-- ``` -->

<!-- 4. Enable Devil mode with this command: -->

<!-- ```lisp -->
<!--      M-x global-devil-mode RET -->
<!-- ``` -->

<!-- 5. Type =, x , f= and watch Devil translate it to =C-x C-f= and invoke   the corresponding command. -->


以下はDevilの最新バージョンをMELPAからインストールするステップだ:

1. Emacsのinitファイル(`~/.emacs`、`~/.emacs.d/init.el`、または`~/.config/emacs/init.el`)に以下を追加:

```lisp
     (require 'package)
     (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
     (package-initialize)
```

2. 変更したinitファイルでEmacsを起動して、以下のコマンドをタイプ:

```lisp
     M-x package-refresh-contents RET
     M-x package-install RET devil RET
```

3. 以下のコマンドでDevilが正常にインストールされたか確認:

```lisp
     C-h f devil RET
```

4. 以下のコマンドでDevilモードを有効化:

```lisp
     M-x global-devil-mode RET
```

5. `, x , f`とタイプしてDevilがそれを`C-x C-f`に変換すること、そのキーに応じたコマンドが呼び出されることを確認する


### 3.2 MELPA経由の自動インストール

<!-- Here is yet another basic way to install and enable Devil using Elisp: -->

<!-- #+begin_src elisp -->
<!--   (require 'package) -->
<!--   (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) -->
<!--   (package-initialize) -->
<!--   (unless package-archive-contents -->
<!--     (package-refresh-contents)) -->
<!--   (unless (package-installed-p 'devil) -->
<!--     (package-install 'devil)) -->
<!--   (global-devil-mode) -->
<!--   (global-set-key (kbd "C-,") 'global-devil-mode) -->
<!-- #+end_src -->

<!-- Now type =, x , f= and watch Devil translate it to =C-x C-f= and -->
<!-- invoke the corresponding command.  Type =C-,= to disable Devil mode. -->
<!-- Type =C-,= again to enable it. -->


以下はDevilのインストールと有効化にElispを使う、基本的だが別のやり方:

```lisp
  (require 'package)
  (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
  (package-initialize)
  (unless package-archive-contents
    (package-refresh-contents))
  (unless (package-installed-p 'devil)
    (package-install 'devil))
  (global-devil-mode)
  (global-set-key (kbd "C-,") 'global-devil-mode)
```

`, x , f`とタイプすればDevilがそれを`C-x C-f`に変換するし、そのキーに応じたコマンドが呼び出されるだろう。`C-,`とタイプすればDevilが無効になり、もう一度`C-,`とタイプすれば有効になる

### 3.3 Gitソースのインストール

<!-- If you prefer obtaining Devil from its Git repository, follow these -->
<!-- steps: -->

<!-- 1. Clone Devil to your system: -->

<!-- ```lisp -->
<!--      git clone https://github.com/susam/devil.git -->
<!-- ``` -->

<!-- 2. Add the following to your Emacs initialization: -->

<!-- ```lisp -->
<!--      (add-to-list 'load-path "/path/to/devil/") -->
<!--      (require 'devil) -->
<!--      (global-devil-mode) -->
<!--      (global-set-key (kbd "C-,") 'global-devil-mode) -->
<!-- ``` -->

<!-- 3. Start the Emacs editor.  Devil mode should now be enabled in all    buffers.  The modeline of each buffer should show the =Devil=    lighter. -->

<!-- 4. Type =, x , f= and watch Devil translate it to =C-x C-f= and invoke    the corresponding command.  Type =C-,= to disable Devil mode.  Type    =C-,= again to enable it. -->


DevilをGitレポジトリから取得したい場合は以下のステップ:

1. システムにDevilをclone :

```lisp
     git clone https://github.com/susam/devil.git
```

2. Emacsのinitファイルに以下を追加:

```lisp
     (add-to-list 'load-path "/path/to/devil/")
     (require 'devil)
     (global-devil-mode)
     (global-set-key (kbd "C-,") 'global-devil-mode)
```

3. Emacsエディターを起動すればすべてのバッファーでDevilモードが有効になっていて、モードラインにはそれぞれ`Devil`が表示されている筈だ

4. `, x , f`とタイプすればDevilがそれを`C-x C-f`に変換するし、そのキーに応じたコマンドが呼び出されるだろう。`C-,`とタイプすればDevilが無効になり、もう一度`C-,`とタイプすれば有効になる

## 4. Devilを使う

<!-- ## 4. Use Devil -->

<!-- Assuming vanilla Emacs key bindings have not been changed and Devil has not been customised, here are some examples that demonstrate how Devil may be used: -->

<!-- 1. Type =, x , f= and watch Devil translate it to =C-x C-f= and invoke the =find-file= command. -->

<!-- 2. Type =, p= to move up one line. -->

<!-- 3. To move up multiple lines, type =, p p p= and so on. Some Devil key sequences are repeatable keys by default. The repeatable Devil key sequences can be repeated by typing the last key of the Devil key sequence over and over again. -->

<!-- 4. Each repeatable key sequence belongs to a repeatable key sequence groups. Like before, type =, p p p= to move the cursor up by a few lines. But then immediately type =n n= to move the cursor down by a couple of lines. Then immediately type =p n b f= to move the cursor up, down, left, and right. The key sequences =, p= and =, n= and =, f= and =, b= form a single repeatable key sequence group. Therefore after we type any one of them, we can repeat that key sequence or any other key sequence in the same group over and over again merely by typing the last character of that key sequence. Typing any other key stops the repetition and the default behaviour of that other key is then observed. Type =C-h v devil-repeatable-keys RET= to see the complete list of all repeatable key sequence groups. -->

<!-- 5. Sometimes a repeatable key sequence may be the only key sequence in a repeatable key sequence group. An example of such a key sequence is =, m ^= which translates to =M-^= and joins the current line to the previous line. In a text buffer with multiple lines type =, m ^= to join the current line to the previous line. Then type =^= repeatedly to continue joining lines. Typing any other key stops the repetition. -->

<!-- 6. Type =, s= and watch Devil translate it to =C-s= and invoke incremental search. -->

<!-- 7. Type =, m x= and watch Devil translate it to =M-x= and invoke the corresponding command. Yes, =, m= is translated to =M-=. -->

<!-- 8. Type =, m m s= and watch Devil translate it to =C-M-s= and invoke regular-expression-based incremental search. The key sequence =, m m= is translated to =C-M-=. -->

<!-- 9. Type =, u , f= and watch Devil translate it to =C-u C-f= and move the cursor forward by 4 characters. -->

<!-- 10. Type =, u u , f= and the cursor moves forward by 16 characters. Devil uses its translation rules and an additional keymap to make this input key sequence behave like =C-u C-u C-f= which moves the cursor forward by 16 characters. -->

<!-- 11. Type =, SPC= to type a comma followed by space. This is a special key sequence to make it convenient to type a comma in the text. Note that this sacrifices the use of =, SPC= to mean =C-SPC= which could have been a convenient way to set a mark. See the section [[*Reclaim , SPC to Set Mark]] if you do not want to make this sacrifice. -->

<!-- 12. Type =, z SPC= and watch Devil translate it to =C-SPC= and set a mark. Yes, =, z= is translated to =C-= too. -->

<!-- 13. Similarly, type =, RET= to type a comma followed by the =enter= key. This is another special key. -->

<!-- 14. Type =, ,= to type a single comma. This special key is useful for cases when you really need to type a single literal comma. -->

<!-- 15. Type =, h , k= to invoke =devil-describe-key=. This is a special key that invokes the Devil variant of =describe-key= included in vanilla Emacs. When the key input prompt appears, type the Devil key sequence =, x , f= and Devil will display the documentation of the function invoked by this Devil key sequence. Note: The key sequence =, h k= translates to =C-h k= and invokes the vanilla =describe-key=. It is the Devil key sequence =, h , k= that invokes =devil-describe-key=. -->

以下にDevilの使い方をデモンストレーションするいくつかの例を示す(Emacsの素のキーバインディングのまま変更されておらず、Devilのカスタマイズもしていないものとする):

1. `, x , f`をタイプするとDevilが`C-x C-f`に変換して、`find-file`コマンドを呼び出す

2. `, p`とタイプすると1行上に移動

3. 複数行の移動は`, p p p ...`。Devilの一部のキーシーケンスは、デフォルトではrepeat(繰り返し)ができる。repeat可能なDevilキーシーケンスの場合には、そのDevilキーシーケンスの最後のキーをタイプして何回でも繰り返すことができる

4. repeat可能なキーシーケンスは、すべてrepeat可能なキーシーケンスグループに属している。前と同様に`, p p p`とタイプして、カーソルを3行上に移動してから間を開けずに`n n`とタイプすれば、カーソルは2行下に移動する。さらに続けて`p n b f`とタイプすればカーソルが上下、左右に移動するだろう。`, p`、`, n`、`, f`、`, b`は1つのrepeat可能なキーシーケンスグループを形成するキーシーケンスなのだ。したがってこれら4つのキーシーケンスのいずれかをタイプした後の場合には、同一グループのキーシーケンスならキーシーケンスの最後の文字をタイプすれば何回でも繰り返すことができる。他のキーを何かタイプすれば繰り返しは終了して、タイプしたキーのデフォルトの動作を確認できるだろう。repeat可能なキーシーケンスグループは、`C-h v devil-repeatable-keys RET`とタイプすれば完全なリスト確認できる。

5. repeat可能なキーシーケンスグループに属しているキーシーケンスが、1つのrepeat可能なキーシーケンスだけという場合もある。そのようなキーシーケンスの一例が`, m ^`だ。これは`M-^`に変換されて、カレント行と前の行を結合するコマンドを呼び出す。複数行のテキストバッファーで`, m ^`とタイプした場合でもカレント行と前の行が結合されるが、間を開けずに`^`をタイプすれば、行の結合を繰り返し行うことができる。他のキーをタイプすれば、繰り返しは終了する。

6. `, s`とタイプするとDevilがそれを`C-s`に変換して、インクリメンタル検索が呼び出されるだろう。

7. `, m x`とタイプするとDevilがそれを`M-x`に変換して、対応するコマンドが呼び出される。そうだ、`, m`が`M-`に変換されているのだ。

8. `, m m s`とタイプするとDevilがそれを`C-M-s`に変換して、正規表現ベースのインクリメンタル検索が呼び出される。`, m m`は`C-M-`に変換されるキーシーケンスだからだ。

9. `, u , f`とタイプするとDevilがそれを`C-u C-f`に変換して、カーソルは4文字前方に移動する。

10. `, u u , f`とタイプすると16文字前方にカーソルが移動する筈だ。Devil自身の変換ルールと追加のキーマップにより、この入力キーシーケンスは`C-u C-u C-f`(カーソルを16文字前方に移動)のように振る舞う。

11. カンマの後にスペースをタイプしたい場合には`, SPC`とタイプする。これはテキスト内で簡単にカンマをタイプできるようにするための、スペシャルキーシーケンスだ。このキーシーケンスは(マークをセットする場合に役に立ったかもしれない)`C-SPC`という意味での`, SPC`の使用を犠牲にしていることに注意。この犠牲が望ましくない場合については、セクション[", SPC"をマークのセットにするには](#114--spcをマークのセットにするには)を参照のこと。

12. `, z SPC`とタイプするとDevilがそれを`C-SPC`に変換して、マークをセットするだろう。そうだ、`, z`も`C-`に変換されるのだ。

13. 同様に`, RET`とタイプすれば、カンマの後に`enter`キーをタイプできる。これもスペシャルキー。

14. 単一のカンマは`, ,`でタイプできる。このスペシャルキーは、リテラルのカンマ1文字のタイプが必要なときに役に立つだろう。

15. `, h , k`とタイプすると`devil-describe-key`が呼び出される。これは素のEmacsに含まれている`describe-key`のDevil版を呼び出すスペシャルキーだ。キーの入力プロンプトが表示された後にDevilのキーシーケンス`, x , f`をタイプすると、Devilはそのキーシーケンスで呼び出される関数のドキュメントをを表示する。キーシーケンス`, h k`だと`C-h k`に変換されて、素の`describe-key`が呼び出されることに注意。Devilキーシーケンスの`, h , k`が呼び出すのが`devil-describe-key`ということだ。

## 5. カンマのタイプ

<!-- Devil makes the questionable choice of using the comma as its activation key.  As illustrated in the previous section, typing =, x , f= produces the same effect as typing =C-x C-f=.  One might naturally wonder how then we are supposed to type literal commas. -->

Devilをアクティブにするキーとして、Devilはカンマの採用という怪しげな道を選んだ。前セクションで述べたように、`, x , f`をタイプすると`C-x C-f`をタイプしたときと同じ効果が得られるのだ。ではリテラルのカンマはどうやって入力するか不思議に思うことは自然なことだろう

<!-- Most often when we edit text, we do not really type a comma in isolation.  Often we immediately follow the comma with a space or a newline.  This assumption usually holds good while editing regular text.  However, this assumption may not hold in some situations, like while working with code when we need to add a single comma at the end of an existing line. -->

テキスト編集においてカンマを単独で入力することは、実際のところほとんどないだろう。カンマの後に間を開けずに1つのスペースか改行を入力することはよくある。これは通常のテキスト編集時ならよく当て嵌まる見立てだ。しかし既存の行の終端に1つのカンマ追加が必要なコードで作業する場合のように、同じ仮定が当てはまらない状況もあり得るだろう。

<!-- In scenarios where the above assumption holds good, typing =, SPC= inserts a comma and a space.  Similarly, typing =, RET= inserts a comma and a newline. -->

上記の仮定が当てはまるようなシナリオでは`, SPC`をタイプしてカンマとスペース、`, RET`をタイプしてカンマと改行を挿入する。

<!-- In scenarios where we do need to type a single comma, type =, ,= instead. -->

1つのカンマが必要なシナリオであれば、かわりに`, ,`タイプすればよい。


<!-- Note that you could also type a single comma with =, q ,= which translates to =C-q ,= and inserts a literal comma.  The Emacs key sequence =C-q= invokes the command =quoted-insert= which inserts the next input character.  The =, ,= special key sequence is probably easier to type than this. -->

1つのカンマは`, q ,`とタイプして挿入することもできることに注意。このキーは`C-q ,`に変換されて、リテラルのカンマが挿入されるのだ。Emacsで`C-q`というキーシーケンスは、次に入力された文字を挿入するコマンド`quoted-insert`を呼び出す。しかしこれよりスペシャルキーシーケンス`, ,`の方が多分簡単だろう。

<!-- Also, it is worth mentioning here that if all this fiddling with the comma key feels clumsy, we could always customise the Devil key to something else that feels better.  We could also disable Devil mode temporarily and enable it again later with =C-,= as explained in section [[*Install]]. -->

カンマキーを弄るのがどうにも腑に落ちないのであれば、Devilキーをよりしっくりする何らかのキーにいつでもカスタマイズできるという点についても、記しておく価値があるだろう。セクション[インストール](#3-インストール)で触れたように、`C-,`でDevilモードを一時的に無効にしたり有効にすることもできる。

## 6. Devilのリーダー

<!-- The following points briefly describe how Devil reads Devil key sequences, translates them to Emacs key sequences, and runs commands bound to the key sequences: -->

以下にDevilがDevilキーシーケンスの読み込み、Emacsキーシーケンスへの変換、変換したキーシーケンスにバインドされたコマンドの実行をどのように行うかについて要点をまとめた。

<!-- 1. As soon as the Devil key is typed (which is `,` by default), Devil wakes up and starts reading Devil key sequences. Type `C-h v devil-key RET` to see the current Devil key. -->

- Devilキー(デフォルトでは`,`)をタイプすることでDevilが起動、Devilキーシーケンスの読み取りを開始する。`C-h v devil-key RET`とタイプすればカレントのDevilキーを確認できる。

<!-- 2. After each keystroke is read, Devil checks if the key sequence accumulated is a special key. If it is, then the special command bound to the special key is executed immediately. Note that this step is performed before any translation rules are applied to the input key sequence. This is how the Devil special key sequence `, SPC` inserts a comma and a space. Type `C-h v devil-special-keys RET` to see the list of special keys and the commands bound to them. -->

- キーストロークをすべて読み取った後に、蓄積されたキーシーケンスがスペシャルキーかどうかをDevilがチェック、もしそうならスペシャルキーにバインドされているスペシャルコマンドを即座に実行する。このステップは入力キーシーケンスに変換ルールが適用される前に処理されることに注意。この方法によってDevilキーシーケンス`, SPC`はカンマとスペースを挿入している。`C-h v devil-special-keys RET`タイプすればスペシャルキー、キーにバインドされているコマンドのリストを確認できる。

<!-- 3. If the key sequence accumulated so far is not a special key, then Devil translates the Devil key sequence to a regular Emacs key sequence. If the regular Emacs key sequence turns out to be a complete key sequence and some command is found to be bound to it, then that command is executed immediately. This is how the Devil key sequence `, x , f` is translated to `C-x C-f` and the corresponding binding is executed. If the translated key sequence is a complete key sequence but no command is bound to it, then Devil displays a message that the key sequence is undefined. Type `C-h v devil-translations RET` to see the list of translation rules. -->

- ここまで蓄積されたキーシーケンスがスペシャルキーでなければ、DevilはDevilキーシーケンスを通常のEmacsキーシーケンスに変換する。通常のEmacsキーシーケンスがコンプリートキーシーケンスであり、それにバインドされているコマンドがあれば、そのコマンドを即座に実行する。これがDevilキーシーケンス`, x , f`が`C-x C-f`に変換されて、それにバインドされたコマンドが実行される仕組み。変換されたキーシーケンスがコンプリートキーシーケンスであるもののコマンドがバインドされていなければ、Devilはそのキーシーケンスが未定義である旨を示すメッセージを表示する。`C-h v devil-translations RET`とタイプすれば変換ルールのリストを確認できる。

<!-- 4. After successfully translating a Devil key sequence to an Emacs key sequence and executing the command bound to it, Devil checks if the key sequence is a repeatable key sequence. If it is found to be a repeatable key sequence, then Devil sets a transient map so that the repeatable key sequences that belong to the same group as the typed Devil key sequence can be invoked merely by typing the last character of the input key sequence. This is how `, p p p f f` moves the cursor up by three lines and then by two characters forward. Type `C-h v devil-repeatable-keys RET` to see the list of repeatable Devil key sequences. -->

- DevilキーシーケンスからEmacsキーシーケンスへの変換、バインドされているコマンドの実行に成功したら、キーシーケンスがrepeat可能なキーシーケンスかどうかをDevilがチェック、repeat可能なキーシーケンスにバインドされていれば、Devilキーシーケンスとしてタイプされたキーと同じグループに属すrepeat可能キーを、入力キーシーケンスの最後の文字だけで実行できるように、Devilが一時的なマップをセットする。`, p p p f f`で3行上、2文字前方に移動できるのは、この仕組みによる。`C-h v devil-repeatable-keys RET`とタイプすればrepeat可能なDevilキーシーケンスを確認できる。

<!-- The variables `devil-special-keys`, `devil-translations`, and `devil-repeatable-keys` may contain keys or values with the string `%k` in them. This is a placeholder for `devil-key`. While applying the special keys, translation rules, or repeat rules, each `%k` is replaced with the actual value of `devil-key` before applying the rules. -->

変数`devil-special-keys`、`devil-translations`、`devil-repeatable-keys`にはキーまたは値として文字列`%k`が含まれているかもしれない。これは`devil-key`にたいするプレースホルダ。スペシャルキー、変換ルール、repeatルールの適用中は、ルールを適用する前に`%k`はそれぞれ実際の`devil-key`の値に置き換えられる。

## 7. 変換メカニズム

<!-- The following points provide an account of the translation mechanism that Devil uses in order to convert a Devil key sequence entered by the user to an Emacs key sequence: -->

以下はユーザーが入力したDevilキーシーケンスをEmacsキーシーケンスに変換するためにDevilが使用している変換メカニズムに関する要点の説明。

<!-- 1. The input key vector read from the user is converted to a key description (like the string produced by functions like `describe-key` and `key-description`). For example, if the user types `,x,f` it is converted to `, x , f`. -->

- ユーザーからのキーベクター入力は、(`describe-key`や`key-description`が生成する文字列のような)キー表記(key description: キー記述)へと変換される。たとえばユーザーがタイプした`,x,f`は`, x , f`に変換される。

<!-- 2. Now the resulting key description is translated with simple string replacements. If any part of the string matches a key in `devil-translations`, then it is replaced with the corresponding value. For example, `, x , f` is translated to `C- x C- f`. Then Devil normalises the result to `C-x C-f` by removing the stray spaces after the modifier keys. -->

- これで得られたキー表記は、シンプルな文字列置換によって変換される。この文字列の任意の部分が`devil-translations`のいずれかのキーとマッチしたら、そのキーに応じた数値へと置き換えられる。たとえば`, x , f`は`C- x C- f`.に変換される。修飾キーの後の半端なスペースは、結果が`C-x C-f`になるようにDevilによって正規化される。

<!-- 3. If the simple string based replacement discussed in the previous point leads to an invalid Emacs key sequence, it skips the replacement that causes the resulting Emacs key sequence to become invalid. For example `, m m ,` results in `C-M-C-` after the simple string replacement because the default translation rules replace the leading `, m m` with `C-M-` and the trailing `,` with `C-`. However, `C-M-C-` is an invalid key sequence, so the replacement of the trailing `,` to `C-` is skipped. Therefore, the input `, m m ,` is translated to `C-M-,` instead. -->

- 上記で議論した文字列ベースのシンプルな置換によって得られるのが不正なEmacsキーシーケンスであれば、不正な結果とならないようにその置換はスキップされる。たとえば`, m m ,`にたいしてこのシンプルな文字列置換で処理すると`C-M-C-`が得られる(デフォルトの編ルールにより先頭の`, m m`が`C-M-`、末尾の`,`が`C-`に変換されるからである。しかし`C-M-C-`は無効なキーシーケンスなので、末尾の`,`から`C-`への変換はスキップされる。したがって入力`, m m ,`は`C-M-,`へと変換されるのである。

<!-- 4. Finally, Devil looks for key chords in the key sequence that contain both the `C-` modifier and an uppercase letter. If such a key chord occurs, then it replaces the uppercase letter with its shifted form, e.g., `, m m V` first translates to `C-M-V` according to the previous points and then the result is translated to `C-M-S-v` according to this point. -->

- 最後にDevilはキーシーケンスから、修飾キー`C-`と大文字アルファベットの両方を含むようなキーコードを探す。そのようなキーコードがあれば大文字は小文字をシフト修飾した文字なので、たとえば`, m m V`にたいして上記の変換を行うと`C-M-V`が得られるが、ここで説明した変換により`C-M-S-v`が得られることになる。

## 8. デフォルトの変換ルール

<!-- By default, Devil supports a small but peculiar set of translation rules that can be used to avoid modifier keys while typing various types of key sequences. See `C-h v devil-translations RET` for the translation rules. Here are some examples that demonstrate the default translation rules. The obvious ones are shown first. The more peculiar translations come later in the table. The concluding paragraph of this subsection offers a guide on how to gradually and gently adopt these key sequences into your daily routine. -->

デフォルトでDevilがサポートしているのはさまざまなタイプのキーシーケンスの入力から修飾キーを取り除くための、小さくて一風変わった一連の変換ルールである。変換ルールについては`C-h v devil-translations RET`で確認できる。以下にデフォルトの変換ルールのデモンストレーションをいくつか示そう。明快な例から始めて、最後に向かうにつれて複雑な変換をお見せしていく。このサブセクション最後のパラグラフでは、いかにしてこれらのキーシーケンスを徐々に無理なく、日常の編集活動に取り入れていくかについてのガイドラインも示しておいた。


<!-- | Input | Translated | Remarks | -->
<!-- |-----------+------------+-------------------------------------------| -->
<!-- | `, s` | `C-s` | Rule 1: `,` is replaced with `C-` | -->
<!-- | `, m x` | `M-x` | Rule 2: `, m` is replaced with `M-` | -->
<!-- | `, [ x` | `C-[ x` | equivalent to `M-x` | -->
<!-- | `, m m s` | `C-M-s` | Rule 3: `, m m` is replaced with `C-M-` | -->
<!-- | `, m ,` | `M-,` | Rule 4: `, m ,` is replaced with `M-,` | -->
<!-- | `, m z m` | `M-m` | Rule 5: `, m z` is replaced with `M-` too | -->
<!-- | `, c , ,` | `C-c ,` | Rule 6: `, ,` is replaced with `,` | -->
<!-- | `, z SPC` | `C-SPC` | Rule 7: `, z` is replaced with `C-` too | -->
<!-- | `, z z` | `C-z` | ditto | -->
<!-- | `, z ,` | `C-,` | ditto | -->

| 入力      | 置換後  | 備考                              |
|-----------|---------|-----------------------------------|
| `, s`     | `C-s`   | Rule 1: `,`は`C-`に置き換え       |
| `, m x`   | `M-x`   | Rule 2: `, m`は`M-`に置き換え     |
| `, [ x`   | `C-[ x` | `M-x`と同じ                       |
| `, m m s` | `C-M-s` | Rule 3: `, m m`は`C-M-`に置き換え |
| `, m ,`   | `M-,`   | Rule 4: `, m ,`は`M-,`に置き換え  |
| `, m z m` | `M-m`   | Rule 5: `, m z`も`M-`に置き換え   |
| `, c , ,` | `C-c ,` | Rule 6: `, ,`は`,`に置き換え      |
| `, z SPC` | `C-SPC` | Rule 7: `, z`も`C-`に置き換え     |
| `, z z`   | `C-z`   | 同上                              |
| `, z ,`   | `C-,`   | 同上                              |

<!-- Note how we cannot use `, SPC` to set a mark because that key sequence is already reserved as a special key sequence in `devil-special-keys`. In order to conveniently set a mark, Devil translates `, z` to `C-` too, so that we can type `, z SPC` and have Devil translate it to `C-SPC`. -->

`, SPC`をマークのセットに使用できないは、そのキーシーケンスが既に`devil-special-keys`でスペシャルキーシーケンスとして予約済みであるという点に注意。利便性のためにDevilは`, z`も`C-`に変換する。そうすれば`, z SPC`とタイプすれば`C-SPC`に変換されるので、簡単にマークをセットできるだろう。

<!-- Also, note that while `, m` may be used to type `M-` we have `, [` as yet another way to type a key sequence that contains `M-` because `, [` translates to `C-[` and `C-[ <key>` is equivalent to `ESC <key>` which in turn is equivalent to `M-<key>`. -->

`M-`のタイプには`, m`を使うことができるが、`M-`を含んだキーシーケンスをタイプする別の方法に`, [`がある。これは`C-[`や`C-[ <key>`に変換されるが、`ESC <key>`は`M-<key>`と等価なのだ。

<!-- The default translation examples presented in the table above look weirder and weirder as we go down the table. But they are not as arbitrary as they might initially appear to be. They are arranged in such a way that overall, we get the following effect: -->

上の表で示したデフォルトの変換例は下にいくほど奇妙に見えるかもしれない。しかし初見で感じるほど独断的に決められた訳でもないのだ。この表は以下のような効果を期待して編成した:


<!-- - Devil translates the input `,` to `C-`. Similarly it translates `, m` to `M-` and `, m m` to `C-M-`. -->

<!-- - When we really want to type the Devil key `,` we need to double type it in the Devil key sequence. Doubling the special character serves as an escape mechanism to avoid the special meaning of the Devil key and get its literal form instead. -->

<!-- - Now since `, ,` translates to `,` we need another escape mechanism to type `C-,`. Typing `z` in between serves as this escape mechanism, i.e., within a Devil key sequence `, z ,` translates to `C-,`. -->

<!-- - Similarly since `, m m` translates to `C-M-` we need an escape mechanism to type `M-m`. Again, typing `z` in between serves as this escape mechanism, i.e., `, m z m` translates to `M-m`. -->

- Devilは`,`を`C-`、`, m`を`M-`、`, m m`を`C-M-`に変換する

- Devilキーで本当の`,`をタイプしたければ、このキーシーケンスを2回連続でタイプする必要がある。スペシャル文字を2回連続でタイプするということには、Devilキーの特別な意味を打ち消してリテラル形式が得られるようにするエスケープメカニズムとしての役目がある

- `, ,`は`,`に変換されるので`C-,`をタイプするための、もう1つ別のエスケープメカニズムが必要になった。それが間に`z`をタイプするというエスケープメカニズムだ。つまりDevilキーシーケンスの`, z ,`は`C-,`に変換される。

- `, m m`は`C-M-`に変換されるので`M-m`をタイプするためのエスケープメカニズムも必要になる。そこで同じように間に`z`をタイプする、すなわち`, m z m`は`M-m`に変換するというのが、このエスケープメカニズムなのだ。

<!-- Here is a gentle guide to adopting these key sequences: For beginners using Devil, it is not necessary to memorise all of them right away. Understanding that `,` translates to `C-` and `, m` translates to `M-` is sufficient to begin. Subsequently, learning that `, m m` translates to `C-M-` unlocks several more key sequences like `, m m s` (`C-M-s`), `, m m f` (`C-M-f`), etc. As you encounter more key sequences that are not covered by these initial rules, revisit the above table to pick up new translation rules and adopt them in your day-to-day usage of Devil. -->

以上がこのキーシーケンスを採用するに至った経緯の簡単なガイドラインになる。Devil初心者がこれらのすべてを覚えておく必要はない。とりあえず始めるにあたっては`,`が`C-`、`, m`は`M-`に変換されることだけ理解していれば十分だ。使い始めてから`, m m`が`C-M-`に変換されると学習すれば`, m m s` (`C-M-s`)や`, m m f` (`C-M-f`)といったより多くのキーシーケンスへの扉が開くだろう。    Devilを日常的に使用していく過程でこれらの初歩的ルールが網羅しないキーシーケンスに出会ったら、そのときは上記の表に立ち戻って新たな変換ルールを採用して欲しい。

## 9. DevilキーのDescribe

<!-- Devil offers a command named `devil-describe-key` that can be used to describe a Devil key sequence. It works similarly to the `describe-key` command of vanilla Emacs that can be invoked with `C-h k`. The `devil-describe-key` command can be invoked with the special key sequence `, h , k`. Type `, h , k` and a prompt appears to read a key sequence. Type any Devil key sequence, say, `, x , f` and Devil immediately shows the documentation for the function invoked by this key sequence. -->

DevilはDevilキーシーケンスの記述に使用できるコマンドとして`devil-describe-key`を提供する。素のEmacsにおいて`C-h k`で呼び出せる`describe-key`コマンドと同じように機能する。Devil版の`devil-describe-key`はスペシャルキーシーケンス`, h , k`で呼び出すことができる。`, h , k`とタイプすると、キーシーケンスを読み込むためのプロンプトが表示されるだろう。何かDevilキーシーケンス、たとえば`, x , f`をタイプすれば、このキーシーケンスによって呼び出される関数のドキュメントをDevilが即座に表示するのだ。

<!-- Note that `, x , f` (`devil-describe-key`) can also be used to look up documentation for vanilla Emacs key sequences like `C-x C-f`. -->

<!-- Also note that the Devil key sequence is `, h k` is still free to invoke `C-h k` (`describe-key` of vanilla Emacs). -->

`C-x C-f`のような素のEmacsキーシーケンスのドキュメント参照にも`, x , f` (`devil-describe-key`)を使用できることに注意。

Devilキーシーケンスである`, h k`の方は依然として`C-h k` (素のEmacsの`devil-describe-key`)を自由に呼び出せることにも注意して欲しい。

## 10. ボーナスのキーバインディング

<!-- Devil adds the following additional key bindings only when Devil is enabled globally with `global-devil-mode`: -->

<!-- - Adds the Devil key to `isearch-mode-map`, so that Devil key sequences work in incremental search too. -->

<!-- - Adds `u` to `universal-argument-more` to allow repeating the universal argument command `C-u` simply by repeating `u`. -->

<!-- As mentioned before these features are available only when Devil is enabled globally with `global-devil-mode`. If Devil is enabled locally with `devil-mode`, then these features are not available. -->

Devilは`global-devil-mode`によってグローバルにDevilが有効化されている場合に限り、以下のキーバインディングを追加提供する:

- `isearch-mode-map`へのDevilキーの追加(インクリメンタル検索でもDevilキーシーケンスが機能する)

- `universal-argument-more`への`u`の追加(`u`だけでユニバーサル引数コマンド`C-u`を繰り返すことができる)

繰り返しになるが、これらの機能は`global-devil-mode`でグローバルにDevilを有効化した場合のみ利用できる。

`devil-mode`でローカルにDevilを有効にした場合には、これらの機能は利用できない。

## 11. カスタム設定の例

<!-- In the examples presented below, the `(require 'devil)` calls may be omitted if Devil has been installed from a package archive like ELPA or MELPA. There are appropriate autoloads in place in the Devil package that would ensure that it is loaded automatically on enabling Devil mode. However, the `require` calls have been included in the examples below for the sake of completeness. -->

以下の例において`(require 'devil)`呼び出しについては、ELPAやMELPAのようなパッケージアーカイブ経由でDevilをインストールした場合には不要かもしれない。Devilパッケージには適切なautoloadがあるので、Devilモードを有効化することで自動的にロードされる筈だ。しかしここでは万全を期すために、`require`呼び出しも含めてある。

### 11.1 ローカルモード

<!-- While the section [[*Install]] shows how we enable Devil mode globally, this section shows how we can enable it locally. Here is an example initialization code that enables Devil locally only in text buffers. -->

<!-- ```lisp -->
<!--  (require 'devil) -->
<!--  (add-hook 'text-mode-hook 'devil-mode) -->
<!--  (global-set-key (kbd "C-,") 'devil-mode) -->
<!-- ``` -->

<!-- This is not recommended though because this does not provide a seamless Devil experience. For example, with Devil enabled locally in a text buffer like this, although we can type `, x , f` to launch the `find-file` minibuffer, we cannot use Devil key sequences in the minibuffer. Further the special keymaps described in the previous section work only when Devil is enabled globally. -->

セクション[,インストール](#3-インストール)ではDevilモードをグローバルに有効にする方法を紹介したが、ここではローカルに有効にする方法について説明しよう。以下はテキストバッファーでのみローカルにDevilを有効化する初期化コードの例だ。

```lisp
 (require 'devil)
 (add-hook 'text-mode-hook 'devil-mode)
 (global-set-key (kbd "C-,") 'devil-mode)
```

ただしシームレスなDevil経験は得られないのでお勧めはしない。たとえばこの例のようにテキストバッファーでローカルにDevilを有効にすると、ミニバッファーで`, x , f`をタイプして`find-file`を起動できなくなる。ミニバッファーでDevilキーシーケンスが使えなくなるのだ。更に前のセクションで述べた機能は、Devilモードがグローバルに有効なときしか使用できない。

### 11.2 バッファーのデフォルトモード

<!-- While enabling `global-devil-mode` is typically enough for using Devil in every buffer the user encounters, buffer creation which bypasses the traditional setup hooks will not have the mode enabled by default. The most likely place to encounter this problem is with the default Emacs startup screen, which is created after the user's init file has been processed but does not run any hooks which will enable Devil. -->

`global-devil-mode`で有効にするだけで、通常ユーザーが目にするであろうすべてのバッファーでDevilを使うには十分かもしれないが、従来のセットアップフックをバイパスして作成されたバッファーについては、デフォルトではモードは有効にならない。この問題にもっとも遭遇しやすい場所が、Emacsのスタートアップスクリーンだ。このバッファーはユーザーのinitファイルの処理後に作成されるバッファーだが、Devilを有効化する如何なるフックも実行しないのだ。

<!-- To solve this particular problem it is recommended to either customise the startup screen to one which does run the required hooks, or to advise the `display-startup-screen` function to enable Devil in the buffer once created. Here is an example of enabling `global-devil-mode` and ensuring it is activated in the default Emacs startup screen. -->

この特定的な問題を解決するには必要なフックを実行するようにスタートアップスクリーンをカスタマイズするか、あるいはバッファーの作成後にDevilを有効化するように`display-startup-screen`にadviseするかのいずれかをお勧めする。以下は`global-devil-mode`を有効にしてデフォルトのEmacsスタートアップスクリーンでアクティブにする例だ。

```lisp
 (require 'devil)
 (global-devil-mode)
 (advice-add 'display-startup-screen
             :after (lambda (&optional _) (devil-mode 1)))
```

<!-- This solves the problem most likely to be encountered. But what if you do genuinely need Devil active in *every* buffer? When `devil-global-sets-buffer-default` is set to `t` and `global-minor-mode` is called, Devil will be enabled in all new buffers by default. Enabling this functionality may seem appealing, but consider that not all buffers are intended to be interacted with, and the decision to opt-out of hooks which could apply a minor-mode is likely to have been intentional. Even though it is not recommended, the following example demonstrates how to have Devil active in all buffers by default. -->

これで出会う可能性がある問題は解決する筈だ。しかしあなたが正真正銘*すべて*のバッファーでDevilをアクティブにする必要があるときはどうするか? `devil-global-sets-buffer-default`が`t`のときに`global-minor-mode`を呼び出すと、新たに作成されるすべてのバッファーではデフォルトでDevilが有効になる。この機能を有効にするのは魅力的に思えるかもしれないが、すべてのバッファーが対話的であることを意図している訳ではないこと、適用されるかもしれないフックをマイナーモードが外すのはおそらく意図があってのことである点を考慮すること。推奨はしないが、以下はすべてのバッファーでデフォルトでDevilをアクティブにする例を示す。

```lisp
  (require 'devil)
  (setq devil-global-sets-buffer-default t)
  (global-devil-mode)
```

### 11.3 外観のカスタマイズ

<!-- The following initialization code shows how we can customise Devil to show a Devil smiley (😈) in the modeline and in the Devil prompt. -->

以下の初期化コードはモードラインとDevilプロンプトにDevilスマイル(😈)を表示させるカスタマイズ例だ。

```lisp
  (require 'devil)
  (setq devil-lighter " \U0001F608")
  (setq devil-prompt "\U0001F608 %t")
  (global-devil-mode)
  (global-set-key (kbd "C-,") 'global-devil-mode)
```

### 11.4 ", SPC"をマークのセットにするには

<!-- The default configuration for special keys reserves `, SPC` to insert a literal comma followed by space. This default makes it easy to type comma in various contexts. However, this means that `, SPC` does not translate to `C-SPC`. Therefore `, SPC` cannot be used to set mark. Instead, the default translation rules offer `, z SPC` as a way to set mark. -->

デフォルトの設定では`, SPC`はカンマとスペースを挿入するスペシャルキーとして予約済みだ。このデフォルトはさまざまなコンテキストにおいてカンマのタイプを簡単にするためだ。しかしこれは`, SPC`が`C-SPC`に変換されないという意味でもある。つまり`, SPC`ではマークをセットできない。その代替えとしてデフォルトの変換ルールでは、マークをセットする方法として`, z SPC`を提供している。

<!-- If you would rather set mark using `, SPC` and you are happy with typing the special key `, ,` to insert a literal comma, then use the following configuration: -->

リテラルのカンマを挿入するためにスペシャルキー`, ,`をタイプすることが面倒でなければ、以下の設定を使えば`, SPC`でマークがセットできる:

```lisp
  (require 'devil)
  (global-devil-mode)
  (global-set-key (kbd "C-,") 'global-devil-mode)
  (assoc-delete-all "%k SPC" devil-special-keys)
```

<!-- This removes the special key `, SPC` from `devil-special-keys` so that it is now free to be translated to `C-SPC` and invoke `set-mark-command`. -->

これにより`devil-special-keys`からスペシャルキー`, SPC`が削除されるので`C-SPC`に変換されて`set-mark-command`を呼び出すようになる筈だ。

### 11.5 カスタムDevilキー

<!-- The following initialization code shows how we can customise Devil to use a different Devil key. -->

以下は違うDevilキーを使うようにDevilをカスタマイズする初期化コードの例を示す。

```lisp
  (require 'devil)
  (global-devil-mode)
  (global-set-key (kbd "C-;") 'global-devil-mode)
  (devil-set-key (kbd ";"))
```

<!-- The above example sets the Devil key to the semicolon, perhaps another dubious choice for the Devil key. With this configuration, we can use `; x ; f` and have Devil translate it to `C-x C-f`. -->

この例ではDevilキーとして(もしかしたらDevilキーに相応しいより邪悪な別解かもしれない)セミコロンをセットしている。この設定の場合には`; x ; f`とタイプするとDevilがそれを`C-x C-f`に変換するだろう。

### 11.6 Devilキーを別のキーにカスタマイズする

<!-- The following initialization code shows how we can customise Devil to use yet another different Devil key. -->

以下の例では他のDevilを使用するようにカスタマイズする別の初期化コードをお見せしよう。

```lisp
  (require 'devil)
  (global-devil-mode)
  (global-set-key (kbd "C-<left>") 'global-devil-mode)
  (devil-set-key (kbd "<left>"))
  (dolist (key '("%k SPC" "%k RET" "%k <return>"))
    (assoc-delete-all key devil-special-keys))
```

<!-- The above example sets the Devil key to the left arrow key. With this configuration, we can use `<left> x <left> f` and have Devil translate it to `C-x C-f`. We can type the special key `<left> <left>` to produce the same effect as the original `<left>`. -->

上記の例では左矢印キーをDevilキーにセットしている。この設定の場合だと`<left> x <left> f`とタイプすればDevilが`C-x C-f`に変換する。スペシャルキー`<left> <left>`が元の`<left>`を生成する効果は同じだ。

<!-- The above example removes some special keys that are no longer useful. In particular, `<left> SPC` is no longer reserved as a special key, so we can use it now to set a mark. -->

上記の例では最早有用とはいえなくなったスペシャルキーもいくつか削除している。特に`<left> SPC`がスペシャルキーとして予約されなくなったので、これをマークのセットに使用することができる。

### 11.7 複数のDevilキー

<!-- While this package provides the comma (`,`) as the default and the only Devil key, nothing stops you from extending the mode map to support multiple Devil keys. Say, you decide that in addition to activating Devil with `,` which also plays the role of `C-`, you also want to activate Devil with `.` which must now play the role of `M-`. To achieve such a result, you could use this initialization code as a starting point and then customise it further based on your requirements: -->

このパッケージはデフォルトとしてカンマ(`,`)を、それも唯一のDevilキーとして提供しているが、複数のDevilキーをサポートするためのモードの拡張を妨げるものはない。たとえばDevilをアクティブにすることで`,`に`C-`の役目をもたせるだけではなく、Devilをアクティブにすれば`.`が`M-`の役目をもつようにしたいと考えたとしよう。この目標を達成するための開始点として以下の初期化コードを使用して、その後は要件に基づいて更にカスタマイズするということもできるだろう:

```lisp
  (require 'devil)
  (global-devil-mode)
  (define-key devil-mode-map (kbd ".") #'devil)
  (add-to-list 'devil-special-keys `(". ." . ,(devil-key-executor ".")))
  (setq devil-translations '((", z" . "C-")
                             (". z" . "M-")
                             (", ," . ",")
                             (". ." . ".")
                             ("," . "C-")
                             ("." . "M-")))
```

<!-- With this configuration, we can type `, x , f` for `C-x C-f` like before. But now we can also type `. x` for `M-x`. Similarly, we can type `, . s` for `C-M-s` and so on. Also `, ,` inserts a literal comma and `. .` inserts a literal dot. Further we can type `, z ,` to get `C-,` and `. z .` to get `M-.`. -->

この設定なら前と同じように`, x , f`で`C-x C-f`をタイプできる。しかし今度は`. x`で`M-x`をタイプできるのだ。そして`, . s`で`C-M-s`とか、他にも組み合わせはあるだろう。さらに`, ,`はリテラルのカンマ、`. .`はリテラルのドットを挿入する。更に`, z ,`で`C-,`、`. z .`で`M-.`もタイプできるようになった。

<!-- Note that by default Devil configures only one activation key (`,`) because the more activation keys we add, the more intrusive Devil becomes during regular editing tasks. Every key that we reserve for activating Devil loses its default function and then we need workarounds to somehow invoke the default function associated with that key (like repeating `.` twice to insert a single `.` in the above example). Therefore, it is a good idea to keep the number of Devil keys as small as possible. -->

デフォルトのDevilの設定ではDevilアクティブ化のキーは1つだけ(`,`)であること、そしてアクティブにするキーをより多く追加することによって、通常の編集タスク中にDevilがでしゃばる機会がより多くなることに注意。Devilのアクティブ化のために予約済みのキーはすべてデフォルトの機能性を失い、そのキーに割り当てられているデフォルトの機能を呼び出すためには、何らかの余計な手間が必要になる(たとえば上述のように1つの`.`の挿入に`.`を2回繰り返す等)。したがって、Devilキーはできるだけ少ない個数に保っておいたほうがよいだろう。

### 11.8 すべてのキーをrepeat可能に

<!-- By default Devil has a small list of key sequences that are considered repeatable. This list is defined in the variable `devil-repeatable-keys`. Type `C-h v devil-repeatable-keys RET` to view this list. For example, consider the repeatable key sequence group `("%k p" "%k n" "%k f" "%k b")` in this list. Assuming that the default Devil and Emacs key bindings have not been changed, this means that after we type `, p` and move the cursor to the previous line, we can repeat this operation by typing `p` over and again. We can also immediately type `f` to move the cursor right by one character. The repetition occurs as long as the last character of any repeatable key sequence in the group is typed again. Typing any other key stops the repetition and the default behaviour of the other key is then observed. -->

Devilにはデフォルトでrepeat可能とみなすキーシーケンスの小さなリストが用意されている。これは変数`devil-repeatable-keys`で定義されているリストだ。このリストの内容は`C-h v devil-repeatable-keys RET`で確認できる。たとえばこのリストにrepeat可能なキーシーケンスのグループ`("%k p" "%k n" "%k f" "%k b")`が定義されているとしよう。DevilとEmacsのデフォルトのキーバインディングが変更されていなければ、この定義は`, p`をタイプした後にカーソルを前の行に移動すること、`p`をタイプする度に何度もこれを繰り返せることを意味している。間を開けずに`f`をタイプすれば1文字分カーソルが右に移動する。この繰り返しはグループ内のキーシーケンスであればどれでも、最後の文字をタイプするだけで繰り返すことができる。何か別のキーをタイプすれば繰り返しが終わって、タイプしたキーのデフォルトの動作に戻るだろう。

<!-- It is possible to make all key sequences repeatable by setting the variable `devil-all-keys-repeatable` to `t`. Here is an example configuration: -->

変数`devil-all-keys-repeatable`を`t`にセットすれば、すべてのキーシーケンスを繰り返しできるようにすることも可能だ。以下はその設定例:

```lisp
  (require 'devil)
  (setq devil-all-keys-repeatable t)
  (global-devil-mode)
```

<!-- With this configuration, the repeatable key sequence groups still function as described above. However, in addition to that now all other Devil key sequences that end up executing Emacs commands also become repeatable, i.e., any Devil key sequence that does not belong to `devil-all-keys-repeatable` but invokes an Emacs command is now repeatable and it can be repeated by merely repeating the last character of the key sequence. -->

この設定でも上述のrepeat可能なキーシーケンスグループの機能は失われない。しかしこれらのキーシーケンスに加えて、最終的にはEmacsコマンドを実行するようなDevilキーシーケンスすべてが繰り返し可能になったのだ。つまり`devil-all-keys-repeatable`には属していないがEmacsコマンドを呼び出すDevilキーシーケンスはrepeat可能、すなわち間を開けずにそのキーシーケンスの最後の文字で繰り返すことができる。

<!-- Note that only Devil key sequences that get translated to a regular Emacs key sequence and result in the execution of an Emacs command can be repeatable. The special keys defined in `devil-special-keys` are never repeatable. -->

正規のEmacsキーシーケンスに変換されること、変換した結果としてEmacsコマンドが実行されるようなDevilキーシーケンスだけが繰り返し可能であることに注意。`devil-special-keys`で定義されているキーシーケンスが繰り返し可能になることはないのだ。

### 11.9 Repeatモードとの相互作用

<!-- Repeatable keys in Devil function somewhat like `repeat-mode` introduced in Emacs 28.1. Here is an example configuration that disables repeatable keys in Devil and shows how to use `repeat-mode` instead to define repeatable commands. -->

Devilのrepeat可能なキーの機能は、Emacs 28.1で導入された`repeat-mode`と類似する機能だ。以下はDevilのrepeat可能キーを無効にして、repeat可能なコマンドの定義に`repeat-mode`を用いる設定の例を示す。

```lisp
  (require 'devil)
  (global-devil-mode)
  (setq devil-repeatable-keys nil)

  (defvar movement-repeat-map
    (let ((map (make-sparse-keymap)))
      (define-key map (kbd "p") #'previous-line)
      (define-key map (kbd "n") #'next-line)
      (define-key map (kbd "b") #'backward-char)
      (define-key map (kbd "f") #'forward-char)
      map))

  (dolist (cmd '(previous-line next-line backward-char forward-char))
    (put cmd 'repeat-map 'movement-repeat-map))

  (repeat-mode)
```

<!-- Now if we type `C-p` to move the cursor up by one line, we can repeat it by merely typing `p` again and we can also type or repeat `n`, `b`, or `f`, to move the cursor down, left, or right respectively. -->

ここで1行上にカーソルを移動するために`C-p`をタイプしたとすると間を開けずに`p`をタイプすれば繰り返し移動できるし`n`、`b`、`f`でもカーソルを下、左、あるいは右に移動できる。

<!-- Repeat mode works fine with Devil too, so with the above configuration, when we type `, p` to move the cursor to the previous line, we can type or repeat `p`, `n`, `b`, or `f` to move the cursor up, down, left, or right again. -->

repeatモードはDevilと良好に機能するので、上の設定であれば前の行へカーソルを移動するために`, p`をタイプしたら`p`、`n`、`b`、`f`で上下左右にカーソルを移動できる。

<!-- We do not really need to disable Devil's repeatable keys while using repeat mode. Both can be enabled together. However, the results can be surprising due to certain differences between the two. For example, consider the following configuration: -->

実際のところrepeatモードを使用中にDevilのrepeatキーを不要にする必要はない。両者は共存できるのだ。しかし両者の間に存在する特定の差異によっては、驚くべき結果となることもある。たとえば以下のような設定だと:

```lisp
  (require 'devil)
  (global-devil-mode)

  (defvar movement-repeat-map
    (let ((map (make-sparse-keymap)))
      (define-key map (kbd "p") #'previous-line)
      (define-key map (kbd "n") #'next-line)
       map))

  (dolist (cmd '(previous-line next-line))
    (put cmd 'repeat-map 'movement-repeat-map))

   (repeat-mode)
```

<!-- Now both Devil repeatable keys and repeat mode are active. If we now type `, p` we can repeat `p` and `n` to move the cursor up and down. Repeat mode makes this repetition possible. Additionally, after typing `, p` we can also type or repeat `b` and `f` to move the cursor left and right. Devil makes this repetition possible. We can tell the difference between repeat mode handling repeatable commands and Devil mode handling repeatable keys by looking at the echo area. When we repeat `p` which is handled by repeat mode, we see a message "Repeat with p, n" in the echo area. But when we repeat `b` which is handled by Devil, we see no such message; Devil sets up repeatable keys silently. -->

これでDevilのrepeat可能キーとrepeatモードの両方がアクティブになった。ここで`, p`をタイプすると、`p`や`n`でカーソルを繰り返し上下できる。今度は繰り返しを実現しているのはrepeatモードだ。更に`, p`をタイプした後であれば、`b`や`f`でカーソルを繰り返し左右に移動できる。こちらを実現しているのはDevilモードだ。repeatモードが処理するrepeat可能コマンドと、Devilモードが処理するrepeat可能キーとの違いは、エコーエリアを注視すれば判るだろう。`p`を繰り返しはrepeatモードによって処理されて、エコーエリアには"Repeat with p, n"のメッセージが確認できる筈だ。しかしDevilが処理する`b`を繰り返した場合には、Devilがrepeat可能を暗黙にセットアップするのでこのようなメッセージを目にすることはないだろう。

### 11.10 Repeatモードとの比較

<!-- The previous section demonstrates how much of what Devil accomplishes with its support for repeatable key sequences can also be accomplished with `repeat-mode` that comes out of the box in Emacs 28.1 and later versions. -->

前のセクションではrepeat可能なキーシーケンスをDevil、およびEmacsのバージョン28.1以降で同梱されるようになったrepeatモードそれぞれが実現する度合いをデモンストレーションした。

<!-- However, there is a crucial difference between Devil's repeatable keys and `repeat-mode`. Repeat mode provides repeatable /commands/ but Devil supports repeatable /keys/. This different is crucial and arguably makes repeatable key sequences easier to configure in Devil. To demonstrate the difference, let us consider the key sequence `M-e`. The command `forward-sentence` is bound to it by default in the global map. However, in Org mode, the command `org-forward-sentence` is bound to it. The corresponding Devil key sequence is `, m e` and this is a repeatable key sequence in Devil. Therefore, we can type `, m e` followed by `e e e` and so on to move the cursor forward by multiple sentences in text mode as well as in Org mode. -->

とはいえDevilのrepeat可能キーと`repeat-mode`の間には厳然たる違いが存在する。repeatモードが提供するのはrepeat可能な*コマンド*だが、Devilがサポートしているのはrepeat可能な*キー*であるという点だ。この重要な違いにより、Devilでrepeat可能キーを構成するほうがほぼ間違いなく簡単なのだ。この違いをキーシーケンス`M-e`で実証してみよう。このキーシーケンスにはデフォルトでは、グローバルマップで`forward-sentence`コマンドにバインドされている。しかしOrgモードでは`org-forward-sentence`にバインドされているキーシーケンスだ。これに相当するDevilキーシーケンスは`, m e`であり、これはDevilではrepeat可能なキーシーケンスである。したがって`, m e`をタイプした後ならtextモードと同じくOrgでも、`e e e`と間を開けずにタイプすることによって、カーソルを前方に連続して移動させることができるのだ。repeat モードで同じ挙動を実現するためには、以下のような設定が必要になるだろう:

```lisp
  (require 'devil)
  (global-devil-mode)
  (setq devil-repeatable-keys nil)
  
  (defvar forward-sentence-repeat-map
    (let ((map (make-sparse-keymap)))
      (define-key map (kbd "e") #'forward-sentence)
      map))
  
  (defvar org-forward-sentence-repeat-map
    (let ((map (make-sparse-keymap)))
      (define-key map (kbd "e") #'org-forward-sentence)
      map))
  
  (put #'forward-sentence 'repeat-map 'forward-sentence-repeat-map)
  (put #'org-forward-sentence 'repeat-map 'org-forward-sentence-repeat-map)
  
  (repeat-mode)
```

<!-- Note how we need to configure repeat mode for both commands that are bound to `M-e`. With the above configuration, we can now type `, m e` followed by `e e e` to move forward by multiple sentences in both text mode as well as Org mode. However, we can never be sure if we missed configuring repeat mode for some other command that might be bound to `M-e` in some mode. For example, in C mode, the command `c-end-of-statement` is bound to `M-e`. The above configuration is no good for repeating this command by typing `e e e`. -->

どちらも`M-e`にバインドされている2つのコマンド用に、repeatモードをどのように設定する必要があるかに注目して欲しい。この設定であればtextモードとOrgモードの両方で、`, m e`をタイプした後に`e e e`と続けて前方に複数センテンス移動できるだろう。ただし`M-e`に何らかののコマンドをバインドしている、他のモードにたいするrepeatモードの設定を忘れていなければよいが。たとえばそう、`M-e`にコマンド`c-end-of-statement`をバインドしているCモードのようなモードのことだ。上記の設定ではこのコマンドを`e e e`で繰り返すには足りていないらしい。

<!-- Devil, however, can repeat the command bound to `M-e` in any mode. Devil does not merely make the command bound to it in a particular mode repeatable. Instead Devil makes the key sequence `, m e` itself repeatable. Therefore, with Devil's own support for repeatable key sequences, we can type `, m e` and then `e e e` to repeat the command bound to `M-e` regardless of which mode is active or which command is bound to this key sequence. -->

しかしDevilであればすべてのモードにおいて`M-e`にバインドされているコマンドを繰り返すことができるのだ。Devilは単に特定のモードでバインドされたコマンドをrepeat可能にするのではなく、`, m e`というキーシーケンス自体をrepeat可能にする。したがってDevil独自のrepeat可能なキーシーケンスのサポートを使用すればアクティブなモード、あるいはキーシーケンス`, m e`にバインドされているコマンドが何であれ`e e e`でそのコマンドを繰り返すことができる。

## 12. どうしてこうなった?

<!-- Why go to the trouble of creating and using something like this? Why not just remap `caps lock` to `ctrl` like every other sane person does? Or if it is so important to avoid modifier keys, why not use something like God mode or Evil mode? -->

わざわざこのようなモードを作成、使用するのはなぜだろう? 他のまともな人のように`caps lock`を`ctrl`にリマップするだけでよいのでは? そんなに修飾キーを避けることが重要なのであれば、GodモードやEvilモードのようなモードを使えばよいではないか?

<!-- Well, for one, both God mode and Evil mode are modal editing modes. Devil, on the other hand, retains the non-modal editing experience of Emacs. -->

まずGodモードとEvilモードはいずれもモーダル編集モードであることが理由の1つだ。一方DevilではEmacsにおける非モーダル編集のエクスペリエンスは保たれる。


<!-- Devil mode began as a fun little experiment. From the outset, it was clear that using something as crucial as the comma for specifying the modifier key is asking for trouble. However, I still wanted to see how far I could go with it. It turned out that in a matter of days, I was using it full-time for all of my Emacs usage. -->

当初Devilは小さな実験として始まった。カンマのような重要なキーを使って修飾キーを指定することが災いの元であることは、初めから明らかだった。しかしどこまでそれが可能なのかを試してみたかったのだ。そして数日使用してみて、Emacsで行うすべてのことに常用できることが判った。

<!-- This experiment was partly motivated by Macbook keyboards which do not have a `ctrl` key on the right side of the keyboard. Being a touch-typist myself, I found it inconvenient to type key combinations like `C-x`, `C-s`, `C-r`, `C-d`, `C-f`, `C-w`, `C-a`, `C-e`, etc. where both the modifier key and the modified key need to be pressed with the left hand fingers. I am not particularly fond of remapping `caps lock` to behave like `ctrl` because that still suffers from the problem that key combinations like `C-x`, `C-a` require pressing both the modifier key and the modified key with the left hand fingers. I know many people remap both their `caps lock` and `enter` to behave like `ctrl`. While I think that is a fine solution, I was not willing to put up with the work required to make that work seamlessly across all the various operating systems I work on. -->

この実験は右側に`ctrl`キーがないMacbookのキーボードによって動機づけられた部分もある。タッチタイプを行う者としては`C-x`、`C-s`、`C-r`、`C-d`、`C-f`、`C-w`、`C-a`、`C-e`のような修飾キーと被修飾キーの両方を左手で押下する必要があるキー組み合わせをタイプするのに不便だと感じていたのだ。`caps lock`が`ctrl`のように振る舞うようにリマップするという方法にたいしても、特に食指を動かされることはなかった。依然として`C-x`や`C-a`のようなキー組み合わせは、修飾キーと被修飾キーの両方を左手で押下する必要があるからだ。`ctrl`として振る舞うように、`caps lock`と`enter`の両方をリマップする人が沢山いるのは知っていた。素晴らしい解決策だとは思ったが、わたしが作業を行っているさまざまなオペレーティングシステムすべてにおいて、これをシームレスに動作させるために要される作業を行う気にはなれなかったのだ。

<!-- What began as a tiny whimsical experiment a few years ago turned out to be quite effective, at least to me.  I like that this solution is implemented purely as Elisp and therefore does not have any external dependency.  I am sharing this solution in the form of a minor mode, just in case, there is someone out there who might find this useful too. -->

気まぐれで始まった小さな実験ではあるが、数年を経て少なくともわたしにとっては非常に効果的だということが判った。純粋にElispだけで実装したので、外部への依存性がない解決策という点でも気に入っている。これが役に立つと思うかもしれない他の人たちがいるかもしれないという場合に備えて、この解決策をマイナーモードという形式で共有する。

## 13. Godモードとの比較

<!-- God mode provides a modal editing experience but Devil does not. Devil has the same underlying philosophy as that of God mode, i.e., the user should not have to learn new key bindings. However, Devil does not have a hard separation between insert mode and command mode like God mode has. Instead, Devil waits for an activation key (`,` by default) and as soon as it is activated, it intercepts and translates keys, runs the corresponding command, and then gets out of the way. So Devil tries to retain the non-modal editing experience of vanilla Emacs. -->

Godモードはモーダル編集エクスペリエンスを提供するがDevilは違う。Devilはユーザーが新たにキーバインディングを学習する必要がないという、Godモードと同じ基本哲学をもっている。しかしGodモードのように挿入モードとコマンドモードの間を厳格に区別しないのがDevilだ。そのかわりにDevilはアクティベーションキー(デフォルトでは`,`を待機して、そのキーがタイプされたらアクティブになりキーの横取りと変換を行い対応するコマンドを実行して引っ込むのだ。そうすることにより、Devilは素のEmacsにおける非モーダル編集エクスペリエンスを保とうと試みている。

<!-- Now it is worth mentioning that some of this non-modal editing experience can be reproduced in god-mode too using its `god-execute-with-current-bindings` function. Here is an example: -->

god-modeの`god-execute-with-current-bindings`関数を使えば、非モーダルな編集エクスペリエンスを部分的に再現可能であることにも触れておいたほうがよいだろう:

```lisp
 (global-set-key (kbd ",") #'god-execute-with-current-bindings)
```

<!-- With this configuration, God mode translates `, x f` to `C-x C-f`. Similarly `, g x` invokes `M-x` and `, G s` invokes `C-M-x`. This provides a non-modal editing experience in God mode too. However, this experience does not extend seamlessly to minibuffers. Devil does extend its Devil key translation to minibuffers. -->

この設定であれば`, x f`をGodモードが`C-x C-f`に変換する。同じく`, g x`は`M-x`、`, G s`は`C-M-x`を呼び出すだろう。これならGodモードでも非モーダル編集エクスペリエンスを手に入れることができる。ただしこのエクスペリエンスはミニバッファーにたいしてはシームレスに拡張されない。Devilの方はDevilキー変換をミニバッファーにも拡張する。


<!-- Further note that in God mode the `ctrl` modifier has sticky behaviour, i.e., the modifier remains active automatically for the entire key sequence. Therefore in the above example, we type `,` only once while typing `, x f` to invoke `C-x C-f`. However, this sticky behaviour implies that we need some way to disambiguate between key sequences like `C-x C-f` (`find-file`) and `C-x f` (`set-fill-column`). God mode solves this by introducing `SPC` to deactivate the modifier, e.g., `, x f` translates to `C-x C-f` but `, x SPC f` translates to `C-x f`. Devil does not treat the modifier key as sticky which leads to simpler key sequences at the cost of a little additional typing, i.e., `, x , f` translates to `C-x C-f` and `, x f` translates to `C-x f`. -->

さらにGodモードでは`ctrl`修飾キーの振る舞いが粘着性(sticky)をもつことにも注意を要する。つまりキーシーケンス全体が完了するまでは、修飾キーが自動的にアクティブなままになるのだ。したがって上記の例では`, x f`のように一度だけ`,`をタイプして`C-x C-f`を呼び出している。しかしこの粘着性の振る舞いは、`C-x C-f` (`find-file`)と`C-x f` (`set-fill-column`)のようなキーシーケンスを区別する何らかの手段が必要であることを暗に含んでいる。Godモードは`SPC`を導入するという解決策によって、修飾キーの非アクティブ化を行っている。しかしDevilの方は少しキーをタイプするコストより、シンプルなキーシーケンスのメリットの方が勝るという考えから、修飾キーに粘着性をもたせていない。つまり`, x , f`は`C-x C-f`、`, x f`は`C-x f`に変換される。


<!-- To summarize, there are primarily four things that Devil does differently: -->

まとめよう。Devilと比較すると主に4つの違いがある:

<!-- - Provide a non-modal editing experience from the outset. -->
<!-- - Seamlessly extend the same editing experience to minibuffer, incremental search, etc. -->
<!-- - Translate key sequences using string replacements. This allows for arbitrary and sophisticated key translations for the adventurous. -->
<!-- - Choose non-sticky behaviour for the modifier keys. -->

- 最初から非モーダル編集エクスペリエンスを提供するか

- 同じ編集エクスペリエンスをミニバッファー、インクリメンタル検索等にシームレスに拡張するか

- 洗練された任意のキー変換を可能にする、文字列置換を用いたキーシーケンス変換(チャレンジャー向け)

- 修飾キーにたいする粘着的振る舞いの選択

<!-- These differences could make Devil easier to use than God mode for some people but clumsy for other people. It depends on one's tastes and preferences. -->

これらの違いにより、Devilを使う方がGodモードより簡単な人もいれば、扱いにくくなる人もいるだろうし、これは好みの問題だと思う。

## 14. FAQ

<!-- 01. Why was the comma  chosen as the default Devil key? Isn't the semicolon  a better choice since it belongs to the home row? -->

<!--  Opinions vary. As the author and maintainer of this minor mode, I made a choice to use the comma as the default Devil key. Although, the semicolon belongs to the home row on most keyboards and the comma does not, I find the vertical movement to reach the comma key with the long finger more convenient than the horizontal movement necessary to reach the semicolon with the little finger. -->

<!--  As a touch typist, my fingers rest on the eight home row keys when idle. The horizontal movement necessary to type the semicolon leads to a significant angular movement of the wrist. Curling my long finger to reach the comma key helps me avoid this wrist strain. If you do not like this default, it is quite easy to customise the Devil key to be the semicolon or any other key of your choice. See the section [[*Custom Devil Key]] and the subsequent sections to learn how to do this. -->


- Devilキーのデフォルトにカンマ(`,`)を選んだのはなぜ? セミコロン(`;`)の方がホームポジションにあるので良くない?

  意見はさまざまだろう。わたしがこのマイナーモードの作者兼メンテナーとして選んだデフォルトのDevilキーがカンマだったというだけだ。ほとんどのキーボードではセミコロンはホームポジションにありカンマキーは違うのだが、わたしにはセミコロンに小指を届かせるために要する水平移動よりも、カンマキーに中指を届かせる垂直移動のほうが楽だったからだ。
タッチタイプを行う際に、わたしにはアイドル時にホームポジションの8つのキーに指をおいている。セミコロンのタイプに必要な水平移動は、手首の有意な角度移動をともなうのだ。中指を曲げてカンマキーをタイプすれば、手首の負担を回避できる。このデフォルトが気に入らなければ、セミコロンや何であれあなたが選択する任意のキーをDevilキーにカスタマイズするのはとても簡単だ。方法についてはセクション[カスタムDevilキー](#115-カスタムdevilキー)、その後の数セクションを参照して欲しい。

<!-- 02. I am happy with typing  every time, I need to type a comma. Can I free up  to invoke ? -->

<!--  Yes, this can be done by removing the special key `, SPC` from `devil-special-keys`. See the section [[*Reclaim , SPC to Set Mark]] to find out how to do this. -->

- カンマをタイプする必要があるとき毎回`, ,`をタイプするのが全然苦ではない。`, SPC`を解放して`set-mark-command`を呼び出すようにしてもいい?

  問題ない。`devil-special-keys`からスペシャルキー`, SPC`を削除するだけだ。これを行う方法についてはセクション[", SPC"をマークのセットにするには](#114--spcをマークのセットにするには)を参照のこと。

<!-- 03. Can I make the Devil key sticky, i.e., can I type `, x f` instead of `, x , f` to invoke `C-x C-f`? -->

<!--  Devil does not support sticky keys. Say, Devil were to translate `, x f` to `C-x C-f`, how would we invoke `C-x f` then? We need some way to disambiguate between `C-x C-f` and `C-x f`. Different tools take different approaches to disambiguate the two key sequences. God-mode translates `x f` to `C-x C-f` and `x SPC f` to `C-x f`, i.e., God-mode treats the `C-` modifier as sticky by default but when we want to make it non-sticky, we need to type `SPC` in god-mode. This makes some key sequences like `C-x C-f` shorter to type but some other key sequences like `C-x f` longer to type. -->

<!--  Devil treats the Devil key as non-sticky, so that there is no need for additional peculiar rules to switch between sticky and non-sticky behaviour to disambiguate key sequences like `C-x C-f` and `C-x f`. With Devil `, x , f` translates to `C-x C-f` and similarly `, x f` translates to `C-x f`. The translation rules are simpler at the cost of a little additional typing in some cases. In most such cases, Devil requires typing an additional comma that one could have avoided if the comma were sticky. However, in other cases, Devil eliminates the need to type an extra key to make the modifier key non-sticky. -->
<!-- Devil treats the Devil key as non-sticky, so that there is no need for additional peculiar rules to switch between sticky and non-sticky behaviour to disambiguate key sequences like `C-x C-f` and `C-x f`. With Devil `, x , f` translates to `C-x C-f` and similarly `, x f` translates to `C-x f`. The translation rules are simpler at the cost of a little additional typing in some cases. In most such cases, Devil requires typing an additional comma that one could have avoided if the comma were sticky. However, in other cases, Devil eliminates the need to type an extra key to make the modifier key non-sticky. -->

- Devilキーをstickyなキー、つまり粘着的にできない? `, x , f`ではなく`, x f`で`C-x C-f`を呼び出せるようにしたいんだ。

  Devilはstickyキーをサポートしない。たとえばもしDevilが`, x f`を`C-x C-f`に変換するとして、`C-x f`はどうやって呼び出すのか? `C-x C-f`と`C-x f`の間にある曖昧さを解決する何らか手段が必要だ。異なるツールがこの2つのキーシーケンスの曖昧さにたいして、異なるアプローチを採択したのだ。Godモードは`x f`を`C-x C-f`、`x SPC f`を`C-x f`に変換する。すなわち`C-`修飾はデフォルトでstickyであり、その粘着性を解消するためにgod-modeでは`SPC`をタイプする必要がある。これにより`C-x C-f`のような一部のキーシーケンスは短くなったが、`C-x f`のようなキーシーケンスは長くなった。
  
  DevilはDevilキーを非stickyとして扱うので、stickyあるいは非stickyな挙動を切り替える特異なルールを追加で定める必要がないのだ。したがって`C-x C-f`と`C-x f`のようなキーシーケンスの曖昧さはDevilであれば`, x , f`を`C-x C-f`、`, x f`を`C-x f`に変換することで解決されている。追加で少し多くタイプするというコストを要する場合もあるものの、変換ルールはより単純になる。Devil故に追加でカンマのタイプが必要な場合のほとんどは、カンマがstickyであれば回避できたであろう。しかしそれ以外の場合ではDevilが修飾キーを非stickyにしている故に、余計なキーのタイプを不要にしているのだ。

<!-- 04. Are there some things that are easier to do with Devil than god-mode? -->

<!--  Devil is not necessarily easier than god-mode. It is different. Preferences vary, so some may find Devil easier to use while some others may find god-mode easier to use. See the section [[*Comparison with God Mode]] for more details on the differences between the two modes. -->

- Devilの方がgod-modeより簡単にできることって何がある?

  Devilの方がgod-modeより簡単である必要はない。両者は違うものだ。好みはさまざまなのでDevilが簡単だと思う人もいれば、god-modeの方が使いやすいと思う人もいるだろう。2つのモードの違いについて知りたければ、セクション[Godモードとの比較](#13-godモードとの比較)を参照して欲しい。

<!-- 05. I've called the function `global-devil-mode` in my config file, but when Emacs opens Devil does not seem to active. Why isn't it working? -->

<!--  The most likely issue is that the first buffer shown is the default Emacs startup screen, which is created without running any hooks which would give Devil the opportunity to be applied. See the section [[*Mode as a buffer default]] for further details and possible solutions. -->

- 設定ファイルで関数`global-devil-mode`を呼び出したけど、EmacsがDevilをオープンしてもアクティブにならないみたい、何が悪いんだろう?

  一番有り得そうなのは最初バッファーがに表示されたのがEmacsのデフォルトのスタートアップスクリーンの場合だろう。このスクリーンはDevilを適用する機会となるフックを何も実行せずに作成されるのだ。詳細と解決策についてはセクション[バッファーのデフォルトモード](#112-バッファーのデフォルトモード)を参照して欲しい。

## 15. 結び

<!-- Devil is a minor mode to translate key sequences. Devil utilises this translation capability to provide a modifier-free editing experience and it does so without resorting to modal-editing. Devil retains the non-modal editing of vanilla Emacs. This mode was written as a quirky experiment to make it easier to use Emacs without modifier keys. However, the resulting mode turned out to be quite convenient to use, in general. You might find Devil comfortable. Or you might find Devil to be a terrible idea. It is also possible that you might find Devil useful but intrusive. In such cases, there are plenty of customisable options that you can modify to configure Devil according to your preferences. If you need any help or if you find any issues, please create an issue at [[https://github.com/susam/devil/issues]]. -->

Devilとはキーシーケンスを変換するマイナーモードだ。Devilはモーダル編集に頼ることなく、修飾キーいらずの編集エクスペリエンスを提供するためにこの変換能力を活用している。Devilが拘っているのは、素のEmacsにおける非モーダルの編集体験だ。このモードは修飾キーなしでEmacsを簡単に使えるようにするという風変わりな実験として記述された。しかし結果としては客観的に見て非常に使いやすく役に立つモードが得られたと思う。Devilを使って快適に感じるかもしれないし、あるいは酷いアイデアと思うかも、もしかしたら役には立つがでしゃばりなモードだとも思うかもしれない。そのような場合には好みに応じてDevilの構成を変更するための、大量のカスタマイズ可能なオプションが存在する。何かサポートが必要だったり問題を見つけたら、[issue](https://github.com/susam/devil/issues)を作成して教えて欲しい。