設定ファイル改良

  • 基本書式
    • 人手で書くの面倒。YAMLにしよう
    • XMLだとしても、配列のインデックスはナシ

  • 検索対象
    • 下のように、プラグイン名とそのオプションの形にまとめる。拡張を容易に
source:
  dir:
    path: c:\app
    exts:
      - cpp
      - hpp
  wiki:
    url: http://〜
  sakura_editor:
    ini_path: c:\app〜

  • ファイルの開き方
    • [ エディタ, 対象拡張子 ]の配列で設定
    • 上から順に見ていき、当てはまるところで実行
    • 関連づけで開くのは、予約名(タグ)で実現
      • 関連づけがなかったら次のエディタへ進む
    • 一番最後に、全拡張子が対象の設定を置いてフェイルセーフ

  • 拡張子の設定方法の統一
    • エディタ・検索パスなどで統一感がないとアレげ
    • 含める・含めないを両方書けるように
    • どちらにもワイルドカードが使える

  • サブディレクトリを見に行かないフラグ
  • 検索から除外する拡張子の指定
  • 大文字があったらcase-sensitiveなど、好みが分かれる機能のフラグ

使い勝手改良

  • 「再検索」ショートカットキー
    • 挙動としては、前回の検索ワードを入力する
  • 「1つ上のフォルダを開く」
    • bashで開くのも便利?
  • 「(関連づけを無視して)エディタで開く」
    • 登録エディタが全部リストに出るとよさげ?
  • 開くエディタの切り替え
    • 事前に登録したエディタを Ctrl+Q,W,E などで選択
    • 選択したものは設定として保存
    • エクスプローラで開くのが便利そう
    • VisualStudioを複数開いてるときは、開くウィンドウを指定したい。けど難しそう
  • コンテキストメニューの一番上を最初から選択
  • リストからファイルをドラッグ&ドロップできるように
  • 閉じたときの挙動
    • 決定時
    • コピー時
    • ESC時
    • それぞれ、入力したものを消すか消さないか設定したい
    • デフォルトはbluewindを参考にしてみよう
  • 開いたときはmigemoをOFFに?
  • 重複ファイル・URLのuniq
    • プライオリティキューを使うようになれば軽そう

検索性能改良

  • 視覚的な見やすさの改善
    • 結果が2〜3件まで絞れても、それを目で見て反応するのに1秒くらいかかる
    • 行間をもっと空ける
    • 色分け表示?(具体案はまだない)
      • パス部分は薄いグレー、ファイル名は黒とか

  • ファイル名のみ表示
    • 同名ファイルがあるときは、パスも表示

  • イニシャルマッチング
    • hfbと打つと、HogeFooBarのようなものがマッチする

  • スキップマッチング
    • アルゴリズムを調べるところから

  • 拡張子のないファイルが探しにくい
    • iostreamとかstringとか
    • "iostream."でヒットするようにしてみる?
    • ソート順でカバーできる?

  • 結果のソート方法
    • 新しい順
    • アルファベット順(同じディレクトリのものはまとまってるほうが見やすい)
    • .hは優先
    • (ファイル名に)完全一致→先頭一致→部分一致
    • migemo時は日本語でマッチしたものを優先

  • 検索の別スレッド化
    • 特にmigemoで、検索速度が入力のレスポンスに影響しないようにするだけ
    • loading... となったら本末転倒

