Tag Archives: KomodoEdit

KomodoMarkdownAidを公開したら色々あった

Screenshot

はじめに

このエントリのタイトルは、『 Komodo Markdown Aidを公開したらKomodo Editの中の人が見つけてくれてissueやpull requestもらったりして感激したけど最終的にGitHubのリポジトリを壊した』という風にしたかったが長いので省略した。

Komodo Markdown Aid

先日、Markdown文書を書きながら閲覧するためのKomodo IDE/Edit マクロをリリースした。Komodo Markdown Aidという。

[Komodo Edit] Komodo Markdown Aidをリリースしました

このマクロは、GitHubで公開していて誰でも使える。

GitHub : ivoryworks/komodo-markdown-aid

Readme.mdを英語で書いた

Komodo Editには個人的にいくつかの不満点があり、その中に『Markdown文章を手軽にプレビューする手段がない事』があった。

かなりの時間をかけて『KomodoEditでMarkdown文章をプレビューする何か』を探しまくったのだけど、これが全世界的に存在しない。

マクロを書いた。

おそらくは世界にこれしかないので、GitHubで公開するにあたってReadme.mdは英語で書いた。
英語で書いた、と書くとあれだけど、はっきり言って英語力が皆無なので、Google翻訳を駆使しながらも、最低限の情報を載せた。

今までGitHubには『公開しても差し支えの無いもの』を置いていて、見られたくないコードは、自前のVPSにリポジトリを作っていた。
『公開しても差し支えの無いもの』と『公開するもの』の間には大きな隔たりがある。だから、今までReadmeなんて日本語ですらまともに書いたことがなかった。

はじめてissueが来た

リリース後しばらくしてissueが届いた。
今までGitHubを単なるコードの保管場所に使っていたので、issueなんてもらったことない。

Hi there, awesome macro! I had been thinking of creating one just like it, glad I don’t have to :) I look forward to using yours.

I think many users will appreciate your work on this, so why not submit it to the Komodo Resources section? :) https://github.com/Komodo/Komodo-Resources

端的には、Komodo IDE/Editのマクロやアドオン、スキンなんかを取り纏めているKomodo ResourcesというサイトにKomodo Markdown Aidを登録したい、と書いてある。

調べたら、Komodo Editの中の人からのissueだった。

Google翻訳の全面的な協力のもと返信した。

はじめてpull requestが来た

翌日、Komodo Resourcesに”Markdown Preview”という名前で、Komodo Markdown Aidが登録され、issueはcloseとなった。

Markdown Preview

同時に、Komodo Markdown Aidへpull requestが来た。
最初のissueには「僕もこういったものを作ろうとしてたんだ」と書いてあって、社交辞令だろうと思ってたけど、コード読んでくれてて良かった。
落ち着いてから投入しようと思い、保留にした。

リポジトリを破壊した

これまでのコミットに気にくわない個所があって、Komodoの中の人からpull requestもらって調子に乗っていた僕は、最悪なことに歴史の改ざんに踏み切った。

何をしたとか省くけど、リポジトリがきれいになったと思ったらpull request投入できなくなっていた。関連が切れた状態になっていたのだと思う。

しかたなく泣きながら手動マージしてcommitした。

Google翻訳の全面的な協力のもと謝罪した。

まとめ

  • Readme.mdを英語で書いてよかった。
  • まごころがあれば適当な英語でも大体伝わる。
  • 歴史の改ざんはやめろ。後学のために歴史改ざんした方がいい。そして1回くらい死んだ方がいい。

[Komodo Edit] Komodo Markdown Aidをリリースしました

Komodo Markdown Aid

Screenshot

Komodo IDE/EditでMarkdownを書きながらプレビューするための支援ツールを作りました。
ファイルの保存をトリガに実行されるpythonマクロです。

GitHub: https://github.com/ivoryworks/komodo-markdown-aid

インストール

zipをダウンロードするか、git cloneしてプロジェクトを保存します。
次に、Komodo IDE/EditのToolboxメニューからインポートします。

つかいかた

拡張子が.mdのファイルに対して有効です。
保存をトリガにプレビューが開きます。

これで使えるのですが、Markdownの変換処理を高速化するために、後述するStrapdown.jsのダウンロードを行ってください。
Strapdown.jsは同梱する事にしました。これにより、ダウンロードしてそのまま使えます。

Markdownのコンバート(Strapdown.js)

Markdownのコンバートには、Strapdown.jsを用いています。
これはJavaScriptによる実装で、プレビュー画面表示時にMarkdownからHTMLへと変換しています。

