Sylpheedでメールファイルをコピーする Msg2Clip.dll 0.1.0 公開

現実逃避でSylpheedのメールをクリップボードにコピーするプラグインをつくりました。

メール本文ではなくファイルをクリップボードにコピーするので、
ファイラやらエクスプローラなどで任意のディレクトリへ貼り付ける操作を
行うことができるようになります。


ファイルメニューから名前をつけて保存で事足りるというツッコミもありますが。


ヘッダ表示部分にコピー用ボタンを追加しました。

内部的にはCF_HDROPでクリップボードにファイルパスを設定しているのでWindows限定です。


ダウンロードは以下から。Sylpheed 3.2.0beta5以降
http://gigo-ice.org/tech/sylpheed/index.ja.html

Cutterのテスト結果をgrowlnotify.exeで通知するには(win32限定)

C/C++ユニットテストフレームワークであるところのCutterですが、
growlnotifyにパスが通っている状態でcutterコマンドを以下のように叩いても何も通知されません。

cutter --notify=yes test

Windows環境ではCutterのトップページで紹介されているようなGrowlによるテスト結果のレポート通知が機能しません。

なのでせっせとパッチを書くことにしました。

diff --git a/module/ui/cut-console-ui.c b/module/ui/cut-console-ui.c
index e8f983c..68a254a 100644
--- a/module/ui/cut-console-ui.c
+++ b/module/ui/cut-console-ui.c
@@ -1139,6 +1139,22 @@ notify_by_growlnotify (CutConsoleUI *console, CutRunContext *run_context,
 
     args = g_ptr_array_new();
     g_ptr_array_add(args, g_strdup(console->notify_command));
+#ifdef G_OS_WIN32
+    g_ptr_array_add(args,
+                    g_strdup_printf("/t:\"%s [%g%%] (%gs)\"",
+                                    status_to_label(status),
+                                    compute_pass_percentage(run_context),
+                                    cut_run_context_get_elapsed(run_context)));
+    if (success) {
+        g_ptr_array_add(args, g_strdup("/p:0"));
+    } else {
+        g_ptr_array_add(args, g_strdup("/p:2"));
+    }
+    if (icon_path) {
+        g_ptr_array_add(args, g_strdup_printf("/i:\"%s\"", icon_path));
+    }
+    g_ptr_array_add(args, g_strdup_printf("%s", format_summary(run_context)));
+#else
     g_ptr_array_add(args, g_strdup("--message"));
     g_ptr_array_add(args, format_summary(run_context));
     g_ptr_array_add(args, g_strdup("--priority"));
@@ -1156,6 +1172,7 @@ notify_by_growlnotify (CutConsoleUI *console, CutRunContext *run_context,
                                     status_to_label(status),
                                     compute_pass_percentage(run_context),
                                     cut_run_context_get_elapsed(run_context)));
+#endif
     g_ptr_array_add(args, NULL);
 
     run_notify_command(console, (gchar **)args->pdata);

上記パッチでこんな感じで通知されるようになりました。
たぶんやろうと思えばSnarlなんかも似たようにすればサポートできるはず。

Sylpheedでスペルチェックを有効にするために必要なこと(win32)

Sylpheedはスペルチェック機能をサポートしています。
しかし、Windowsだと無効です。使えません。


それではあまりに悲しいので、どうにかできないか試行錯誤してみました。


まず、スペルチェック自体はGtkSpellを利用して提供しているようです。
で、GtkSpellはEnchantに依存しています。
Enchantはというと複数のバックエンドに対応しています。

というわけで、以下ができればいいわけです。

  1. バックエンドのビルド
  2. Enchantのビルド
  3. GtkSpellのビルド

まずバックエンドですが、hunspell 1.3.2についてはmingwビルドがありました。のでこいつを使用します。
https://github.com/zdenop/hunspell-mingw

bin,include,libをc:/MinGW/localへと複写します。


次にenchant 1.6.0をビルドします。
暫定的に以下のパッチを当てます。(このやりかたはまっとうではないので注意)

--- C:/MinGW/msys/1.0/home/khayashi/pkg/enchant-1.6.0/src/enchant.c.orig	Fri Apr 02 05:53:37 2010
+++ C:/MinGW/msys/1.0/home/khayashi/pkg/enchant-1.6.0/src/enchant.c	Sat Jan 07 10:36:34 2012
@@ -1428,8 +1428,9 @@
 					UINT old_error_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
 #endif
 					filename = g_build_filename (dir_name, dir_entry, NULL);