機能追加

  • カスタマイズ
    • 使うブラウザ
  • ウィンドウの位置を保存
  • ディスプレイの中心に移動 コマンド
    • デスクトップの中心
    • 各ディスプレイの中心
    • 初回起動時はプライマリディスプレイの中心がいいかな

  • スペースを2回押したらカーソル下扱いにする(スペースで項目を選べるようにする)

  • 別アプリとの連携
    • エディタでカーソル位置の単語を検索とか
      • エディタのマクロ+FindFastに単語を入力した状態で開く機能?
      • まずタグジャンプして、失敗したらFindFastでやってみる、っていう習慣になるのかな

  • 暇なら、下記を対象に含めてもいいかも
    • IEのお気に入り・履歴
    • スタートメニュー
    • Quick Launch
    • サクラエディタの履歴
    • サクラエディタが開いているファイル(取れるのか?)
    • Visual Studioの履歴
    • コントロールパネルの項目
    • PukiWikiの「一覧」ページからURLを列挙
      • Wikiのタイトル名は<title>が「ページの一覧 - PukiWiki」なので、ここから拾う
      • エンコーディングはヘッダから取得。"EUC-JP"など
    • staticな(名前, ファイル/URL)のリスト
    • 最前面アプリのカレントディレクトリ(sakuraの開くダイアログの代替を目指す)

  • PukiWikiのURLはデコードしてページ名を表示

  • 表示フィルタ
    • 画面に表示されるもののみに適用される。多少重い実装もOK
    • 存在しないファイルは除外。
    • InterWikiNameの認識。Wikipedia: ほげ のような表示
      • InterWikiNameのページを指定してインポートできるといいかも

  • URLフィルタ
    • IEの履歴を取ると、けっこういらないURLがある
    • 正規表現で除外できるようにしよう
    • PukiWikiの編集ページ
    • PukiWikiのプレビューページ
    • Googleの検索結果 (これは悩むところ)

  • キーボードジェスチャー
    • Ctrl+↓→とか

  • PukiWikiのmark箇所

  • WindowsのIndex Serviceからデータをもらう。Vistaでは賢くなってると聞く このへん?
  • NDSにクエリー投げる
  • 検索結果からファイルのD&D

バグ

例外のトラップ漏れ
System.IO.IOException はハンドルされませんでした。
  Message="指定されたネットワーク名は利用できません。\r\n"
  Source="mscorlib"
  StackTrace:
       場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       場所 System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
       場所 System.IO.DirectoryInfo.GetFiles(String searchPattern, SearchOption searchOption)
       場所 System.IO.DirectoryInfo.GetFiles(String searchPattern)
       場所 Something.DirectoryList.dive(DirectoryInfo di) 場所 D:\Projects\C#\something.cs\DirectoryList.cs:行 33
       場所 Something.DirectoryList.preCache() 場所 D:\Projects\C#\something.cs\DirectoryList.cs:行 21
       場所 Something.ItemFind.preCacheIN() 場所 D:\Projects\C#\something.cs\ItemFind.cs:行 41
       場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       場所 System.Threading.ThreadHelper.ThreadStart()
  InnerException: 
検索対象にアクセス権のないファイル(ディレクトリ?)があった場合

  • 多重起動できてしまう。そうするとホットキーが効かない。
  • UserIncludePathが、末尾の\の有無で挙動が変わる
  • 拡張子のないファイルがヒットしている?
    • sakuraの履歴にあっただけかも
  • "more"を選択した状態で空のメニューが出る
  • ファイルなのにURL扱いになって出てくる
    • 普通にファイルとしても出てくる
  • マルチディスプレイだと画面の中心=ディスプレイの境目になってしまう
  • xkeymacsが効かない?
  • インデックス作成中にキーバインドの変更をすると、作成終了まで反映されない
  • x64だとmigemoのDLLが読めずに落ちる
    • 32bitモードでビルドすればいいんだっけ?
  • 初回起動時に、ショートカットキーがすべて「0」になっている?
    • プロファイルに入る方の .config が存在しないときにまずい?
  • NickName使用時の挙動の確認
    • もともとのパスで検索するのが素直な挙動な気がする
  • IEの履歴にローカルのPDFがあると、パスが\区切りのままになり、右クリックメニューも「 をコピー」となってしまう。そして実行すると例外。
  • Windows 7で、単語削除をバインドしていないと、Ctrl+BSで変な文字が入力される

参考

  • emacs22のanything
    • buffers, recent filesなど、高速に参照できるものをソースにしているのが賢い

基本

  • 事前に指定したディレクトリ&拡張子から、ファイルリストを生成
  • 起動(常駐?)→文字入力でインクリメンタルサーチ→選択して開く
  • それだけ。でも幸せそう。