初期設定では、Strapdown.jsがホストしているURLが設定されており、そのままですと、コンバート時にネットワーク接続が必要であったり、また変換処理がもたつくため、Strapdown.jsをPCにダウンロードして用いることを強くお勧めします
ダウンロードの際には、Strapdown.jsだけでなく、他の関連ファイルも合わせてダウンロードするようにしてください。

テーマについて

README.mdにはまだ書いていないのですが、Strapdown.jsは任意のBootstrapテーマを適用することが可能です。
カスタマイズ方法については後日解説します。

[Komodo Edit] SciMozのメソッド一覧

ActiveState SciMoz

 前回は、SciMozの属性値を実際に使用し一覧化した。
 このエントリでは、Komodo Edit 8.5のマニュアルに記載されているSicMozのメソッドを実際に使用し、その動作についてコメントを付けて一覧化する。
 属性値とこのメソッドを利用することで、ユーザがテキストに対して行える操作の全てをマクロから実施することができる。

scimozのメソッド

 ここにscimozのメソッド一覧を記述する。しかしたら捉え違いをしているものもあるかもしれない。
 一部のメソッドについては、動作を理解できなかったものがあり、コメント部はマニュアルのままとしている。判明次第修正する。次の5メソッド。

  • replaceTarget()
  • homeDisplay()
  • homeDisplayExtend()
  • lineEndDisplay()
  • lineEndDisplayExtend()

 また、注意点を最初に記載しておく。

  • メソッドの多くは「ポジション」という値をを扱う。この値はファイル先頭(1行目の行頭)を0とした絶対位置を表す。
    メソッドの解説で用いている「位置」は、特に注釈ない限りこの「ポジション」を意味する。
  • 行番号を扱うメソッドが存在するが、そこで言う行番号とは0から開始する値で、エディタの行番号表示機能により表示される値とは異なる事に注意すること。

