bin/toggle-displays 1.5 KiB raw
1
#!/usr/bin/env ruby
2
3
output = `xrandr`
4
5
internal = /^(eDP-?1)/.match(output)[1]
6
external = /^(DP-?1)/.match(output)[1]
7
8
internal_connected = /^#{internal} connected/.match?(output)
9
external_connected = /^#{external} connected/.match?(output)
10
11
internal_active = /^#{internal} connected .*?\d+x\d+\b/.match?(output)
12
external_active = /^#{external} connected .*?\d+x\d+\b/.match?(output)
13
14
puts "#{internal} connected: #{internal_connected}"
15
puts "#{external} connected: #{external_connected}"
16
puts "#{internal} active: #{internal_active}"
17
puts "#{external} active: #{external_active}"
18
19
def xrandr(args)
20
  system "xrandr #{args}"
21
end
22
23
if external_active && !internal_active && internal_connected then
24
  # Switch External -> Internal
25
  xrandr "--output #{internal} --auto --primary --output #{external} --off"
26
elsif internal_active && !external_active && external_connected then
27
  # Switch Internal -> External
28
  xrandr "--output #{external} --auto --primary --output #{internal} --off"
29
elsif !internal_active && !external_active && external_connected && internal_connected  then
30
  # Switch None -> All
31
  xrandr "--output #{internal} --auto --output #{external} --auto --primary"
32
elsif !internal_active && !external_active && internal_connected then
33
  # Switch None -> Internal
34
  xrandr "--output #{internal} --auto --primary"
35
elsif internal_active && external_active then
36
  # Switch All -> External
37
  xrandr "--output #{internal} --off --output #{external} --auto --primary"
38
end
39
40
# Set background
41
system "set-background"