xterm
동일한 리소스를 및 에 적용하려면 uxterm
현재 내 구성 파일에 별도의 중복 항목이 있어야 합니다.
XTerm*scrollBar: true
UXTerm*scrollBar: true
예를 들어 와일드카드 클래스 이름은 두 가지를 모두 선택하지 않습니다.
! This works for xterm but not uxterm
*XTerm*scrollBar: true
특정 리소스를 두 프로그램(어쨌든 사실상 동일한 프로그램)에 사용할 수 있게 하면서 다른 리소스를 하나 또는 다른 프로그램에 구체적으로 적용할 수 있는 기능을 유지하는 방법이 있습니까(항상 xterm
start up 전달 제외 xterm -class UXTerm
)? 어떤 아이디어라도 감사드립니다.
답변1
사용 중인 X 리소스에서는 와일드카드가 작동하지 않습니다.전반적인 상황쉘의 표현식. 이는 위젯 계층 구조의 0개 이상의 수준을 대체하는 줄임표 "..."와 비슷합니다.
클래스 이름을 제거하기 위해 를 사용하는 경우 *scrollBar:true
xterm 및 uxterm(및 해당 리소스 이름을 사용하는 다른 응용 프로그램)에서 작동합니다.
답변2
여러 XTerm 구성을 원하고 호출 시 하나를 선택하는 경우 단일 클래스와 여러 인스턴스 이름을 사용할 수 있습니다.
XTerm.VT100.background: Black
XTerm.VT100.scrollBar: true
light.VT100.background: White
이러한 정의에 따르면 xterm -name light
배경은 흰색이고 스크롤 막대가 있습니다. 이 방법으로 2계층 구성을 얻을 수 있지만 3계층을 원하는 경우에는 도움이 되지 않습니다.
이 특별한 경우에는 다음을 사용할 수 있습니다.
?.VT100.background: Black
Light.VT100.background: White
사실 xterm은 VT100
위젯이 있는 유일한 애플리케이션이기 때문입니다.
일반적으로 기본 X 리소스 구문만으로는 이 작업을 수행할 수 없습니다. 와일드카드는 구성 요소 내의 개별 문자가 아닌 구성 요소와 일치합니다. "."으로 끝나는 이름 이 아니라 "계층 구조의 모든 수준에서"를 *XTerm
의미합니다 .XTerm
XTerm
해결책은 의존하는 것입니다.전처리기. xrdb
(X 리소스를 로드하는 유틸리티) 사용C 전처리기( cpp
) 기본적으로. 불행하게도 cpp는 X 리소스 구문에 그다지 편리하지 않습니다. 특히 cpp 매크로 확장에는 개행 문자가 있을 수 없으므로 여러 X 리소스를 확장하도록 매크로를 정의할 수 없습니다. 그러나 포함 파일을 사용하여 cpp 관련 문제를 해결할 수 있습니다. XTerm
및 에 대한 공통 정의를 UXTerm
별도의 파일 에 넣습니다 xterm-common.Xresources
. 기본 파일에 각 클래스 이름에 대해 한 번씩, 두 번 .Xresources
포함합니다 .xterm-common.Xresources
#include ".config/x11/xterm-common-Xresources"
#define XTerm UXTerm
#include ".config/x11/xterm-common-Xresources"
#undef XTerm
XTerm.font: my XTerm font
UXTerm.font: my UXTerm font
나는 사용한다m4내 X 리소스를 전처리합니다. 즉, 기본 로딩에 의존할 수 없습니다 ~/.Xresources
. 즉, xrdb -cpp m4 ~/path/to/my/Xresources
직접 호출 .xinitrc
하거나 명시적으로 호출합니다 .xsession
. XTerm
및에 대한 일부 리소스를 적용하는 코드가 있습니다 UXTerm
.
define(`XTERM_class_settings', `
…
') dnl end of `XTERM_class_settings'
XTERM_class_settings
define(`XTerm', `UXTerm')
XTERM_class_settings
undefine(`XTerm')