jEditでEmacs outline-mode形式のアウトラインを表示させてみた

jEditでどの程度アウトライン機能が使えるのか試してみたかったものの、Emacs の outline-mode 形式に対応したパーサーが見当たらなかったので、適当にプラグインを作成してみました。
jEditを良く知らない人間が作ったプラグインだけど無いよりもマシだと思うので公開。

概要

Emacs の outline-mode 形式で書かれた文章を解析して、 SideKick で表示するためのプラグイン。行の先頭が1~6個のアスタリスク(*)で始まり、その次の文字が空白の場合、見出しと判断します。

例:
------------------
* 見出し階層1
** 見出し階層2
*** 見出し階層3
**** 見出し階層4
***** 見出し階層5
****** 見出し階層6
------------------

インストール方法

プラグインフォルダに EmacsOutline.jar を置く

Windows版 jEdit 5.xでは C:\Users\\AppData\Roaming\jEdit\jars
Windows版 jEdit 4.xでは C:\Users\\.jEdit\jars

アンインストール方法

プラグインフォルダに EmacsOutline.jar を削除

他に必要なプラグイン

SideKick plugin
ErrorList plugin

動作確認環境

jEdit 5.0pre1
ErrorList plugin 2.0
SideKick plugin 1.4

動作方法

・設定する
プラグイン > プラグインオプション でダイアログを表示
SideKick > Parsers を選択
textなど、任意のモードに emacs outline に変更

・階層を表示させる
文章を入力して SideKickで表示
SideKickで表示させる方法は、プラグイン > EmacsOutlineSideKick > SideKick 等。

・階層構造で折り畳む
ユーティリティ > バッファオプション でダイアログ表示
フォールディングモード を sidekick にする

Androidのタスク内容をリアルタイムに表示させてみた

タスク(Activity Stack, Activityスタック)の事は入門書とかにも載ってて概念はわかるけど、実際のスタック状況は把握しづらい。けど、リアルタイムで簡単に確認するツールが見当たらない。無いなら作ろうというわけで自作してみた。他の人ってどうやってタスク状況を把握してるんだろ?

タスク状況のリアルタイム表示するバッチファイル

aam_watch.bat

@echo off
REM Android Activity Manager内のTask情報を監視
REMCygwinとかのgrepとsleepコマンド
:loop
cls
adb shell dumpsys activity | grep -A 1000 "Running activities" | grep -B 1000 "mResumedActivity"
sleep 2
goto loop

動作にはWindows, Cygwinとかのgrepとsleepコマンド, Android SDKが必要。
もっとスマートな実装方法がありそうだし、たまに表示がおかしかったりするけど、とりあえず動くので公開。

実行結果

C:\> aam_watch.bat
 Running activities (most recent first):
   TaskRecord{40a2ae68 #135 A android.task.contacts}
     Run #3: HistoryRecord{40550840 com.google.android.gm/.ComposeActivity}
     Run #2: HistoryRecord{4054ba50 com.android.contacts/.ProfileLayerActivity}
     Run #1: HistoryRecord{408f6248 com.android.contacts/.DialtactsContactsEntryActivity}
   TaskRecord{40515ab0 #2 A com.android.launcher}
     Run #0: HistoryRecord{40766270 com.android.launcher/com.android.launcher2.Launcher}

  mPausingActivity: null

  mResumedActivity: HistoryRecord{405c4f48 com.android.launcher/com.android.launcher2.Launcher}

ホーム画面→Contacts→gmailに画面遷移したときのタスク。
複数のアプリをまたいでタスクが構成されているのが視覚的にわかります。
今、端末上に表示されているActivityも簡単に確認できます。

Activityに関する各種情報をファイルに保存するバッチファイル

こちらはActivity Managerの情報を取得してファイルに保存するだけ。
ファイル名はDDMSのスクリーンショットファイル名に合わせたつもり。

aam_step.bat

@echo off
REM Android Activity Managerの情報を取得しファイルに保存する
SET DT=%DATE:~-10%
SET TM=%TIME: =0%
set FILE=dump_am-%DT:~0,4%-%DT:~5,2%-%DT:~8,2%-%TM:~0,2%%TM:~3,2%%TM:~6,2%.txt
adb shell dumpsys activity > %FILE%

蛇足

下記コマンドでdumpsys activityのヘルプが表示される
他にもデバッグに役立ちそうなオプションがいろいろあるけど把握してない

adb shell dumpsys activity -h

  C:\>adb shell dumpsys activity -h
  Activity manager dump options:
  [-a] [-h] [cmd] ...
  cmd may be one of:
    a[ctivities]: activity stack state
    b[roadcasts]: broadcast state
    i[ntents]: pending intent state
    p[rocesses]: process state
    o[om]: out of memory management
    prov[iders]: content provider state
    s[ervices]: service state
    service [name]: service client-side state

jFD2をWindows7のタスクバーで使いやすくする

Windows限定。標準のjfd2.exeにはいくつか問題点がある。

  • Windows7だとタスクバー上にクイック起動として登録し、起動させても別のプログラムだと認識される。
  • 二重に起動しようとすると失敗する。

そのため、exewrapというツールを使ってexeファイルを作り直す。

①exewrapというツールをダウンロード
http://code.google.com/p/exewrap/

②exewrap.exe を jfd2.jar と同じフォルダにコピー

③jfd2.exeをjfd2old.exeにリネーム

コマンドラインから下記の内容で実行。
圧縮形式だとなぜかexe作成に失敗するので「-t 1.4」を指定

exewrap.exe -g -t 1.4 -e DDE_CONNECT jfd2.jar

jFD2でカレントフォルダのコマンドラインを立ち上げる

F3キーを押したら今のディレクトリでコマンドラインを立ち上げるだけ。
もっとスマートな方法があるかもしれないけど、とりあえずこの方法で実現。

①jFDのメニュー > オプション > 外部コマンドで設定画面を開く

②Sを選択して、下記の内容を入力し、OKを選択
タイトル:S:Shell呼び出し
シェルコマンドを選択
「シェルを使用する」をチェックする
コマンド:start $R

③.jfd2_user/conf/command.xml に次の内容を追加

    <command name="external_command_s" class="com.nullfish.app.jfd2.command.embed.ExternalCommand">
        <param name="key">
            <text>s</text>
        </param>
    </command>

④.jfd2/function.ini の内容を変更 (このファイルを修正することは推奨されていないので注意)
■変更前

f3.0.command=copy

■変更後

f3.0.command=external_command_s