前言
dwm
,穩定,小巧,快速,不佔資源。
記得當初從 ubuntu 8.04 開始,受盡了 linux desktop 環境的折磨。就算你今天運行一切正常,但是第二天醒來開機,你就無法登錄了,或者什麼界面打不開了,卡死了。不要說 8.04,前段時間,ubuntu 18.04 都曝出設置界面無法打開的問題。
如果你也是個極簡主義,不在乎那些華麗麗而不實用的圖標,那麼就一起 dwm
吧。
問題闡述
用了很久時間的 dwm 了,一直忙着都沒有時間按照自己的想法去改進代碼。
有幾個比較影響體驗的問題:
- 必須使用 MODKEY 去移動各種窗口;
- 無法使用鼠標滾輪上下滾動;就算打上了官方的滾動補丁,還是必須按住
SHIFT
才能進行操作;同樣的情況也發生在使用PgUp
和PgDn
時; - 鼠標移動到窗口的時候,會自動 focus,反直覺;
- 9 個窗口,手小的同學切換到 6 的時候就很吃力了,之後就要移動手來完成 7 8 9 的切換,很不爽;
- 點擊
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.c
中 enternotify
方法改成如下圖所示,刪除掉 focus
和 unfocus
方法即可。
4. 9 個窗口切換按鍵分散
修改 dwm
中 config.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 個佈局之間循環切換即可完成想要的功能。
供喜歡的朋友借鑑。