-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbrgcli.py
More file actions
executable file
·95 lines (72 loc) · 2.6 KB
/
brgcli.py
File metadata and controls
executable file
·95 lines (72 loc) · 2.6 KB
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
#!/usr/bin/env python3
import curses
import time
def get_value(filename, path='/sys/class/backlight/intel_backlight'):
"""Return an int from path/filename"""
with open(f'{path}/{filename}', 'r') as file:
return int(file.read())
def set_value(value, filename, path='/sys/class/backlight/intel_backlight'):
"""Writes value to path/filename.
Obviously, value should be a string of an acceptable value.
"""
with open(f'{path}/{filename}', 'w') as file:
file.write(str(value))
def clamp_and_bound(brg_value, increment):
"""Returns int, divisble by 25 between 0 and max (inclusive).
brg_value can be any value but increment should already be divisble by 25.
"""
brg_value = brg_value // 25 * 25 + increment
if brg_value > max_brg:
brg_value = max_brg
elif brg_value < 0:
brg_value = 0
return brg_value
# char values conveniently maped to increments
char_mappings = {
curses.KEY_PPAGE: 250,
curses.KEY_NPAGE: -250,
curses.KEY_UP: 25,
curses.KEY_DOWN: -25}
try:
# Set up curses screen window
screen = curses.initscr()
curses.noecho() # Disable input echoing
curses.curs_set(0) # Disable cursor
curses.cbreak() # don't wait for enter
screen.keypad(1) # Map arrow keys to special values
screen.nodelay(1) # Do not wait for input
# Initial values
max_brg = get_value('max_brightness')
brg_value = get_value('brightness')
display_str = str(brg_value)
char = -1
while char not in (81, 113):
screen.addstr(0, 0, display_str, curses.A_REVERSE)
char = screen.getch()
if char == -1:
brg_value = get_value('brightness')
display_str = str(brg_value)
time.sleep(0.1) # Speed throttle for "no-keys-pressed"
screen.erase()
else:
increment = char_mappings.get(char)
if increment:
# Shows MAX/MIN message if trying to go out of bounds
if increment > 0 and brg_value == max_brg:
display_str = 'MAX'
elif increment < 0 and brg_value == 0:
display_str = 'MIN'
else:
brg_value = clamp_and_bound(brg_value, increment)
set_value(brg_value, 'brightness')
display_str = str(brg_value)
screen.erase()
time.sleep(0.03) # Speed throttle for "keys pressed"
except KeyboardInterrupt:
pass
finally:
# shut down cleanly
curses.nocbreak()
curses.curs_set(1)
curses.echo()
curses.endwin()