Konquerorの右クリックメニューに独自項目を追加する方法

 KDEのKonquerorはきわめて多機能な万能型ツールだ。ファイルマネージャとWebブラウザを兼ねており、サービスメニューを使って新しいコマンドを追加することもできる。追加したコマンドは、Konquerorでファイルを右クリックしたときにコンテキストメニューに表示される。この記事では、サービスメニューを作成して独自のコマンドを追加する方法を見ていくことにしよう。

 作成するサービスメニューの内容は、.desktopという拡張子を付けたファイルに記述する。KDE 3.5で、すべてのユーザが利用できるグローバルなサービスメニューの場合なら、/opt/kde3/share/apps/konqueror/servicemenusディレクトリにそのファイルを作成する。自分だけが使うサービスメニューの場合は、ユーザ固有のKDEディレクトリにファイルを作成すればいい。ディレクトリの場所は「kde-config --localprefix」で確認できる。私の場合は/home/fkereki/.kde3/share/apps/konqueror/serviceディレクトリだった。

 ファイル名の本体部分は好きな名前でよい。拡張子が.desktopならOKだ。ここでは、テキストファイルに含まれているワード数と行数を計測するためのメニューコマンドを作成してみることにしよう。コンソールウィンドウを開いてwcを実行しなくても済むようにするコマンドだ。まずは、任意のテキストエディタを使って、自分のKDEディレクトリにcount_words_and_lines.desktopというファイルを作成する。

 .desktopファイルは決まった構造を持つ。まず、[Desktop Entry]というセクションに「キー=値」という形で設定を記述する(下記の例を参照)。その後、各コマンドの具体的な動作(アクション)を[Desktop Action]というセクションのエントリに記述していく。このセクションは複数指定でき、それぞれが1つのコマンドとしてサービスメニューに表示される。サービスメニューの最小限のエントリを記述したファイルは次のようになる。

[Desktop Entry]
ServiceTypes= ...
X-KDE-Submenu= ...
Actions= ...

[Desktop Action actionname]
Name= ...
Icon= ...
Exec= ...

メニューの作成

 新しいメニューを作成するときには、どの種類のファイルに対してそのメニューを表示するのかをまず明確にする必要がある。ファイルの種類の指定方法を確認するには、Konquerorを開き、[設定]メニューの[Konquerorを設定]を選択して、[ファイルの関連付け]タブを選択する。右側のツリーで、有効な指定をすべて参照できる。私の場合は、プレーンテキストファイルとHTMLファイルの両方を対象としたメニューを作成したいので、[ServiceTypes]行に「ServiceTypes= text/plain,text/html」と指定した(等号の前後のスペースは任意)。「text/*」という指定ではすべてのテキストファイルが対象となり、「all/all」ではディレクトリを含むすべてのファイルが対象となる。「all/allfiles」ではディレクトリ以外のすべてのファイルが、「inode/directory」ではディレクトリが、それぞれ対象となる。

Konqueror1_thumb.jpg
作成したサービスメニュー

 次にサービスメニューの構成を決める。作成するコマンドは、右クリックメニュー自体に直接表示することも、サブメニューを作成してその中に表示することもできる。ここでは練習として、3つのコマンド(ワード数の計測、行数の計測、両方の計測)を持つサブメニューを作成してみることにする。そこで、「X-KDE-Submenu= Count...」と指定した。サブメニューが不要なら、この行はなくてよい。メニュー項目の末尾に省略記号(3つのピリオド)を付けるのは、コマンドそのものの実行ではなく別のメニューを開くことを表す一般的な表記方法だ。各コマンドにはそれぞれ個別のアクション名を付ける必要がある。名前自体は画面に表示されないので、好きな名前でよい。ここでは3つのコマンドを追加するので、適切な名前を決め、Actions行に「Actions= countLinesAndWords;countLines;countWords」と指定した。このように、複数のアクション名はセミコロン区切りで指定する。

 コマンドのアクションごとに記述する[Desktop Action actionname]セクションには、3つの行を指定する。コマンドのメニュー項目のテキストを表すName、メニュー項目の横に表示するアイコンを表すIcon(/opt/kde3/share/iconsディレクトリにある任意のアイコンを使用できるが、名前の末尾の.pngは不要)、実際に実行するコマンドを表すExecだ。たとえば、行数とワード数の両方を計測するアクションでは、私は次のように設定した。

[Desktop Action countLinesAndWords]
Name=Count lines and words
Icon=background
Exec=wc -l -w %U

 しかし、この指定ではうまくいかず、何の出力も表示されなかった(理由は後述)。Exec行に記述する実行コマンドではオプションを指定できる。今回使用した「%U」は「選択した全ファイル」を表す。もう1つよく使うオプションが「%u」で、こちらは単一のファイル名を表す。このほか、時折使用するオプションについては、こちらのWebページに説明がある。Exec行では任意のプログラムを実行でき、DCOP(KDE 4ではD-Bus)のコマンドも使用できる。「Exec=/bin/sh -c "a list of commands"」や「Exec=/bin/sh aScriptOfYourOwn」のように記述すれば、複数のコマンドやスクリプトを実行することも可能だ。

コマンドの結果表示にKDialogを使用

 大半のコマンドは、上記の例のような指定方法でうまくいく。しかし、今回のように出力を返すコマンドの場合は、この方法では出力が表示されないという問題がある。Konquerorはコマンドを実行するが、その出力を無視してしまう。つまり今回の例なら、ワード数や行数の計測自体は実行するのだが、その結果をユーザが確認できないことになってしまうのだ。

 ここで出力を確認する方法として最も簡単なのは、KDialogを使う方法だ。KDialogとは、KDEが標準装備している小さなプログラムで、ポップアップウィンドウの表示などのさまざまな用途がある。(KDialogの代わりとしてはZenityもある。KDEが採用しているQtではなくGTK+を利用したソフトウェアだ)。私の場合は、「Exec=kdialog --msgbox "`wc %u`"」と指定することで問題を解決できた。ここでは、逆引用符(`)で囲むことで、wcコマンドの結果をKDialogのパラメータに渡して出力している。もちろん、他のコマンドと組み合わせてwcの出力を整形するなど、もっと凝った処理にすることも可能だが、そちらは各自で試してみてほしい。

 サービスメニューの完成形は次のようになる。私はこのように作成したコマンドを自分のマシンでも利用している。

[Desktop Entry]
ServiceTypes=text/html,text/plain
Actions=countLinesAndWords;countLines;countWords
X-KDE-Submenu=Count...

[Desktop Action countLinesAndWords]
Name=Count lines and words
Icon=background
Exec=kdialog --msgbox "`wc -l -w %U`"

[Desktop Action countLines]
Name=Count lines
Icon=background
Exec=kdialog --msgbox "`wc -l %U`"

[Desktop Action countWords]
Name=Count words
Icon=background
Exec=kdialog --msgbox "`wc -w %U`"

 KDEは各自の用途に合わせてさまざまなカスタマイズが可能だ。サービスメニューは簡単に作成でき、右クリックメニューに個別の操作を追加できる。

Federico Kerekiはウルグアイ在住のシステムエンジニア。20年以上にわたり、システムの開発、コンサルティング活動、大学での教育指導を続けている。

Linux.com 原文(2008年9月25日)