源碼修改之讓 DWM 更友好

前言

dwm,穩定,小巧,快速,不佔資源。

記得當初從 ubuntu 8.04 開始,受盡了 linux desktop 環境的折磨。就算你今天運行一切正常,但是第二天醒來開機,你就無法登錄了,或者什麼界面打不開了,卡死了。不要說 8.04,前段時間,ubuntu 18.04 都曝出設置界面無法打開的問題。

如果你也是個極簡主義,不在乎那些華麗麗而不實用的圖標,那麼就一起 dwm 吧。

問題闡述

用了很久時間的 dwm 了,一直忙着都沒有時間按照自己的想法去改進代碼。

有幾個比較影響體驗的問題:

  1. 必須使用 MODKEY 去移動各種窗口;
  2. 無法使用鼠標滾輪上下滾動;就算打上了官方的滾動補丁,還是必須按住 SHIFT 才能進行操作;同樣的情況也發生在使用 PgUpPgDn 時;
  3. 鼠標移動到窗口的時候,會自動 focus,反直覺;
  4. 9 個窗口,手小的同學切換到 6 的時候就很吃力了,之後就要移動手來完成 7 8 9 的切換,很不爽;
  5. 點擊 Layout 圖標不能在三種佈局之間切換,例如 windows 的 task view 的功能就實現不了(我想看到當前桌面上所有的窗口);

今天總算抽時間解決了所有問題。

解決問題

一個一個來。

1. 必須使用 MODKEY 去移動各種窗口;

config.def.h 的最後,Button buttons[] 數組裏面,加上紅框中的代碼,MODKEY 處是 0,鼠標按鍵設置 Button3。不知道爲什麼,dwm 的 Button2 是鼠標中鍵。

在這裏插入圖片描述

這樣一來,就可以用鼠標中鍵移動窗口,不需其他按鍵輔助。我試過用右鍵,但是會造成打開菜單功能無法使用,所有的右鍵事件都會被解析成移動。那麼像 Burp Suite 這種很多右鍵菜單的工具就無法使用了,折衷一下,使用中鍵。

2. 無法使用鼠標滾輪滾動

首先打上官方的補丁(我使用的是 6.2 版本的 dwm),鏈接在這

然後修改 st 的源碼,將 config.def.h 中的 MouseShortcut 方法改成如下。

在這裏插入圖片描述

config.def.h 中的 Shortcut 方法改成如下。

在這裏插入圖片描述

即可使用鼠標滾輪和 PgUp PgDn 直接滾動 terminal,不需要按住 SHIFT

3. 鼠標移動到窗口的時候,會自動 focus,反直覺

dwm.centernotify 方法改成如下圖所示,刪除掉 focusunfocus 方法即可。
在這裏插入圖片描述

4. 9 個窗口切換按鍵分散

修改 dwmconfig.def.h 的源碼,將 Key 數組的最後,改成如下形式。

在這裏插入圖片描述

我使用 ALT + 1 2 3 4 切換到桌面 4,然後是用 ALT + q w e r 切換到 8,最後使用 ALT + a 切換到 9,這樣不需要移動手的位置,9 個桌面隨意切換。

在這裏插入圖片描述

5. 點擊 Layout 圖標不能在三種佈局之間切換

Layout 佈局圖標在下圖所示的位置,默認情況下用左鍵點擊,可以在當前佈局和上一個佈局之間切換,也就是所,光靠鼠標點擊,有一種佈局是無法展示的。

在這裏插入圖片描述

有一種情況就是我想看當前桌面上開着的所有窗口 (只能用 Tile 佈局才能實現),我左手可能不方便用鍵盤,而上一個佈局是 Floating,當前佈局是 Monocal,也就是說用鼠標無法切換到 Tile 佈局,我就還必須解放左右,按一下 ALT + T 才行。

首先將 dwm.c 中的 Monitor 改成如下形式,這個 lt 數組之前只能存放兩個佈局,也就是爲什麼只能在當前佈局和前一佈局之間切換,現在改成3,我們在三個佈局之間循環。

在這裏插入圖片描述

然後將 createmon 方法改成如下圖所示。按順序初始化三個佈局到 lt 數組。

在這裏插入圖片描述

最後,點擊佈局圖標的時候,調用的是 setLayout 方法,將該方法改成如下圖所示,在 3 個佈局之間循環切換即可完成想要的功能。

在這裏插入圖片描述

供喜歡的朋友借鑑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章