scripts/misc/dmxrandr
2020-04-02 10:38:36 +02:00

40 lines
1.1 KiB
Ruby
Executable file

#!/usr/bin/env ruby
require 'xrandr'
require 'dmenu'
menu = Dmenu.new
menu.case_insensitive = true
menu.lines = 20
outputs = Xrandr::Parser.new.parse[1].group_by(&:connected)
menu.items = (outputs[true] + outputs[false]).map{
|o| Dmenu::Item.new(o.name + (o.connected ? ' (connected)' : ''), o)
}
menu.prompt = "output:"
output = menu.run.value
menu.items = output.modes.map{
|mode|Dmenu::Item.new(mode.resolution, {mode: mode.resolution})
}
menu.items << Dmenu::Item.new("off", {off: true})
menu.prompt = "Current resolution: #{output.resolution}"
mode = menu.run.value
unless mode[:off]
menu.items = [:"left-of", :"right-of", :"above", :"below"].flat_map{|dir|
outputs[true].reject{|o| o == output}.map{|out| [dir,out]}
}.map{|setting|
Dmenu::Item.new(setting[0].to_s.gsub('-',' ') + " " + setting[1].name,
{setting[0] => setting[1].name})
}
menu.items << Dmenu::Item.new("don't change", {})
menu.prompt = "Select position:"
mode.merge! menu.run.value
end
control = Xrandr::Control.new
control.configure(output, mode)
control.apply!