Dwm là một phần mềm tuyệt vời của phần mềm tối giản. Chỉ thông qua 2000 dòng mã, các nhà phát triển của nó đã cung cấp một trình quản lý cửa sổ nhanh và nhẹ. Tuy nhiên, cách tiếp cận spartan về phát triển phần mềm này đi kèm với một cái giá. Một số tính năng đã bị loại bỏ để giảm kích thước chương trình.
Mặc dù vậy, có thể giới thiệu các tính năng mới cho dwm bằng cách vá mã nguồn của nó, vì dwm là dựa trên nguồn. Chỉ để thực hiện các cấu hình cơ bản, chúng tôi cần sửa đổi config.h, là một phần của mã nguồn của dwm.
Mặc dù điều đó thoạt đầu có vẻ phức tạp, nhưng việc vá lỗi dwm rất đơn giản khi chúng ta hiểu một vài điều về quy trình. Bài viết này nhằm mục đích dạy bộ kỹ năng cần thiết để vá thành công cài đặt dwm của riêng bạn và cung cấp năm bản vá hữu ích.
Bản vá là gì?
Các bản vá là những đoạn mã nhỏ có thể được chèn vào phần nội dung công việc lớn hơn. Điều này rất hữu ích khi cộng tác trong một dự án phần mềm lớn, vì nó cho phép các lập trình viên nhanh chóng xem các thay đổi do người khác thực hiện.
Các bản vá có thể đơn giản như một thay đổi nhỏ trong một lần để sửa lỗi hoặc một thay đổi nhiều tệp lớn giới thiệu một tính năng mới.
Cách vá mã nguồn cho dwm
Có nhiều cách để giới thiệu các bản vá cho mã nguồn. Cách phổ biến nhất để làm điều đó là thông qua lệnh git. Ví dụ:để giới thiệu một bản vá trong kho lưu trữ git, hãy nhập như sau:
git apply -3 path/to/the/patch.diff
-
apply
hàm sẽ cố gắng chèn nội dung của tệp vá vào tệp nguồn được chỉ định. -
-3
tùy chọn sẽ cố gắng khắc phục mọi mâu thuẫn và cho phép người dùng sửa bất kỳ lỗi nào trong quá trình vá lỗi.
Mặt khác, nếu chúng ta đang chỉnh sửa mã nguồn mà không có bất kỳ kiểm soát phiên bản nào, chúng ta có thể sử dụng chương trình vá GNU. Để chèn một bản vá bằng cách sử dụng đó, hãy nhập như sau:
patch -p1 < path/to/the/patch.diff
-
-p1
đảm bảo rằng tệp vá sẽ được gắn nhãn chính xác để chương trình vá sẽ chèn.
Tuy nhiên, khi vá dwm, đôi khi các chương trình này sẽ bị lỗi, vì chúng giả sử mã nguồn mà chúng tôi đang vá tương tự như cài đặt dwm cơ bản.
Điều này có nghĩa là khi chúng ta cài đặt các bản vá, chương trình vá lỗi sẽ càng khó chèn các bản vá đó. Do đó, điều quan trọng là phải hiểu cách tệp vá hoạt động để chúng tôi có thể tự cài đặt các bản vá theo cách thủ công.
Cách đọc một tệp bản vá
Một tệp vá bao gồm ba thứ:
- Tiêu đề hiển thị tệp nào mã sẽ được chèn vào
- Tiêu đề phụ hiển thị số dòng hoặc chức năng cần chèn
- Bản thân mã
Như chúng ta đã thảo luận ở trên, một tệp bản vá duy nhất có thể chứa nhiều đoạn mã nhằm chuyển đến nhiều tệp. Định dạng này cho phép chúng tôi phân phối một tệp duy nhất thay vì có một tệp vá duy nhất cho mọi tệp nguồn.
Cùng với đó, việc đọc tệp bản vá chỉ yêu cầu chúng ta hiểu cú pháp của các tiêu đề của nó. Sau khi chúng tôi biết điều đó, bản vá thực tế chỉ là vấn đề sao chép và dán mã.
Cú pháp Patch Header
Tiêu đề của bản vá chứa thông tin quan trọng về vị trí của tệp nguồn. Ví dụ:đây là tiêu đề cho bản vá tự động lưu trữ kích thước dwm.
diff --git a/dwm.c b/dwm.c index 0362114..e4e8514 100644 --- a/dwm.c +++ b/dwm.c
Các dòng đầu tiên, thứ ba và thứ tư chỉ ra rằng đây là sự khác biệt giữa hai phiên bản của tệp dwm.c. Nó cho chúng tôi biết rằng tệp mà chúng tôi sẽ sửa đổi là tệp “dwm.c”.
Tuy nhiên, chỉ biết những gì cần chỉnh sửa sẽ không giúp chúng tôi vá tệp nguồn. Chúng tôi vẫn cần biết vị trí trong tệp mà chúng tôi cần chèn mã. Đây là nơi chúng tôi có thể sử dụng các tiêu đề phụ của tệp vá.
Ví dụ:đây là một phân đoạn của cùng một bản vá tự động kích thước được mô tả ở trên:
@@ -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;
Đây có thể giống như một đoạn mã khó khăn, nhưng chúng ta chỉ cần xem xét ba điều sau đây:
- Dòng đầu tiên cho biết số dòng mà chúng ta cần chèn một đoạn mã. Trong ví dụ này, chúng ta cần chèn điều này vào dòng 92.
- Đối số thứ hai trên dòng đầu tiên -
struct Client {
- cho biết chức năng cụ thể mà chúng ta phải chỉnh sửa. Điều này rất hữu ích khi tệp nguồn đã được vá nhiều và các số dòng ở bên trái không xếp hàng nữa. - Điều cuối cùng cần xem là
+
và-
ký hiệu trong khối mã. Dấu trừ cho biết đó là dòng cần xóa và dấu cộng cho biết đó là dòng cần thêm.
Với điều đó, bây giờ chúng ta đã có hiểu biết cơ bản về cách vá các tệp nguồn. Bây giờ chúng ta có thể tiếp tục thảo luận về năm bản vá hữu ích cho dwm.
1. Systray
Không giống như hầu hết các môi trường máy tính để bàn, dwm không đi kèm với khay hệ thống theo mặc định. Khay hệ thống là một phần của màn hình, nơi một số ứng dụng có thể để lại biểu tượng với các chức năng của ứng dụng để nhanh chóng tương tác với chương trình đang chạy trong nền.
Bản vá này giới thiệu tính năng đó cho dwm. Sau khi được cài đặt, bản vá hệ thống sẽ phân bổ góc ngoài cùng bên phải của thanh dwm cho các chương trình khay hệ thống hiện tại. Nó cũng hỗ trợ thiết lập nhiều màn hình trong đó khay sẽ luôn xuất hiện trên màn hình hiện có con trỏ chuột.
2. Nguồn Xresources
Bản vá Xresources cho phép chương trình xrdb thiết lập cài đặt đồ họa cho dwm. Nó cho phép chúng tôi sử dụng tệp .Xresources để thay đổi màu sắc và phông chữ mà không cần biên dịch lại chương trình. Nó đặc biệt hữu ích cho những người dùng đã sử dụng cùng một tệp đó cho bảng màu đầu cuối của họ.
Hơn nữa, việc xrdb ra lệnh cho sự xuất hiện của dwm cũng cho phép chúng tôi sử dụng nhiều chủ đề. Chúng tôi có thể làm điều đó bằng cách sửa đổi tệp .Xresources cho bảng màu mà chúng tôi muốn và bật nó bằng cách tải lại dwm.
3. Tatami
Tatami là một cách bố trí cửa sổ thay thế cho dwm. Nó đại diện cho các cửa sổ trong màn hình như những viên gạch được xếp theo kiểu sàn truyền thống của Nhật Bản. Cách tiếp cận này khác với cách bố trí ngăn xếp và chính truyền thống, trong đó mỗi cửa sổ khác với cửa sổ chính sẽ mỏng hơn theo chiều dọc, do đó làm cho mỗi cửa sổ trong ngăn xếp không thể đọc được.
Bố cục tatami đặc biệt hữu ích khi xử lý đồng thời bốn đến năm cửa sổ, vì nó mang lại cho mỗi cửa sổ một không gian màn hình rộng rãi cho người dùng để chúng tôi đọc.
4. Focus Master
Cách dwm sắp xếp các cửa sổ tương tự như việc xếp các khối trong một ngăn xếp. Mỗi cửa sổ được tạo mới được đặt trên đầu cửa sổ trước đó. Điều này tạo ra một trật tự tuyến tính giữa các cửa sổ và cho phép chúng tôi biết cửa sổ nào đến trước.
Tuy nhiên, một hạn chế của thiết kế này là nó không cho phép chúng tôi tự do chọn cửa sổ chính từ ngăn xếp. Để chọn cái chính, chúng ta cần chọn từng cửa sổ cho đến khi chúng ta đạt đến khối cao nhất. Bản vá này thay đổi hành vi này và cho phép chúng tôi chọn cửa sổ chính hiện tại từ bất kỳ đâu trong ngăn xếp.
Nó đặc biệt hữu ích khi xử lý nhiều cửa sổ, vì nó cho phép chúng tôi tự động chọn cái chính trong ngăn xếp cửa sổ thay vì xoay vòng đến từng cửa sổ hiện tại.
5. dwmc
Việc sửa đổi bất kỳ khía cạnh nào của dwm yêu cầu chúng tôi phải biên dịch lại chương trình bất cứ khi nào chúng tôi muốn áp dụng các thay đổi của mình. Điều này bao gồm, trong số những thứ khác, bảng màu và hành vi mặc định.
dwmc là một bản vá đơn giản cho phép chúng tôi thay đổi hành vi của dwm thông qua chương trình khách hàng. Cách tiếp cận này tương tự như cách bspwm sử dụng bspc để sửa đổi cài đặt của bspwm. Mặc dù dwmc đơn giản hơn nhiều so với bspc, nhưng nó vẫn có một số cài đặt hữu ích mà chúng ta có thể sử dụng và sửa đổi.
Ví dụ, một chức năng chúng ta có thể sử dụng trong dwmc là thanh chuyển đổi. Chạy thanh chuyển đổi dwmc cho phép chúng tôi bật và tắt thanh dwm một cách tự động. Điều này làm cho dwmc hữu ích khi tạo các tập lệnh thực hiện hành vi cửa sổ tùy chỉnh.
Xin chúc mừng! Bây giờ bạn đã có hiểu biết cơ bản về cách hoạt động của bản vá mã cũng như năm bản vá hữu ích mà bạn áp dụng trong cài đặt dwm của mình. Nếu bạn đang tìm kiếm trải nghiệm tối thiểu tương tự trong trình duyệt, hãy xem hướng dẫn này.
Câu hỏi thường gặp
1. Các bản vá lỗi dwm có an toàn để sử dụng không?
Đúng! Một số nhà bảo trì kiểm tra các bản vá có trong trang web tệ hại. Điều này đảm bảo rằng tất cả các bản vá trong trang web đều hoạt động cho phiên bản dwm mà nó được viết cho.
2. Tôi đang sử dụng git apply, nhưng bản vá của tôi không thành công và dwm không biên dịch. Tôi nên làm gì?
Điều này có thể xảy ra do một số điều. Lý do phổ biến nhất là các tiêu đề git không được xóa trong tệp nguồn. Điều này là tương đối dễ dàng để sửa chữa. Chúng tôi cần xóa tiêu đề và tự áp dụng bản vá theo cách thủ công.
Khi bạn mở tệp nguồn, bạn sẽ thấy một dòng có nhãn HEAD
. Điều này cho biết thời điểm bắt đầu sửa đổi. Tiếp theo là chức năng cần được sửa đổi. Bạn sẽ cần phải xóa dòng đó và thực hiện vá theo cách thủ công. Trong đây, cũng sẽ có +
và -
ký hiệu ở phía bên trái của mã để hướng dẫn bạn những gì cần thay đổi.
3. Tôi phải làm gì khi áp dụng bản vá thành công, nhưng dwm không muốn biên dịch và đang yêu cầu thiếu các biến hoặc khai báo?
Chương trình vá lỗi không vá tệp config.h. Theo mặc định, các bản vá lỗi sẽ chỉnh sửa tệp config.def.h để tránh bất kỳ xung đột nào với cấu hình hiện tại.
Tuy nhiên, điều đó có nghĩa là tệp config.h sẽ không tải với các giá trị cấu hình phù hợp cho bản vá cụ thể đó. Để khắc phục điều này, bạn cần đưa các thay đổi trong tệp config.def.h vào tệp config.h của mình.