システムパス名一覧

細字は.NET FrameworkのEnvironment.GetFolderPath()で取得できるものです。
太字は独自拡張です。

変数名 展開例 (Windows XP)
%ApplicationData% C:\Documents and Settings\Administrator\Application Data
%CommonApplicationData%C:\Documents and Settings\All Users\Application Data
%CommonProgramFiles% C:\Program Files\Common Files
%Cookies% C:\Documents and Settings\Administrator\Cookies
%Desktop% C:\Documents and Settings\Administrator\デスクトップ
%DesktopDirectory% C:\Documents and Settings\Administrator\デスクトップ
%Favorites% C:\Documents and Settings\Administrator\Favorites
%History% C:\Documents and Settings\Administrator\Local Settings\History
%InternetCache% C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files
%LocalApplicationData% C:\Documents and Settings\Administrator\Local Settings\Application Data
%MyComputer% (空文字列)
%MyDocuments% C:\My Documents
%MyMusic% C:\My Documents\My Music
%MyPictures% C:\My Documents\My Pictures
%Personal% C:\My Documents
%ProgramFiles% C:\Program Files
%Programs% C:\Documents and Settings\Administrator\スタート メニュー\プログラム
%Recent% C:\Documents and Settings\Administrator\Recent
%SendTo% C:\Documents and Settings\Administrator\SendTo
%StartMenu% C:\Documents and Settings\Administrator\スタート メニュー
%Startup% C:\Documents and Settings\Administrator\スタート メニュー\プログラム\スタートアップ
%System% C:\WINDOWS\system32
%Templates% C:\Documents and Settings\Administrator\Templates
%QuickLaunch% C:\Documents and Settings\Administrator\Application Data\Microsoft\Internet Explorer\Quick Launch
%CommonPrograms% C:\Documents and Settings\All Users\スタート メニュー\プログラム
%CommonStartMenu% C:\Documents and Settings\All Users\スタート メニュー
%CommonStartup% C:\Documents and Settings\All Users\スタート メニュー\プログラム\スタートアップ

対応済み

  • PukiWikiの一覧ページから取得したURLの実体参照をデコードしていない
  • パス名のドライブ名が大文字小文字不統一。統一した上で、uniq時もcase無視で比較しよう
  • サクラエディタの存在がMUSTになっている
  • All Usersのスタートメニューを%%記法で展開できない?
    • できないね。カスタムで適当に名前付けよう
  • ファイル・Web関連の例外はトラップしよう
  • エディタにコマンドライン引数を渡せない
    • Visual Studioの/Editで動作確認だ
  • showContextMenuで0除算が起きることがある
    • タイトルがないURLで、.xlsで落ちる?
  • 関連付けがない拡張子で落ちる
    • 例外が飛ぶので、catchしてエディタで開く?
  • アクティブじゃないときは呼び出しキーでアクティブに
  • 呼び出しキーを押したときは入力欄にフォーカスを移動
  • 呼び出しキーで閉じれるように
  • \より/のほうが読みやすそう
  • Ctrl+BSで入力文字を全部削除
    • bluewindは単語単位で削除だった。そっちのほうがいいかな
  • 一番上と一番下の項目でカーソルがラップアラウンド
  • migemo切り替え時に検索結果を更新
    • 入力終わってから切り替えると軽快でいいね
  • IMEを無効化
    • 日本語で検索したいときもたまにはあるか
  • 右カーソルメニュー、選択したアイテムのところに出たほうが心理的にわかりやすい
  • ファイル名をクリップボードにコピー
  • #include "" でコピー
    • あるいは、これらをカーソル位置に挿入
  • migemo対応
    • やっぱ遅いね
    • ショートカットキーでトグル
    • AND検索をmigemoにも対応
  • 大文字を1字以上入力したらcase-sensitive
  • パスフィルタ
    • .svnを除外
  • トレイアイコンのチップヘルプがFindFastのまま