2013-11-08

"Majestouch MINILA US67key Red switch"の導入 #04, The sixth row of keys activated just now!

待望の第6行のキー(The sixth row of keys)が動き始めた、写真1, 2;

Figure 1. Top view of Minila with the sixth row of keys and big rest pad.

Figure 2. Perspective view.


第6行には6個のキースイッチが配置されていて,写真3;
  • 左から(EXTRA5, SHIFT_L, FN, CONTROL_L, ESCAPE, TAB)として動作している 。
  • キーモジュール(Keymodule)はドイツ製で”Cherry MX red switch with fixing pins”を用い、
    • 購入先: JW-System(http://www.jw-shop.com)
  • MX用の標準基板、KBU-24を6六連として切り出してハンダした。
    • 購入先: バード電子(http://www.bird-electron.co.jp/home/catalog/MXseries.pdf)
  • この基板は、 アルミのCチャンネル(C-type channel; t1.5x24(21)x13.5)に固定された。
    • 購入先: 東急ハンズ・渋谷店
  • チャンネルは、キーボードの上部ケースの全面に切り込みを入れて、そこに組み入れる事で、左右上下の固定を計った。

Figure 3. Enlarged view of key tops.



配線部品、コネクター、チャンネル材などの調査・手配に思いがけぬ時間がかかり、コネクタのハンダ付けでも何度もやり直すはめになった。おかげ、次の改良版は気楽に成りそうだ。
当面は、全体的な配置を固定してから、リマッパの調整に入りたい所だ。

【感想】
  • 全てのキー操作をレスト・ポシションを保持したままで打てるのは感激する。
  • KeyRemap4MacBookとの組み合わせで、編集用のキーはすべて母指で操作出来るので爽快だ! 
    • 初期の予想では、中央の3つ位しか実用的ではないかと思っていた。
    • がしかし、一番左のEXTRS5も使えるのには驚いた。
    • これなら「DELETE, RETURN」も追加出来そうだ。
  • 従って、「小指が最左端、 最右端のキー操作から解放された」のが凄い。
    •  完全に両端のキー群は省略できそうだ。
  • A行とZ行は接近し過ぎかと思ったが、指先の角度が逆方向なので、意外と混乱せずに慣れた。 
    • ここら辺は、今後の検討課題だろう。
  • どこかのメーカで「メンブレン方式のキーボード」として商品化してくれないだろうか?

【今後の動向】

今回の作業中にキートップを外したり、戻したりをする時に、逆向きに付ける事がたびたび起こった。其の時の経験で、第5行のキートップだけでなく、第2,3行も逆転すると、指の動きがスムーズになることに気がついた,写真3参照。今後、キー・ストロークの調整も入れて詳細に検討したいと思います。着目点;
  • コンパクトな運指
  • スムーズなキー・トップのエンベロープ
  • 第0行としてのF1~12の復活
____
この記事の履歴
  1. 開始 2013-11-08(金) 23:06
  2. 追加 2013-11-09(土) 11:34 感想

2013-10-08

"Majestouch MINILA US67key Red switch"の導入 #03, MINILA as a Mac's keyboard

遅れがちながら最近の進展状況を写真で報告します;

Figure 1. MINILA-#1-ver.1 and rest pad #0.


何と言っても、最前列のキーが替わった。其の結果「MINILA as a Mac's keyboard」が実現した;
  • 「Space bar」が本当に三分割されて、EXTRA1, SandS, EXTRA2となった、
  • Macの修飾キーも、通常の「Apple Wireless keyboard」と遜色のない配置と成った。
  • 小振りな「rest pad #0」と組み合わせると、入力や編集が安定的に運用出来る。
これらを実際に動かしながら、private.xmlの調整を丁寧に行う予定です。
上記の「キーの分割」や「キーの配線交換」が速く行ったのは、[親指シフト]MINILA US67keyに親指シフトキーを追加でご懇意になったかもめーる通信hieroglypheさんの手を煩わせた結果です。ここに感謝の意を表明します。詳しい事は、MINILA-#2の改造時に報告したいと思います。
 実は、この内部改造の方法をのお宅に参上してお聴きするチャンスをいただきました。其のお帰り際に、内部改造は何台も製作経験があり、趣味の一環で作ってあげるよというお話がでました。そこで、私は、hieroglypheさんの為にレスト・パッドをお造りすることに致しました。

そこで、自分は「rest pad #1」をhieroglypheさんのご希望に沿って作成中です。その途中で意外な事や、面白い展開が在りそうなので、さらに脱線をしようかなと、思っています。巧く行ったら、ご報告します……。

____
  1. 開始 2013-10-08(火) 00:31:28




2013-09-26

"Apple Magic Trackpad" and a protection way under high humidity #2

前回の報告;
でトラックパッドの表面にポスト・イトを貼って、高湿度でも指先がスムーズに動く報告をした。そのご流石に継ぎ目が浮き始めたうえに、コーヒーを零してしまい、ポスト・イトが剥れてしてしまった。

連休中に木工材料を東急ハンズ・渋谷店に行った帰りに、5Cの画材フロアで表面が粗い感じのA4サイズ用紙(単価20~50円程を7種類、入手した、図1;

Figure 1. Seven sheet of Papers with coarse surface obtained at 5C floor of Tokyu Hands, SHIBUYA.


また、湿度が高く成って来たので、上記のなかで指の感触が均一なデザインの和紙を、「スコッチのスプレーのり、55ミニ:  Scotch® Spray type Adhesive 55 Mini 」を用いて貼ってみた、図2;

Figure 2. Japanese paper is glued on Trackpad. Scotch's splay type glue, 55, is used.


この紙の表面拡大は、図3;

Figure 3. Enlarged surface of japanese paper. "small bloom, sakura" are scattered randomly on it, so that fingertips move smoothly even at high humidity.


無事に「Apple Wireless Keyboard」の隣に復帰した、図4;

Figure 4. It comes back beside Apple Wireless Keyboard.


____
  1. 開始 2013-09-26(木) 20:03:20

2013-09-24

"Majestouch MINILA US67key Red switch: FFKB67MRL/EB"の導入 #02 rest pad

連休を利用して、木工に励んだ結果、MINILA向けのレスト・パッドを製作出来た。しかも「此れまでの3台の経験」と「前回のHHKBでの考察」を合わせることで、会心の出来と成った。

常用している「ラミン・オーバル・片溝付き、10x22x900、という棒材」が入手出来ず(連休の為らしい)、「ラミン・コの字、12x20x900、という棒材」で代用したのですが意外と使い勝手は良好でした。

図1に概要を示します。

Figure 1. Overview.


図2に「レスト・パッドの側面の詳細」を示します。背(21mm)が高く成った割に、奥行きが30mmと狭いのが特徴です。でもテーブルの床から手首が始まり、掌(palm)のレスト・パッド、母指(thumb)のレスト・パッドと自然なサポートが得られるので、四指のタイピングは安定してます。


Figure 2. Detail of thumb's and palm's rest pad.

実際の評価は、スペース・バーを三分割し、さらに次の作業;
  • 左:新しいスイッチを追加し、無変換に結線、PCKeyboardHack.app  でNFERをアクティブにし、KeyRemap4MacBookで英数をEXREA1に対応させる。 
  • 中:SandS(Shift and Space):スイッチも配線もそのまま。
  • 右:新しいスイッチを追加し、無変換に結線、PCKeyboardHack.app  でXFERをアクティブにし、KeyRemap4MacBookで英数をEXREA2に対応させる。
の後で、漸く実行ができる事に成る。

結構、危険な作業が続くので、アマゾンで同型機の中古をゲットしたので、これに付いて上記の作業をすることになる。ああ、憂鬱だが、しかたがない。

なお、「Windows key」のキートップを英国の販売店が販売しているのを見つけたので、今日PayPalで手配した(使用中のカードは先方のリストに入っていなかった);


どのくらい時間が掛かるのだろうか? 
____
  1. 開始 2013-09-24(火) 19:55
  2. 変更 2013-10-07(月) 08:41 中:SandS(Shift and Space):スイッチも配線もそのまま。


2013-09-19

"Majestouch MINILA US67key Red switch: FFKB67MRL/EB" #01

突然ですが「Majestouch MINILA US67key 赤軸:  FFKB67MRL/EB; Macでの保証無し」を「Mac OS 10.7.5」で動かしだしたので報告します。まずは、図だけの情報です;

Figure 1. "Apple Wireless Keyboard" and "MINILA US67key"


Figure 2. Top view of  FFKB67MRL/EB. Key layout is almost same to that of HHKB Lite2. Four red-rectanguler marks indicate the key remapped.

Figure 3. Front view of  FFKB67MRL/EB. Keys from "Cntrol ~ App" are flipped around" so that the side of thumbs are easily accessed to these keys.
この前傾したキーの操作は独特である。親指以外の四指がキーを「上から自分の方に押す感じ」なのに対して、親指の場合、キーを「上から前方に押し出す感じ」である。

また、不思議と「前傾したキー」が親指のレストの代行をしている様な感じがする。どこかで似た感触を思い出した;「HHKB LITE2」のスペース・バーの下部にある丸みを帯びた部分である。そういえば、HHKBを使っていたときには、パーム・パッドは使わなかった。今更ながら、側面の写真をとると、

Figure 4. Side view of HHKB LITE2.
そこで、HHKBとMINILAのボディとキーの相対関係を比較してしてみた;

Figure 5. Relative comparison of body and rows of keys between HHKB and MINILA.
当時は、矢印キーを入れる為に前方に繰り出したのかと思っていたが、むしろ、親指のレストパッドとして意識して曲面を整形していたのかもしれない。う〜む、脱帽。

他方、現在進行中の「normal Apple Wireless Keyboard with US flaivor」では「親指のレスト・パッド」と「掌のレスト・パッド」を既に実装している;

Figure 6. Side view of "normal Apple Wireless Keyboard with US flaivor"

となれば、MINILAのレスト・パッドも意外と小さな形状で効果がある可能性がでてきたので、とにかくトライしてみた;

Figure 7. Temporary palm-rest pad for MINILA.
図6と比較しながら、本格的に取り組む価値があると思う。この先が楽しみだ。

【背景の説明】
現在、"normal Apple Wireless Keyboard with US flavor"用のKeyRemap4MacBookのprivate.xmlがマウス・カーソルの操作を含めて安定的に動作している。今後もこのマシンをターゲットにするには幾つかの課題が在る;
  1. 2-key rollover issue
  2. "space bar" too much wide compared with home  position of fingers in hands
    • left hand: the index finger is  on 'F' then the side of sum should be on around 'V' and 'B'
    • right hand: the index finger is  on 'J' then the side of sum should be on around 'N' and 'M '
 これら加えて、「英数キー: NFER」「かなキー: NFER」 も必須なので、日本語キーボードが必須と思われた。これで検索すると、富士通系の親指シフトが有力候補と成ったが、当方は通常のローマ字入力しか出来ないので駄目なことになった。
「親指シフト」の検索から「FILCO Majestouch MINILA JP」 では;
  1. 6-key rollover is garanteed
  2. left side of space bar is shorten to under the right edge of 'V'
  3. 'NFER' and 'XFER' included
  4. 'App' may be treated as 'fn' of mac
と思われたので有力となった。ところが、次の様な衝撃的な記事(かもめーる通信);
に出会った。なんと、USキーボードもJPキーボードでも、基板は共通である。従ってUSキーボードでも;
  • 「MINILA独自の左右'FN'を'NFER:無変換'と'XFER:Kana' に接続し直す」だけで、
  • 「英数キー」、「かなキー」としてKeyRemap4MacBookが認識出来る
と言う事らしい。これなら、KeyRemap4MacBookではUSキーボードとして扱えるのでだいぶ楽だし、指も長年の慣れに合致してありがたい。

という事で、突如、新たな展開となりました;
  • "Majestouch MINILA US67key Red switch: FFKB67MRL/EB"を購入
  • 'App'にKeyRemap4MacBookで'FN = Macのfn'に割当し、
  • MINILA独自の左右'FN'の機能を、上記の'fn'で代行出来る様にし、
  • 簡単な編集キーも'fn'で起動出来る様にした。
private.xmlに対する応答も素直で楽である。恐らく「6-key rollover 」の効果が出ているからと思っている。「Apple Wireless Keyboard」との干渉も起こっていない。


現在、先にご紹介した「かもめーる通信」でご教示を受けながら、「キースイッチの交換作業」に入るべく準備をしているところです。どうなることか。

____
  1. 開始 2013-09-19(木) 20:40
  2. 追加 2013-09-20(金) 15:23 図4~7.

2013-08-10

KeyRemap4MacBookの導入、その21: "Where is VK_MOUSEKEY_*"

常用のテキスト・エディタのTextWrangler用のxmlを作っている際に、何気なく使っている「矩形領域の選択: Rectangular Selections」がマウス介在なのに気がつきました。なんとかKeyRemap4MacBookで処理出来ないかと思い、フォーラムに質問した;


そこで、高山さんから「マウスキー機能(KeyCode::VK_MOUSEKEY_*)と組み合わせれば」とのご助言を戴いた。

そろそろ、マウス・カーソルの制御(mouse cursor control)に手を出したかったので、練習を兼ねてトライする事にした。 まず、KeyRemap4MacBookのPreferencesでKeyCode::VK_MOUSEKEY_*の検索をすると;

 Figure 1. "VK_MOUSEKEY_*" is found in the "Vertual KeyCode" section within the main section of "Samples for KeyRemap4MacBook Developer“.


が見つかった。これに対応する部分をsample.xmlで見れば終わりと思ったのだが、そう単純ではなかった。以下に、その顛末をまとめておきます。

此れまでに、KeyRemap4MacBookのxml群は、"/Applications/KeyRemap4MacBook.app/Contents/Resources/include/checkbox/"にあるのは知っていたので;


Figure 2. Finder for "/Applications/KeyRemap4MacBook.app/Contents/Resources/include/checkbox/"



を見ると、矢印1にsample.xmlがあるので、それを開き、"Figure 1"で見られる項目で検索するが、何一つ引っかからない。探索すると、一番最後に; 

Figure 3. #1313 line of sample.xml contains
 

が在りました。"samples/"をFinderで覗くと;

Figure 4. Finder of "samples/"


と、sampl.xml で見慣れた面々が揃っているが確認出来ました。 

これらの.xmlを動かしながら好きなだけソース・コードを眺めるのが、素人のスキル・アップに効果的でしょうね。 

 ____
  1. 開始 2013-08-10(土) 12:44:44

2013-08-06

"Apple Magic Trackpad" and a protection way under high humidity

久々に紙資料の整理の為に「Post-t, SSZ-33RB, Size: 73mmX73mm」を買って来た。一枚余計に剥がしてしまったので、何気なく「Apple Magic Trackpad」に貼ってみた。応答はしても動作が緩慢になるとか、動かないとかと思ったのですが、平然と、しかも指が引っかかる事無く動作した。

という事で、取り敢えず、1枚と2/3枚で覆ってみた;

Figure 1. 1 & 2/3 sheets of "Post-t, SSZ-33RB, Size: 73mmX73mm" cover the "Apple Magic Trackpad". No stick of fingertips because of highly humid weather(over 60%).


意外と、指の感触も悪くないし、指先がスティックしてしまう事も無く動かせる。問題は、汚れ、剥がれなどか。代替物を物色しなければ。
____
  1. 開始 2013-08-06(火) 20:33:33

2013-07-26

normal Apple Wireless Keyboard with US flaivor, #01: introduction

以前の記事シリーズ「KeyRemap4MacBookの導入」で培って来た「KeyRemap4MacBookのxml」や「flipped around」の善い部分を、通常な配置(non flipped around)なApple Wireless Keyboard(JIS layout)に適用したいと思います。でも「JIS layout」には全然慣れていないので、まずは「US layout like」なリマッピングを施しました。

 さて、今日、産声を上げたばかりの、「normal Apple Wireless Keyboard with US flaivor」と「normal Apple Magic Trackpad」と、それらのベースと成る「Palm pad」とをご紹介します、図1;


Figure 1. Keyboard, Trackpad and Palm pad.

「US flaivor」と称する理由は、図2で明らかだと思います。なるべく「US layout」のキー・キャップと交換しました。出来ない場合は、手書きで上書きをしました;


Figure 2. Several key caps of Apple Wireless Keyboard(JIS layout) are exchanged from Apple Wireless Keyboard(US layout) or overwritten manually.


これで準備は整ったので、此れまでのKeyRemap4MacBookのxmlを整理しながら、新たに書き出そうと思います。

____ この記事の履歴
  1. 開始 2013-07-26(金) 21:12:50

KeyRemap4MacBookの導入、その20: 開発の終了

最近、記事を書く暇もない程の伸展があった。其のとばっちりを受けて、「flipped around Apple Wireless Keyboard(US layout)」を終了する事に成った。では、どうするかと言えば、「normal Apple Wireless Keyboard(JIS layout)」に、此れまでのノウハウを継承する予定だ。

さて、「flipped around Apple Wireless Keyboard(US layout)」を断念する理由を記録しておくと;
  • 「2-key rollover issue」を克服出来なかった;
    • EXTRAを10個位多用出来れば、疑似シフトなどを導入する可能性があったが、KeyRemap4MacBookのフォーラムでは、其の拡張可能性が否定されている。
    • フォーラムでは、其の代替えとして「config_onlyとVK_CONFIG」の利用をお教え戴いたものの、自分の実力では、巧く使い切れなかった。
  • 「2-key rollover issue free」で、母指で多数の割り込みキーを持つキーボードを探したが、
    • ゲーム専用機には、類似のものが有るものの、作りがゴツ過ぎだ。すなわち「flip around」にすると;
      • 机の上からの高さが大きくて、威圧される。
      • また、キー・ストローク長が長過ぎて、好みではない。
    • ふと手元の「Apple Wireless Keyboard(JIS layout)」を見るうち、これらな左右の⌘の内側に「英数」「かな」があるのに気がついた。 
  • そこで「Apple Wireless Keyboard(JIS layout)」を「non flip around = normal setting」で使って、「US layout like」に調整を始めた;
    • JISに固有なキーとか、記号の部分で、「ShiftとCapsLock」との振る舞いが違うので梃摺った。これはKeyRemap4MacBookのフォーラムで助言を戴き対処した。
    • 段々と整備して行くと、「flipped around Apple Wireless Keyboard(US layout)」との干渉が出て来たので、「normal_JP_AWK.xml」として単独に開発し、「flipped around Apple Wireless Keyboard(US layout)」を」オフラインとした。
    • このキーボードでは、大雑把に言えば、不満がある
      • 「英数」と「かな」 を「ε1(EXTRA1)」と「ε2(EXTRA1)」にアサインできる。残念ながら、スペース・キーが1/3位だと、左右の親指が自然と成り、修飾キーが増えるのだが。
      • パーム・レストを設定する上で、手前を上げて、水平より若干手前が低い設定で妥協。
    • でも、記号キーが多い事と、FN1~12を「2-key rollover issue」に拘らずに使えるので意外と使い勝手が善い。
  • 「Apple Wireless Keyboard(JIS layout)」のキーキャップを手持ちの「Apple Wireless Keyboard(US layout)」と交換をはじめたところ、故障が出て来た。遂に、「flipped around Apple Wireless Keyboard(US layout)」のキーキャップとの交換で、漸く;
    • 「Apple Wireless Keyboard(JIS layout)」の「US layout like」が出来た。
    • 犠牲者は、下記の2台、黙祷;
      • 「flipped around Apple Wireless Keyboard(US layout)」
      • 新品の「Apple Wireless Keyboard(US layout)」
 以上の顛末で、急な話ですが「KeyRemap4MacBookの導入」は開発の終了となりました。ほぼ6ヶ月ですが、KeyRemap4MacBookの使い道を引き出す上で、貴重な体験ができました。感謝。

実は、この原稿自体も、「normal Apple Wireless Keyboard(JIS layout) with US flaivor」& normal Apple Wireless Trackpad」を連結する簡易パーム・レストを今日、製作して、此れで書いています。なるべく早めに、このご紹介をしたいと思います。

____
この記事の履歴
  1. 開始 2013-07-26(金) 19:38:02  

2013-06-30

my own "Character Picker" with Keyboard-en.plist on os x Lion 10.7.5

以前に作成したアスキー・アートを手直ししようと、 TextEditで作業を始めた所、「a」を押し続けてもポップアップ・メニュが出るので、連続入力「aa…a」 が簡単には作れない。ところが、このポップアップは一寸した「アクセント付きの文字」の入力には重宝しているので、一時的にポップアップ・メニュの機能を停止する方法を調べたのですが、判りませんでした。
そこで、「Appleサポート・コミュニティのLionフォーラム」で質問致しました;
この結果、このポップアップ・メニュは「Terminal, Editer系」では作動せず、むしろ TextEditで例外的に作動するようだ。そこで、初期の目的、「アスキー・アートの手直し」は常用エディタ、TextWranglerでいとも簡単に達成出来ました。

余裕ができたので、先の論議でHALさんの解説を元に検索すると、問題のポップアップ・メニュは;
  • 「Character Picker」
  • ApplePressAndHold
といった項目と関係が在るようでした。これらの検索から、次のディレクトリ;
  • /System/Library/Input Methods/PressAndHold.app/Contents/Resources/
にある言語ごとのplistによって規定される様です。英数入力時の「Character Picker」に修正を書けたければ、
  • Keyboard-en.plist
を変更する事に成ります。しかし、いくら検索しても、「Lionでのplistの設定法」の資料はありませんでした。でも、不思議な事に「iOS上でのplistの作成情報」は結構有る様でした。例えば;


そこで、Keyboard-en.plistのバックアップをとって、トライ&エラーで;
  • 制御文字: ⌃ ⌥ ⌘ ⇧ ⇥ ⇤ ⌫ ⌦ ↩ ⎋ 
  • ギリシャ文字
などを組み込んで見たので、以下に報告します。
Keyboard-en.plistの一番先頭に「A」の項が有るので引用します;

<key>Roman-Accent-A</key>
<dict>
<key>Direction</key>
<string>right</string>
<key>Keycaps</key>
<string>A À Á Â Ä Æ Ã Å Ā</string>
<key>Strings</key>
<string>A À Á Â Ä Æ Ã Å Ā</string>
</dict>


此れに対して、新たに定義した「g」の項は;


<key>Roman-Accent-g</key>
<dict>
<key>Strings</key>
<string>g \gamma γ \Gamma Γ</string>
</dict>

です。どうやら、Keyboard-en.plistの「Direction」タブや「Keycaps」タブはiOS由来であるものの、Lionでは盲腸のような存在らしい。今回は、新たに追加した設定については、この簡易設定で書いた。取り敢えず、Keyboard-en.plistKeyboard-en.plistをの全部分を示します;

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Roman-Accent-A</key>
    <dict>
        <key>Direction</key>
        <string>right</string>
        <key>Keycaps</key>
        <string>A À Á Â Ä Æ Ã Å Ā </string>
        <key>Strings</key>
        <string>A À Á Â Ä Æ Ã Å Ā </string>
    </dict>
    <key>Roman-Accent-C</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>C Ç Ć Č</string>
        <key>Strings</key>
        <string>C Ç Ć Č</string>
    </dict>
    <key>Roman-Accent-E</key>
    <dict>
        <key>Direction</key>
        <string>right</string>
        <key>Keycaps</key>
        <string>E È É Ê Ë Ē Ė Ę</string>
        <key>Strings</key>
        <string>E È É Ê Ë Ē Ė Ę</string>
    </dict>
    <key>Roman-Accent-I</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>I Î Ï Í Ī Į Ì</string>
        <key>Strings</key>
        <string>I Î Ï Í Ī Į Ì</string>
    </dict>
    <key>Roman-Accent-K</key>
    <dict>
        <key>Strings</key>
        <string>K  KeyRemap4MacBook</string>
    </dict>
    <key>Roman-Accent-L</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>L Ł</string>
        <key>Strings</key>
        <string>L Ł</string>
    </dict>
    <key>Roman-Accent-N</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>N Ñ Ń</string>
        <key>Strings</key>
        <string>N Ñ Ń</string>
    </dict>
    <key>Roman-Accent-O</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>O Ô Ö Ò Ó Œ Ø Ō Õ</string>
        <key>Strings</key>
        <string>O Ô Ö Ò Ó Œ Ø Ō Õ</string>
    </dict>
    <key>Roman-Accent-Q</key>
    <dict>
        <key>Strings</key>
        <string>Q ● ○ ◀ ▶ ▲ ▼ ◼ ◻</string>
    </dict>
    <key>Roman-Accent-S</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>S Ś Š</string>
        <key>Strings</key>
        <string>S Ś Š</string>
    </dict>
    <key>Roman-Accent-U</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>U Û Ü Ù Ú Ū</string>
        <key>Strings</key>
        <string>U Û Ü Ù Ú Ū</string>
    </dict>
    <key>Roman-Accent-W</key>
    <dict>
        <key>Strings</key>
        <string>W × ÷ ± ∓ ¬ ∩ ∪ ∝ ∞ ℵ ∀ ∃</string>
    </dict>
    <key>Roman-Accent-Y</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>Y Ÿ</string>
        <key>Strings</key>
        <string>Y Ÿ</string>
    </dict>
    <key>Roman-Accent-Z</key>
    <dict>
        <key>Direction</key>
        <string>right</string>
        <key>Keycaps</key>
        <string>Z Ž Ź Ż</string>
        <key>Strings</key>
        <string>Z Ž Ź Ż</string>
    </dict>
    <key>Roman-Accent-a</key>
    <dict>
        <key>Direction</key>
        <string>right</string>
        <key>Keycaps</key>
        <string>a à á â ä æ ã å ā \alpha α \Alpha A</string>
        <key>Strings</key>
        <string>a à á â ä æ ã å ā \alpha α \Alpha A</string>
    </dict>
    <key>Roman-Accent-b</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>b \beta β \Beta B</string>
        <key>Strings</key>
        <string>b \beta β \Beta B</string>
    </dict>
    <key>Roman-Accent-c</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>c ç ć č \psi ψ \Psi Ψ</string>
        <key>Strings</key>
        <string>c ç ć č \psi ψ \Psi Ψ</string>
    </dict>
    <key>Roman-Accent-d</key>
    <dict>
        <key>Strings</key>
        <string>d \delta δ \Delta Δ</string>
    </dict>
    <key>Roman-Accent-e</key>
    <dict>
        <key>Direction</key>
        <string>right</string>
        <key>Keycaps</key>
        <string>e è é ê ë ē ė ę \epsilon ε \Εpsilon Ε</string>
        <key>Strings</key>
        <string>e è é ê ë ē ė ę \epsilon ε \Εpsilon Ε</string>
    </dict>
    <key>Roman-Accent-f</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>f \phi φ \Phi Φ</string>
        <key>Strings</key>
        <string>f \phi φ \Phi Φ</string>
    </dict>
    <key>Roman-Accent-g</key>
    <dict>
        <key>Strings</key>
        <string>g \gamma γ \Gamma Γ</string>
    </dict>
    <key>Roman-Accent-h</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>h \eta η \Eta H</string>
        <key>Strings</key>
        <string>h \eta η \Eta H</string>
    </dict>   
    <key>Roman-Accent-i</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>i î ï í ī į ì \iota ι \Iota I</string>
        <key>Strings</key>
        <string>i î ï í ī į ì \iota ι \Iota I</string>
    </dict>
    <key>Roman-Accent-j</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Strings</key>
        <string>j \xi ξ \Xi Ξ</string>
    </dict>
    <key>Roman-Accent-k</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Strings</key>
        <string>k \kappa κ \Kappa K</string>
    </dict>
    <key>Roman-Accent-l</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Strings</key>
        <string>l ł \lambda λ \Lambda Λ</string>
    </dict>
    <key>Roman-Accent-m</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>m \mu μ \Mu M</string>
        <key>Strings</key>
        <string>m \mu μ \Mu M</string>
    </dict>
    <key>Roman-Accent-n</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>n ñ ń \nu ν \Nu N</string>
        <key>Strings</key>
        <string>n ñ ń \nu ν \Nu N</string>
    </dict>
    <key>Roman-Accent-o</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>o ô ö ò ó œ ø ō õ \omicron \Omicron</string>
        <key>Strings</key>
        <string>o ô ö ò ó œ ø ō õ \omicron \Omicron</string>
    </dict>
    <key>Roman-Accent-p</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>p \pi π \Pi Π</string>
        <key>Strings</key>
        <string>p \pi π \Pi Π</string>
    </dict>
    <key>Roman-Accent-q</key>
    <dict>
        <key>Strings</key>
        <string>q ⌃ ⌥ ⌘ ⇧ ⇥ ⇤ ⌫ ⌦ ↩ ⎋ </string>
    </dict>
    <key>Roman-Accent-r</key>
    <dict>
        <key>Direction</key>
        <string>right</string>
        <key>Keycaps</key>
        <string>r \rho ρ \Rho Ρ 📻 </string>
        <key>Strings</key>
        <string>r \rho ρ \Rho Ρ 📻</string>
    </dict>
    <key>Roman-Accent-s</key>
    <dict>
        <key>Direction</key>
        <string>right</string>
        <key>Keycaps</key>
        <string>s ß ś š \sigma σ \Sigma Σ</string>
        <key>Strings</key>
        <string>s ß ś š \sigma σ \Sigma Σ</string>
    </dict>
    <key>Roman-Accent-t</key>
    <dict>
        <key>Strings</key>
        <string>t \tau τ \Tau T</string>
    </dict>   
    <key>Roman-Accent-u</key>
    <dict>
        <key>Strings</key>
        <string>u û ü ù ú ū \theta θ \Theta Θ</string>
    </dict>
    <key>Roman-Accent-v</key>
    <dict>
        <key>Strings</key>
        <string>v \omega ω \Omega Ω</string>
    </dict>
    <key>Roman-Accent-w</key>
    <dict>
        <key>Strings</key>
        <string>w ↔ ← → ↖ ↘ ↕ ↑ ↓ ⇞ ⇟</string>
    </dict>
    <key>Roman-Accent-x</key>
    <dict>
        <key>Direction</key>
        <string>left</string>
        <key>Keycaps</key>
        <string>x \chi χ \Chi X</string>
        <key>Strings</key>
        <string>x \chi χ \Chi X</string>
    </dict>
    <key>Roman-Accent-y</key>
    <dict>
        <key>Strings</key>
        <string>y ÿ \upsilon υ \Upsilon Υ</string>
    </dict>
    <key>Roman-Accent-z</key>
    <dict>
        <key>Strings</key>
        <string>z ž ź ż \zeta ζ \Zeta Ζ</string>
    </dict>
    <key>UI-ABC</key>
    <string>ABC</string>
    <key>UI-Cancel</key>
    <string>Cancel</string>
    <key>UI-Confirm</key>
    <string>confirm</string>
    <key>UI-Dismiss</key>
    <string>dismiss</string>
    <key>UI-Done</key>
    <string>Done</string>
    <key>UI-EmergencyCall</key>
    <string>Emergency
Call</string>
    <key>UI-Go</key>
    <string>Go</string>
    <key>UI-HWR</key>
    <string>Handwriting</string>
    <key>UI-Join</key>
    <string>Join</string>
    <key>UI-Kana</key>
    <string>Kana</string>
    <key>UI-LanguageIndicator</key>
    <string>English</string>
    <key>UI-Next</key>
    <string>Next</string>
    <key>UI-NextCandidate</key>
    <string>next</string>
    <key>UI-Numbers</key>
    <string>123</string>
    <key>UI-NumbersSymbols</key>
    <string>.?123</string>
    <key>UI-Pause</key>
    <string>pause</string>
    <key>UI-Wait</key>
    <string>wait</string>
    <key>UI-Pinyin</key>
    <string>Pinyin</string>
    <key>UI-Redo</key>
    <string>redo</string>
    <key>UI-Return</key>
    <string>return</string>
    <key>UI-Romaji</key>
    <string>QWERTY</string>
    <key>UI-Route</key>
    <string>Route</string>
    <key>UI-Search</key>
    <string>Search</string>
    <key>UI-Send</key>
    <string>Send</string>
    <key>UI-Simplified</key>
    <string>Simplified</string>
    <key>UI-Space</key>
    <string>space</string>
    <key>UI-Standard</key>
    <string>Standard</string>
    <key>UI-Undo</key>
    <string>undo</string>
</dict>
</plist>
上記設定の「Character Picker」を表にした;


TextEditでの「e」を押し続けた時の「Character Picker」応答は;

 と間延びしてしまう。これはギリシャ文字のTeX表現「\epsilon」等を入れた為である。

なお、ローマ字とギリシャ文字の対応は、Greekに対する「Keyboard Viewer」での対応に合わせた。


【感想】
  • 駄目元で作成したものの、意外と使い勝手がいい。
  • 通常のエディタ(TextWrangler)でも使えるとどうなるか興味深い。
    • と思っていたが、先ほど無意識に長押しを居ていたら「Character Picker」が動いていた。素晴らしい!
  • 数字キーへのアサインメントはポップアップ・メニュが振動して使えない。なぜだろうか?

関連のページ

  1. 修飾キーの辞書登録
  2. 「Mac_pico_tips/欧文文字のアクセント入力」の収録
————
  1. 開始 2013-06-30(日) 16:58:25 
  2. 追加 2013-07-01(月) 15:49:58  
  3. 追加 2013-07-01(月) 17:53:38  エディタ(TextWrangler)でも「Character Picker」は作動した!

2013-06-19

KeyRemap4MacBookの導入、その19: SandS とKeyOverlaidModifier

此れまでに「flipped around Apple Wireless Keyboard」の大まかな設定は、
で報告してある通りだ。この設定は、単一の.xml;
  • ~/Library/Application Support/KeyRemap4MacBook/flipped_around_Apple_WK.xml
に記述していた。

今回は、其の設定に「SandS: Space & Shift」の機能を、別途、SandS_fn.xmlに書き込み、flipped_around_Apple_WK.xmlからincludeさせて動作させたので、報告する。

なお、参考にしたのは、

  • KeyRemap4MacBookの「Change Space Key」の実例、特に、
  • Space to Shift (+ When you type Space only, send  Space) Fn+Space to Space
このxmlのソース・コードは、ご自分のKeyRemap4MacBookの下にあるspace.xmlの行62~69に記述されている;
  • /Applications/KeyRemap4MacBook.app/Contents/Resources/include/checkbox/standards/space.xml
其の部分だけ引用させて頂きますと;

    <item>
      <name>Space to Shift_L</name>
      <appendix>(+ When you type Space only, send Space)</appendix>
      <appendix>Fn+Space to Space</appendix>
      <identifier>remap.space2shiftL_space_fnspace</identifier>
      <autogen>__KeyToKey__ KeyCode::SPACE, ModifierFlag::FN, KeyCode::SPACE</autogen>
      <autogen>__KeyOverlaidModifier__ KeyCode::SPACE, KeyCode::SHIFT_L, KeyCode::SPACE</autogen>
    </item>


関連ファイルの状況を、Finderにより、図1に示す;

Figure 1. Related files in a Finder

KeyRemap4MacBookの[Change Key]の設定の状況を図2a,bに示す;

Figure 2a. SandS_fn in [Change Key] of KeyRemap4MacBook.
Figure 2b. flipped_around_Apple_WK.xml includes SandS_fn.xml.


今回のSandSのxmlは先に述べたように「Change Space Key」記載のxmlから修正したもので、図3に示す;

Figure 3. SandS_fn.xml


ここで、赤い色の注釈部分がSandSの主要部分であり、「___KeyOverlaidModifier__」により構成されていて、其のキー・コード意味は順番に;

「F6」だけが押し下げされると、SandSと認識する設定。
「OverlaidModifier」として「Shift_L」と設定。
「SandS short-clic」の場合は、「Space」送出の設定。


詳しいキー挙動は、EventViewerでの記録として、図4に示す;


Figure 4. EventViewer for "Normal Shift_R & Normal Space" and "SandS with Fn".

青い注釈部分が、"Normal Shift_R & Normal Space"に対応する。スペースのような実入力キーのeventTypeは「keyDown/Up」に対応するが、修飾キーの一つである「シフト」のそれは

赤い注釈部分が"SandS with Fn"にに対応し、三つのモードがある;

  • 「SandS short-clic」:キー挙動は「Space: 黄緑の縦棒部分」
    • 青い部分が直列に作動しているのと同じ挙動を示している。
  • 「SandS long-click」: キー挙動は「Shift_L: 黄の縦棒部分」KeyOverlaidModifier: 黒の縦棒に対応。
  • 「SandS long-click」は、図5の "【key Overlaid Modifier】Timeout"より長くF6の押し下げ在る時に発生する。
  • 「Sand with Fn」:キー挙動は「Space: 黄緑の縦棒部分」 
    • Spaceが連続的に送出されているのが見えている。

KeyRemap4MacBookの「Key Repeat」タブを図5に示す;

Figure 5. Key Repeat tab of KeyRemap4MacBook.


長い事、機能が判らなかったKeyOverlaidModifierが明瞭に理解出来たので、次の課題としては、「Mouse Key」を調べたい。

————

  1. 開始 2013-06-19(水) 10:56:24 
  2. 追加 2013-09-18(水) 14:31:05 space.xmlのディレクトリとSandS部分の直接引用

2013-06-11

KeyRemap4MacBookの導入、その18: private.xmlとinclude

KeyRemap4MacBookで制御するべき周辺機器が多くなってきたので、private.xmlも機器ごとに分割しないと、修正部分が複雑になってミスを犯し易くなったり、修正部分が判り難くなったりする。

private.xmlの分割は、includeタグによって実現される。実際にKeyRemap4MacBookのFinder情報は;

Fig.1 ~/Library/Application Support/KeyRemap4MacBookのFinder情報


今回は、private.xmlと同じ階層にあるディレクトリ、INCLUDE_for_private_xmlにある個別のxmlをprivate.xmlが呼び出す階層構造としてみた;

Fig.2 private.xmlでのincludeタグによる個別のxmlの呼び出し
上記の「path」設定では、private.xmlからの相対パスで書かれている事に注意して欲しいまたincludeの順番に従ってリロードされている(下図3.1と比較すると判る)。

さて、KeyRemap4MacBookのPreferences設定で、「K811のflipped around mode(standard mode)」を選択した際のチェック状況を下図3.1で緑色のボックスで示します。

Fig.3.1 Private.xml check status for K811 standard mode of flipped around.


他方、「K811のF1キーとの"2-key rollover test mode"」での設定を示します;

Fig.3.2 Private.xml check status for K811's 2-key rollover test mode with F1-key.


これらのモード切り替えは、KeyRemap4MacBookのプルダウン・メニュで行う;

Fig.4 Mode change are in the pull-down menu of KeyRemap4MacBook on Status Bar

上記のモード自体の設定は、下図5のようにする;

 Fig.5 Mode prifile is set at [MenuBar] of KeyRemap4MacBook on Status Bar

————
  1. 開始 2013-06-11(火) 22:17:09 
  2. 追加 2013-06-12(水) 10:45:57 Fig.5

2013-06-05

JavaScriptのDebugger

JavaScriptの練習に並行して、デバッガについて調べて見た。昔、FirefoxでFireburgというアド・オンを入れてみたものの、フォントが小さすぎて使えなかった経験があるからだ。

そこで、日常的に使っている、Firefox, Safariを調べて見ると、昔と同じで「小さな固定フォントだけ」なので愕然とした。他方最近、「JavaScriptをターミナルで走らせる」という検索をしたとき、「Google Chrome」のデバッガの解説が豊富にあるようなので、久しぶりに「Version 27.0.1453.110」を入手してみた。

デバッガは「⌥⌘j」で呼び出せる。



デバッガの後にあるウェブのフォントと比べると、デバッガのフォントは情けない程に小さい。駄目元で「⌘+」をすると、なんとデバッガのフォント・サイズは増大する! 適当に見好いサイズにすると;



という訳で、「近眼・老眼」な私に取って、「Google Chrome」のデバッガ(debugger)は有難いツールになりそうです。なお、フォントの増大/減少は「⌘+/-」でできました。


————
  1. 開始 2013-06-05(水) 10:50:39 

2013-05-31

"Quick Look"からjQueryへ

取り留めの無い話の様ですが、意外な関連があります。"Quick Look"に興味が湧いたのは、KeyRemap4MacBookのキー操作の図面をキー入力一発で引き出せるかをトライしていた時です。

始めには、"Quick Look"をターミナル経由で呼び出せれば善いと考えて、調べて見たのですが、良く判りませんでした。そこで、アップルのサポート・コミュニティ、「Mac mini」のフォーラムで質問しました;
そこで判ったのは"Quick Look"に対応するコマンドは、敢えて言えば「qlmanage」だけれど、デバッグ用に作られているので、使い勝手は悪いよ、という結論でした。

これを説明下さったHiro.Sさんが、AppleScriptから"Quick Look"で画像ファイルを表示する手法をお教え下さったのですが、自分には馴染めませんでした。

逆に「qlmanage」でiTunesで演奏中の歌詞を、Dashboardに移動する事無く、現在のデスクトップ中に表示する方法をお示しになり、常連のHALさんとの活発な論議が起こりました。

他方私は、最近CDを聴くよりも、性能が向上したCALMRADIO.COMを聴く頃が多いです。そのとき、iTunesの情報窓では;
  • スクロールする上、
  • フォントも小さく、
  • 直ぐに見えない
という不満があったので、「2013/05/11 11:37」に質問をさせて戴きました。此れに対する質疑応答から、「AppleScript Editor」を触りだして、AppleScriptからiTunesを操作する感じが、朧げながら判る感じがしてきました。

そんな最中、Hiro.Sさんから、2013/05/12 14:18に「(* Radio の情報をリストファイルに書き出す iTunes用 AppleScript……」というスクリプトの公開がありました。私には、こんなに簡単に望んだデータを引き出して、表に出来るのかと驚きました。

このころは、ファイルをエディタで開けて見るという単純な方法でした。でも、作業中に興味ある音楽が出てくると.appにしたアイコンをクリックするだけで情報がセーブできたり、眺めたり出来て、心理的にも充足感が高まりました。
  • 意外な局が面白かったり、
  • 全然知らないけれど興味の在る曲が判って、版元も検索出来たり。
  • 好きだけど名前の知らない曲が判明したり。
  • 知らない演奏家だけど善い音楽家を知ったり。

そのうちに、区切り記号を「tab:\t」にして、ファイル名を.tsv(tab-separated values)とするだけで、エディタで開かずとも"Quick Look"で、そこそこ見易く表示出来る事が判りました。

ところが、Hiro.Sさんから「2013/05/19 15:25」に「Javascript Bookmarklet」を使っって、ソート付きのHTMLの紹介がありました。これには衝撃的な印象を受けました。ブラウザを表示先とすれば、"Quick Look"の様に、データの損傷はなく、余計なボタンもなく、必要なデータをキーボードから直接呼び出せることになるからです。

で、急遽「ソートできる表」という観点から検索をしてみると「jQuery」というJavaScriptのツール群様のプラグ・インのjquery.csv2table.jsを使えば、「容易に・奇麗に・動的な表示」が可能らしいとわかりました。
まだ自分では使い方が判っていないのですが、師匠のHiro.Sさんにご教示を受けて使っています。

と言う様な、紆余曲折を経て、
  • "Quick Look: 静的" → ブラウザ + jQuery + csv2table.js: 動的
の旅が収束したと言う訳です。

____
この記事の履歴
  1. 開始 2013-05-31(金) 12:04:18 


2013-05-19

How to represent tab(\t) at sed command in bash script of os x

最近「tsp:tab-separated values」で、タブ(tab, \t)を他の文字列にする必要が有った。簡単に思えたが、ほとんどの「os x」に搭載された「bash中のsed」ではそう簡単でない事が判った。今後の為に纏めて置く。

以下に、説明の為に作成したスクリプト;

#!/bin/bash

#set -x

echo "=== $(basename $0): how to present tab in sed"
echo -e "== for $(bash --version | grep version)\n"

org="pqr    stu" # rとsの間にはタブ

echo "■ 次の原稿には、rとsの間にはタブがある;"
echo "  0.---「${org}」"

echo
echo  "■ タブをバレットに変えようとして、"
echo '■ 「sed -e "s/\t/•/"」にパイプしても、'
echo  "■ タブは其の儘で「t」が消えるだけ;"
echo "  1.---「${org}」"  | sed -e "s/\t/•/"


echo
echo  "■ タブを表す変数を生成する"
echo  '■ 方法1: t1="‹タブ押す›'
echo  '■ 方法2: t2=$(echo -e "\t\c")'
echo  '■■ 両者は等しい'

t1="    " #実際に「tab-key」を押した。
t2=$(echo -e "\t\c")

echo
echo '■ 「sed -e "s/${t1}/•/"」にパイプすると、タブは•に替わる'
echo "  2.---「${org}」"  | sed -e "s/${t1}/•/"

echo
echo '■ 「sed -e "s/${t2}/•/"」にパイプしてもOK'
echo "  3.---「${org}」"  | sed -e "s/${t2}/•/"

echo


echo ■ 参考資料に従って、1.の「'\'t」を「'"$'\''\t'\''"'」に書き換えて
echo '■ 「sed -e "s/"$''\t''"/•/"」にパイプしても、タブは•に替わる'
echo "  4.---「${org}」"  | sed -e "s/"$'\t'"/•/"

echo
echo ■ 同じ参考資料に従って、.bash_profileで「export mytab='$'\''\t'\'」と定義したので
echo '■ 「sed -e "s/$mytab/•/"」とパイプしても、タブは•に替わる'
echo "  5.---「${org}」"  | sed -e "s/$mytab/•/"
echo
echo 「上記、5.の方法が覚え易いし、安全だろう」

echo
echo "=== $(basename $0): end"

其の動作結果を示す;

u1@mmX75:~ $ test_tab
=== test_tab: how to present tab in sed
== for GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)

■ 次の原稿には、rとsの間にはタブがある;
  0.---「pqr    stu」

■ タブをバレットに変えようとして、
■ 「sed -e "s/\t/•/"」にパイプしても、
■ タブは其の儘で「t」が消えるだけ;
  1.---「pqr    s•u」

■ タブを表す変数を生成する
■ 方法1: t1="‹タブ押す›
■ 方法2: t2=$(echo -e "\t\c")
■■ 両者は等しい

■ 「sed -e "s/${t1}/•/"」にパイプすると、タブは•に替わる
  2.---「pqr•stu」

■ 「sed -e "s/${t2}/•/"」にパイプしてもOK
  3.---「pqr•stu」

■ 参考資料に従って、1.の「\t」を「"$'\t'"」に書き換えて
■ 「sed -e "s/"$\t"/•/"」にパイプしても、タブは•に替わる
  4.---「pqr•stu」

■ 同じ参考資料に従って、.bash_profileで「export mytab=$'\t'」と定義したので
■ 「sed -e "s/$mytab/•/"」とパイプしても、タブは•に替わる
  5.---「pqr•stu」

「↑の5.の方法が覚え易いし、安全だろう」

=== test_tab: end
u1@mmX75:~ $
 
【結論】 sedのなかで「\t」を使いたくなったら「$mytab」に置き換えるべし。

.bash_profileでの該当部分は;
export LANG=ja_JP.UTF-8
export mytab=$'\t'

【参考資料】
  1. http://mattintosh.hatenablog.com/entry/2013/01/16/143323
  2. bash Pocket Reference, O'REILLY, ISBN: 978-1-449-38788-4, p11, $' '
—————
この記事の履歴
  1. 開始 2013-05-19(日) 21:22:30 
  2. 修正 2013-05-20(月) 10:57:34 .bash_profile

2013-05-10

indented-text handling by using echo and here-document of bash on os x lion

KeyRemap4MacBookの調整の時に、動的に替わるxmlや複雑なxmlを作る事が多くなって来た。一般に、xmlが多量になるとインデント(indent)を確実にしないと、見通しが極度に低下する。更にKeyRemap4MacBookの特殊性として、「<autogen>タブ階層構造」と「<item>タブの階層構造」とが別々に意味を持つので、正しくインデントの必要性が高まって来た。

これらの「インデントされたテキスト(indented text)」を生成するときには、エスケープ・シークエンス(escape sequences)による出力 ;
  • 「エスケープ・シークエンスのオプションの付いたエコー・コマンド」
    • echo -e "\tHoge.$JJJ hoge\n"
を使っていた。しかし、量が増えて来たり、変数(variable, $JJJ)が入ってくると、作り間違えが急造して、修正が大変になってしまう。

そこで、不得意な「ヒア・ドキュメント(here document)」を使った具体例、echo_and_here-documentを作製したので、以下に説明する。なお、変数(variable, $JJJ)の処理は最後に触れます。

u1@mmX75:~/bin $ cat echo_and_here-document
#!/bin/bash

ex5() {

# EXAMPLE 5: basic "here document" wrapped in function, ex5    ###########
JJJ=$((JJJ+1))
cat <<EOF

<!-- EXAMPLE $JJJ: basic "here document" wrapped in function, ex5 -->
    <abc>
        efg, hij
    </abc>
   
EOF

}

################ Main ####################################################
echo  "$(basename $0): start"


# EXAMPLE 1: direct "echo with -e option" ################################
JJJ=1
echo -e "\n<!-- EXAMPLE $JJJ: simple \"echo with -e option\"\c"
echo -e " -->\n\t<abc>\n\t\tefg, hij\n\t</abc>"

# EXAMPLE 2: basic "here document" #######################################
JJJ=$((JJJ+1))
cat <<EOF

<!-- EXAMPLE $JJJ: basic "here document" -->
    <abc>
        efg, hij
    </abc>
   
EOF

# EXAMPLE 3: command substitution includes "here document" ###############
JJJ=$((JJJ+1))
ex3="$(
cat <<EOF

<!-- EXAMPLE $JJJ: "here document" included
                 by "command substitution:\$(...)"
                 and saved to variable, \$ex3.-->
    <abc>
        efg, hij
    </abc>
   
EOF
)"
echo "$ex3"

# EXAMPLE 4: basic "here document" redirect file, ex4. ###################
JJJ=$((JJJ+1))
cat <<EOF > ex4

<!-- EXAMPLE $JJJ: basic "here document" redirects to file, ex4 -->
    <abc>
        efg, hij
    </abc>
   
EOF
cat ex4
rm -f ex4

# EXAMPLE 5: basic "here document" redirect file in function ex5. ########
ex5 # just call function, ex5


# EXAMPLE 6: basic "here document" redirect file
#                 in external function ex6 at myUtuities ########
. myUtilities
ex6 # just call function, ex6

echo ""
echo "============= myUtilities ====================="
cat $HOME/bin/myUtilities | sed -e "s/^/contents: /"
echo "==============================================="

################ Main ####################################################
u1@mmX75:~/bin $


この実行結果は;

u1@mmX75:~ $ echo_and_here-document
echo_and_here-document: start

<!-- EXAMPLE 1: simple "echo with -e option" -->
    <abc>
        efg, hij
    </abc>

<!-- EXAMPLE 2: basic "here document" -->
    <abc>
        efg, hij
    </abc>
   

<!-- EXAMPLE 3: "here document" included
                 by "command substitution:$(...)"
                 and saved to variable, $ex3.-->
    <abc>
        efg, hij
    </abc>
   

<!-- EXAMPLE 4: basic "here document" redirects to file, ex4 -->
    <abc>
        efg, hij
    </abc>
   

<!-- EXAMPLE 5: basic "here document" wrapped in function, ex5 -->
    <abc>
        efg, hij
    </abc>
   

<!--
    EXAMPLE 6: basic "here document" wrapped
    in function, ex6() at external file, myUtilities
-->   
    <abc>
        efg, hij
    </abc>
   

============= myUtilities =====================
contents: #!/bin/bash
contents:
contents: ex6(){
contents:
contents: # EXAMPLE 6: basic "here document" wrapped in function, ex6 at myUtulities    ###########
contents: JJJ=$((JJJ+1))
contents: cat <<EOF
contents:
contents: <!--
contents:     EXAMPLE $JJJ: basic "here document" wrapped
contents:     in function, ex$JJJ() at external file, myUtilities
contents: -->   
contents:     <abc>
contents:         efg, hij
contents:     </abc>
contents:    
contents: EOF
contents: }
===============================================
echo_and_here-document: end
u1@mmX75:~ $

使った感想としては、利用目的に応じて;
  • 超簡単なら、EXAMPLE1
  • 簡単なら、EXAMPLE2
  • 繰り返しの利用なら、EXAMPLE3
  • ファイルとして保存なら、EXAMPLE4
  • 開発途中のファイルなら関数が使いよいかも、 EXAMPLE5
  • 開発が終わって、共通なユーティリティ・ファイルにするのもよい、EXAMPLE6
といった感じです。KeyRemap4MacBook関係では、圧倒的にEXAMPLE5らしそうです。

最後に変数(variable, $JJJ)の定義と演算ですが;
  • 数値代入:JJJ=5
  • 数値演算:KKK=$((JJJ*2))
実例;

u1@mmX75:~ $ JJJ=5
u1@mmX75:~ $ KKK=$((JJJ*2))
u1@mmX75:~ $ echo -e "\tJJJ=$JJJ, KKK=JJJ*2=$KKK"
    JJJ=5, KKK=JJJ*2=10
u1@mmX75:~ $

感想
  •  自信を持って、明確にヒア・ドキュメントを使えるようになった。
  • 「echo -e」の解説; 下記の本の「p71,72」が簡明で、その様に動作した。
    • Arnold Robbins, "bash Pocket Reference", O'REILLY, 2010
    •  ISBN: 978-1-449-38788-4 
  • 動作環境
    • Mac mini (mid 2011), Lion 10.7.5
    • bash --version
      • GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
____
この記事の履歴
  1. 開始 2013-05-10(金) 14:57:11 
  2. 修正 2013-05-12(日) 02:30:18 
  3. 追加 2013-05-13(月) 17:11:01 EXAMPLE6

2013-04-27

シェルスクリプトをターミナル無しに実行するには

自分で書いた幾つかのスクリプトは、KeyRemap4MacBookのサポートによって、キーボードから直接起動したい。それについて、KeyRemap4MacBook-jpで、hisayaさんから高山さんのサイト;
をお教え戴いていたが、My flipped around Logicool Keyboard K811 with Logi...の工作に時間が取られて手が出なかった。

工作が一段落付いたので、このテーマに手を出す事にした。

初めてなので、高山さんの資料を読み、流れを頭にいれてから、[まとめ]サンプル・プログラム「FirefoxProfileManager.app.zip」に付いての説明書き;
  • このサンプルを落として、 core.sh と icon.icon を差し替えれば OK。
に従って、Finderでの「ドット・ファイル」の表示のトグルをさせる「dotf」というスクリプトのアプリケーション化を行った。

気を良くして、全部手動で書いてみたが、エラーが多くて閉口した。で調べると、
というアプリケーションがあった。これはただ直接呼べるアプリケーション化だけではなくて、「Status menu」からも呼びさせる様になるようだ。

そこで2つ作ってみたが、一勝一敗であった。まあ、段々と整備しよう;


実は、KeyRemap4MacBookから直接起動するので、アイコンは要らないのですが、初めて作ったアプリケーションなので、笑……。

その後、スクリプトのplatypusを使ったりしたが、使用条件が厳しそうなのので、シェルスクリプト型の支援を探したら;
にシンプルなスクリプト、mkshellapp.shが公開されていたので、それを元に、アイコンも付けるスクリプト、ss2appに改造させて戴きました;
 #!/bin/sh

#http://karukumac.blogspot.jp/2013/02/mac.html
# mkshellapp.sh - make application from shell_script
#
# ss2app: 2013-04-28(Sun) 20:02:07 by mNeji
#
# これからアプリケーションを作りたいディレクトリ、HOGEを作って置き、
# スクリプト、hoge.shと、其の画像アイコン、hoge.icnsをHOGEの中に用意する。
#  通常の画像ファイルを.icnsに変換するのは;
#   iConvertのオンライン・サービスが便利:
#      http://iconverticons.com/online/#
# TerminalでHOGEに移動して;
# 「$ ss2app hoge.sh 」を実行すると、
#        hoge.appが生成され、
#         hoge.sh,hoge.icnsはhoge.appの内部に移動する。


PROG=`basename $0`
USAGE="Usage: $PROG shell_script"

case $# in
1)  scr="$1" ;;
*)  echo $USAGE >&2
    exit 2 ;;
