2012年8月24日金曜日

【eclim】Eclipse を vim から操作する

Eclipse の EGit からは --no-ff オプションを付けてマージできない(Eclipse Community Forums: EGit > EGit and no-fast-forward merges)ということが判明したので、CUI で git をすることになりました。
どうせ CUI でやるならファイルの編集操作も vim でやりたいなということで、前々から気になっていた eclim を使うことに。

インストールは
Installing / Upgrading - eclim (eclipse + vim)
vimでjavaの開発を行う その1 - def __mopemope__(self, *args, **kwargs):
などを参考にしました。

実際に使うにあたって幾つか豆知識を得ましたのでメモしておきます。

  • eclimd が OutOfMemory で落ちる
    • Java VM のメモリを増やそう
    • ~/.eclimrc に以下の設定を追加すればよい
      -Xmx256M
      -XX:PermSize=64m
      -XX:MaxPermSize=128m
  • デフォルトのワークスペースを指定したい
    • ~/workspace をデフォルトで開きたい
    • ~/.eclimrc に以下を追加
      osgi.instance.area.default=@user.home/workspace
  • eclim の補完を Eclipse のような挙動にしたい
    • これは Vim 自体の設定ですが、初期設定だと複数の変換候補がある場合であっても最初の変換候補が入力されてしまいます。インクリメンタルに補完候補を絞り込みたい!(System.out. で補完候補を出し、 p を入力すると p で始まるメソッドだけになってほしい)
    • Make Vim completion popup menu work just like in an IDE を参考にしました
    • .vimrc に以下を追記。詳しくは :help completeopt を参照
      set completeopt=longest,menuone,preview

これで結構快適になりました!

2012年8月17日金曜日

eclipse: visibleWhen

Eclipse のプラグイン開発の話題です

Eclipse 4.2 Juno で右クリックメニューにメニューを追加するには org.eclipse.ui.menus 拡張ポイントを使います。
locationURI に popup:org.eclipse.ui.popup.any を指定することで、右クリックにメニューを追加できます。
その他の locationURI の例は org.eclipse.ui.commandsはナカナカいけるのね を見てください。どうやら、基本的には頑張って locationURI を自分で探すようですね。(誰か完全な locationURI のリストでも作らないかな)

このままだとどこで右クリックしてもメニューが表示されてしまいます。何か条件が満たされたときだけ表示するには visibleWhen を指定すればいいようです。
僕は visibleWhen for command to appear in context menu あたりを参考にしました。

以下はプロジェクトエクスプローラ(もしかしたら他のファイル選択系ビューでも有効かもしれないけど実験していません)でファイル(IFile)かプロジェクトフォルダ(IProject)が選択された状態で右クリックしたときだけ "Import Command" メニューを表示するための記述例です。

   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="popup:org.eclipse.ui.popup.any">
         <command
               commandId="com.github.uchan_nos.directory_importer.importCommand"
               label="Import Command"
               style="push">
            <visibleWhen
                  checkEnabled="false">
               <with
                     variable="selection">
                  <iterate
                        ifEmpty="false"
                        operator="or">
                     <or>
                        <instanceof
                              value="org.eclipse.core.resources.IFile">
                        </instanceof>
                        <instanceof
                              value="org.eclipse.core.resources.IProject">
                        </instanceof>
                     </or>
                  </iterate>
               </with>
            </visibleWhen>
         </command>
      </menuContribution>
   </extension>

2012年8月11日土曜日

C-Helper がインデント乱れとmalloc/sizeof警告に対応しました

サイボウズ・ラボユースで製作中の C-Helper が、インデントの乱れや malloc / sizeof に関して警告できるようになりました。
さらにそれらの警告を Eclipse の Problem view に表示することで、プラグインっぽさが増しました。
どうでしょう。このUIならプログラミングの授業などで使ってもらえるでしょうか。

2012年8月1日水曜日

TeX: caption に url を書く

TeXで図を貼り付け、説明文(caption)にURLを書きたいという場面は沢山あると思います。そのときにurlパッケージを使いたいのですが、\caption{} の中に単純に \url{http://hoge.com/foo.html} を記入するだけではエラーになってしまいます。
エラー内容は僕には意味不明ですが、以下の様なエラーメッセージが出ます。

! Undefined control sequence.
\\->\let \reserved@e 
                     \relax \let \reserved@f \relax \@ifstar {\let \reserved...

ミソは \protect を使うことです。以下のように。

\begin{figure}[htbp]
  \begin{center}
    \includegraphics{hoge.jpg}
  \end{center}
  \caption{図の説明 引用元 \protect\url{http://hoge.com/foo.html} }
  \label{fig:hoge}
\end{figure}

\urlの前に\protectをつけます。
\protectコマンドを僕は知らなかったわけですが、TeX Q and A [エラー編]によれば、マクロ展開を抑止するためのコマンドらしいですね。