blob: 55344b2fadd45260d8d7823818c5cb86a63377db (
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#!/hint/bash
################################################################################
# Added shell features #
################################################################################
##
# Usage: dquote STRING
# Safely double-quotes a string.
# It escapes ways to execute code, but not variables.
##
dquote() {
local str=$1
str="${str//\\/\\\\}" # backslash
str="${str//\"/\\\"}" # dquote
str="${str//\$(/\\\$(}" # $(...)
str="${str//\`/\\\`}" # backtick
printf '"%s"\n' "$str"
}
##
# Usage: expand_variables
# Expands variables read from /dev/stdin
##
expand_variables() (
IFS=''
while read -r line; do
eval printf "'%s\n'" "$(dquote "$line")"
done
)
is_mounted() {
local dir="$(readlink -m $1)"
local mntpnt="$(cut -d' ' -f2 /proc/mounts|grep -Fx -- "$dir")"
[[ $dir = "$mntpnt" ]]
}
################################################################################
# PATH manipulation #
################################################################################
##
# Usage: path_ls PATH
# List executables in PATH (PATH is delimited by `:')
##
path_ls() {
local dirs
IFS=: dirs=($@)
find -L "${dirs[@]}" -maxdepth 1 -type f -executable -printf '%f\n' 2>/dev/null | sort -u
}
##
# Usage: path_which PATH PROGRAM
# Find the full path of PROGRAM by searching PATH
##
path_which() {
local mypath=$1
local prog=$2
local which=$(which which)
PATH="$mypath" "$which" -- "$prog" 2>/dev/null
}
################################################################################
# wmii convenience functions #
################################################################################
##
# Usage: lstags
# Lists wmii tags
##
lstags() {
ls "$WMII_DIR/tag" | sed -e 's,/$,,' -e '/^sel$/d'
}
################################################################################
# X11 functions #
################################################################################
##
# Usage: connected_to_x_server
# Return status indicates whether there is an X server at $DISPLAY
##
connected_to_x_server() {
xdpyinfo &>/dev/null
}
################################################################################
# My wmii configuration #
################################################################################
##
# Usage: scansection SECTION
# Reads the doc comments from a section of wmiirc.
##
scansection() {
local sec=$1
local file=$(conffile config.sh)
# Isolate the section we want.
< "$file" sed -n "/^\s*$sec\s*()/,/^}/{ /##/p }" |
# Parse each line.
while read -r line; do
symbol="$(sed -nr 's/^\s*(.*)\)\s*##.*/\1/p' <<<"$line")"
comment="$(sed -r 's/.*## ?//' <<<"$line")"
if [ -z "$symbol" ]; then
printf '%s\n' "$comment"
else
printf '\t%s\t%s\n' "$(expand_variables <<<"$symbol")" "$comment"
fi
done
}
##
# Usage: conffile FILE
##
conffile() {
echo "$HOME/.wmii-hg/$1"
}
|