Qtopia上でのファイル関連付け


 Qtopiaアプリケーションとファイルとの関連付けは、直接ファイルに対してでは無く、システムで登録されたMIMEのContent-Typeに対して行います。

 MIMEとは、ファイルの判別方法の一つですが、Qtopia環境に依存するものでは無いため、MIMEそのものの詳細については本頁では割愛します。

 MIMEの詳細については以下の頁等が参考になるかと思います。


@Content-Type

 Content-Typeとはファイルの種別を示すもので、主型と副型を半角スラッシュで区切った形で表記されます。
 Linux Zaurusでは/home/Qtpalmtop/etc/mime.typesで設定されています。

#/home/QtPalmtop/etc/mime.types
 application/activemessage
 application/andrew-inset        ez
 application/applefile
 application/atomicmail
 application/cu-seeme            csm cu
 application/dca-rft
 application/dec-dx
 application/excel               xls
 application/ghostview		
 application/hancompresenter     hpt
 application/hancomsheet         hst
 application/hancomword          hmw
     |
    後 略
     |

 先頭がファイルの種別を示すContent-Type、続けて関連付けられた拡張子が記述されています。

 Content-Typeと拡張子の間はタブで区切られ、さらに一つのContent-Typeに複数の拡張子が関連付けられている場合は、半角スペースで区切って列記されます。

 mime.typesは単純なテキスト形式のファイルであり、ユーザー自身の手で関連付ける拡張子を追加・変更したり、新規のContent-Typeを自由に設定することが出来ます。
 ただし、記述に於いては半角英大文字は使えないので、注意して下さい。


@desktopファイルの設定

 実際のファイルとアプリケーションの関連付け作業は、*.desktopファイル内のMimeType項目に任意のContent-Typeを記述することで設定します。

 例として、拡張子「txt」のテキストファイルをZEditorに割り付ける例を示してみます。

 まず、関連付けたいファイルの拡張子(今回は「txt」)が、どのContent-Typeに割り付けられているのか、mime.typesを確認します。

#/home/QtPalmtop/etc/mime.types
  前 略
   |
 text/html       html htm
 text/plain      asc txt c cc h hh cpp hpp
 text/richtext   rtx
   |
  後 略

 この場合、Content-Type: text/plain に割り付けられていることが分かります。
 関連付けを行いたい拡張子が、既存のContent-typeに割り付けられていない場合は、既存或いは新規に作成したContent-Typeに割り付けを追加します。


 Content-Typeが確認出来たら、次にdesktopファイルを修正します。

#/home/QtPalmtop/apps/Applications/zeditor.desktop
 [Desktop Entry]
 MimeType = text/plain        <- Content-Typeを記述
 MimeTypesIcon = MusicPlayer  <- アイコン名を記述
 Comment=Zaurus Text Editor
 Exec=zeditor
 Icon=zeditor
 Type=Application
 Name=ZEditor
 Display=640x480/144dpi,480x640/144dpi
 CanFastload=1

 複数のMimeTypeを割り付ける場合は「;」で区切って列記します。

 また、MimeTypesIconsを設定すると、データファイルを任意のアイコンで表示することが出来ます。
 今回はテストのため、TXTファイルをMusicPlayerのアイコンで表示させてみました。

txtファイルがMusicPlayerのアイコンで表示されている。

 なお、MimeTypeで複数のContent-Typeを設定した場合は、アイコンも同様に「;」で区切って複数指定することが出来ます。

 MimeTypeIconsを設定しなかった場合は、アプリケーション本体と同じアイコンが使われます。


 ファイルを修正後、Qtopiaを再起動するとファイルの関連付けが有効になります。


 なお、Qtopiaの再起動に関しては、

qcop QPE/System 'restart()'

で行うことも出来ます。上記のqcopコマンドで再起動させる場合は、Qtopia環境のみの再起動となるため、本体まるごとの再起動よりは多少起動時間が短縮されます。


補則事項


@その他のMIME関連ファイル

・.mimetypes.cache

 .mimetypes.cacheはQtopiaの起動時、またはホーム画面の設定や、ソフトウェアの追加/削除を行った際などに自動的に生成されます。

 このファイルは設定ファイルそのものではなく、現在のアプリケーションの関連付けを以下の書式で列挙したキャッシュファイルです。

