デスクトップ環境構築 - 共通事項 - メニュー - MenuMaker - トラブルシュート - ラスト1件は消える
- 1. 概要
- 2. 解析
- 3. わたしの解決策
1. 概要
これは、前項より、更に不思議だったのです。
「Atril」をインストールして、「MenuMaker」を実行しても、「Atril」が、メニューに取り込まれないのです。
「-v -v」オプションで見ると
> mmaker -f --no-legacy --no-debian FluxBox -v -v
・・・ 略 ・・・
parsing mate-network-scheme.desktop...REJECTED : NoDisplay is True
parsing atril.desktop...ok
parsing caja-autorun-software.desktop...REJECTED : NoDisplay is True
32 apps found
skipping legacy
skipping Debian
* merging... 7 coincidings detected
* generating
・・・ 略 ・・・
と、きちんと検索出来ているのに・・・。
2. 解析
実は、「--no-legacy」「--no-debian」のどちらかをはずすと、取り込まれたりするのです。
デバッグして分かりましたが、実は前項の
parsing mate-network-scheme.desktop...REJECTED : NoDisplay is True
parsing atril.desktop...ok
parsing caja-autorun-software.desktop...REJECTED : NoDisplay is True
32 apps found
skipping legacy
skipping Debian
* merging... 7 coincidings detected
の部分にヒントがあったのです。
「atril.desktop」が「ok」で、「caja-autorun-software.deskto」が「REJECTED」です。
リストの最後に、「atril」が、おるわけです。
/usr/local/share/menumaker/Prophet/__init__.py
の
def merge(entries):
"""Removes repeating entries from the list using fuzzy matching technique"""
# NOTE : this is the deliberate violation of the immutability principle
# __matched attribute is set for the entries that have been successfully matched before
# Such entries should be skipped
# It is thought that this approach is faster than keeping them in separate
# list
msg("* merging...", newline=False)
result = []
esz = len(entries)
for i in range(0, esz - 1):
e = entries[i]
if hasattr(e, "__matched"):
continue
matching = [e] # List containing matching entries
for j in range(i + 1, esz):
たぶん、287行目に問題があって、配列の1番最後を処理していないんじゃないかな。
「--no-legacy」「--no-debian」のどちらかをはずせば、「atril」が欠け落ちることはなくなるわけです。
その代わりに、別の誰かが、メニューに取り込まれないんじゃないかな。
ためしに、
for i in range(0, esz):
と書いて、試してたら、うまくいきました。
おそらく、その下の処理で、配列をはみ出てしまって、こけることを懸念しているのでしょうが・・・。
「Python」のことは、よう知らんので、なんとも言えませんが。
不具合じゃ、ないのか知らん。
3. わたしの解決策
ひとつは、
/usr/local/share/applications/atril.desktop
と中身が全く同じものをコピーして、別の名前をつけてやるのです。
そうすれば、「atril」が2つリストされるので、1つは生き残るわけです。
まぁ、この方法は、新たに同じ現象の「.desktop」ファイルが出てきたら、また同じことをしなければならないわけで、あまりお勧めできません。
もうひとつの方法として、どうも、前ページでふれたように、マージ処理に問題があるので・・・。
前ページと同様、マージ処理をスキップするオプションをつけて、マージ処理させないようにするっちゅうことです。
|
|