esac

app_name=`basename "$scr" .sh`.app
#app_icon="applcon.icns"
app_icon=`basename "$scr" .sh`.icns

mkdir -p "$app_name"/Contents/MacOS
mkdir -p "$app_name"/Contents/Resources


if [ -x "$scr" ]; then
    cp -p "$scr" "$app_name"/Contents/MacOS
    rm -f "$scr"
else
    echo "Error: $PROG: $scr is not found or not executable." 2>&1
    exit 1
fi

if [ -f "$app_icon" ]; then
    cp -p "$app_icon" "$app_name"/Contents/Resources
    rm -f "$app_icon"
else
    echo "Error: $PROG: $app_icon is not found." 2>&1
    exit 1
fi

cat << EOF > "$app_name"/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleExecutable</key>
    <string>`basename "$scr"`</string>
    <key>CFBundleIconFile</key>
    <string>${app_icon}</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleSignature</key>
    <string>????</string>
  </dict>
</plist>
EOF

echo "$PROG: $app_name successfully created."


----
この記事の履歴
  1. 開始 2013-04-27(土) 15:45
  2. 追加 2013-04-28(Sun) 20:36  mkshellapp.sh ss2app

注目の投稿

Terminalでの、なんちゃってViモドキ

近頃、ようやくKarabiner-Elementsに慣れてきたので、 Terminalで動作する「擬似Vi-Mode」を作って見たので、ご紹介します。 『概要』 「擬似Vi-Mode」の所以は、方向キー「←↓↑→」を通常の「hjkl」ではなくて「jkil」としました。これ...