メソッド一覧

  • void emptyUndoBuffer()
    アンドゥの履歴をクリアする。
  • void undo()
    アンドゥを実行する。
  • void cut()
    選択領域内の文字列を切り取る。
  • void copy()
    選択領域内の文字列をコピーする。
  • void paste()
    カーソル位置にクリップボードの内容を挿入する。
  • void clear()
    選択領域内の文字列を消去する。
  • long replaceTarget(in long length, in string text)
    Replace the target text with the argument text. Text is counted so it can contain NULs. Returns the length of the replacement text..
  • string getTextRange(in long min, in long max)
    テキスト中から指定した範囲の文字列を返却する。パラメータは開始と終了位置。
    、”end”の関係)
  • void insertText(in long pos, in string text)
    指定した位置へ文字列を挿入する。カーソル位置とは無関係。
  • void colourise(in long start, in long end)
    指定した範囲内の文字列に対しハイライトを再設定する。
  • wchar getWCharAt(in long pos)
    指定した位置の文字を返却する。Unicode対応。
  • void addText(in long length, in string text)
    指定の文字列をカーソル位置に指定の長さで挿入する。与えた文字列長以上のサイズ、または長さ未指定の場合は全文が挿入される。長さに0を指定した場合は挿入なし。
  • void selectAll()
    テキストを全選択する。
  • void gotoLine(in long line)
    指定した行の行頭へカーソルを移動する。行番号は0から開始する(1行目は0)。
  • void gotoPos(in long pos)
    指定した位置へカーソルを移動する。位置の指定はテキスト先頭からのバイトサイズ。
  • void deleteBack()
    カーソルの左一文字を削除する。カーソルが行頭にある場合は、前の行の改行が削除される。
  • void newLine()
    カーソル位置で改行する。
  • void redo()
    リドゥを実行する。
  • boolean canRedo()
    リドゥが可能であるかを返却する。
  • void beginUndoAction()
    Undo操作(Undoスタックに積む単位)の開始を設定する。例外発生時でも必ずendUndoAction()が実行されるようコーディングする事。(後述の『Undoスタックについて』を参照)
  • void endUndoAction()
    Undo操作(Undoスタックに積む単位)の終了を設定する。(後述の『Undoスタックについて』を参照)
  • long getColumn(in long pos)
    指定した位置に対応する行の、行頭を0とした行中の位置を返却する。
  • long getLineEndPosition(in long line)
    指定した行の行末の位置を返却する。
  • void setSel(in long start, in long end)
    指定した開始位置から終了位置までを選択する。
  • long lineFromPosition(in long pos)
    指定した位置の行番号を返却する。行番号は0から開始する(1行目が0)。
  • long positionFromLine(in long line)
    指定した行の行頭位置を返却する。
  • void lineScroll(in long columns, in long lines)
    指定した列(水平方向)、指定した行(垂直方向)へウィンドウの内容をスクロールする。カーソルは移動しない。
    垂直方向の場合には、正の値を指定するとファイル末尾へ、負の値ではファイル先頭へとスクロールする。
    水平方向の場合には、正の値で右へとスクロールし、負の値で左へとスクロールする。但し、水平方向のスクロールはWord Wrapが有効である場合には無効である(自動折り返しのため)。
  • void scrollCaret()
    カーソルがウィンドウ外に外れている場合、ウィンドウ内に表示するようスクロールする。カーソルがウィンドウ内に表示されていても、ウィンドウの際(きわ)に位置する場合は、若干のスクロールが発生する事がある。
  • long lineLength(in long line)
    指定した行の長さを得る。改行文字も数えられる。EOF(End Of File)のみ、または存在しない行番号を指定した場合には0が返却される。
  • void replaceSel(string)
    選択領域を指定の文字列で置換する。選択していない場合は、カーソル位置に指定の文字列を挿入する。
  • void lineDown()
    カーソルを次の行へ移動する。
  • void lineDownExtend()
    カーソルを次の行へ移動させ、移動先までを選択する。
  • void lineUp()
    カーソルを前の行へ移動する。
  • void lineUpExtend()
    カーソルを前の行へ移動させ、移動先までを選択する。
  • void charLeft()
    カーソルを1文字分左へ移動する。
  • void charLeftExtend()
    カーソルを1文字分左へ移動させ、移動先までを選択する。
  • void charRight()
    カーソルを1文字分右へ移動する。
  • void charRightExtend()
    カーソルを1文字分右へ移動させ、移動先までを選択する。
  • void wordLeft()
    カーソルより左に存在する単語の先頭にカーソルを移動する。行頭に達している場合、前の行へ移動する。
  • void wordLeftExtend()
    カーソルの動きはwordLeft()と同じ。移動先までを選択する。
  • void wordRight()
    カーソルより左に存在する単語の先頭にカーソルを移動する。行頭に達している場合、前の行へ移動する。行末に達している場合、次の行へ移動する。
  • void wordRightExtend()
    カーソルの動きはwordRight()と同じ。移動先までを選択する。
  • void home()
    カーソルを行頭へ移動する。
  • void homeExtend()
    カーソル位置から行頭までを選択する。
  • void lineEnd()
    カーソルを行末へ移動する。
  • void lineEndExtend()
    カーソル位置から行末までを選択する。
  • void documentStart()
    カーソルをファイル先頭(1行目の行頭)へ移動する。
  • void documentStartExtend()
    カーソル位置からファイル先頭(1行目の行頭)までを選択する。
  • void documentEnd()
    カーソルをファイル終端(最終行の行末)へ移動する。
  • void documentEndExtend()
    カーソル位置からファイル終端(最終行の行末)までを選択する。
  • void pageUp()
    ウィンドウの内容を、約1画面分文章の先頭方向へ遷移させる。カーソル位置も遷移に合わせて移動する。
  • void pageUpExtend()
    カーソルの動きはpageUp()と同じ。合わせて、現在のカーソル位置から遷移に合わせて移動した先のカーソル位置までを選択する。
  • void pageDown()
    ウィンドウの内容を、約1画面分文章の終端方向へ遷移させる。カーソル位置も遷移に合わせて移動する。
  • void pageDownExtend()
    カーソルの動きはpageDown()と同じ。合わせて、現在のカーソル位置から遷移に合わせて移動した先のカーソル位置までを選択する。
  • void editToggleOvertype()
    「挿入」と「上書」モードの切り替え。トグル動作する。
  • void vCHome()
    カーソルを行のインデント位置まで移動する。インデントしていない場合は行頭へ移動する。
  • void vCHomeExtend()
    カーソルの動きはvCHome()と同じ。合わせて、現在のカーソル位置から移動した先のカーソル位置までを選択する。
  • void zoomIn()
    フォントを拡大する。
  • void zoomOut()
    フォントを縮小する。
  • void delWordLeft()
    カーソル左の単語を削除する。カーソルが単語上に存在する場合は、カーソル位置から単語先頭までを削除する。
  • void delWordRight()
    カーソル右の単語を削除する。カーソルが単語上に存在する場合は、カーソル位置から単語末尾までを削除する。
  • void lineCopy()
    カーソル行をコピーする(改行含む)。
  • void lineCut()
    カーソル行を切り取る(改行含む)。
  • void lineDelete()
    カーソル行を削除する(改行含む)。
  • void lineTranspose()
    カーソル行を1つ前の行と入れ替える。
  • void lineDuplicate()
    カーソル行を複製し、次の行との間に貼り付ける。
  • void lowerCase()
    選択した文字を小文字へ変換する。アルファベットが対象。マルチバイト文字のアルファベットにも機能する。
  • void upperCase()
    選択した文字を大文字へ変換する。アルファベットが対象。マルチバイト文字のアルファベットにも機能する。
  • void lineScrollDown()
    ウィンドウの内容を1行分下へスクロールする。
  • void lineScrollUp()
    ウィンドウの内容を1行分上へスクロールする。
  • void deleteBackNotLine()
    カーソル左の文字を削除する。deleteBack()と異なる点として、カーソルが行頭にある場合は何も動作しない。
  • void homeDisplay()
    Move cursor to Home position for the current display line (as opposed to the buffer line when word wrap is enabled).
  • void homeDisplayExtend()
    Extend selection to the Home position for the current display line (as opposed to the buffer line when word wrap is enabled).
  • void lineEndDisplay()
    Move cursor to end of the current display line (as opposed to the buffer line when word wrap is enabled).
  • void lineEndDisplayExtend()
    Extend selection to the end of the current display line (as opposed to the buffer line when word wrap is enabled).
  • void wordPartLeft()
    単語単位でカーソルを左方向へ移動させる。wordLeft()との違いは、カーソルが単語の先頭に存在する場合、左の単語の末尾へ移動する事。
  • void wordPartLeftExtend()
    カーソルの動きはwordPartLeft()と同じ。合わせて、現在のカーソル位置から移動した先のカーソル位置までを選択する。
  • void wordPartRight()
    単語単位でカーソルを右方向へ移動させる。wordRight()との違いは、カーソルが単語の先頭に存在する場合、その単語の末尾へ移動する事。
  • void wordPartRightExtend()
    カーソルの動きはwordPartRight()と同じ。合わせて、現在のカーソル位置から移動した先のカーソル位置までを選択する。
  • void delLineLeft()
    カーソル位置から行頭までを削除する。
  • void delLineRight()
    カーソル位置から行末までを削除する(改行は含まない)。
  • void paraDown()
    次のパラグラフ(文章)先頭へカーソルを移動する。
  • void paraDownExtend()
    カーソル位置から次のパラグラフ(文章)先頭までを選択する。
  • void paraUp()
    前のパラグラフ(文章)先頭へカーソルを移動する。
  • void paraUpExtend()
    カーソル位置から前のパラグラフ(文章)先頭までを選択する。

