blob: 326e8bd5d20a4fece696005a696e75e2289eac81 (
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
|
I3_CONFIG="$HOME/.config/i3/config"
# Function to wrap text
wrap_text() {
local text="$1"
local width="$2"
echo "$text" | fold -s -w "$width"
}
# Get terminal width and calculate columns
terminal_width=$(tput cols)
table_width=$((terminal_width - 4))
max_keybinding_length=$((table_width / 3)) # Keybindings are usually shorter in i3
max_keybinding_content_length=$((max_keybinding_length - 2))
description_width=$((table_width - max_keybinding_length - 1))
description_content_width=$((description_width - 2))
# Border lines
top_border="┌$(printf '%.0s─' $(seq 1 $max_keybinding_length))┬$(printf '%.0s─' $(seq 1 $description_width))┐"
row_sep="├$(printf '%.0s─' $(seq 1 $max_keybinding_length))┼$(printf '%.0s─' $(seq 1 $description_width))┤"
bottom_border="└$(printf '%.0s─' $(seq 1 $max_keybinding_length))┴$(printf '%.0s─' $(seq 1 $description_width))┘"
{
echo "$top_border"
printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "KEYBINDING" "$description_content_width" "DESCRIPTION"
last_comment=""
# Read i3 config line by line
while IFS= read -r line; do
# If line is a comment, store it as a potential description
if [[ $line =~ ^#\ (.*) ]]; then
last_comment="${BASH_REMATCH[1]}"
# If line contains a bindsym
elif [[ $line =~ ^bindsym ]]; then
# Extract the key combo (the parts between 'bindsym' and the start of the command/exec)
# This regex captures bindsym [options] <keysym> <command>
keybinding=$(echo "$line" | awk '{print $2}')
# If the comment is empty, use the command itself as the description
if [[ -z "$last_comment" ]]; then
display_desc=$(echo "$line" | cut -d' ' -f3-)
else
display_desc="$last_comment"
fi
wrapped_description=$(wrap_text "$display_desc" "$description_content_width")
echo "$row_sep"
# Print first line of binding and description
printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "$keybinding" "$description_content_width" "$(echo "$wrapped_description" | head -n 1)"
# Print subsequent lines of wrapped description
echo "$wrapped_description" | sed '1d' | while read -r continuation; do
printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "" "$description_content_width" "$continuation"
done
# Reset comment after use
last_comment=""
fi
done < "$I3_CONFIG"
echo "$bottom_border"
} | less -R
|