2012年9月28日金曜日

DrRacket でコードの整形

1. メニューから選択する

Emacs でコードの整形をする場合、C-M-\ を入力し、indent-region を呼び出す。

DrRacket でコードの整形をするには、

  1. インデントを整えたい式を範囲選択しておく。
  2. メニューより、Racket > Reindent を選択する。

表示されている全てのコードを整形するには、Reindent の下にある Reindent All を選ぶ。

 

2. キーボードで操作する

キーボードから、メニューの Racket > Reindent を選択するには、他のアプリケーションと同様に、

  • Alt, r, r

のキーを順に押せば良い。

もっと簡単に Reindent するには、整形するコードを選択した後、

  • Tab キー

を押す。

3.1 Menus によると、

Reindent : Indents the selected text according to the standard Racket formatting conventions. (Pressing the Tab key has the same effect.)

 

3. 移動、選択、整形の操作手順

コードを整形するには、式を選択する必要がる。S 式を選択するには、

3.3 Keyboard Shortcuts 

M-C-SPACE : select forward S-expression

 

ところで、DrRacket を Emacs のキーバインディングで利用している。また、Escape キーの入力は C-[ で代用している。

例えば、次のような式を入力した後、結果を display 手続きに渡したくなったとする。

(* 3
   (+ 1 2)
   (- 10 5))

キャレットが式に末尾にある場合、

  1. 先頭へ移動: Ctrl キーを押しながら [, b
  2. S 式の選択: Ctrl キーを押しながら [, Space
  3. 括弧で括る: Ctrl キーを押しながら [ 。次に ( を入力する。
  4. display と入力。

M-( : wrap selection in parentheses

このとき、キャレットは display の右横にある。

(display (* 3
   (+ 1 2)
   (- 10 5)))

全体を整形するために、

  1. 外側の括弧へ移動: Ctrl キーを押しながら [, u
  2. S 式の選択: Ctrl キーを押しながら [, Space
  3. 整形: Tab
  • M-C-u : move up out of an S-expression

  • M-C-d : move down into a nested S-expression

  •  

    4. その他

    メニューより、Edit > Keybindings > Show Active Keybindings を選択すると、現在有効なキーバインディングの一覧が表示される。

    S 式を選択する (forward-select-sexp) キーとして、上記以外に、

    • esc;c:s:f

    とあるが、キーを入力しても、forward-select-word

    • esc;s:f

    と同じ動作になってしまう。

    6.16 keymap% によると、

    For a special keyword, the capitalization does not matter. However, capitalization is important for single-letter keynames. Furthermore, single-letter ASCII keynames are treated specially: A and s:a are both treated as s:A. However, when c: is included on Windows without m:, or when d: is included on Mac OS X, then ASCII letters are not upcased with s:, since the upcasing behavior of the Shift key is cancelled by Control without Alt (on Windows) or by Command (on Mac OS X).

    その他、タブの入力に関する動作を以下に挙げておく。

    Index

    tabify
    tabify-all
    tabify-on-return?
    tabify-selection