Undoスタックについて

 Undoスタックについて以下に概略を記述する。詳しくはマニュアル記載の”The Undo Stack”を参照の事。

 ScintillaはUndo履歴をスタック管理している(scimozはScintillaのプラグイン)。
マクロからテキストに対して操作を行うにあたり、その操作単位を意図的に区切りる場合はbeginUndoAction()/endUndoAction()を用いる必要がある。
 またその場合、例外発生時にも必ずendUndoAction()が実行されるよう注意する事。正しく用いられない場合には、その情報が失われる可能性がある。

※ beginUndoAction()/endUndoAction()を用いずとも、各操作はスタックに積まれるが、その単位は1操作毎となる。

[Komodo Edit] エディタの属性値一覧(scimoz Attributes)

ActiveState SciMoz

 scimozはKomodo Editにバンドルされているエディタプラグイン(おそらくScintillaのプラグイン。MozはMozilla?)。
 Komodo Editでは、マクロからscimozを利用することで、エディタに対して様々な命令を実行する事ができる。

scimozの取得

 scimozはPython/JavaScriptどちらでマクロを書いても利用できる。以下はPythonでscimozオブジェクトを取得する例。

from xpcom import components

viewSvc = components.classes["@activestate.com/koViewService;1"]\
    .getService(components.interfaces.koIViewService)
view = viewSvc.currentView.queryInterface(components.interfaces.koIScintillaView)
sm = view.scimoz

 最後のsmがscimozオブジェクトとなる。sm.textとすればエディタ上の全文が得られる。

