ここではKDEが使用されていますが、他のデスクトップ環境でも機能するソリューションがあるかもしれません。私はしばしば非常に多くのウィンドウを扱う必要があります。ほとんどのウィンドウには多くのタブが含まれています(たとえば、タブ付きのDolphinウィンドウ、Firefox、Konsoleなど)。ウィンドウのタイトルは現在のタブ(ほとんどの場合役に立ちます)によって変わりますが、あまりにも多くのウィンドウで作業するときは、ウィンドウを少し整理したいと思います。アプリケーションによって提供されたウィンドウのタイトルをオーバーライドして手動でウィンドウの名前を変更する機能。 1 つの Firefox ウィンドウ名を「Research」と指定し、別の Firefox ウィンドウの名前を「Documents」と指定することで、複数のタブを整理およびグループ化するために使用するウィンドウを簡単に区別できます。
理想的には、ウィンドウのタイトルバーをクリックして簡単にカスタム名を指定できますが、機能する限り、もう少し面倒なソリューションを選択します。
これを試しましたが、wmctrl -r :SELECT: -T "Research"
これは一時的にのみ機能します(たとえば、タブを切り替えるとアプリがタイトルを変更したときにタイトルが再表示されます)。
答え1
私は同じ問題に直面しました。
だから、ショートカットにバインドされるシェルスクリプトを作成しました。
ホットキーを押すと、現在アクティブなウィンドウ(フォーカスがあるウィンドウ)のウィンドウIDを取得します。
これにより、ウィンドウに含めるタイトルを入力できるポップアップダイアログボックスが表示されます。
その後、ウィンドウ名が変更されるたびに、目的のタイトルに戻ります。
このスクリプトを使用するには、次のものが必要です。
shell(bashが私に頭痛を与えた
fish
ので、bashの代わりにfishで書いた)kdialog
スクリプトをショートカットにバインドする方法(操作するには、次のものを追加するだけです)
。xbindkeys
"[PATH TO SCRIPT]/[NAME OF SCRIPT]" Mod4 + t
(例:ウィンドウキー+ t)
をmy /home/o1/.xbindkeysrc
)
ありがとうこの男、魔法のxpropに関する情報を提供した人です。
(1年前頃でしたが、今日になってこそ台本を書き始めました。xD)
PS。初心者がこの答えを見つけましたが、使い方がわからない場合は、私に連絡してください。ご案内いたします。 ^^
-t
title_i_want
編集:forおよびforスイッチを介してコマンドライン-w
で使用できるように更新しましたwindow_id
。
スクリプトは次のとおりです。
#!/usr/local/bin/fish
# this block is so you can use it from the command line with -t and -w
if test "$argv" != "" -a (math (count $argv)%2 == 0)
for i in (seq 1 (count $argv))
if test $argv[$i] = '-t'
set title_i_want $argv[(math 1 + $i)]
else if test $argv[$i] = '-w'
set window_id $argv[(math 1 + $i)]
end
end
if not test $window_id
echo "YOU DIDN'T ENTER A `window_id` WITH `-w`,
SO MAKE SURE THE WINDOW YOU WANT HAS FOCUS
TWO SECONDS FROM NOW!"
sleep 2
end
end
# get the id of the currently focused window
if not test $window_id
set window_id (xprop -root _NET_ACTIVE_WINDOW | grep -P -o "0x\w+")
end
# get the title to force on that window
if not test $title_i_want
set title_i_want (kdialog --title "entitled" --inputbox "type the title you want and hit enter.
to stop renaming,
just enter nothing and hit esc")
end
# this bit is needed for a kludge that allows window renaming
set has_renamed_before "FALSE"
set interrupt_message "WAIT WAIT I WANT A TURN BLOO BLOO BLEE BLUH BLOO" # hopefully i never want to actually use that as a title xD
xprop -f _NET_WM_NAME 8u -set _NET_WM_NAME $interrupt_message -id $window_id
# take the output of xprop
# pipe it into a while loop
# everytime it outputs a new line
# stuff it into a variable named "current_title"
xprop -spy _NET_WM_NAME -id $window_id | while read current_title
# cut off extraneous not-the-title bits of that string
set current_title (echo $current_title | grep -P -o '(?<=_NET_WM_NAME\(UTF8_STRING\) = ").*(?="\z)')
# if the current title is the interrupt message
# AND
# this script has renamed the window at least once before
# then we wanna let the new name take over
if test $current_title = $interrupt_message -a $has_renamed_before = "TRUE"
exit
# if title_i_want is an empty string, exit
else if test $title_i_want = ""
xprop -f _NET_WM_NAME 8u -set _NET_WM_NAME "WIDNOW WILL START RENAMING ITSELF AS NORMAL" -id $window_id
exit
# otherwise just change the title to what i want
else if test $current_title != $title_i_want
xprop -f _NET_WM_NAME 8u -set _NET_WM_NAME "$title_i_want" -id $window_id
set has_renamed_before "TRUE"
end
end
編集:私は実際にこのFishスクリプトを使用しなくなりました。
Rubyで書き直しました。
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'trollop'
opts = Trollop.options do
opt :title_i_want, "title_i_want", default: ""
opt :bluh, "write to bluh", default: nil
opt :copy_title, "copy_title", default: nil
# TODO - AUTO OPTION
opt :auto, "auto", default: nil
end
title_i_want = opts[:title_i_want]
def get_current_wid
`xprop -root _NET_ACTIVE_WINDOW`[/0x\w+/]
end
def with_current_title wid, &block
IO.popen("xprop -spy _NET_WM_NAME _NET_WM_ICON_NAME -id #{wid}") do |io|
loop do
line = io.gets
exit if line.nil?
line = line.strip
# cut off extraneous not-the-title bits of that string
current_title = line[/(?:_NET_WM_(?:ICON_)?NAME\(UTF8_STRING\) = ")(.*)("$)/, 1]
block.call current_title unless current_title.nil?
end
end
end
def get_current_title wid
IO.popen("xprop _NET_WM_NAME _NET_WM_ICON_NAME -id #{wid}") do |io|
line = io.gets.strip
# cut off extraneous not-the-title bits of that string
current_title = line[/(?:_NET_WM_(?:ICON_)?NAME\(UTF8_STRING\) = ")(.*)("$)/, 1]
return current_title unless current_title.nil?
end
end
if opts[:copy_title]
# require "muflax"
p 1
wid = get_current_wid
`echo -n '#{get_current_title wid}(WID: #{wid})'|xclip -selection c`
exit
end
if opts[:bluh]
require "muflax"
loop do
# p 1 #db
wid = get_current_wid
# p 2 #db
File.open "bluh", "a+" do |f| f.puts get_current_title wid end
while wid == get_current_wid
# puts "..." #db
sleep 1
end
end
exit
end
#> 1A - from terminal - give title_i_want
if not title_i_want.empty?
#> 1A.1 - get current wid - assume it's the terminal_wid
terminal_wid = get_current_wid
#> 1A.2 - wait for wid to change
while get_current_wid == terminal_wid
puts "focus the window you want to title «#{title_i_want}»..."
sleep 1
end
#> 1A.3 - set new wid to target TWID
TWID = get_current_wid
#> 1B - from hotkey (or just sleeping) - no give title_i_want
else
#> 1B.1 - set current wid to target TWID
TWID = get_current_wid
#> 1B.2 - get title_i_want (with kdialog)
#> 1B.2.1 - default to current title
with_current_title TWID do |current_title|
# v :current_title #db
default_title = current_title
sublime_match = /
(?<beginning>.*?) # beginning might be...
# path
# untitled, find results, other useless junk
#
答え2
あなたが探しているものは次のとおりですウィンドウ表示施設。 KDEがこれをサポートしているかどうか疑問です。次のような他のWMもサポートしています。XモナードまたはDWMなど)。
したがって、生産性を向上させるための1つの可能性は次のとおりです。kwin
XMonad報酬の販売そしてタグ付けのためのXMonadの設定。 2番目のリンクで説明されているXMonadタグ付けメカニズムは、キーの組み合わせをバインドしてフォーカスされたウィンドウにタグを付けるように求めるプロンプトを開きます。 (XMonadの設定は実際にHaskellプログラムなので、#xmonadで助けを求めてください。
編集する:誰もが少なくともタイルWMを試してみることをお勧めしますが、XMonadはしばしばタイルWMと呼ばれますが、「単純な浮動」モードがあることを指摘することを忘れていました。タグ付きでタイルのないレイアウトをサポートする他のWMもありますが、KDEとの相互運用性は不明です。
答え3
ウィンドウタイトルを書き込み禁止に設定できないため、問題は解決されません。すでに知っているように、多くのプログラムが他のタスクに応じてタイトルをリセットするためです。
しかし、KDEとGnomeのユーザーにとって良い提案かもしれません;-)
答え4
スクリプトで名前を変更するウィンドウを起動できる場合は、単純なバージョンがあります(その後、メニュー項目を作成できます)。スクリプトは、起動されたプログラムのPIDに基づいてウィンドウを識別します。 2秒ごとにタイトルをリセットし、PIDからウィンドウIDを取得できない場合は終了します。たとえば、vlcを使用します。
#!/bin/bash
vlc &
VLCPID=$!
sleep 1 # Wait for VLC to build its window
while [ /bin/true ]
do
WINDOW_ID=$(wmctrl -l -p | awk -v vpid=$VLCPID '$3 == vpid{ print $1 }')
if [ -z ${WINDOW_ID} ]; then
echo "No window ID found. Exiting."
exit
fi
wmctrl -i -r ${WINDOW_ID} -N "new window title"
sleep 2
done