summaryrefslogtreecommitdiff
path: root/content/blog/2024/fvwm-part-2.md
blob: 66b2452d423dcc253bc264195765d59a60c7972d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
+++
title = "Fvwm - day 2 (keyboard control)"
author = ["Michał Sapka"]
date = 2024-09-03T22:29:00+02:00
categories = ["blog"]
draft = false
weight = 2002
image_dir = "blog/images"
image_max_width = 600
abstract = "Adjusting Fvwm to my basic instincts"
+++

I'm a day in Fvwm, and it's rock solid.
Time to adjust it to my needs
Let's start with keyboard control, as I prefer over using mouse.

We can open `~/.fvwm/config` and make changes.
The default one is _very_ nicely commented, so it's a pleasure to modify.
Then, all we need is to `restart` the wm and we're ready.

By default, you can use `C^F1` - `C^F2` to change active desktop.
The problem is that I don't have F-keys on my keyboard and I want to relegate all WM bindings to `super` key (aka "windows" key).
Ergo, I want `Super^1` to `Super^4`.

First of all, I don't want my `Super` to star terminal - all I needed to do was to comment out

```shell
Silent Key Super_R A A Exec exec $[infostore.terminal]
```

I will reassign it later on.

The [bindings documentation](https://www.fvwm.org/Wiki/Config/Bindings/) inform us that the binding format is

```shell
Key Name Context Modifier Command
```

So, what I want to achieve is

```shell
Silent Key 1      A Super GotoDesk 0 0
```

There is no super as modifier as default, but we can use any `mod` key.
It varies between OSes, so we need to check:

```shell
$ xmodmap                       #

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        ISO_Level5_Shift (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c)
```

Therefore, my `super` keys is `mod4` and the bindings will be

```shell
Silent Key 1      A 4 GotoDesk 0 0
Silent Key 2      A 4 GotoDesk 0 1
Silent Key 3      A 4 GotoDesk 0 2
Silent Key 4      A 4 GotoDesk 0 3
```

Now, back to the terminal.
I want `Super+Shift+Enter` to open the terminal
We can join multiple modifiers by simply putting all of them as the mod:

```shell
Silent Key Return      A 4S Exec exec $[infostore.terminal]
```

The terminal command is a variable (`infostore`) because it's used in multiple places.
I'm still using the good, old st, so I modified to

```shell
InfoStoreAdd terminal st
```

I also want to have a quick way to run emacs

```shell
Silent Key E      A 4 Exec exec emacs
```

And to mimic MacOS `Ctrl+shift+Q` to close active window

```shell
Silent Key Q      A CS Close
```

This makes Fvwm very much usable.
My muscle memory is again in use.
It's still far from where I want it to be, but it's getting there.