Dwm เป็นซอฟต์แวร์แนวมินิมอลที่ยอดเยี่ยม ด้วยโค้ดเพียง 2,000 บรรทัด นักพัฒนาจึงสามารถจัดเตรียมตัวจัดการหน้าต่างที่รวดเร็วและใช้งานง่าย แนวทางสปาร์ตันในการพัฒนาซอฟต์แวร์นี้มาพร้อมกับราคา คุณลักษณะบางอย่างลดลงเพื่อลดขนาดโปรแกรม
แม้จะเป็นเช่นนั้น ก็เป็นไปได้ที่จะแนะนำคุณสมบัติใหม่ให้กับ dwm โดยการแพตช์ซอร์สโค้ดของมัน เนื่องจาก dwm เป็นแบบอิงตามแหล่งที่มา เพื่อทำการกำหนดค่าพื้นฐาน เราต้องแก้ไข config.h ซึ่งเป็นส่วนหนึ่งของซอร์สโค้ดของ dwm
แม้ว่ามันอาจจะดูซับซ้อนในตอนแรก แต่การแพตช์ dwm นั้นง่ายเมื่อเราเข้าใจบางสิ่งเกี่ยวกับกระบวนการนี้ บทความนี้มีจุดมุ่งหมายเพื่อสอนชุดทักษะที่จำเป็นในการติดตั้ง dwm ของคุณเองให้สำเร็จและจัดเตรียมแพตช์ที่มีประโยชน์ห้ารายการ
แพตช์คืออะไร
แพทช์เป็นส่วนเล็กๆ ของโค้ดที่สามารถแทรกลงในเนื้อหาที่ใหญ่ขึ้นได้ สิ่งนี้มีประโยชน์เมื่อทำงานร่วมกันในโครงการซอฟต์แวร์ขนาดใหญ่ เนื่องจากช่วยให้โปรแกรมเมอร์เห็นการเปลี่ยนแปลงของผู้อื่นได้อย่างรวดเร็ว
แพทช์สามารถทำได้ง่ายๆ เหมือนกับการเปลี่ยนแปลงเพียงเส้นเดียวเล็กๆ เพื่อแก้ไขจุดบกพร่องหรือการเปลี่ยนแปลงหลายไฟล์ขนาดใหญ่ที่แนะนำคุณลักษณะใหม่
วิธีแก้ไขซอร์สโค้ดสำหรับ dwm
มีหลายวิธีในการแนะนำแพตช์ให้กับซอร์สโค้ด วิธีที่ใช้บ่อยที่สุดคือการใช้คำสั่ง git ตัวอย่างเช่น หากต้องการแนะนำโปรแกรมแก้ไขในที่เก็บ git ให้พิมพ์ดังต่อไปนี้:
git apply -3 path/to/the/patch.diff
- ที่
apply
ฟังก์ชันจะพยายามแทรกเนื้อหาของไฟล์แพตช์ในไฟล์ต้นฉบับที่ระบุ - The
-3
ตัวเลือกจะพยายามแก้ไขความไม่สอดคล้องกันและอนุญาตให้ผู้ใช้แก้ไขข้อผิดพลาดในกระบวนการแพตช์
ในทางกลับกัน หากเรากำลังแก้ไขซอร์สโค้ดโดยไม่มีการควบคุมเวอร์ชันใดๆ เราก็สามารถใช้โปรแกรมแก้ไข GNU ได้ หากต้องการแทรกโปรแกรมแก้ไขโดยใช้สิ่งนั้น ให้พิมพ์ดังต่อไปนี้:
patch -p1 < path/to/the/patch.diff
- The
-p1
ตัวเลือกช่วยให้แน่ใจว่าไฟล์แพตช์จะถูกติดป้ายกำกับอย่างถูกต้องเพื่อให้โปรแกรมแพตช์แทรก
อย่างไรก็ตาม เมื่อทำการแพตช์ dwm มีบางครั้งที่โปรแกรมเหล่านี้จะล้มเหลว เนื่องจากพวกเขาถือว่าซอร์สโค้ดที่เรากำลังแก้ไขนั้นคล้ายกับการติดตั้ง dwm พื้นฐาน
ซึ่งหมายความว่าเมื่อเราติดตั้งแพตช์ ยิ่งยากสำหรับโปรแกรมแก้ไขที่จะแทรกแพตช์เหล่านั้น ด้วยเหตุนี้ จึงเป็นสิ่งสำคัญที่จะต้องเข้าใจว่าไฟล์แพตช์ทำงานอย่างไร เพื่อที่เราจะสามารถติดตั้งแพตช์ได้ด้วยตนเอง
วิธีการอ่านไฟล์ Patch
ไฟล์แพตช์ประกอบด้วยสามสิ่ง:
- ส่วนหัวที่แสดงไฟล์ที่ควรใส่โค้ด
- หัวข้อย่อยที่แสดงหมายเลขบรรทัดหรือฟังก์ชันที่จะแทรก
- ตัวโค้ดเอง
ตามที่เราได้กล่าวไว้ข้างต้น ไฟล์แพทช์ไฟล์เดียวสามารถมีตัวอย่างโค้ดได้หลายไฟล์เพื่อส่งไปยังไฟล์หลายไฟล์ รูปแบบนี้ช่วยให้เราแจกจ่ายไฟล์เดียวแทนที่จะมีไฟล์แพทช์เดียวสำหรับไฟล์ต้นฉบับทุกไฟล์
ด้วยเหตุนี้ การอ่านไฟล์แพตช์ทำให้เราต้องเข้าใจไวยากรณ์ของส่วนหัวเท่านั้น เมื่อเราทราบแล้ว การแพตช์จริงก็เป็นเพียงการคัดลอกและวางโค้ดเท่านั้น
ไวยากรณ์ส่วนหัวของ Patch
ส่วนหัวของโปรแกรมแก้ไขประกอบด้วยข้อมูลสำคัญเกี่ยวกับตำแหน่งของไฟล์ต้นทาง ตัวอย่างเช่น นี่คือส่วนหัวสำหรับโปรแกรมแก้ไขการปรับขนาดอัตโนมัติ dwm
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
1. ซิสเทรย์
ไม่เหมือนกับสภาพแวดล้อมเดสก์ท็อปส่วนใหญ่ dwm ไม่ได้มาพร้อมกับถาดระบบตามค่าเริ่มต้น ซิสเต็มเทรย์เป็นส่วนของเดสก์ท็อปที่แอปพลิเคชันบางตัวสามารถปล่อยให้ไอคอนมีฟังก์ชันของแอปเพื่อโต้ตอบกับโปรแกรมที่ทำงานอยู่เบื้องหลังได้อย่างรวดเร็ว
แพตช์นี้แนะนำคุณสมบัตินั้นให้กับ dwm เมื่อติดตั้งแล้ว โปรแกรมแก้ไข systray จะจัดสรรมุมขวาสุดของแถบ dwm ให้กับโปรแกรมถาดระบบปัจจุบัน นอกจากนี้ยังรองรับการตั้งค่าหลายจอภาพโดยที่ถาดจะปรากฏบนจอภาพที่มีตัวชี้เมาส์อยู่เสมอ
2. Xresources
แพตช์ Xresources ช่วยให้โปรแกรม xrdb ตั้งค่ากราฟิกสำหรับ dwm ได้ ช่วยให้เราใช้ไฟล์ .Xresources เพื่อเปลี่ยนสีและแบบอักษรโดยไม่ต้องคอมไพล์โปรแกรมใหม่ มีประโยชน์อย่างยิ่งสำหรับผู้ใช้ที่ใช้ไฟล์เดียวกันอยู่แล้วสำหรับชุดรูปแบบสีเทอร์มินัล
นอกจากนี้ การให้ xrdb กำหนดลักษณะที่ปรากฏของ dwm ยังช่วยให้เราใช้หลายธีมได้ เราสามารถทำได้โดยแก้ไขไฟล์ .Xresources สำหรับชุดรูปแบบสีที่เราต้องการและเปิดใช้งานโดยโหลด dwm ใหม่
3. ทาทามิ
Tatami เป็นเค้าโครงหน้าต่างทางเลือกสำหรับ dwm มันแสดงถึงหน้าต่างในหน้าจอเป็นกระเบื้องที่ปูพื้นแบบญี่ปุ่นดั้งเดิม วิธีการนี้แตกต่างจากต้นแบบดั้งเดิมและเลย์เอาต์สแต็ก โดยที่แต่ละหน้าต่างที่ไม่ใช่มาสเตอร์จะมีขนาดบางลงในแนวตั้ง ซึ่งทำให้แต่ละหน้าต่างในสแต็กไม่สามารถอ่านได้
เลย์เอาต์เสื่อทาทามิมีประโยชน์อย่างยิ่งเมื่อต้องจัดการกับหน้าต่างสี่ถึงห้าหน้าต่างพร้อมๆ กัน เนื่องจากแต่ละหน้าต่างมีพื้นที่หน้าจอที่เพียงพอสำหรับผู้ใช้ให้เราอ่าน
4. โฟกัสมาสเตอร์
วิธีที่ dwm จัดเรียงหน้าต่างนั้นคล้ายกับการวางบล็อคในสแต็ก หน้าต่างที่สร้างขึ้นใหม่แต่ละบานจะวางอยู่บนหน้าต่างก่อนหน้า สิ่งนี้จะสร้างลำดับเชิงเส้นระหว่างหน้าต่างและช่วยให้เราทราบว่าหน้าต่างใดเกิดก่อน
อย่างไรก็ตาม ข้อจำกัดประการหนึ่งของการออกแบบนี้คือไม่อนุญาตให้เราเลือกหน้าต่างหลักจากสแต็กได้อย่างอิสระ ในการเลือกต้นแบบ เราต้องเลือกแต่ละหน้าต่างจนกว่าจะถึงบล็อกสูงสุด แพตช์นี้เปลี่ยนการทำงานนี้ และทำให้เราสามารถเลือกหน้าต่างมาสเตอร์ปัจจุบันได้จากทุกที่ในสแต็ก
มีประโยชน์อย่างยิ่งเมื่อต้องจัดการกับหลายหน้าต่าง เนื่องจากทำให้เราเลือกต้นแบบในหน้าต่างสแต็กได้โดยอัตโนมัติ แทนที่จะวนไปยังแต่ละหน้าต่างที่มีอยู่
5. dwmc
การปรับเปลี่ยนลักษณะใดๆ ของ dwm ทำให้เราต้องคอมไพล์โปรแกรมใหม่ทุกครั้งที่เราต้องการใช้การเปลี่ยนแปลงของเรา ซึ่งรวมถึงรูปแบบสีและการทำงานเริ่มต้น เป็นต้น
dwmc เป็นแพตช์ง่าย ๆ ที่ช่วยให้เราเปลี่ยนพฤติกรรมของ dwm ผ่านโปรแกรมไคลเอนต์ได้ วิธีนี้คล้ายกับวิธีที่ bspwm ใช้ bspc เพื่อแก้ไขการตั้งค่าของ bspwm แม้ว่า dwmc จะง่ายกว่า bspc มาก แต่ก็ยังมีการตั้งค่าที่มีประโยชน์มากมายที่เราสามารถใช้และแก้ไขได้
ตัวอย่างเช่น ฟังก์ชันหนึ่งที่เราสามารถใช้ได้ใน dwmc คือแถบสลับ การเรียกใช้แถบสลับ dwmc ช่วยให้เราสามารถเปิดใช้งานและปิดใช้งานแถบ dwm แบบไดนามิกได้ สิ่งนี้ทำให้ dwmc มีประโยชน์เมื่อสร้างสคริปต์ที่ทำงานหน้าต่างแบบกำหนดเอง
ยินดีด้วย! ตอนนี้คุณมีความเข้าใจพื้นฐานเกี่ยวกับวิธีการทำงานของโค้ดแพตช์ เช่นเดียวกับแพตช์ที่มีประโยชน์ห้าตัวที่คุณใช้ในการติดตั้ง dwm ของคุณ หากคุณกำลังมองหาประสบการณ์การใช้งานเบราว์เซอร์เพียงเล็กน้อย ให้ดูบทแนะนำนี้
คำถามที่พบบ่อย
1. แพทช์ dwm ปลอดภัยหรือไม่
ใช่! ผู้ดูแลจำนวนหนึ่งตรวจสอบแพทช์ที่มีอยู่ในเว็บไซต์ที่ไม่มีการดูด เพื่อให้แน่ใจว่าแพทช์ทั้งหมดในเว็บไซต์ใช้งานได้กับเวอร์ชันของ dwm ที่เขียนขึ้น
2. ฉันใช้ git สมัคร แต่โปรแกรมแก้ไขของฉันล้มเหลวและ dwm ไม่ได้รวบรวม ฉันควรทำอย่างไร?
สิ่งนี้สามารถเกิดขึ้นได้เนื่องจากหลายสิ่ง สาเหตุที่พบบ่อยที่สุดคือส่วนหัวของ git ไม่ได้ถูกลบในไฟล์ต้นฉบับ นี้ค่อนข้างง่ายที่จะแก้ไข เราจำเป็นต้องลบส่วนหัวและใช้โปรแกรมแก้ไขด้วยตนเอง
เมื่อคุณเปิดไฟล์ต้นฉบับ คุณจะเห็นบรรทัดที่มีป้ายกำกับว่า HEAD
. นี่แสดงถึงการเริ่มต้นของการปรับเปลี่ยน ตามด้วยฟังก์ชั่นที่ต้องแก้ไข คุณจะต้องลบบรรทัดนั้นและทำการแก้ไขด้วยตนเอง ในนี้จะมี +
. ด้วย และ -
ป้ายทางด้านซ้ายของรหัสเพื่อเป็นแนวทางในการเปลี่ยนแปลง
3. ฉันจะทำอย่างไรเมื่อฉันใช้โปรแกรมแก้ไขสำเร็จ แต่ dwm ไม่ต้องการคอมไพล์และขอตัวแปรหรือการประกาศที่หายไป
โปรแกรมแก้ไขไม่ได้แก้ไขไฟล์ config.h โดยค่าเริ่มต้น โปรแกรมแก้ไขจะแก้ไขไฟล์ config.def.h เพื่อหลีกเลี่ยงความขัดแย้งกับการกำหนดค่าปัจจุบัน
อย่างไรก็ตาม หมายความว่าไฟล์ config.h จะไม่โหลดด้วยค่าการกำหนดค่าที่ถูกต้องสำหรับโปรแกรมแก้ไขนั้น ๆ ในการแก้ไขปัญหานี้ คุณต้องแนะนำการเปลี่ยนแปลงในไฟล์ config.def.h ให้กับไฟล์ config.h ของคุณ