여기서는 KDE가 사용되지만 다른 데스크탑 환경에서도 작동하는 솔루션이 있을 수 있습니다. 저는 종종 아주 많은 창을 다루어야 합니다. 대부분의 창에는 많은 탭이 포함되어 있습니다(예: 탭이 많은 Dolphin 창, Firefox, Konsole 등). 창 제목은 현재 탭(대부분의 경우 유용함)에 따라 변경되지만 너무 많은 창을 사용하여 작업할 때는 창을 약간 정리하고 싶습니다.응용 프로그램에서 제공한 창 제목을 재정의하여 수동으로 창 이름을 바꾸는 기능. 하나의 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 등).
따라서 생산성 향상을 달성할 수 있는 한 가지 가능성은 다음과 같습니다.kwin
XMonad 보상 판매그리고태그 지정을 위해 XMonad 구성. 두 번째 링크에 설명된 XMonad 태그 지정 메커니즘은 키 조합을 바인딩하여 초점이 맞춰진 창에 태그를 지정할 수 있는 프롬프트를 엽니다. (XMonad의 구성은 실제로 Haskell 프로그램이므로 #xmonad에서 도움을 요청하세요.
편집하다:모든 사람에게 최소한 Tile WM을 시도해 볼 것을 권장하는 반면, XMonad는 종종 Tile 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