scimozの属性値

 属性値の多くは上書く事が可能であり即時反映される。
 ファイル固有のプロパティに関わるもの(ホワイトスペースの可視設定など)については、属性値を上書くと、その場でプロパティが再設定・保存される。
 以下は、Version 8.5のマニュアルを元に、実際に動作を確認した結果を記載している。もしかしたら捉え違いをしているものもあるかもしれない。それと、targetStartとtargetEndについては、動作について理解できなかった点があり、マニュアルの文章をそのまま載せている。動作が判明したら修正する予定。文字列置換に関連するようだが。

  • int currentPos
    テキスト上の絶対的カーソル位置。バイト数でカウントされるため、マルチバイト文字が含まれる場合には文字数との関係が1:1とならない。
  • int anchor
    選択開始位置。選択状態でない場合はcurrentPosと同じ値。ちなみに、currentPosもanchorも0(カーソルがテキストの先頭)の状態にて、currentPosへ1を格納すると、テキスト先頭1文字が選択状態となる。
  • string text
    テキスト全文。上書けばテキスト全体が差し替わる。
  • string selText
    選択した文字列(読み取りのみ)
  • long scrollWidth
    水平スクロール最大幅(ピクセル単位)。エディタ描画領域がこの幅よりも狭い場合に、水平スクロールバーが表示される。
  • long xOffset
    水平スクロール位置(ピクセル単位)。Word Wrapが有効の場合は常に0となる。
  • boolean viewEOL
    EOL(End Of Line)の表示設定(False:不可視 True:可視)。
  • long viewWS
    ホワイトスペースの表示設定(0:不可視 1:可視)。
  • long eOLMode
    改行文字列の設定(0:CRLF 1:CR 2:LF)。
  • long tabWidth
    tab幅
  • long indent
    インデント幅
  • boolean useTabs
    tabの使用有無。直接的には、tabキーを押下した際に入力される文字タイプ(True:tab文字 False:ホワイトスペース)。
  • boolean indentationGuides
    インデントブロック範囲を表す垂直線の描画有無(0:描画なし 1:描画あり)。
  • long firstVisibleLine
    画面先頭行に描画される行番号。1行目は0となるので注意。折り返しは1行として数えられる。
  • long lineCount
    テキストの全行数(読み取りのみ)。
  • long textLength
    テキストの全サイズ(読み取りのみ)。バイト換算のため、マルチバイト文字列が含まれる場合は文字数と一致しない。
  • long targetStart
    The start of the target region; see replaceTarget.
  • long targetEnd
    The end of the target region; see replaceTarget.
  • long linesOnScreen
    画面の最大描画ライン数。つまり見たままのライン数。よって自動折り返しにより2行となる場合は2行としてカウントされる。

sicmozのメソッド

 scimozには上記属性の他に、各種多様なメソッドが実装されている。
 それらについては別のエントリとするつもり。

著者 : Tarek Ziade
アスキー・メディアワークス
発売日 : 2010-05-28

[Komodo Edit] インタラクティブシェルを使う

Screenshot from 2014-05-16 07:18:55

Komodo Extension Developer

 拡張機能『Komodo Extension Developer』に便利なインタラクティブシェル機能が含まれています。

Komodo developer extension
http://community.activestate.com/xpi/komodo-developer-extension

 Webでは『developer extension』と書いてありますが、インストールする拡張機能の名前は『Extension Developer』と表記されています。後で改名したのかもしれません。

マクロ書く上でもベンリ

Screenshot from 2014-05-16 07:32:10

 付属する『PyShell』(Python Shell)という名のツールは、Pythonのインタラクティブシェルが起動するのですが、Komodo Editが包含するPythonのシェルになるので、Komodo Edit特有のモジュール等にアクセスできたり、XPCOM(まだよく理解してない)を利用する事ができます。
 もちろんJavaScript向けの『JavaScript Shell』もあります。
 マクロで実装するコードを簡単に試せるので、拡張機能の開発でなくても、利用用途は多いです。

インストール

メニュー[Tools]→[Add-ons]

 Add-ons Managerにて『Extension Developer』を検索するとリスト上に表示されるので、[Install]ボタン押下で入ります。

インストール後は以下手順で利用できます。
メニュー[Tools]→[Extension Developer]

著者 : 柴田淳
ソフトバンククリエイティブ
発売日 : 2012-08-29

[Komodo Edit][Macro] 表示中のテキストにアクセスする

