Dwm은 뛰어난 미니멀리스트 소프트웨어입니다. 2000줄의 코드를 통해 개발자는 빠르고 가벼운 창 관리자를 제공할 수 있었습니다. 그러나 소프트웨어 개발에 대한 이러한 스파르타 접근에는 대가가 따랐습니다. 프로그램 크기를 줄이기 위해 일부 기능이 삭제되었습니다.
그럼에도 불구하고 dwm은 소스 기반이므로 소스 코드를 패치하여 dwm에 새로운 기능을 도입할 수 있습니다. 기본적인 설정을 하기 위해서는 dwm의 소스코드의 일부인 config.h를 수정해야 합니다.
처음에는 복잡해 보일 수 있지만 dwm 패치는 프로세스에 대한 몇 가지 사항을 이해하면 간단합니다. 이 기사는 자신의 dwm 설치를 성공적으로 패치하고 5가지 유용한 패치를 제공하는 데 필요한 기술을 가르치는 것을 목표로 합니다.
패치란 무엇입니까?
패치는 더 큰 작업에 삽입할 수 있는 작은 코드 조각입니다. 이것은 프로그래머가 다른 사람들이 만든 변경 사항을 빠르게 볼 수 있도록 해주기 때문에 대규모 소프트웨어 프로젝트에서 공동 작업할 때 유용합니다.
패치는 버그를 수정하기 위한 한 줄짜리 작은 변경이나 새로운 기능을 도입하는 대규모 다중 파일 변경만큼 간단할 수 있습니다.
dwm용 소스 코드를 패치하는 방법
소스 코드에 패치를 도입하는 방법에는 여러 가지가 있습니다. 가장 일반적인 방법은 git 명령을 사용하는 것입니다. 예를 들어, git 저장소에 패치를 도입하려면 다음을 입력하십시오.
git apply -3 path/to/the/patch.diff
apply
함수는 표시된 소스 파일에 패치 파일의 내용을 삽입하려고 시도합니다.-3
옵션은 불일치를 수정하려고 시도하고 사용자가 패치 프로세스에서 실수를 수정할 수 있도록 합니다.
반면에 버전 관리 없이 소스 코드를 편집하는 경우 GNU 패치 프로그램을 사용할 수 있습니다. 이를 사용하여 패치를 삽입하려면 다음을 입력하십시오.
patch -p1 < path/to/the/patch.diff
-p1
옵션을 사용하면 패치 프로그램이 삽입할 패치 파일의 레이블이 올바르게 지정됩니다.
그러나 dwm을 패치할 때 우리가 패치하는 소스 코드가 기본 dwm 설치와 유사하다고 가정하기 때문에 이러한 프로그램이 실패하는 경우가 있습니다.
이것은 우리가 패치를 설치할 때 패치 프로그램이 해당 패치를 삽입하는 것이 더 어려워진다는 것을 의미합니다. 이 때문에 패치 파일이 어떻게 작동하는지 이해하는 것이 중요하므로 패치를 직접 수동으로 설치할 수 있습니다.
패치 파일을 읽는 방법
패치 파일은 다음 세 가지 항목으로 구성됩니다.
- 코드를 삽입해야 하는 파일을 보여주는 헤더
- 삽입할 줄 번호 또는 함수를 보여주는 부제
- 코드 자체
위에서 논의한 바와 같이 단일 패치 파일에는 여러 파일로 이동할 여러 코드 스니펫이 포함될 수 있습니다. 이 형식을 사용하면 모든 소스 파일에 대해 단일 패치 파일을 사용하는 대신 단일 파일을 배포할 수 있습니다.
이를 통해 패치 파일을 읽으려면 헤더 구문을 이해하기만 하면 됩니다. 알고 나면 실제 패치는 코드를 복사하여 붙여넣기만 하면 됩니다.
패치 헤더 구문
패치 헤더에는 소스 파일의 위치에 관한 중요한 정보가 포함되어 있습니다. 예를 들어, 이것은 dwm autoresize 패치의 헤더입니다.
diff --git a/dwm.c b/dwm.c index 0362114..e4e8514 100644 --- a/dwm.c +++ b/dwm.c
첫 번째, 세 번째 및 네 번째 줄은 이것이 dwm.c 파일의 두 버전 간의 차이임을 나타냅니다. 수정할 파일이 "dwm.c" 파일임을 알려줍니다.
그러나 무엇을 편집할지 아는 것만으로는 소스 파일을 패치하는 데 도움이 되지 않습니다. 우리는 여전히 코드를 삽입해야 하는 파일의 위치를 알아야 합니다. 여기에서 패치 파일의 부제목을 사용할 수 있습니다.
예를 들어, 이것은 위에서 설명한 동일한 자동 크기 조정 패치의 세그먼트입니다.
@@ -92,7 +92,7 @@ struct Client { int basew, baseh, incw, inch, maxw, maxh, minw, minh; int bw, oldbw; unsigned int tags; - int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, needresize; Client *next; Client *snext; Monitor *mon;
이것은 어려운 코드처럼 보일 수 있지만 여기서는 세 가지만 살펴봐야 합니다.
- 첫 번째 줄은 코드 조각을 삽입해야 하는 줄 번호를 나타냅니다. 이 예에서는 이것을 92행에 삽입해야 합니다.
- 첫 번째 줄의 두 번째 인수 –
struct Client {
– 편집해야 하는 특정 기능을 알려줍니다. 이것은 소스 파일이 이미 많이 패치되었고 왼쪽의 줄 번호가 더 이상 정렬되지 않을 때 유용합니다. - 마지막으로 살펴볼 것은
+
입니다. 및-
코드 블록의 기호. 빼기 기호는 제거할 줄을 나타내고 더하기 기호는 추가할 줄을 나타냅니다.
이를 통해 이제 소스 파일을 패치하는 방법에 대한 기본적인 이해가 생겼습니다. 이제 dwm에 대한 5가지 유용한 패치에 대해 논의할 수 있습니다.
1. 시스템 트레이
대부분의 데스크탑 환경과 달리 dwm은 기본적으로 시스템 트레이와 함께 제공되지 않습니다. 시스템 트레이는 일부 애플리케이션이 백그라운드에서 실행 중인 프로그램과 빠르게 상호작용하기 위해 앱의 기능과 함께 아이콘을 남길 수 있는 데스크탑의 한 부분입니다.
이 패치는 해당 기능을 dwm에 도입합니다. 일단 설치되면 시스템 트레이 패치는 dwm 막대의 가장 오른쪽 모서리를 현재 시스템 트레이 프로그램에 할당합니다. 또한 현재 마우스 포인터가 있는 모니터에 트레이가 항상 표시되는 다중 모니터 설정도 지원합니다.
2. 외부 리소스
Xresources 패치를 사용하면 xrdb 프로그램이 dwm에 대한 그래픽 설정을 지정할 수 있습니다. .Xresources 파일을 사용하여 프로그램을 다시 컴파일하지 않고도 색상과 글꼴을 변경할 수 있습니다. 터미널 색 구성표에 동일한 파일을 이미 사용하고 있는 사용자에게 특히 유용합니다.
또한 xrdb가 dwm의 모양을 지정하면 여러 테마를 사용할 수도 있습니다. 원하는 색 구성표에 대한 .Xresources 파일을 수정하고 dwm을 다시 로드하여 활성화하면 됩니다.
3. 다다미
Tatami는 dwm의 대체 창 레이아웃입니다. 그것은 화면의 창을 전통적인 일본 바닥에 배열된 타일로 나타냅니다. 이 접근 방식은 마스터 이외의 각 창이 세로로 더 얇아져 스택의 각 창을 읽을 수 없게 만드는 기존 마스터 및 스택 레이아웃과 다릅니다.
다다미 레이아웃은 사용자가 읽을 수 있도록 각 창에 충분한 화면 공간을 제공하므로 4~5개의 창을 동시에 처리할 때 특히 유용합니다.
4. 포커스 마스터
dwm이 창을 정렬하는 방식은 블록을 스택에 배치하는 것과 유사합니다. 새로 생성된 각각의 창은 이전 창 위에 배치됩니다. 이렇게 하면 창 사이에 선형 순서가 만들어지고 어떤 창이 먼저 왔는지 알 수 있습니다.
그러나 이 디자인의 한 가지 한계는 스택에서 마스터 창을 자유롭게 선택할 수 없다는 것입니다. 마스터를 선택하려면 가장 높은 블록에 도달할 때까지 모든 창을 선택해야 합니다. 이 패치는 이 동작을 변경하고 스택의 어느 곳에서나 현재 마스터 창을 선택할 수 있도록 합니다.
여러 창을 처리할 때 특히 유용합니다. 존재하는 각 창으로 순환하는 대신 창 스택에서 마스터를 자동으로 선택할 수 있기 때문입니다.
5. dwmc
dwm의 모든 측면을 수정하려면 변경 사항을 적용할 때마다 프로그램을 다시 컴파일해야 합니다. 여기에는 무엇보다도 색 구성표와 기본 동작이 포함됩니다.
dwmc는 클라이언트 프로그램을 통해 dwm의 동작을 변경할 수 있는 간단한 패치입니다. 이 접근 방식은 bspwm이 bspc를 사용하여 bspwm의 설정을 수정하는 방식과 유사합니다. dwmc는 bspc보다 훨씬 간단하지만 여전히 사용하고 수정할 수 있는 유용한 설정이 많이 있습니다.
예를 들어 dwmc에서 사용할 수 있는 기능 중 하나는 토글바입니다. dwmc 토글바를 실행하면 dwm 바를 동적으로 활성화 및 비활성화할 수 있습니다. 이것은 사용자 정의 창 동작을 수행하는 스크립트를 작성할 때 dwmc를 유용하게 만듭니다.
축하합니다! 이제 코드 패치가 작동하는 방식과 dwm 설치에 적용할 5가지 유용한 패치에 대한 기본적인 이해가 생겼습니다. 브라우저에서 이와 유사한 최소한의 경험을 찾고 있다면 이 튜토리얼을 확인하십시오.
자주 묻는 질문(FAQ)
1. dwm 패치를 사용해도 안전합니까?
예! 많은 유지 관리자가 suckless 웹 사이트에 있는 패치를 확인합니다. 이렇게 하면 웹 사이트의 모든 패치가 작성된 dwm 버전에서 작동합니다.
2. git apply를 사용하고 있지만 패치가 실패하고 dwm이 컴파일되지 않습니다. 어떻게 해야 하나요?
이것은 여러 가지 이유로 인해 발생할 수 있습니다. 가장 일반적인 이유는 git 헤더가 소스 파일에서 제거되지 않았기 때문입니다. 이것은 비교적 쉽게 고칠 수 있습니다. 헤더를 제거하고 패치를 수동으로 적용해야 합니다.
소스 파일을 열면 HEAD
라는 줄이 표시됩니다. . 이것은 수정의 시작을 나타냅니다. 그 다음에 수정해야 할 기능이 있습니다. 해당 라인을 제거하고 수동으로 패치를 수행해야 합니다. 여기에는 +
도 있습니다. 및 -
코드 왼쪽에 있는 기호로 무엇을 변경해야 하는지 안내해 드립니다.
3. 패치를 성공적으로 적용했는데 dwm이 컴파일을 원하지 않고 누락된 변수나 선언을 요구하면 어떻게 합니까?
패치 프로그램이 config.h 파일을 패치하지 않았습니다. 기본적으로 패치는 현재 구성과의 충돌을 피하기 위해 config.def.h 파일을 편집합니다.
그러나 이는 config.h 파일이 해당 특정 패치에 대한 올바른 구성 값으로 로드되지 않음을 의미합니다. 이 문제를 해결하려면 config.def.h 파일의 변경 사항을 config.h 파일에 적용해야 합니다.