Hatena::ブログ(Diary)

ザリガニが見ていた...。 このページをアンテナに追加 RSSフィード

2010-10-29

デフォルト設定でテキストシステムの底力を引き出す

前回からの続き...

  • テキストシステムはとっても奥が深い。
  • まだまだ知るべきことがたくさんある。

関連日記

デフォルト

  • 上記のアップル公式のページに詳細な解説が載っている。但し、英語で。
  • ネイティブ日本語スピーカーな自分には、読んでも意味が分からない部分もあったりする。
  • そんな時は、実際に設定して、動作を確認してしまうのが手っ取り早い。
  • 半年後の自分がまた英語の文献と睨めっこしないように、どんな効能なのかメモしておく。

NSTextKillRingSize

# 任意設定;4にする場合
defaults write -g NSTextKillRingSize -string 4

# デフォルト設定:1
defaults delete -g NSTextKillRingSize
  • OSX標準のキー操作には、もう一つのカット&ペースト機能がある。(コピーはない。カットのみ。)
    • control-kでカット(カーソル位置から改行まで、あるいは選択範囲をカット)
    • control-yでペースト
  • 一般的なcommand-x、command-c、command-vとはまた違う系統の機能なので、クリップボードには影響しない。
    • command-x 中に control-k しても、command-xの内容は保持されるのだ。
  • 但し、control-k、control-yがカット&ペーストするのはテキストのみである。
    • フォントのサイズ・種類・スタイル等も含めて、テキスト以外の情報はカット&ペーストできないのだ。
  • また、control-kでカットしたテキストは、そのアプリケーション内でのみcontrol-yでペーストできる。
    • 異なるアプリケーション間でのテキスト情報の受け渡しはできないのだ。
    • どちらかというと、削除した履歴を復元する機能と考えるべきなのかも。
  • 通常、control-yする時は、直前のcontrol-kでカットした内容がペーストされる。
  • ところが、NSTextKillRingSizeを4にしておくと、過去4回のcontrol-kした履歴がcontrol-yするたびに切り替わるのである。
  • なんと!複数クリップボード的(クリップボードではないけど)な機能がすでに備わっていたのである。
  • 但し、同時に ~/Library/KeyBindings/DefaultKeyBinding.dict の設定も必要である。
    "^y" = "yankAndSelect:"; /* control-yで履歴ペーストされる */
// あるいは...
    "~y" = "yankAndSelect:"; /* option-yで履歴ペーストされる */
  • デフォルトでは、control-yには yank: アクションが割り当てられている。
  • それを上記のように yankAndSelect: に変更すれば、履歴ペーストが有効になるのだ。
  • 自分の場合は "~y" = "yankAndSelect:"; を、前日のDefaultKeyBinding.dictの最後から2行目に追加した。

これで、option-yで履歴ペーストが有効になった!いつもの control-y も有効。


  • 数あるクリップボード拡張アプリを使えば済むこと(かつ、高機能だし)なんだが、
  • OS標準でその仕組みが用意されていたことに感動した。今まで知らなくて損してた。

NSQuotedKeystrokeBinding

# 任意設定;control-i にする場合
defaults write -g NSQuotedKeystrokeBinding -string "^i"

# デフォルト設定:control-q
defaults delete -g NSQuotedKeystrokeBinding
  • 上記で option-y に履歴ペースト機能を割り当ててしまうと、ちょっと困った問題も発生する。
  • 今まで使えていた、option-y で入力できた¥が入力できなくなってしまうのである。
  • 「えんまーく」と入力して変換すれば良いという考えもある。
  • あるいは、optionキー以外に割り当てれば良いという考えもある。

まったくそのとおりだ。

  • しかし、それらはちょっと消極的な解決策かもしれない。
  • 今までoptionキーには特殊な文字を入力する機能があるので、ショートカットの割り当てを控えてきた。
  • ところが、もはや自分のMacBookはショートカットで溢れ、覚え易く、使い易いショートカットはほとんど、ない...。
  • 一方、optionキーのショートカットにはふんだんに空きがあり、とっても魅力的な領域なのだ。控えるのは勿体ない。
  • 特殊文字も入力したいし、履歴ペーストも有効にしたい!本当はどちらも使いたいのだ!
  • そんな自分のような欲張り者のために、Appleは両方を有効にする技を用意してくれていた。
  • すでにデフォルト状態で...
    • option-yで履歴ペーストされる。
    • control-q、option-yで¥が入力される。