-					
-					module = g_module_open (filename, (GModuleFlags) 0);
+
+					module = g_module_open (dir_entry, (GModuleFlags) 0);
+
 					if (module) 
 						{
 							if (g_module_symbol
 ./configure  --prefix=/mingw/local --with-system-myspell=no --with-myspell-dir=./share/myspell/dicts --with-ispell-dir=./share/ispell/dicts --with-uspell-dir=./share/uspell/dicts --target=i686-mingw32
make
make install

次にgtkspell 2.0.16をビルドします。(Sylpheedビルド用のGTKディレクトリに突っ込んでいます。)

./configure --prefix=/home/khayashi/Project/sylpheed/GTK --enable-shared
make
make install

最後にsylpheedをビルドします。--enable-gtkspellの追加を忘れずに。

#!/bin/sh

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include
export HOME=/home/khayashi/Project/sylpheed
./configure --prefix=$HOME/dist --with-localedir=lib/locale \
  --enable-oniguruma \
  --enable-gtkspell \
  --enable-threads \
  'CC=gcc -mtune=pentium3' CFLAGS=-O3 

で、あとは以下のdllをsylpheed.exeと同じ階層にコピーします。あと、libsylph系も。

  • libenchant-1.dll
  • libenchant_myspell.dll
  • libgcc_s_dw2-1.dll
  • libstdc++-6.dll

辞書については以下のディレクトリに配置します。(よくわからないのでUbuntuからまるっともってきました。)
./share/myspell/dicts

ここまでやると、こんな感じにスペルチェックが有効になります。

enchantをビルドするときにパッチ当てていましたが、本来は以下のような指定をまじめに指定すれば不要なはずです。
(今はc:/MinGWにインストールされているほうを中途半端に参照してしまっているのでとりあえず動くという仕組み。)

  • ENCHANT_PREFIX_DIR
  • ENCHANT_GLOBAL_MODULE_DIR
  • ENCHANT_GLOBAL_ORDERING

sylnotify.dll 0.2.1 公開

Sylpheedの新着通知をGrowl/Snarl経由で行うためのプラグインであるsylnotify.dll 0.2.1を公開しました。

Jamesさんからうまく動かないんだけどという報告をもらって判明。
修正点は以下の通りです。

  • 起動時の設定ファイルの読み込みの問題を修正
  • 設定ダイアログのtypo(SNP)修正

ダウンロードは以下から。
http://gigo-ice.org/tech/sylpheed/index.ja.html

SylpheedをGrowl/Snarlに対応させるsylnotify.dll 0.2.0 公開

sylpheedのMLで新着メールが届いたときに、タスクトレイアイコンが変わるけど、地味じゃない?(意訳)と発言している人がいた。


そんなの数多存在するメールチェック用のツールで確認すればいいじゃんという話なのだけれども、そこで紹介されていたSnarlというのが興味深かったのでものは試しにプラグインを作ってみました。(おまけでGrowlにも対応)


SNP/GNTPとかに対応するのはちょっと面倒そうなので、お手軽にgrowlnotifyとかSnarl_CMD.exeを使うことにしました。

以下設定画面。


Growlで通知させてみるとこんな感じ。

Snarlで通知させてみるとこんな感じ。

プラグインはステータスバーでON/OFFを切り替える

目下の問題は、

  1. メール1通ごとになっているので大量のメールを一度に受信すると大変なことになる
  2. 通知内容の一部文字化けが発生する

1.についてはSylpheed本体に受信開始と終了時のシグナルを発行してもらって件数のみ通知するというのが現実的かな。
2.についてはもうちょっと調べてみないとなんとも言えないかも。

とはいえ、新着メール通知はそんなに困っているわけでもないので実験止まりかも。

ダウンロードは以下から。
http://gigo-ice.org/tech/sylpheed/index.ja.html

Sylpheed添付ファイルパスワードチェックプラグイン chkarchpasswd.dll 0.6.0公開

メール送信時に添付ファイルにパスワードがかかっているかチェックしてくれる

そんなプラグインをアップデート(0.6.0)しました。

Sylpheed 3.2.0beta1以降のWindows版のみで動作します。

compose-send APIが変更されていたので追従しました。

試されたい人がいましたらダウンロードは以下からどうぞ。

http://gigo-ice.org/tech/sylpheed/index.ja.html

Sylpheedユーザのためのプラグイン入門

もしあなたがSylpheedを気に入っていて、自分でもちょっとした機能拡張を
したいと考えたとする。

てっとり早くプラグインをつくりたくなったら多分以下のようにすればいいはず。
基本的にはhttp://sylpheed.sraoss.jp/wiki/index.php?Sylpheed/Win32のビルド方法の項を参考に。

  • MinGW/MSYS環境を用意する

今ならmingw-get-inst-20110530.exeをインストールするというのでも良いです。

  • GTK+を用意する

http://sylpheed.sraoss.jp/wiki/index.php?Sylpheed/Win32を参照してGTK+の環境を用意する
GTK+がちょっと古めなので注意が必要。

  • libsylph-0-1.dllとlibsylpheed-plugin-0-1.dllからインポートライブラリを作る

3.1.1のバイナリからプラグインをビルドするときに必要なインポートライブラリを作成する

pexports libsylphed-plugin-0-1.dll > libsylphed-plugin-0-1.dll.def
pexports libsylph-0-1.dll > libsylph-0-1.dll.def
pexports ssleay32.dll > ssleay32.dll.def

pexportsでdefファイルを作成する。次にdlltoolで.aファイルを用意する。

dlltool --dllname libsylpheed-plugin-0-1.dll --input-def libsylpheed-plugin-0-1.dll.def --output-lib libsylpheed-plugin-0-1.a
dlltool --dllname libsylph-0-1.dll --input-def libsylph-0-1.dll.def --output-lib libsylph-0-1.a
dlltool --dllname ssleay32.dll --input-def ssleay32.dll.def --output-lib libssleay32.a

Sylpheed本体をビルドしてもできるけど、プラグインを作りたいだけならそこまでは不要。
これでリンクに必要なものはそろったので、あとはプラグインのコードを書くだけ。
autotools対応が面倒なら自分でシェルを書いてコンパイルするのが早いでしょう。