快適にMarkdown書きたい

 前に書きましたが、例えば画面を2分割して一方でMarkdown書きながら、もう一方でプレビューするような事ができないので、どうすれば実現できるのか考えています。
 Komodo Editのマクロは起動トリガの設定(ファイルを保存したら実行する等)が行えるので、そのあたりに糸口があると思い、まずはKomodo Editのマクロについて勉強しています。

Helpに書いてあるサンプルが間違ってる

 マクロは、PythonかJavaScriptで記述する事ができます。
 まともに書いた事ないのですが以前から学習したかったのでPythonで書いていく事にしました。

Komodo Edit Help
Macros->Macro API->Python Macros->Accessing the editor
ONLINE HELP:
http://docs.activestate.com/komodo/8.5/macroapi.html#macroapi_py

 Komodo Editのヘルプファイルにはマクロについての記述があり、”Accessing the editor”章には、Pythonによって表示中のテキストにアクセスする方法が書いてあります。

 これが動かない。

 Pythonの知識も、XPCOMの知識(XPCOMよくわかっていない。ミドルウェア?)も皆無の為、実行環境が悪いと思ってハマりました。Helpに載ってるコードが間違ってるとは思わなかった。

既に指摘されてた(2007年)

Scimoz object in Python
http://community.activestate.com/forum-topic/scimoz-object-python

 最後に、「手元のドキュメント修正したyo」みたいな事が書いてあるけど、2014年現在でも修正されてないので忘れ去られているのだと思う。

Scimozによりテキストへアクセスする

 僕の理解ではこのポストの内容から、修正後のコードは以下となり、view.scimoz による、Scimozのインスタンス取得が成功します(Helpのコードではエラーとなる)。
 ※ Gist貼るとおかしい。何かと競合しているみたいだな。あとでなおします。

Komodo EditはPython2を包含している

 今回の件で、Pythonの実行環境が悪いのだと思い、プラットフォーム側のPython環境を調べていたら、Komodo Editは自らが持つPython環境を用いている事を知りました。 プラットフォーム側の環境がエディタの動作に影響を与えてしまうからです。

 逆を返すと、プラットフォーム側のPythonに手を加えても、Komodo Edit上では利用できない事になる(と思う)。 Markdownのコンバートの為に、Markdown.pyを導入しようと考えていたけど代案が必要になりそうだな。

著者 :
ソニー・ピクチャーズエンタテインメント
発売日 : 2008-02-20

[Komodo Edit] 速く起動する

速く起動したい

 普段eclipseと付き合っているので起動スピードについてある程度寛容なのですが、できることなら速く起動したい。

Komodo Edit is SLOW! but you can speed it up…
http://richelectron.blogspot.jp/2009/06/komodo-edit-startup-time-slow-speed-up.html

 この記事では不要なアドオンを無効化する事が起動スピードの改善に効果があると書いています。
 ただ、これが2009年の記事で、対象としているのがKomodo Edit 5(のはず)なので、現在のKomodo Edit 8に対する効果についてはわかりません。

計測する

 実行環境は以下になります。

  • ThinkPad X220
  • OS:fedora 20 (64bit)
  • CPU:Intel® Core™ i5-2520M CPU @ 2.50GHz × 4
  • Mem:8GByte

 計測にはtimeコマンドを使用しました。ユーザCPU時間(user)とシステムCPU時間(sys)を判断材料とします。

$ time komodo
real 0m13.117s
user 0m5.361s
sys  0m0.536s

 なお、CPU処理中に画面描画は開始されるため、体感的には計測結果よりも早く起動しているように見えます。

インストール直後

 まずは、何も手を加えていないインストール直後の状態での起動時間です。
 1回目の起動は、諸々の処理(ホームディレクトリに設定定義ファイル生成したり等)を行っている為、安定後の倍の時間が掛かっています。

  1. user 0m10.638s sys 0m1.070s
  2. user 0m5.361s sys 0m0.536s
  3. user 0m4.803s sys 0m0.433s
  4. user 0m5.161s sys 0m0.523s
  5. user 0m4.599s sys 0m0.412s
  6. user 0m5.455s sys 0m0.516s
  7. user 0m5.251s sys 0m0.523s
  8. user 0m5.351s sys 0m0.514s
  9. user 0m5.542s sys 0m0.517s
  10. user 0m5.277s sys 0m0.514s

 平均(1回目除外)で、ユーザCPU時間5200ms(5.2秒)、システムCPU時間499ms(0.499秒)です。

Start Pageを表示しない

 次に、Start Pageを表示しない設定での起動時間です。
