gotin blog

Whatever gotin wanna write

gmacsにご要望をいただいた

参考になるのかすら当てになりませんが、ソレが動いたとしても本当に役に立つのか分からない無理難題を押し付。。。コメントに答えて、書くことに。

gmacsの具体的に気になったところとか。 - himadatenodeの日記

とってもうれしいことにgmacsに対するご要望をいただきました。
とりあえずの回答をここに書いてみようと思います。

回答の前に現状の問題認識を

javascriptによるEmacsの実装が既にあるのでそれと同じことをするつもりもありません。あちらはどうやらtextareaを使わずにキーイベントの処理でテキスト入力を実現していて、それによってEmacsと同じような処理ができているのですが、それゆえIMEを介した日本語入力ができません。
そこでIMEを介した日本語入力を可能にするようにtextareaを使いたくなるのですが、textareaだとまた別の問題があって、例えばカーソルの制御をうまく行うことができなかったりします(ほんとはできるのかもしれないけど今のところ僕はできていない)。
ゆえに思った通りの、Emacsと同等のものをgreasemonkeyで作るのはかなり厳しいのだろうと思っております。xulを使えばうまいことできるのかなぁと期待をしているものの、そう思ってからxulを調べることもできていません^^;

といったところで回答編

■単純な不具合

まずは単純な不具合

 カーソル位置の表示がずれる問題。マウスでのクリックや新しい文字を入力した時とかは一応反応して現在位置を表示するが、矢印やC-nC-pC-fC-bでの移動ではカーソル位置の表示が正しくされない。

この現象は多分textareaを使っているがゆえの問題です。どうにも直せずにいる状態です。カーソル位置がとれるようにはなっているんですが、どうも行末あたりがうまく処理できていません。僕かtextareaのどちらかが悪いのだと思われます。

 保存するとページの先頭に移動してしまいカーソル位置が変更してしまうのは結構厳しい雰囲気。

こちらはカーソル位置を覚えておいて保存処理後に戻すようにしておけばよさそうに思われます。チャレンジしてみます。

■個人的な不具合
 Firemacsのキー設定と競合してしまう。テキストエリアはFiremacsのほうが検索窓とかもキー設定が出来て便利なのでそこは外したくないんですが、そこで使うためにFiremacsでキー設定してしまうと、gmacsの時にキーが反応してしまって嫌だとか。例えばFiremacsではC-xC-sでウェブページを保存に割り当ててるわけですけど。gmacsでC-xC-sを保存にしたい時にfiremacsのウェブページ保存が発動して、ダイアログがノロノロと立ち上がったりとかしてしまう。じゃあ、Firemacs捨てろよと言う話なのかもしれないけど。

 検索は普通のFirefoxの検索でもtextareaの中は検索できるので後ろに在るページを、切り離してしまえば、FXの普通の検索をそのまま使えるような気がする話とか。

OSとFirefoxが提供するショートカット/キーバインドから逃れることができないのが厳しい問題になっています。
WindowsだとC-wで閉じちゃうよ問題とか。あ、でもそれはcloseするときに制御すればなんとかなるかな。でもC-fで検索とかは逃れられないかなぁ。。

■使うに当たって困りそうなドキュメント

後は、よってたかって拡張してもらうなら最低限のドキュメントと、使った人の報告とかもらえるくらい広まってないと厳しそうに思ったりしました。

はまりそうな所。

* アンインストールで「関連付けられた設定も削除」の項目にチェックをつけ忘れるとgmacsが起動すらできずにエラーをはくのではまるかも。
* 起動するとC-zで起動らしき話が出るけどWindowsではM-zなのではまるかも
* /init.jsの開き方を書かないとはまるかも。

そうですね、拡張してもらう、ということをホントにやるならドキュメントを用意したり、wikiやら何やらのコミュニケーションのしかけが必要ですね。
でもこれにそこまで力を傾けてくれる人はいないでしょうけど^^;;;

■難しい所

* そのままじゃ、ローカルファイルが開けない。保存できない。開けても、JavaScriptであんまりやりたくない。
* Winの場合デフォのキーバインドがWin標準でもUNIX標準でもないので、使い難い感じ。
* Geasemonkeyでやらない方が良いのかもしれないとか

そう、Greasemonkeyよか拡張のほうがいいかもってのはありますね。そう思って最近拡張についていろいろ調べ始めてます。でもGreasemonkeyの気軽さに比べると拡張のほうは何倍も大変そうですねぇ。ちゃんとやろうとするとFirefoxの内部の仕掛けをいろいろと理解する必要がありそうで。。

■textareaの拡張として考えるなら

* 全てのtextarea上で同等の機能を動かしたい。
* *Scratch*見たいなのがあると機能が試しやすくて便利そう。
* JavaScriptでの拡張を考えるならば、もうEmacs風味にもう少し基本的な関数が揃っていないと厳しい。
* あんまり必要があるのか分からないけど、関係ないところで言えば、textarea周りの機能とか、例えば、textareaの大きさを変えてみたり、複数のtextareaでの機能とか(移動とか比較とか。)

なるほど。特にEmacs風味関数については僕も前々から考えてはいました。地道に頑張ろうかなぁと思ってはいるんですが、そんなに頑張る意味はあるんだろうか、とか悩んだりしていて、実現させるには僕にもう少し元気が必要そうです^^;;

■textareaを超えてエディタと勝負するなら

* 実用性を考えるとアウトラインとか補完とかオートインデントとか折り畳みとか。
* 行番号にカラーリング、マルチバッファで、window分割とか。普通のエディタが持って居そうな機能が動いて欲しい所。
* 後はテキストファイルとか拡張子なしのファイルが着たら自動で読み込んでGmacsで閲覧とか、HTMLソースをGmacsでプレビューとか。

どれも欲しい機能ですね。カラーリングとかオートインデントとかはtextarea拡張系javascriptの実装がすであったように思います。

■個人的に思ったもう少し具体的な提案としては

* gmacs見たいなものに興味を持つ人は恐らく殆どがUNIXキーバインドの方を好むと思われるのでがWinでもデフォはUNIXキーバインドのほうがいいかと。
* 内部の関数をEmacs風味にすると名前見ただけで分かってくれそうなので適当にあわせてみるとか。
* C-l、C-oとか基本的なのはないとEmacs風味としては使い難い。*1
* 保存に関しては逆に保存しない方が良いのではないかと思う。しかし、保存がないと厳しい。そこで、ローカルじゃなくてWebに保存とかが良いじゃないだろうかと。hatenaにポストしたみたいに、既存のサービスに単純にポスト出来るような仕組みを作っておくとか、個人のページはCGIで補うとか。

WindowsでもUNIXキーバインドにしたかったんですが、できなかったのはC-xがCutの、C-sがsaveasのショートカットにされてしまう、といった問題のためで、仕方なく別のキーバインドにした、という経緯があったりします。
それから保存に関しては個人的にはできたほうがいいと思っていて、簡易fileserverをつくってそこと同期するプラグインをつくってみたりはてなダイアリーにPOSTするプラグインをつくってみたりもしています。
かつてGearsのDBに置いたりもできないだろうかとしてみたこともありました。DOMStrageを使う、というのも手かも知れません。ローカルファイルをいじれるようにするならやっぱりextensionとして実装するしかないですねぇ。


あんまり前向きなことが言えてないし、いまいちちゃんとした回答ができていない気がしますが、睡魔がやってきたので今日のところはここまでで。