つまり、control-qに続けての操作は、いずれのキーバインドの設定も適用されなくなるのだ。

  • control-qが嫌いならば、デフォルト設定を好みのキーバインドに設定すればOK。
  • 自分の場合は、特にcontrol-qで不満はないので、そのまま使うことにした。

NSRepeatCountBinding

# 任意設定:control-u にする場合
defaults write -g NSRepeatCountBinding -string "^u"

# デフォルト設定:なし
defaults delete -g NSRepeatCountBinding
  • 特定の文字を10文字とか20文字入力したい欲求はよくある。
    • コードのコメント欄のシンボル装飾とか、
    • 文書の整形でスペースをたくさん入力するとか、
  • そんな時はいつも、いち、にい、さん...と一生懸命数えて入力していた。
  • 以下の技を知ってしまった今、ずいぶんご苦労なことをしていたものだ。
  • デフォルトの設定はないので、設定して初めて有効になる。
  • ここでは control-u に、繰り返しの機能を割り当ててみた。
  • control-u、10、a → aを10文字表示する。
  • control-u、a → aを4文字表示する。
  • control-u、10、control-d → カーソル右側を10文字削除する。
  • control-u、control-d → カーソル右側を4文字削除する。
  • control-u(設定したキー操作)に続けて入力した回数を繰り返すのだ。
  • 回数の指定がないと4回繰り返すようだ。(この回数は、変更できるのだろうか?)

数えれば済むことだけど、知っていると、きっとどこかで役に立ちそう!


以上の設定は、かなり役立ちそうな可能性を感じる設定。

その他のデフォルト設定

Apple公式のページには、その他のデフォルト設定も書かれていた。

しかし以下の設定については、その効果が正確には分からなかった。

  • もしかしたら、デフォルト設定の方法が間違っているかもしれない。
  • あるいは仕様としてあるだけで、まだサポートされていない可能性もある。
NSMnemonicsWorkInText
# 任意設定:YES
defaults write -g NSMnemonicsWorkInText -bool YES

# デフォルト設定:NO
defaults delete -g NSMnemonicsWorkInText
  • YES にするとoptionキーが無効になった。
  • しかし、optionキーが無効になって幸せな状況が思い浮かばない...。
NSTextShowsInvisibleCharacters
# 任意設定:YES
defaults write -g NSTextShowsInvisibleCharacters -bool YES

# デフォルト設定:NO
defaults delete -g NSTextShowsInvisibleCharacters
  • 半角スペース、および全角スペースが以下のように表示された。

f:id:zariganitosh:20101029091051p:image

  • コードの中で全角スペースはエラーになる原因だったりする。
  • 半角・全角のスペースを区別したい時には便利かもしれない。
NSTextShowsControlCharacters
# 任意設定:YES
defaults write -g NSTextShowsControlCharacters -bool YES

# デフォルト設定:NO
defaults delete -g NSTextShowsControlCharacters
  • コントロール文字を表示するかどうからしい。
  • しかし、YESにしても何も表示されないようだ。(テキストエディット.appで確認)
  • コントロール文字とはどんな文字なのだろうか?
NSTextSelectionColor
# 任意設定;"redColor" にする場合
defaults write -g NSTextSelectionColor -string "redColor"

# デフォルト設定:light gray
defaults delete -g NSTextSelectionColor
  • 選択状態のテキストの背景色を指定するらしい。
  • しかし、この設定を変更しても、その効果は現れなかった。(テキストエディット.appで確認)
NSMarkedTextAttribute
# 任意設定;"Underline" にする場合
defaults write -g NSMarkedTextAttribute -string "Underline"

# デフォルト設定:Background
defaults delete -g NSMarkedTextAttribute
  • マーク(setMark:)した位置からカーソルまでの範囲の見栄えを設定するらしい。
  • "Background" か "Underline" を設定できるようだ。
  • しかし、この設定を変更しても、その効果は現れなかった。(テキストエディット.appで確認)
NSMarkedTextColor
# 任意設定;"redColor" にする場合
defaults write -g NSMarkedTextColor -string "redColor"

# デフォルト設定:yellowish(薄黄色っぽい色)
defaults delete -g NSMarkedTextColor
  • 上記NSMarkedTextAttributeで...
    • "Background"を指定した場合は、背景色の指定になる。
    • "Underline"を指定した場合は、文字色の指定になる。
  • しかし、この設定を変更しても、その効果は現れなかった。(テキストエディット.appで確認)