(メニュー[Edit]→[Preferences]→[Appearance] “Show Komodo Start Page on startup”をOFF)

  1. user 0m4.246s sys 0m0.381s
  2. user 0m3.820s sys 0m0.311s
  3. user 0m4.265s sys 0m0.355s
  4. user 0m4.206s sys 0m0.313s
  5. user 0m4.235s sys 0m0.383s
  6. user 0m4.070s sys 0m0.328s
  7. user 0m4.134s sys 0m0.383s
  8. user 0m4.363s sys 0m0.398s
  9. user 0m4.217s sys 0m0.328s
  10. user 0m4.198s sys 0m0.344s

 平均で、ユーザCPU時間4175ms(4.175秒)、システムCPU時間352ms(0.352秒)です。
 1秒程度早くなっています。

Add-onsを無効化

 全てのアドオンを無効化します。こうしてしまうと、ほとんど使い物にならなくなるのですが、Add-ons無効化の影響を計るために。
(メニュー[Tools]→[Add-ons] Extensionsにリストアップされる拡張機能を全て”Disable”にする)

  1. user 0m3.494s sys 0m0.305s
  2. user 0m3.583s sys 0m0.333s
  3. user 0m3.520s sys 0m0.346s
  4. user 0m3.534s sys 0m0.322s
  5. user 0m3.482s sys 0m0.324s
  6. user 0m3.698s sys 0m0.330s
  7. user 0m3.541s sys 0m0.299s
  8. user 0m3.573s sys 0m0.297s
  9. user 0m3.509s sys 0m0.306s
  10. user 0m3.552s sys 0m0.315s

 平均で、ユーザCPU時間3549ms(3.549秒)、システムCPU時間318ms(0.318秒)です。
 500~600ms程度早くなっています。

思ったほど早くならないが効果はある

 デフォルトでインストールされるアドオンは結構あるので、それら全てを無効化すればかなり早くなるのではと思いましたが、その数に比べ、効果は薄いように感じます。
 Start Pageを非表示とするのと共に、不要なアドオンがあれば無効化しておくという使い方がよさそうです。

起動時のエラー

 今回の件と直接関係ないのですが、コマンドラインから起動すると、以下のエラーが出力される事に気づきました(アドオンの無効化は関係なく)。

$komodo
(process:3828): GLib-CRITICAL **: g_slice_set_config: assertion ‘sys_page_size == 0’ failed

 この現象はBugzillaにも記録されており、既知の問題のようですが、現時点ではまだ解消されていないようです。

Bug 833117 – Does not disable glib slice allocator with glib >= 2.35
https://bugzilla.mozilla.org/show_bug.cgi?id=833117

