QMAIL3の携帯メール化 3題
前と重複する部分もありますが、ご容赦。
■メインウィンドウでのフォーカス移動
基本的には左右キーで、フォルダコンボボックス、リストビュー、プレビュー間のフォーカス移動をするように、keymap.xmlを編集します。
しかし、フォルダコンボボックスで上下キーを押したときに、フォルダ選択が移ってしまうのはいただけません。
WIndows Mobileでは、アクションキーでプルダウンリストを出したときだけ上下キーで変更できるけれど、プルダウンリストが開いていないときは上下キーでは他のコントロールにフォーカスが移るのが一般的です。
でも、上下キーにフォーカス移動を割り当ててしまうと、フォルダ選択ができなくなります。
そこで、アクションキーに、フォルダビューの表示・非表示を割り当てることにしました。コンボボックスのプルダウンメニューを開くようなイメージで、一時的にフォルダビューを使用するのです。
![]() |
![]() |
|
| 上下キーではツリービューへのフォーカス移動。 アクションでフォルダビュー表示に切り替える。 |
フォルダビューでは上下キーでフォルダ選択ができる。 アクションキーでフォルダコンボボックスに戻ると同時にリストビューへ。 |
keymap.xml(抜粋)
<keymap name="MainWindow"> <action name="ViewFocusNext"> <key name="right" /> </action> <action name="ViewFocusPrev"> ??? <key name="left" /> </action> </keymap> <keymap name="FolderWindow"> <action name="ViewNextAccount"> <key name="down" shift="true"/> </action> <action name="ViewPrevAccount"> <key name="up" shift="true"/> </action> <action name="ToolInvokeAction" param="ViewShowFolder|ViewFocusNext|ViewFocusNext"> <key name="return"/> </action> </keymap> <keymap name="FolderComboBox"> <action name="ToolInvokeAction" param="ViewShowFolder|ViewFocusPrev|ViewFocusNext"> <key name="return"/> </action> <action name="ViewFocusNext"> <key name="down" /> </action> <action name="ViewFocusNext"> <key name="up" /> </action> </keymap> <keymap name="HeaderEditWindow"> <action name="ViewFocusNextEditItem"> <key name="down"/> </action> <action name="ViewFocusPrevEditItem"> <key name="up"/> </action> </keymap>
編集画面でヘッダへフォーカスを戻すのは、SortInchKeyでアクションキーの長押しでコンテキストメニューを表示させるついでに、アクションキーの二度押し(長)にShift+Tabを割り当て。
■日付表示をコンパクト化
デフォルトでは、「08/03/17 17:22:56」という表示形式ですが、幅が狭いので「08/03」の部分しか見えません。
これを、その日のメールは「時:分」、その他は「日/時」と表示させます。
メニュー>表示>カラムをカスタマイズ
「日付」の幅を0にし、新たに「日時」を追加。タイプを「その他」として次のマクロを記述。
@If(@Passed(4,:PASSED-HOUR),@FormatDate(@Date(Date),'%M0/%D'), @FormatDate(@Date(Date),'%h:%m'))
幅を0にしてオリジナルの日付を残すのは、時系列に正しくソートできるようにです。
![]() |
![]() |
すべてのフォルダに同じ設定をするには、accountフォルダのView.xml(と新規アカウントの雛形のprofileフォルダのView.xml)を直接編集します。
<column cache="true" sort="date"> <title>日時</title> @If(@Passed(4,:PASSED-HOUR),@FormatDate(@Date(Date),'%M0/%D'), @FormatDate(@Date(Date),'%h:%m')) <width>70</width> </column>
作成したマクロは、4時間以内のメールを時:分で表示するものです。
なぜ4時間かというと、受信時にマクロで判定された日時欄はインデックスにキャッシュされるため、このままでも全メールが「時:分」で表示されるからで、1日1回、朝4時にインデックスを更新して前日までのメールを「日/時」にリセットさせる必要があります。
ならば1時間でよいかというと、メールには遅延がつきものでDateヘッダは受信時間ではなく送信時間なので、ほどほどの時間幅が必要です。
朝4時のインデックス更新は、SimplaAlarmを利用して次のショートカットを実行します。
reset_date.link
"\Program FIles\qmail3\q3u.exe" -i "FileCheck" -q
SimplaAlarmへの登録
[alarm] 0123456 0400 "\Program FIles\qmail3\reset_date.lnk"
■メールログの自動削除
QMAIL3のヘルプに、インデックスは本体メモリに残して、メールログ本体を外部ストレージに置く方法が記載されています。
その方法も試してみましたが、自動受信環境だと問題あるようです。
自動受信ではスタンバイから復帰してすぐ外部ストレージが認識されていないうちに受信を行なうため、本体メモリに「microSDカード」という名のフォルダが作成されてしまい、本物の外部ストレージが「microSDカード2」にリネームされたりします。
メールログは本体メモリに置くしかないようです。
そこで、メールログを30日程度で自動削除する方法をあれこれ考えてみました。
メニューやキーに割り当てて使うなら、次のマクロで現在のフォルダを対象に古いログを削除することができます。
@FindEach(@Messages(),@Passed(30),@Delete())
しかし、コマンドライン引数でこのマクロを全フォルダに対して実行する方法、週1度受信するメールニュースをトリガーにして自動振り分けでマクロを実行する方法などを模索しましたが、いずれも実現できませんでした。
ということで、ちょっと強引な方法ですが、1メール1ファイル方式を前提にして、直接ログを削除することにしました。
メールログ本体を削除したらインデックスの更新が必要ですが、それは日付をコンパクト化するために毎朝4時に実行していますから、ちょうど良かったりします。
remove_q3ulog.mscr
accounts = "\Application Data\qmail3\accounts"
call("remove_log", accounts)
sub remove_log
path = argv[1]
foreach log in files(path \ "*.msg")
if(fileModifyTime(log) < timeStamp()-30*86400)
Delete(log)
endif
endforeach
foreach path in directories(path \ "*")
call("remove_log", path)
endforeach
endsub
週一回、日曜の朝3時に走らせています。
SimplaAlarmへの登録
[alarm] 0 0300 "\Program FIles\MortScript\scripts\remove_q3ulog.mscr"
受信したメールはすべてパソコンで見れる環境なので、何も考えずに30日以前ものは削除しています。
残したいメールが1通でもある人は、この方法を真似しないように(w





3/22 '08 11:58 PM
rltodayのXMLもmortscriptも天気予報スクリプトが作れるくらいまで分かっていない者ですが、
sub get_info_jma
local()
global(point, skin_dir, reg_key, wday_jp, wday_en)
url = argv[1]
table=number = argv[2]
ここのtable=number = argv[2]はtable_number = argv[2]
ではないのでしょうか?
3/25 '08 10:23 PM
そのようですね。
気象庁サイトで都道府県の第2地域が取得できてなかったということでしょうか。
最新版は気象庁から離れてしまったので、お使いになるには修正してご利用ください。