空想

  • これらの設定で有効になる機能は、地味かもしれない...。
  • しかし、習慣的に使い始めると、それがない環境に物足りなさを感じるはず。
  • そもそも、テキスト編集の操作自体が地味である。
  • その地味な操作を、自分も含めてほとんどのユーザーは無意識の操作として身体で覚えている。
  • そして、一つ一つは地味な操作だが、それがたくさん集まると立派なテキスト編集環境となる。
  • テキスト編集環境には、個人の好みが非常にはっきり出る。
  • ユーザーは、無数にある地味な操作の中から気に入った操作を組み合わせて、無意識に使っている。
  • 人は、無意識とか習慣をとっても大事にする。
  • だから、いつものお気に入りの操作が出来なくなることに、耐えられないことが多い。
  • そんな状況に陥らないために、OSXは様々な仕掛けを用意してくれていたのだ。
  • それがキーバインドの設定だったり、今回のデフォルト設定だったりするのだ。
  • このテキストシステムの直接的なルーツは、20年以上前に開発が始まったNEXTSTEPというOSなのかもしれない。
  • しかしそこには、UNIXやさらにはOSという概念がなかった時代からの達人たちの英知も注ぎ込まれているはずだ。
  • だから、今使っているテキスト入力環境は、長年の英知の集大成なのである。

  • やっと分かった。
  • なぜ、iPadのバーチャルキーボードでブログを書く気にならないのか。
  • ブログを書くには、資料を見たり、引用したり、タグや書式を整形したりと、実際の文字入力以外で操作に占める割合がかなり大きい。
  • カーソル移動、テキスト選択、コピー、ペースト、削除、挿入等の操作がかなり多くなるのだ。
  • それらの操作はマウスよりも、キーボードを使ったショートカットで素早く行うことが多い。
  • そういった文字入力以外の作業がiPadのバーチャルキーボードでははほとんどできないのだ。
  • MacBookのキーボードの操作感というのは、自分の年齢以上の歴史が作り出す英知の集大成なのだから、
  • この前出たばかりのiPadのバーチャルキーボードの操作感が、物足りないのは当然である。
  • バーチャルキーボードにも、テキスト入力以外のキーバインドの英知が注ぎ込まれる必要があるのだ。
  • ちなみに、ほとんどテキスト入力のみのメール返信なら、iPadのバーチャルキーボードでも抵抗なく使っている。

銀色のカミナツキ/KaminatsukiSilv銀色のカミナツキ/KaminatsukiSilv 2010/10/29 18:06 はじめまして。

他にも control-n / control-p で行送り/戻りなどができますね。
うろ覚えですが、UNIX系のコマンドだった気がします。

zariganitoshzariganitosh 2010/10/30 06:10 コメントありがとうございます。

control-p・nのような操作も含めて、そういった設定はすべて StandardKeyBinding.dict というファイルに設定されています。
そして、すべてのキー操作は自分の好きなように設定することが可能なんです。
その辺のことは、以下の関連日記に書きましたので、ぜひ見てやってください。
 http://d.hatena.ne.jp/zariganitosh/20101026/text_key_binding(テキスト編集のキー操作を自在にコントロールする)

ちなみに、StandardKeyBinding.dictからcontrol-p・nのようなEmacs風な操作を抜き出してみました。
----------------------------------------
移動操作:
control-a・e |カーソルを段落の先頭・末尾へ。
control-b・f |カーソルを1文字左・右へ。
control-p・n |カーソルを1行上・下へ。
control-v |カーソルを1ページ下の中央へ。

削除など:
control-d・h |カーソルの右側・左側の1文字を削除する。
control-k |選択範囲、あるいはカーソルから段落の末尾まで削除する。
control-y |control-kで削除した文字をペーストする。
control-l |カーソル位置が中央になるようにスクロールする。
control-o |カーソル位置をそのままに改行する。
control-t |カーソルの左右の1文字を入れ替える。

* 移動操作にshiftを組み合わせると、カーソルが移動した部分が選択範囲となります。
* control-b・fにoptionを組み合わせると、単語単位の操作になります。(shiftとの併用OK)
----------------------------------------

トラックバック - http://d.hatena.ne.jp/zariganitosh/20101029/text_system_defaults