Diary?::2006-09-14

20:39

Gentoo Linux に Scribes をインストールするための手順。

  1. ebuild を取ってくる。俺が取ってきたのは 0.2.5
  2. ebuild するためにはいくつか設定が必要。 ebuild の作り方が参考になる
    1. make.conf に上記サイトのような記述をする
    2. mkdir -p /usr/local/portage/app-editors/scribes/files とでも打ち込む
    3. さっき取ってきた ebuild を .../scribes/ に置く
    4. 実はさっき ebuild を取ってきたサイトにあるパッチファイルも必要。 scribes-0.2.5.patch という名前で files 以下に置く
    5. 後は適当に ebuild してください
  3. 正常にインストールされたのに起動しない? もしかして yelp と gnome-python-extra をインストールしてないんじゃない? じゃあ早速 emerge だ。ああ、 emerge にはしばらく時間がかかるよ。っていうかいつまでコンパイルしてるんだよこいつは
  4. 多分これで起動するはずなんだけど、もしも起動しなかったら御愁傷様

というわけで Scribes を使っているのだが、もしかしてこれってタブの代わりにスペースが入れられない? フォーラムではパッチが投稿されてるけど、これはどうも気に食わない。

> if key_press.keyval == keysyms.Tab:
> self.text_buffer.insert_at_cursor(u" ")
> return True
>
461c462
< self.text_buffer.insert_at_cursor(u"\t")
---
> self.text_buffer.insert_at_cursor(u" ")

ここは

> if key_press.keyval == keysyms.Tab:
> self.text_buffer.insert_at_cursor(u" " * editor.text_view.get_tabs_width())
> return True
>
461c462
< self.text_buffer.insert_at_cursor(u"\t")
---
> self.text_buffer.insert_at_cursor(u" " * editor.text_view.get_tabs_width())

じゃないと、タブを押してもスペース一個しか挿入されない。そういう意図のパッチだったのかな。まあそのうち作者さまが本体に切替機能を取り込むでしょう。

それはともかく、 Scribes の FAQ の 5 番めへの解答にこのエディタの方向性が端的に表れていると思う。 gedit などはエディタに多くを詰め込んでエディタの内部からユーザに世界をコントロールさせようとしていて、それに対して Scribes はエディタはあくまでもエディタとして振る舞いそれ以外の機能は外部で実現させる、つまりユーザにエディタの外部で世界をコントロールさせようとしているわけだ (これはどちらが正しいかという話ではないよ)。

俺はどちらかというと一品物のツールを組み合わせる方が好きなので、今後は Scribes を使うことにしようかな。というかね、やっぱこの検索と置換と行ジャンプのインターフェースは素晴らしいよ。このためだけに今までのスタイルを変えてもいいと思ったな。これまでは vim からごにょごにょやるスタイルだったのだが、今後はターミナルとエディタを行ったり来たりするという昔のスタイルに逆戻りか。

とりあえずしばらく使ってみてからだな、結論を出すのは。

23:43

一つわかったことは、俺は PyGTK が絶対に好きになれそうもないということだけだ。

とりあえず、次みたいなメソッドを書いてみた。

def key_release_event_cb(self, entry, key_press):
  is_python = self.filename.endswith('.py')
  cur = self.text_buffer.get_iter_at_mark(self.text_buffer.get_insert()).copy()  
  cur.backward_line()
  cur.forward_to_line_end()
  if is_python and key_press.keyval == keysyms.Return:
    while cur.get_line_offset() != 0:
      cur.backward_char()
      c = cur.get_char()
      if c == ':':
        self.text_buffer.insert_at_cursor(u' ' * self.text_view.get_tabs_width())
        return True
      elif c != ' ':
        break 

これを editor.py の Editor クラスに追加して __init__ 内で key_release にコネクトすれば、一応 : の出てきた次の行は自動でインデントされる。自分以外の環境の事を何一つ考えていないハックなので、これを適用して何か問題が起きても俺は知らないです、ハイ。

しかし Python でもこれだけ快適なエディタが書けるのは驚きだな (PyGTK の功績も大きいだろうが) 。やはりこれから先は Python のような言語でアプリケーションを書くのが主流になっていってほしいね。

Written by Kuwata Chikara
Creative Commons