Python - MenuMaker 日本語化 - 更新 20201110 - 変更内容

クラウディア 
1. 概要
2. MenuMaker/CLI.py
3. MenuMaker/JWM.py
4. MenuMaker/Openbox.py

1. 概要

 モジュール構成は、変わっていません。

jmenumaker
┣ CLI.py
┣ jmmaker.py
┣ update_jwm.sh
┣ update_openbox.sh
┗ MenuMaker
   ┣ __init__.py
   ┣ CLI.py
   ┣ Env.py
   ┣ Fluxbox.py
   ┣ IceWM.py
   ┣ JWM.py
   ┗ Openbox.py
 以下、変更の発生したソースのみ記述します。

2. MenuMaker/CLI.py

 カテゴリ名「Exit」を「終了」としていましたが、「ログアウト」となるケースが多く、「ログアウト」に変更しました。  例外があれば、個別に対応します。

# カテゴリ名 英語→日本語 辞書

label_dict = {
    "Configure"   : "設定",
    "Development" : "開発",
    "Editors"     : "エディタ",
    "Exit"        : "ログアウト",
    "Files"       : "ファイル",
    "Games"       : "ゲーム",
    "GNOME"       : "GNOME",
    "Graphics"    : "グラフィックス",
    "Multimedia"  : "マルチメディア",
    "Network"     : "ネットワーク",
    "Office"      : "オフィス",
    "OpenBox"     : "OpenBox",
    "Other"       : "その他",
    "Reconfig"    : "再設定",
    "Reconfigure" : "再設定",
    "Restart"     : "再起動",
    "Settings"    : "設定",
    "Shells"      : "シェル",
    "Styles"      : "スタイル",
    "System"      : "システム",
    "Utilities"   : "ユーティリティ",
    "Workspaces"  : "ワークスペース",
}
 21行です。

3. MenuMaker/JWM.py

 ひとつは「終了」を「ログアウト」へ変更した対応です。  もうひとつは、自動起動の定義とトレイの定義をファイルとして外だしして、中に取り込むものです。  「JWM」で自動起動の定義は

~/.jwmrc
 内に

    <StartupCommand>コマンド</StartupCommand>
 として記述すれば、このコマンドをログイン時に自動起動します。  この文字列を別途ファイルとして

~/.config/startup.xml
 に記述しておけば、取り込んで「~/.jwmrc」へ記述するようにしました。  トレイの定義は

~/.config/tray.xml
 に記述しておけば、「MenuMaker」で自動生成した、トレイの定義を置き換えるものです。

########## カスタムアイコンディレクトリ
        self.icon_directory = os.environ.get('HOME') + '/.config/icons'

        if (not os.path.exists(self.icon_directory)):                         ## ないディレクトリは作成する
            os.makedirs(self.icon_directory)

        ## スタートアップファイル

        self.startup =  os.environ.get('HOME') + '/.config/startup.xml'

        ## トレイ定義

        self.tray = os.environ.get('HOME') + '/.config/tray.xml'

 46行で、自動起動設定ファイルの定義をしています。  50行で、トレイ定義ファイルを定義しています。

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

    def set_end_menu(self, env, dic_exec_icon, lines):
        for i in range(0, len(lines)-1):
            lines[i] = lines[i].replace('Sans-9', 'MigMix 1M-8')

        line_key = '<Restart label="再起動" icon="restart.png"/>' + "\n"

        if  line_key in lines:
            i = lines.index(line_key)
            lines[i] = lines[i].replace(line_key, '<Restart label="JWM 再起動" icon="'+dic_exec_icon['reboot']+'"/>'+"\n")


        line_key = '<Exit label="ログアウト" confirm="true" icon="quit.png"/>' + "\n"

        if  line_key in lines:
            i = lines.index(line_key)
            lines[i] = lines[i].replace(line_key, '<Exit label="ログアウト" confirm="false" icon="'+dic_exec_icon['logout']+'"/>'+"\n")

        line_key = '</RootMenu>' + "\n"

        if  line_key in lines:
            point = len(lines) - lines.index(line_key)

        lines.insert(-point-2, '<Program label="メニュー更新" icon="'+dic_exec_icon['update']+'">~/jmenumaker/update_jwm.sh</Program>'+"\n")
        lines.insert(-point, '<Program label="再起動" icon="'+dic_exec_icon['reboot']+'">sudo /sbin/reboot</Program>'+"\n")
        lines.insert(-point, '<Program label="シャットダウン" icon="'+dic_exec_icon['shutdown']+'">sudo /sbin/poweroff</Program>'+"\n")

        ## Tray を書き換えてみる

        if (os.path.exists(self.tray)):

            print('tray ari')

            start_key = '    <Tray x="0" y="-1" autohide="off">' + "\n"
            end_key   = '    </Tray>' + "\n"
            start = 0
            end   = 0

            if  start_key in lines:
                start = lines.index(start_key)

            if  end_key in lines:
                end = lines.index(end_key)

            print(start, end)


            if (start < end):
                del lines[start:end+1]

                with open(self.tray) as file:
                    list = file.readlines()

                    i = start

                    for data in list:
                        lines.insert(i, data)
                        i = i+1

        ## startup ファイルが存在すれば 組み込み

        if (os.path.exists(self.startup)):
            with open(self.startup) as file:
                list = file.readlines()

                for data in list:
                    lines.insert(-1, data)
 113~117、「終了」の文字列を「ログアウト」へ書き換えています。  また、「confirm="true"」を「confirm="false"」へ書き換えています。  前のままだと、ログアウト時に、毎回、下記のダイアログが表示されて、面倒だからです。
「JWM FreeBSD 12.2」-「Confirm」」

 130~158行で、「~/.config/tray.xml」が、存在すれば、「<Tray>~</Tray>」の記述をファイルの内容で置き換えるようにしました。

 160~167行で、以前は、固定で、自動起動するプログラムを記述していましたが、冒頭に記したように、「~/.config/startup.xml」に記述しておけば取り込むようにしました。

4. MenuMaker/Openbox.py


#####
    # 終了メニュー設定
    # @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['reboot']+'"> <action name="Execute">'+"\n")
        lines.insert(-2, '                 <execute>openbox --exit</execute>'+"\n")
        lines.insert(-2, '             </action> </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(-2, '             <item label="ログアウト" icon="'+dic_exec_icon['logout']+'"> <action name="Exit"/> </item>'+"\n")
 91行を下記へ変更しました。

                lines.insert(-2, '             <item label="ログアウト" icon="'+dic_exec_icon['reboot']+'"> <action name="Execute">'+"\n")
        lines.insert(-2, '                 <execute>openbox --exit</execute>'+"\n")
        lines.insert(-2, '             </action> </item>'+"\n")
 実は、「action name="Exit"」だと、ログアウト時に。  毎回、このダイアログが表示されるので
「Openbox FreeBSD 12.2」-「Openbox を終了してもよろしいですか」」

 「action name="Execute"」「<execute>openbox --exit</execute>」にして、ダイアログを表示しないようにしました。

 元々からある、ログアウトのメニューの動作は、あえて、ダイアログを表示させる形式にしています。

earthcar(アースカー)
健康サポート特集
【usus ウズウズ】