ので、どうにかしたいと思ったのです
Sublime Text 3βを昨日からいじって遊んでたのだけど、俺も日本人なので例に漏れず全角スペースは分かるようにしたいわけで、下記のようなプラグインを見つけて入れたんですね
SublimeText2 – Sublime Text 2で全角スペースをハイライト表示するプラグインを作る – Qiita
SublimeText2 – 「Sublime Text 2で全角スペースをハイライト表示するプラグインを作る」で、ハイライトとアウトラインできるようにしてみた – Qiita
そしたら楽しいエラーが出てヒギィって顔してたのが昨日の話
起きてからどうしよっかなーって考えてプラグインをいじることにした。Python?やったことないよ
なお、Windows7 64bit で SublimeText3β build 3059での話です。他の環境は知らない
2014/03/17 02:25追記
Syntax Highlighter入れたので整形。見やすくなったかな?あとプラグインは修正部分だけじゃなくて全文入れた
エラー内容
いくつか同じようなのが出てたけど1つ分だけ引用する
|
Traceback (most recent call last): File "E:\Editor\Sublime Text 3\sublime_plugin.py", line 271, in on_modified callback.on_modified(v) File "C:\Users\USER\AppData\Roaming\Sublime Text 3\Packages\AlwaysHighlight\AlwaysHighlight.py", line 28, in on_modified self.update(view) File "C:\Users\USER\AppData\Roaming\Sublime Text 3\Packages\AlwaysHighlight\AlwaysHighlight.py", line 20, in update self.highlight(view) File "C:\Users\USER\AppData\Roaming\Sublime Text 3\Packages\AlwaysHighlight\AlwaysHighlight.py", line 11, in highlight view.add_regions('AlwaysHighlight_Highlight',view.find_all(pattern), "invalid", sublime.DRAW_EMPTY) File "E:\Editor\Sublime Text 3\sublime.py", line 859, in add_regions raise ValueError("icon must be a string") ValueError: icon must be a string |
原因はなんなのか
enable_alwayshighlight を true に書き換えて保存すると自動的にプラグインを再読込するのだけど、その時点でこのエラー出る
上から順にプログラムが動いていって、最後に add_regions で ValueError 出てるから、きっと add_regions がおかしいんだろうと勝手に推測して、sublime.py の 859行目周辺の add_regions 見てみたらこうなってた
|
def add_regions(self, key, regions, scope = "", icon = "", flags = 0): # S2 has an add_regions overload that accepted flags as the 5th # positional argument, however this usage is no longer supported if not isinstance(icon, "".__class__): raise ValueError("icon must be a string") sublime_api.view_add_regions(self.view_id, key, regions, scope, icon, flags) |
add_regions に渡すパラメータが、 key, regions, scope, icon, flags の5つなんだけど、AlwaysHighlight では4つしかなかった
なるほど、パラメータ足りないのではエラーになるよなって納得したのでした
ということで修正しよう
ST2の方は見てないんだけど、どうやらST3で icon が追加されたっぽい予感がしたので、初期値(icon = “”)である空文字を渡してあげることにする
ハイライトしてる12行目と18行目が追加修正した分、その上のコメントアウト行が修正前の分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#!/usr/bin/python # -*- coding: utf8 -*- import sublime import sublime_plugin class AlwaysHihghlight(sublime_plugin.EventListener): # highlight def highlight(self, view): pattern = view.settings().get('alwayshighlight_pattern') if pattern: # view.add_regions('AlwaysHighlight_Highlight',view.find_all(pattern), "invalid", sublime.DRAW_EMPTY) view.add_regions('AlwaysHighlight_Highlight',view.find_all(pattern), "invalid", "", sublime.DRAW_EMPTY) # outline def outline(self, view): pattern = view.settings().get('alwayshighlight_outline_pattern') if pattern: # view.add_regions('AlwaysHighlight_Outline',view.find_all(pattern), "invalid", sublime.DRAW_OUTLINED) view.add_regions('AlwaysHighlight_Outline',view.find_all(pattern), "invalid", "", sublime.DRAW_OUTLINED) def update(self,view): if view.settings().get('enable_alwayshighlight') == True: self.highlight(view) self.outline(view) else: view.erase_regions('highlight') # Called after changes have been made to a view. # @override def on_modified(self, view): self.update(view) # Called when a view gains input focus. # @override def on_activated(self, view): self.update(view) # Called when the file is finished loading. # @override def on_load(self, view): self.update(view) |
おわり
これでハイライトされるようになった!ステキ!
全角スペースと半角スペースで文字幅一緒なのが気になるけど!
たまに保存時にポップアップで気に入ったらお金(現在70ドル)払ってねって出るけど、それ以外は機能制限なしで遊べるのでみんな使ってみればいいと思う
俺は3βが正式版になった時にセールしてくれないかなーって待機してるw
最近のコメント