web-dev-qa-db-ja.com

KDEの任意のウィンドウのウィンドウタイトルを上書きし、カスタムウィンドウタイトルを設定します

ここでKDEを使用していますが、他のデスクトップ環境でも機能するソリューションがあるかもしれません。私はよくたくさんの窓を扱っています。ほとんどのウィンドウには多くのタブが含まれています(たとえば、多くのタブがあるDolphinウィンドウ、またはFirefox、Konsoleなど)。ウィンドウのタイトルは現在のタブに基づいて変更されます(ほとんどの場合、ほとんどの場合に役立ちます)が、非常に多くのウィンドウを操作するときは、少し整理して手動で再作成できます) -ウィンドウに名前を付け、アプリケーションが指定するウィンドウタイトルを上書きします。さまざまなタブを整理してグループ化するために使用したウィンドウを簡単に区別できるように、1つのFirefoxウィンドウを「研究」、もう1つのFirefoxウィンドウを「ドキュメント」と名付けたとします。

理想的には、ウィンドウのタイトルバーをクリックして簡単にカスタム名を付けることができればよいのですが、機能する限り、少し面倒な解決策で十分です。

私はもう試した wmctrl -r :SELECT: -T "Research"ただし、これは一時的にしか機能しません(たとえば、タブを切り替えるときなど、アプリケーションがタイトルを変更すると、タイトルが元に戻ります)。

14
Sean

あなたが探しているものは、ウィンドウタグ付け機能のように聞こえます。 KDEがこれをサポートしているとは思えませんが、他のWM( XMonad やDWMなど)はサポートしています。

したがって、この生産性の向上を実現する1つの可能性は、 XMonadのトレードkwin in および タグ付けを行うようにXMonadを構成する です。 2番目のリンクで説明されているXMonadタグ付けメカニズムは、キーの組み合わせをバインドして、フォーカスされたウィンドウにタグを付けることができるプロンプトを開くことです。 (XMonadの設定は実際にはHaskellプログラムなので、#xmonadで助けを求めることをためらわないでください。

編集:私はすべての人に少なくともタイリングWMを試すことをお勧めしますが、XMonadは一般的にWMを並べて表示すると、「シンプルフロート」モードがあります。タグ付けレイアウトと非タイルレイアウトをサポートする他のWMは確かにありますが、KDEとの相互運用性については知りません。

2
sr_

ウィンドウのタイトルを書き込み禁止に設定する方法はないので、多くのプログラムは既に発見したさまざまなアクションでタイトルをリセットするため、その問題の解決策はありません。

しかし、おそらくKDEとGnomeの人々にとっては素晴らしい提案です;-)

1
ktf

私は同じことを同じ理由で探していました。この70行のスクリプトでは、これに多くの時間を費やすことになりました。

それはどのように機能しますか?

  • スクリプトを開始します
  • タイトルを設定したいウィンドウをクリックします
  • 必要なタイトルを入力してください

次に、バックグラウンドでループを開始し、3秒ごとに確認し、変更された場合はタイトルを設定します。

警告:同じウィンドウで2回実行しないでください。スクリプトは完全ではありません。

スクリプト名の例:sticky-title

#!/bin/bash


# stop all instance of this script if "killall" provided as first argument
if [ "$1" == "killall" ]; then
  scriptname=$(basename "$0")
  pattern="[0-9]* /bin/bash .*$scriptname$"
  pids=$(ps ax -o pid,cmd | grep -P "$pattern" | sed 's/^ *//;s/ *$//' | grep -Pv ' grep|killall$' | cut -d" " -f1)
  if [ "$pids" != "" ]; then
    kill -TERM $pids
    echo "$(echo '$pids' | wc -l) instances stopped"
  else
    echo "None found to stop"
  fi
  exit 0
fi

# ask for window
echo -en "\nClick the window you want to set its title "
id=$(printf %i $(xwininfo | grep 'Window id' | cut -d" " -f4))

# fail if no window id
if [ "$id" == "" ]; then
  echo 'Error: Window id not found'
  exit 1
else
  echo "- Got it"
fi

# ask for title
read -e -p "Enter target title: " title

# fail if no title
if [ "$title" == "" ]; then
  echo "Error: No title to set"
  exit 1
fi

# define loop as a function, so we can run it in background
windowByIdSetStickyTitle() {
  local id title curr_title
  id="$1"
  title="$2"

  while true; do
    # get current title
    curr_title="$(xdotool getwindowname $id 2>/dev/null)"

    # exit if we can't find window anymore
    if [ $? -ne 0 ]; then
      echo "Window id does not exist anymore"
      break
    fi

    # update title if changed
    if [ "$curr_title" != "$title" ]; then
      xdotool set_window --name "$title" $id
    fi

    # needed else you will eat up a significant amount of cpu
    sleep 3
  done
}

# infinite loop
windowByIdSetStickyTitle $id "$title" &


# done
echo "Sticky title set"
exit 0
0
bksunday