%sLazarusというのはFree Pascal向けの統合開発環境であり、かつてのBoland Delphiに類似したオープンソースプロジェクトであります。
中々高速でエディタの反応も良いのですが、残念ながらうちの環境では日本語が入りません。表示は問題ないのですが。
何か設定が悪いのか、それともそういう仕様なのか。以前MacOS上で試した時も同じでしたので仕様の可能性大。
まぁ、「外部ツール」でgvimなりgeditなり起動させて、そちらで編集する…というのでも良いのですが。
しかし、ソースコードではコメントに入れるぐらいなので、一行の簡易エディタがあればいいわけです。
そこで、コロンブスの卵的に安易なのをpythonで作ってみました。
要pygtk(2.4以上)、pythonは2.x系で作っています。いいかげん、そろそろ3.x系に移行しないとなぁ…
手軽にファイルで上げて終わりにしたいところなのですが、例のごとく、まだおいらのwebサイトが全然出来上がっていないという、一体何をしているんだ状態なので、ソースコードで上げておきますね…
#!/usr/bin/env python # -*- coding: UTF-8 -*- import pygtk pygtk.require("2.0") import gtk class Myclass: def __init__(self): self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_title("clipedit") self.win.set_resizable(True) self.win.show() self.win.connect("destroy",self.destroy) self.win.resize(800,32) # お好みでドゾー # widgets baseically added this self.basebox self.basebox = gtk.VBox(False,8) self.basebox.show() self.win.add(self.basebox) txtbuf=gtk.TextBuffer() #txtbuf.set_text(initial_text) t_frame=gtk.Frame() t_frame.set_shadow_type(gtk.SHADOW_IN) t_frame.show() txtview=gtk.TextView(txtbuf) txtview.set_wrap_mode(gtk.WRAP_CHAR) # Multiline text txtview.show() t_frame.add(txtview) self.basebox.add(t_frame) self.txtbuf=txtbuf self.txtview=txtview self.txtview.grab_focus() self.txtview.connect("key-release-event",self.key_release) def destroy(self, widget, data=None): gtk.main_quit() def main(self): gtk.main() def key_release(self,widget,event): if ((event.state & gtk.gdk.CONTROL_MASK) == gtk.gdk.CONTROL_MASK) and (event.keyval==gtk.keysyms.Return): raw_text=self.txtbuf.get_text(self.txtbuf.get_start_iter(),self.txtbuf.get_end_iter()) t=gtk.Clipboard() out='' raw_lines=raw_text.split('\n') while len(raw_lines)>1 and raw_lines[-1]=='': raw_lines=raw_lines[:-1] if len(raw_lines) > 1: raw_text="\n".join(raw_lines) else: raw_text=raw_lines[0] t.set_text(raw_text) self.destroy(self.win) elif event.keyval==gtk.keysyms.Escape: self.destroy(self.win) if __name__ == '__main__': m=Myclass() m.main()
ごくごく簡易なテキストエディタです。そしてこのテキストエディタは、CTRL+ENTERを押すとクリップボードにテキストを自動で格納して終了します。
ESCキーで何もせずに、入力したテキストは破棄して終了(キャンセル)です。
これは何をするものかというと、
こんなふうにLazarusのエディタがありますが、これに対してあらかじめ外部ツールを設定しておくわけです。
こんな感じにショートカットキーで(この場合はAlt+E)で起動するようにしておき…
入力してCTRL+Enterで閉じます。
ショートカットキーで起動した場合はエディタに直に戻ってこれる(ここ重要)ので、その場で即座にCTRL+Vでペーストする、と。
とりあえず実用の足しにはなるだろう、と考えました。
オープンソースなので頑張ってエディタを改良することも考えましたが、そろそろubuntuも14.04LTSになることですし、奮闘の結果、本家では既に対応していたというオチは避けたいものです。
実はというか上のスクショ内のソースを見ても分かるとおり、Lazarusは今のところ全くといっていいほど使っていないのですが、興味だけはずっと前から持っているわけです。
なにしろPascalはシンプルでコンパイルも速いし、ネイティブだし、C言語ライブラリとのリンクもそれなりに簡単そうですからね。あとLua組み込み用ライブラリも既にあるようだし。使用ユーザーも多くてかつてからの実績も豊富と思います。
ついでに言うとオブジェクトだけでなく構造体も使えるのは、ゲーム作りを考えると嬉しいですね。オブジェクトだけだと結構、コンストラクタ呼び出しのコストがバカにならないので…
それよりなにより、懸念していることは…
ちょっと話は変わってきますが
monodevelopの便利さ、なのであります。
あまりにも良くなってきたmono / monodevelopに過剰に依存していると、何かMicrosoft絡みで突然monoが終了なんてことが起きたら大変なことになりますので、こうやって選択肢は常に増やしておいたほうがいいかと。
まぁ、最悪の場合、C言語+VIM+gdbとか、NetbeansのC言語プラグインを使うとか、Netbeans+Javaに行くとか、他にも色々な選択肢はあるので、そう思いつめることもないのですが、まぁ一応。
D言語とかGo言語とかも悪くないんですがねぇ…こう、一向にメインストリームになってこない感が。特にD言語には期待しているのですけど。
%sLazarusというのはFree Pascal向けの統合開発環境であり、かつてのBoland Delphiに類似したオープンソースプロジェクトであります。
中々高速でエディタの反応も良いのですが、残念ながらうちの環境では日本語が入りません。表示は問題ないのですが。
何か設定が悪いのか、それともそういう仕様なのか。以前MacOS上で試した時も同じでしたので仕様の可能性大。
まぁ、「外部ツール」でgvimなりgeditなり起動させて、そちらで編集する…というのでも良いのですが。
しかし、ソースコードではコメントに入れるぐらいなので、一行の簡易エディタがあればいいわけです。
そこで、コロンブスの卵的に安易なのをpythonで作ってみました。
要pygtk(2.4以上)、pythonは2.x系で作っています。いいかげん、そろそろ3.x系に移行しないとなぁ…
手軽にファイルで上げて終わりにしたいところなのですが、例のごとく、まだおいらのwebサイトが全然出来上がっていないという、一体何をしているんだ状態なので、ソースコードで上げておきますね…
#!/usr/bin/env python # -*- coding: UTF-8 -*- import pygtk pygtk.require("2.0") import gtk class Myclass: def __init__(self): self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_title("clipedit") self.win.set_resizable(True) self.win.show() self.win.connect("destroy",self.destroy) self.win.resize(800,32) # お好みでドゾー # widgets baseically added this self.basebox self.basebox = gtk.VBox(False,8) self.basebox.show() self.win.add(self.basebox) txtbuf=gtk.TextBuffer() #txtbuf.set_text(initial_text) t_frame=gtk.Frame() t_frame.set_shadow_type(gtk.SHADOW_IN) t_frame.show() txtview=gtk.TextView(txtbuf) txtview.set_wrap_mode(gtk.WRAP_CHAR) # Multiline text txtview.show() t_frame.add(txtview) self.basebox.add(t_frame) self.txtbuf=txtbuf self.txtview=txtview self.txtview.grab_focus() self.txtview.connect("key-release-event",self.key_release) def destroy(self, widget, data=None): gtk.main_quit() def main(self): gtk.main() def key_release(self,widget,event): if ((event.state & gtk.gdk.CONTROL_MASK) == gtk.gdk.CONTROL_MASK) and (event.keyval==gtk.keysyms.Return): raw_text=self.txtbuf.get_text(self.txtbuf.get_start_iter(),self.txtbuf.get_end_iter()) t=gtk.Clipboard() out='' raw_lines=raw_text.split('\n') while len(raw_lines)>1 and raw_lines[-1]=='': raw_lines=raw_lines[:-1] if len(raw_lines) > 1: raw_text="\n".join(raw_lines) else: raw_text=raw_lines[0] t.set_text(raw_text) self.destroy(self.win) elif event.keyval==gtk.keysyms.Escape: self.destroy(self.win) if __name__ == '__main__': m=Myclass() m.main()
ごくごく簡易なテキストエディタです。そしてこのテキストエディタは、CTRL+ENTERを押すとクリップボードにテキストを自動で格納して終了します。
ESCキーで何もせずに、入力したテキストは破棄して終了(キャンセル)です。
これは何をするものかというと、
こんなふうにLazarusのエディタがありますが、これに対してあらかじめ外部ツールを設定しておくわけです。
こんな感じにショートカットキーで(この場合はAlt+E)で起動するようにしておき…
入力してCTRL+Enterで閉じます。
ショートカットキーで起動した場合はエディタに直に戻ってこれる(ここ重要)ので、その場で即座にCTRL+Vでペーストする、と。
とりあえず実用の足しにはなるだろう、と考えました。
オープンソースなので頑張ってエディタを改良することも考えましたが、そろそろubuntuも14.04LTSになることですし、奮闘の結果、本家では既に対応していたというオチは避けたいものです。
実はというか上のスクショ内のソースを見ても分かるとおり、Lazarusは今のところ全くといっていいほど使っていないのですが、興味だけはずっと前から持っているわけです。
なにしろPascalはシンプルでコンパイルも速いし、ネイティブだし、C言語ライブラリとのリンクもそれなりに簡単そうですからね。あとLua組み込み用ライブラリも既にあるようだし。使用ユーザーも多くてかつてからの実績も豊富と思います。
ついでに言うとオブジェクトだけでなく構造体も使えるのは、ゲーム作りを考えると嬉しいですね。オブジェクトだけだと結構、コンストラクタ呼び出しのコストがバカにならないので…
それよりなにより、懸念していることは…
ちょっと話は変わってきますが
monodevelopの便利さ、なのであります。
あまりにも良くなってきたmono / monodevelopに過剰に依存していると、何かMicrosoft絡みで突然monoが終了なんてことが起きたら大変なことになりますので、こうやって選択肢は常に増やしておいたほうがいいかと。
まぁ、最悪の場合、C言語+VIM+gdbとか、NetbeansのC言語プラグインを使うとか、Netbeans+Javaに行くとか、他にも色々な選択肢はあるので、そう思いつめることもないのですが、まぁ一応。
D言語とかGo言語とかも悪くないんですがねぇ…こう、一向にメインストリームになってこない感が。特にD言語には期待しているのですけど。