Komodo Edit: GLib-CRITICAL **: g_slice_set_config: assertion `sys_page_size == 0′ failed
http://askubuntu.com/questions/322702/komodo-edit-glib-critical-g-slice-set-config-assertion-sys-page-size-0

 「気にしなくてダイジョブ!」とか言ってるけど気持ち悪いな。

Komodo Editはじめましたの2

前回の続き

Komodo Editなんとかしたい

 いじり甲斐があるので、いろいろと設定を試しているのですが、現時点までの未解決項目を書いておきます。
 なんらかの方法で解決できるものもあるかもしれないけど、現時点の知識レベルだと簡単に解決できない。まだコーディングに使用していないので、本格的に使い始めたらもっと他にも文句が出てくるかもしれないです。

水平ルーラーがない

 Komodo Editでは、水平ルーラーを表示する機能が実装されていません。
 水平ルーラーというのは、下の画像でいうと、一番上に描画されている定規のようなものです。1行の文字数を気にするときのガイドになります。ちなみにこの画像は秀丸エディタです。

Hidemaru

 ActiveStateのBlogにも書かれているのですが、開発側は行の長さを制限する事(例えば80文字とか)に否定的で、そういった人達をやんわりとdisってます。実装する気はないようです。
 その代りに、指定した文字数の位置に垂直線を引く機能が実装されていて、文字数を気にしなければならない場合はそれで我慢。
 個人的にこれで概ね事足りるのですが本当は水平ルーラー欲しい。

マルチバイト空白スペースを可視化する方法が用意されていない

 全角スペースとも呼ばれます。これを見えるようにしたい。ちなみに秀丸エディタでは、淡いグレーの破線で書かれた正方形が現れます(可視/不可視は設定による)。
 下の画像で言うところの3行目です。というか、さっきと同じ画像ですが、今回このキャプチャに僕の思いが全て詰まっています。

Hidemaru

改行文字の表示がヒドい

 設定項目の中に、EOL(End Of Line)の表示/非表示があるのですが、表示してみると、これは誰も使ってないのではないかと思うくらいの見栄えになります。下の画像は、改行コードがCR/LFのテキストファイルを開いた画面です。

komodo_win

 ファイル終端の空行や、行末のスペース(Markdownのために)を確認したりするため、改行文字の位置が知りたいのですが、これはちょっとひどい。
 知りたいのは改行文字の位置です。どのような改行コードが用いられているか、は常に知りたい情報じゃないですよ。下の画像のように、単にそこが改行されている事がわかればよいのです。

Hidemaru

EOFを表示させたいのに無い

 上記に関わるのですが、EOF(End of File)を表す記号が表示できない(できる?)。
 ファイルの末尾がどの位置か。最終行末か、それとも改行を一つ挟んで次の行なのか。これが知りたい。下の画像で[EOF]と表示されているものです。

Hidemaru

タブ文字の自己主張が強すぎる上にタブ文字を表示させようとするとホワイトスペースまで可視化されるふざけるな

 面倒なので画像については上のを参照してください。2行目がタブ文字です。秀丸エディタでは慎ましく控え目な表示ですが、Komodo Editではタブ幅いっぱいに矢印が引かれています。
 しかも、なぜかわからないのですが、ホワイトスペースの表示非表示設定と、タブ文字の表示非表示設定が1つの設定項目になっていて、どちらも可視化するか、どちらも不可視化するかしかありません。
 画像1行目はホワイトスペースが4つ並んでいるのですが、個人的に、ホワイトスペースは不可視でタブ文字は可視にしたい、切実。

Markdownを気持ちよく書く方法が用意されていない

 Komodo Editはプレビュー機能が標準実装されていて、例えばHTMLを編集しつつ同時にプレビューを行えたりします。素晴らしいです。
 だがしかし、Markdownを書きながらプレビューする機能がない。誰かがプラグインかマクロか何か書いてるだろうと思って探すも見つからない。

頑張ってみる

 とりあえず今の時点ではこんな有様なのですが、Komodo Editを攻略していくのは楽しいし、しばらく付き合っていくつもりなので、マクロとかプラグインとか駆使して頑張ってみます。

Komodo Editはじめました

Screenshot from 2014-05-05 18:40:24

Komodo Edit
http://komodoide.com/komodo-edit/

今日は、こもどの日ということで、Komodo Editについて書いてみます。
Komodo Editは、Active Perlでお馴染のActiveState社製エディタです。この上位パッケージに有償のKomodo IDEがあります。

オープンソース化もされてる。リポジトリはGitHubに。
https://github.com/Komodo/KomodoEdit

仕事ではWindows、プライベートではLinux(fedora)を使っているので、以前からエディタを統一したいなと考えているのですが、Win環境では十数年使っている秀丸エディタから離れられず、Linuxでは模索しながら未だに個人的なスタンダードエディタを手に入れていません。

先日、ふとあることでKomodo Editに巡り合って、じゃあちょっと試してみようかなと。
もちろんマルチプラットフォームなのが第一の理由です。Linux環境でのマイスタンダードを手に入れられるかもしれない。

以前、Linuxで秀丸動かそうとしたりgeditblue fishをWin環境で無理矢理使ってみたりしたのですが、なんともダメな感じでした。もちろん昔Sublime textも試したのですが、今ではもう解決しているのかもしれないけれど、日本語入力時の問題があって敬遠していました。そうそう確か、Winでも使えるヴィームとかいうエディタも試してみたけどあのエディタは

で、話を戻してこのKomodo Edit、国内だとあまり情報がない。
これは、このアプリがメニュー等を容易に日本語化できないので日本人ユーザが少ないのが理由だと推測しています。もったいないことだね。
でも、エディタの場合はアプリの特性上、作業中にメニューバーから辿って何かをするという頻度が、他のアプリと比べ極めて低いと思われるので、実は英語でも案外大丈夫のはずです。というか大丈夫。

設定項目が多数あり、プラグイン対応もしているので、カスタマイズしていくことである程度満足の行くエディタになるんではないかいなと淡い期待を込めて使ってみようと思っとります。

まだこのエディタでコードをガリガリ書いていないので、善し悪しについて判断できない状況ですが、既に現時点で不満に感じる部分が数カ所あるのであとで書きます。

では。