header

2014年6月4日水曜日

Golangの{}ブラケットをEmacs上で非表示にするmasawをリリースしました

Golang結構みためが気にいってて特に不満はなかったんだけど、
ふとGolangの関数とかの{}をEmacsのバッファ上で非表示にしたらどうなるかな?
って思って実装してみた。

下のはスクリーンショット

見た目ちょっとpythonっぽくなる?


インストール

go getコマンドで簡単にインストールできる

go get github.com/yuutayamada/masaw

Emacsの設定、.emacsとかの設定するところに以下のコードを保存する
GOPATHやgofmtやgo-modeとかがないとうごかないとおもう。

(unless (require 'masaw nil t)
(load (concat (getenv "GOPATH")
"/src/github.com/yuutayamada/masaw/misc/emacs/masaw")))
(add-hook 'masaw-after-gofmt-before-save-hook 'masaw)

使い勝手とか感想

まだ作ったばっかで、どうやったら便利かと模索中ですごい便利かっていうと
そうでもない。。。
上の設定ではgofmtがかかったあとに{}を消すようにしている。
たぶんgofmtとセットでうごかす想定しかしてないので、他の方法では
うまくうごかないかもしれない。

だめなところとして、消すのにちょっと時間がかかる
自分の環境で1.5~3.0秒くらい…
(timerで処理を分割すれば解決可能だと思うけど)
あと、まだ閉じ}で一緒に改行を消せてないので少し空間があいてしまう。
ただこれは、あいた方がみやすいとかそうでないとか色々ありそうなので
いまは手をつけない。識者の方の意見募集中です。

今回の機能を実現するのにEmacsでcompose-regionっていう関数を利用した。
リージョンの文字を違う文字にできる。
なんかGolang以外の他の言語でも色々できそうな気がする。。。
(javascriptの{}消したらおもしろそう)

まぁこんなところ、よかったら使ってみてダメなところがあったら
直してpull-request下さい。


名前の由来

隠すにかかわる名前を考えたけど、ネットで探してもほとんど先にとられてた
のであきらめて家にあった人形からとった。アメリカのホピっていう部族が売っ
てる人形から


自分用のメモ

go/astパッケージの以下のBlockStmtっていう構造体がブラケットにかかわる
らしい
あと以下の構造体がBlockStmtへの要素をもっていたので、場合分けなどの
処理が必要な場合は、調べる必要があるかもしれない。

*ast.TypeSwitchStmt, *ast.SwitchStmt, *ast.SelectStmt,
*ast.RangeStmt, *ast.IfStmt, *ast.FuncLit, *ast.FuncDecl,
*ast.ForStmt,
*ast.TypeSwitchStmt, *ast.SwitchStmt, *ast.SelectStmt,
*ast.RangeStmt

参考にしたサイト
http://golang.org/src/pkg/go/ast/ast.go
http://golang.org/src/pkg/go/ast/example_test.go
http://golang.org/pkg/go/ast/


0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news