Python - MenuMaker 日本語化 - その後の修正 - Openbox

クラウディア 
1. Openbox
2. ソース

1. Openbox

 これは、「Openbox」の処理を行うモジュールです。  おさらい。  「Openbox」のメニューの構造は

<menu id="2" label="カテゴリ名" icon="アイコンファイル名">
    <item label="アイテム名" icon="アイコンファイル名"> <action name="Execute">
        <execute>ロードモジュール</execute>
    </action> </item>
    <item label="アイテム名" icon="アイコンファイル名"> <action name="Execute">
        <execute>ロードモジュール</execute>
    </action> </item>
</menu>
 という形式になっています。  サブカテゴリを分ける場合は、「menu」タグをネストさせます。  「アイコンファイル名」は、オリジナルの「MenuMaker」では、「menu」「item」どちらの行も「icon=""」自体が存在しません。  「.png」も「.svg」も表示できるので、変換がないため、短いソースになります。

2. ソース

 前回との変更点のみ。  以下は、まるまる追加。  「LibreOffice」の個別起動とアイコン設定です。

#######
    # メニューの LibreOffice 行にアイコンを追加して、個別の実行文にする
    # @param line           対象行
    # @param nextline       対象行の次の行
    # @param label          項目名
    # @param exe_sentence   実行文
    # @param directory_icon アプリケーションアイコンのディレクトリ
    # @param icon           アイコンファイル(拡張子なし)

    def update_libreoffice(self, line, nextline, label, exe_sentence, icon):
        line     = line.replace('label="'+label+'">', 'label="'+label+'" icon="'+icon+'">')
        nextline = nextline.replace('<execute>libreoffice</execute>', '<execute>'+exe_sentence+'</execute>')
        return [line, nextline]

#######
    # メニューの LibreOffice 行にアイコンを追加して、個別の実行文にする
    # @param line           対象行
    # @param nextline       対象行の次の行
    # @param label          項目名
    # @param exe_sentence   実行文
    # @param directory_icon アプリケーションアイコンのディレクトリ
    # @param icon           アイコンファイル(拡張子なし)

    def update_libreoffice(self, line, nextline, label, exe_sentence, icon):
        line     = line.replace('label="'+label+'">', 'label="'+label+'" icon="'+icon+'">')
        nextline = nextline.replace('<execute>libreoffice</execute>', '<execute>'+exe_sentence+'</execute>')
        return [line, nextline]

#####
    # 終了メニュー設定
    # @param env   環境変数クラス(本メソッドでは未使用)
    # @param  dic_exec_icon exec → icon 辞書
    # @param lines メニューファイル全行

    def set_end_menu(self, env, dic_exec_icon, lines):

        ## メニュー更新
        #
 「メニュー更新」をメニューに追加。  アイコンの変数名を変更しています。

#####
    # 終了メニュー設定
    # @param env   環境変数クラス(本メソッドでは未使用)
    # @param  dic_exec_icon exec → icon 辞書
    # @param lines メニューファイル全行

    def set_end_menu(self, env, dic_exec_icon, lines):

        ## メニュー更新
        #
        lines.insert(-6, '             <item label="メニュー更新" icon="'+dic_exec_icon['update']+'"> <action name="Execute">'+"\n")
        lines.insert(-6, '                 <execute>~/jmenumaker/update_openbox.sh</execute>'+"\n")
        lines.insert(-6, '             </action> </item>'+"\n")

        ## 終了メニュー
        #
        lines.insert(-2, '        <separator/>'+"\n")
        lines.insert(-2, '        <menu id="50" label="終了" icon="'+dic_exec_icon['logout']+'">'+"\n")
        lines.insert(-2, '             <item label="ログアウト" icon="'+dic_exec_icon['logout']+'"> <action name="Exit"/> </item>'+"\n")
        lines.insert(-2, '             <item label="再起動" icon="'+dic_exec_icon['reboot']+'"> <action name="Execute">'+"\n")
        lines.insert(-2, '                 <execute>sudo /sbin/reboot</execute>'+"\n")
        lines.insert(-2, '             </action> </item>'+"\n")
        lines.insert(-2, '             <item label="シャットダウン" icon="'+dic_exec_icon['shutdown']+'"> <action name="Execute">'+"\n")
        lines.insert(-2, '                 <execute>sudo /sbin/poweroff</execute>'+"\n")
        lines.insert(-2, '             </action> </item>'+"\n")
        lines.insert(-2, '        </menu>'+"\n")

        lines.insert(-6, '                 <execute>~/jmenumaker/update_openbox.sh</execute>'+"\n")
        lines.insert(-6, '             </action> </item>'+"\n")

        ## 終了メニュー
        #
        lines.insert(-2, '        <separator/>'+"\n")
        lines.insert(-2, '        <menu id="50" label="終了" icon="'+dic_exec_icon['logout']+'">'+"\n")
        lines.insert(-2, '             <item label="ログアウト" icon="'+dic_exec_icon['logout']+'"> <action name="Exit"/> </item>'+"\n")
        lines.insert(-2, '             <item label="再起動" icon="'+dic_exec_icon['reboot']+'"> <action name="Execute">'+"\n")
        lines.insert(-2, '                 <execute>sudo /sbin/reboot</execute>'+"\n")
        lines.insert(-2, '             </action> </item>'+"\n")
        lines.insert(-2, '             <item label="シャットダウン" icon="'+dic_exec_icon['shutdown']+'"> <action name="Execute">'+"\n")
        lines.insert(-2, '                 <execute>sudo /sbin/poweroff</execute>'+"\n")
        lines.insert(-2, '             </action> </item>'+"\n")
 「更新」「ログアウト」「再起動」「シャットダウン」のアイコン検索を追加しています。

#####
    # @brief applications/*.desktop を検索して
    #    プログラム名 → アイコンファイル名の辞書を返す
    #    Fluxbox と違って png で良い
    # @param env           環境変数クラス
    # @param dic_exec_icon .desktop より取得した編集前の exec → icon 辞書
    # @return exec → icon ファイル名フルパス の辞書

    def get_dic_exec_icon(self, env, dic_exec_icon):

        ## 有効な拡張子、ディレクトリ(どちらも優先順位順)

        effect_extend = [ '.xpm', '.png', '.svg' ]
        effect_directory = [ env.directory_xpm, env.directory_png, env.directory_icon_apps ]

        dic_exec_icon['update'] = 'system-software-update'
        dic_exec_icon['logout'] = 'computer-log-out'
        dic_exec_icon['reboot'] = 'system-reboot'
        dic_exec_icon['shutdown'] = 'system-shutdown'
ハイスピードプラン