#/home/QtPalmtop/.mimetypes.cache
 前 略
  |
 application/hancomword                                <- Content-Type
 /home/QtPalmtop/apps/Applications/hancomword.desktop  <- 関連付けアプリケーションのdesktopファイルパス
 DocumentTypeHancomWord                                <- アイコン名。アイコンが指定されない場合は空行
  |
 後 略、ここまでの三行で1セット

 .mimetypes.cache自体は、システムの動作に必須のものでは無く、実際、SL-A300では存在していません。このファイルが存在しない場合は、mime.typesと、*.desktopファイルの内容が直接参照されます。

 ただし、.mimetypes.cacheが存在している状態で、mime.types/*.desktopとの内容に不整合が生じた場合は、.mimetypes.cacheの内容が優先されます。


・slmime.types

 各Content-Type毎のデフォルトフォルダを設定します。
 NetFrontでのファイルダウンロード時等には、このファイルが参照されます。ただし、この場合、あくまでもNetFrontが受け取るContent-Typeはリモートのサーバ側から受け取るものであるため、必ずしもローカルのMIME設定がこのファイルで指定したデフォルトフォルダに反映されるとは限りません。


@関連付けをリアルタイムに反映させる

 mime.typs及び、desktopファイルの設定変更については、再起動を行わなくとも

qcop QPE/System 'mimeChanged()'
qcop QPE/System 'linkChanged(QString)'


上記のqcopメッセージでリアルタイムに関連付けの変更をシステムに反映させることも出来ます。

 ただし、これだけでは関連付けの設定は有効になりません。

 上記のqcopコマンドを発行しただけでは、.mimetypes.cacheの再構築が行われずmime.types/*.desktopと.mimetypes.cacheとの間で内容の不整合が生じてしまいます。
 不整合が発生した場合、既述の通り.mimetypes.cacheの内容が優先されてしまうため、結果として変更した関連付け設定がシステムに反映されないと言うことになってしまうのです。

 手っ取り早く、関連付けを有効にするためには、.mimetypes.cacheを削除した上で、上記のqcopコマンドを発行してやると、直接mime.types、及び*.desktopの内容がシステムに反映されるようになります。

 また、desktopファイル内の[Desktop Entry]で System=1 と設定されたアプリケーションは、アプリケーション終了時に .mimetypes.cacheの再構築を行います。

 サンプルとして、更新を反映させる簡単なスクリプトを作成してみました。
 インストールすると、QTメニューに「関連付けの更新」が追加されます。




@関連付けの範囲と重複について

 desktopファイルでのContent-typeの指定は、text/plainと言った指定の他、text/*と記述することで、textを主型に持つContent-Type(text/html、text/richtext等)を一括して関連付けることが出来ます。
 さらに、その上で別アプリケーションでより狭い範囲での指定を行った場合はそちらが有効になります。

 具体的には、textedit.desktop(メモ帳)でtext/*を設定した上で、さらにzeditor.desktopでtext/plainを設定した場合、text/plainのファイルはZEditorが、それ以外のtext/htmlやtext/richtextはメモ帳が関連づけられます。

 このへんのContent-typeの範囲等に関しては、歌鈴Kさんがレポートをまとめておられます。

スズノネ


 また、完全に同一のContent-Typeに対して、複数のアプリケーションが関連付けされた場合は、desktopファイル名降順のものが有効になります。意図した通りの関連付けが行われない場合、それらも確認してみて下さい。

 この重複の優先順位については、はけさんが詳細なレポートをまとめておられます。同ページでは他にもRubyで作成された関連付け設定ツール等も公開されています。

はけのザウルス備忘録別館


あとがき

 長らく放ってましたが、ようやっとまとめ直すことが出来ました。
 まだまだ不備はありますが、とりあえず暫定の文字外せるくらいには何とか形に出来たと思います。

 例によって、旧版の方も残してはおきます。

過去LOG(暫定版)

 なお、旧版の方にあった、QTメニュー項目の追加や、NetFrontの外部ヘルパー設定等は、分割し別ページにまとめています。必要な方はどうぞそちらをご参照下さい。

このページの文責: TAKETYON

Return to home