ウィンドウタイトルの生成に関係するファイルはどれですか?たとえば、Rhythmboxを開くと、ウィンドウタイトルとしてプログラム名が表示されます。ただし、.desktop
ファイルによって生成されるわけではありません。アプリケーションのタイトルにテキストを追加するには、どのファイルを編集する必要がありますか?変更を永続的にしたい
Ubuntu GNOME 15.04とGNOME 3.16を使用しています。
ウィンドウタイトルの生成に関係するファイルはどれですか?たとえば、Rhythmboxを開くと、ウィンドウタイトルとしてプログラム名が表示されます。ただし、.desktop
ファイルによって生成されるわけではありません。アプリケーションのタイトルにテキストを追加するには、どのファイルを編集する必要がありますか?変更を永続的にしたい
Ubuntu GNOME 15.04とGNOME 3.16を使用しています。
回答:
通常、初期名はアプリケーション自体(内のコード)によって設定されます。ただし、xdotool
最初にインストールする必要があるを使用するなどして、変更できます。
sudo apt-get install xdotool
次に、インストールしたら、次のコマンドで別のウィンドウ名を設定できます(例)。
xdotool search --name "Unity LauncherSwitcher" set_window --name "Monkey"
これは変わります:
に:
ご覧のとおり、次のコマンドが存在します。
xdotool search --name "<current_name>" set_window --name "<new_name>"
は<current_name>
完全に一致する必要があります。
あなたのコメントから、上記のコマンドが機能しなかったことを理解しています。さまざまなアプリケーションでテストしましたが、うまくいきました...
しかし、私は理解できない理由で、ではありませんRhytmbox
(!!はバグかもしれません)
別の方法は、を使用wmctrl
することです。これもインストールする必要があります。
sudo apt-get install wmctrl
次に、コマンドを使用します。
xprop -id "$(wmctrl -l | grep 'Rhythmbox' | awk '{ print $1 }')" -set WM_NAME "Music"
私は正常にそれをテストしましたRhythmbox
:
前述のように、デフォルトのウィンドウ名はアプリケーションのコードで定義されています。
変更デフォルトのウィンドウタイトルは、コードを変更する必要があります。これは、コードが利用可能で、多くの場合再コンパイルが必要であり、使用されている言語などに依存する場合に実行できます。私の意見では、一般的な指示はまったく不可能であり、AUの範囲を超えて(外部で)行われます。
元の質問では、特定のアプリケーションの新しいウィンドウのタイトルを設定するための何らかのファイルがあるかどうか疑問に思っていました。説明したように、そうではありませんが、作成することができます。
以下のセットアップでは、アプリケーションごとに新しいウィンドウの名前を簡単に定義できます。~
(ホームディレクトリ)にという名前のファイルを作成するだけwindow_names.txt
です。特定のウィンドウ名を設定するアプリケーションごとに、アプリケーションと目的のウィンドウ名の行を追加します:
アプリケーションごとにウィンドウ名を定義するテキストファイル
gnome-terminal Monkey eats
gedit Banana
rhythmbox if he runs out of peanuts
セットアップは、単純なバックグラウンドスクリプトから成り立っています。このスクリプトは非常に軽量であるため、パフォーマンスに顕著な影響を与えることはありません。
スクリプトが起動すると、ファイル~/window_names.txt
を読み取り、アプリケーションごとに設定を読み込みます。次に、新しく作成されたウィンドウを監視します。ファイルに定義されているアプリケーションのいずれかに属するウィンドウが表示される場合、それに応じてウィンドウ名が設定されます。
スクリプトは、wmctrl
との両方を使用しますxdotool
。
sudo apt-get install wmctrl
sudo apt-get install xdotool
スクリプトを空のファイルにコピーして、名前を付けて保存します setwindowname.py
ファイル~/window_names.txt
(正確な名前window_names.txt
)を作成し、次の形式でアプリケーションを追加します。
<application> <window_name>
例えば
gedit Text editor
ウィンドウ名にはスペースを含めることができます。
次のコマンドにより、ターミナルからスクリプトをテスト実行します。
python3 /path/to/setwindowname.py
すべてが期待どおりに機能する場合は、起動アプリケーションに追加します:ダッシュ>起動アプリケーション>追加
場合によっては、デスクトップがまだ完全にロードされていないときにスクリプトを開始すると、スクリプトが破損する場合があることに注意してください。その場合、スタートアップアプリケーションに追加するコマンドは次のようになります。
/bin/bash -c "sleep 15&&python3 /path/to/setwindowname.py"
#!/usr/bin/env python3
import subprocess
import time
import os
f = os.environ["HOME"]+"/"+"window_names.txt"
change = []
lines = open(f).read().splitlines()
for l in lines:
try:
change.append([l.split()[0], (" ").join(l.split()[1:])])
except IndexError:
pass
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
curr_1 = []
while True:
try:
curr_2 = get(["wmctrl", "-lp"]).splitlines()
new = [w for w in curr_2 if not w in curr_1]
for item in new:
line = item.split(); pid = line[2]
procs = get(["ps", "-e"]).splitlines()
match = [l for l in procs if pid in l][0]
for app in [app for app in change if app[0] in match]:
subprocess.Popen(["xdotool", "set_window", "--name", app[1], line[0]])
curr_1 = curr_2
time.sleep(0.3)
except:
pass
~/window_names.txt
を編集した場合、スクリプトを再起動する必要があります。sudo
。xdotool search --name "Rhythmbox" set_window --name "Music"
アプリケーションを開いて閉じた状態でコマンドを実行し、再起動(alt + f2 + r)を実行して機能するかどうかを確認しましたが、同じウィンドウタイトルが表示されたままです。
タイトルはアプリケーションの実行可能ファイルによって生成され、編集する簡単な方法はありません。
開いたアプリケーションのタイトルを変更する:
xdotool
にsudo apt-get install xdotool
pgrep myapp
(つまりpgrep rythmbox
)でアプリケーションのpidを取得しますウィンドウのタイトルを変更します(HERE_THE_PID
アプリケーションのプロセスIDに置き換えます):
xdotool search --onlyvisible --pid HERE_THE_PID --name "\a\b\c" set_window --name "$new_name"
カスタムタイトルを持つアプリケーションを起動するスクリプトを作成します。
change-title
次のコンテンツで呼び出されるbashスクリプトを作成します。
#!/bin/bash
## The new name of the window is the first argument passed to the script:
new_name="${1}"
## application is all arguments but the first (the title)
application=${@:2}
## Run the app in background and in quiet mode:
$application &> /dev/null &
## Get the pid of the app:
app_pid=$!
## Wait until the window appears:
until xdotool search --onlyvisible --pid $app_pid &> /dev/null; do sleep 0.01; done
## Change the window name:
xdotool \
search \
--onlyvisible \
--pid $app_pid \
--name "\a\b\c" \
set_window \
--name "$new_name"
## Comment this line to run the app in background:
wait $app_pid
実行可能にする chmod a+x change-title
./change-title "NewTitle" theapp --its-arguments
変更を永続的にするには:
gksudo gedit /usr/local/bin/custom-title
(fx。user / local / bin / music)sudo chmod a+x /usr/local/bin/custom-title
gksudo gedit /usr/share/applications/rhythmbox.desktop
このファイルには、次のような行があります(私の場合、行番号は35です)。
Exec=rhythmbox %U
これを作成されたファイルの名前に置き換えます:
Exec=custom title (fx. Exec=music)
「開く」機能で変更を有効にするには
gksudo gedit /usr/share/applications/rhythmbox-device.desktop
rhythmbox
以前の.desktopファイルで使用されていた名前に変更します。sudo kill rhythmbox
(概要)必要なファイルの概要
アプリケーションを完全に機能させるには/usr/share/applications
、終了時に3つの.desktopファイルが必要です。
music.desktop
またはアプリケーションに付けた名前
Exec=music
し、Hidden=true
(存在しない場合は、最後の1を追加します)
rhythmbox.desktop
とExec=rhythmbox %U
とHidden=true
rhythmbox-device.desktop
Exec=music --select-source %U
し、WITHOUT隠されたエントリ
これは、常に最後のファイルを開き、タイトルが常にあるべきことを意味します。唯一の方法は、Alt + F2 + Rでセッションを更新することです。
/usr/local/bin
もちろん、bashスクリプトが必要です。最終ノート:
--name "\a\b\c"
を修正するために使用している場合は、アプリケーション名に置き換えないでください!@Maud Konが${@:2}
要求するコードの説明:
$@
すべての定位置パラメーターを格納する配列です。${@:2}
意味:最初のパラメータを除くすべての位置パラメータこの方法でプログラムを呼び出すとしましょう:
awesome-program foo bar baz fooz
${@:1}
だろう foo bar baz fooz
${@:2}
だろう bar baz fooz
${@:3}
だろう baz fooz
${@:4}
だろう fooz
${@:5}
位置パラメータがないため、空です。$@
、${@}
および${@:1}
同じことです:すべての定位置パラメーター。
Thunarでこの非常に問題のある課題に遭遇しました。CompizScaleがThunarウィンドウのタイトルを「AnyFolder-File Manager」と表示し、不要な情報でスペースを使い果たしたとき、面倒になりました。
私は、上記の方法を試してみましたxdotool
し、wmctrl
しかしThunarでは、私は別のフォルダに移動するたびに、そのウィンドウのタイトルを変更するので、彼らは永続的ではありませんでした。そして、Thunarがタイトルを変更するたびにタイトルを元に戻すスクリプトをバックグラウンドに配置するのは誇張されたように感じました。
より簡単な解決策は、すべてのアプリケーションに付属する翻訳ファイルを使用することでした。パッケージにmsgfmt
含まれていると呼ばれるツールを使用して、翻訳ソースファイルを再コンパイルするだけですgettext
。これをgThumbで-ただ楽しみのために-実行しただけで、うまくいきます。
1.関係するアプリケーションのソースコードを取得します。
入力する
か、http://packages.ubuntu.comにアクセスして、ソースを取得し、次のフォルダーを探します。これには、プレーンテキスト言語ファイルが含まれています。あなたの言語を探してください。あなたがブラジルから来たとしましょう、そのファイルは$ sudo apt-get source APPLICATION
po
pt_BR.po
2.ファイルをニーズに合わせて変更します
。削除または変更するウィンドウのタイトル。Thunarではの場合、それはだった「ファイルマネージャ」とでpt_BR.po
私が見つかりました。
:. set window title
: ../thunar/thunar-window.c:3154 ../Thunar.desktop.in.in.h:3
: ../thunar/thunar-settings.desktop.in.h:1
msgid "File Manager"
msgstr "Gerenciador de arquivos"
msgid
アプリケーションが送信した信号であるmsgstr
何LANGPACKはに変換しますが。好きなもの、つまりにmsgstr
しますmsgstr "o_-"
。msgstr ""
、アプリケーションはにフォールバックすることを学びましたmsgid
。「空」にしたい場合は、空白を使用してください。またはドット。または任意のファンキーなASCIIシンボル。
3.コンパイラを入手する
前述のようにmsgfmt
、gettext
パッケージから必要なので、入力する必要があります
$ sudo apt-get install gettext
4.コンパイル
ターミナルを開き、変更したフォルダーに移動して、pt_BR.po
msgfmtにエラーがないかファイルをチェックさせます。問題が
$ msgfmt --check --check-accelerators=_ -o /dev/null pt_BR.po
なければ、先に進んでコンパイルします。
$ msgfmt -c -o pt_BR.mo pt_BR.po
5.ファイル
を配置する/ usr / share / locale / YOUR_LANGUAGE / LC_MESSAGES / または/ usr / share / locale-langpack / YOUR_LANGUAGE / LC_MESSAGES /にある元の翻訳の名前を確認して、そこにファイルを配置します。それは両方の場所に存在しない場合は、そのうちの一つで、それを入れて、ファイル名で少し実験:小文字、キャメルケースまたはのようなもの、すなわちgthumb.mo
かをYOUR-APP.mo
。
最初に元のバックアップを
作成してから、新しい翻訳をそこにコピーします
$ sudo cp /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo.BAK
$ sudo cp pt_BR.mo /usr/share/locale/YOUR_LANGUAGE/LC_MESSAGES/YOUR-APP.mo
YOUR_APPが実行されている場合、そのすべてのインスタンスを閉じます。
試して!
ヒント ENのローカライズ版でUbuntuを実行している場合は、*。poを使用し、変更されていないmsgid / msgstrのカップルをすべて削除またはコメント化して/ usr / share / locale / en / LC_MESSAGES /に配置します。
ソース:http :
//wiki.xfce.org/translations/translation_guidance_in_xfce
.desktop
.desktop
.desktop
ファイルを変更するため、一般的な質問でしたが、翻訳ファイルを使用して変更しました。あなたはそれを知っていますか?そして、「mu__Incoming-File Manager」があった「mu__Incoming- 」を読んだので、スクリプトソリューションにもう一度チャンスを与えることができます。「path / to / folder」のない静的なウィンドウタイトルを持つアプリケーションの場合、私のソリューションは正常に機能します。
以来、私自身の答えのアプリケーションの翻訳ファイルを使用しては私のためにいくつかの例には十分ではなかった、私は上に構築されたジェイコブVlijmのソリューションとウィンドウタイトルに特定の文字列を置き換えるために、彼のスクリプトを修正しました。これを別の回答として投稿しても大丈夫だと思います。クレジットに行くヤコブVlijmアイデアのために、スクリプトを設定します!
たとえば、のSome fancy website
代わりに読むのが好きですSome fancy website - Mozilla Firefox
。Compizスケールプラグインは- File manager
、他の文字列も削除したため、より明確になりました。
私が行った変更:
//
区切り文字として使用しwindow_names.txt
て、空白を許可しますwmctrl
代わりに使用xdotool
します(xdotoolは非ASCII文字をうまく処理しないため):wmctrl -i -r [WindowIdentifier] -N 'new Title'
変更後のwindow_names.txt
構造は次のとおりです。
[process name]//[exact text to replace]//[replacement text]
firefox// - Mozilla Firefox// (whitespace!)
thunar// - File Manager// ° xyz
gedit// - gedit// - 123
ポン引きされたスクリプト:
#!/usr/bin/env python3
import subprocess
import time
import os
f = os.environ["HOME"]+"window_names.txt"
change = []
lines = open(f).read().splitlines()
for l in lines:
try:
change.append(l.split("//"))
except IndexError:
pass
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
curr_1 = []
while True:
try:
curr_2 = get(["wmctrl", "-lp"]).splitlines()
new = [w for w in curr_2 if not w in curr_1]
for item in new:
line = item.split(None, 4)
winID = line[0] ; pid = line[2] ; currentTitle = line[4]
procs = get(["ps", "-e"]).splitlines()
match = [l for l in procs if pid in l][0]
for app in [app for app in change if app[0] in match]:
newTitle = str.replace(currentTitle, app[1], app[2])
subprocess.Popen(["wmctrl", "-i", "-r", winID, "-N", newTitle])
curr_1 = curr_2
time.sleep(0.3)
except:
pass
繰り返しますが、クレジットはJacob Vlijmのアイデアとスクリプトのセットアップに使用されます!