SHOW:
|
|
- or go back to the newest paste.
| 1 | #!/usr/bin/env ruby | |
| 2 | ||
| 3 | require 'singleton' | |
| 4 | ||
| 5 | class Trigger | |
| 6 | SLEEP_TIME = 120 | |
| 7 | ||
| 8 | def initialize | |
| 9 | @seconds = 0 | |
| 10 | end | |
| 11 | ||
| 12 | def tic_tac | |
| 13 | mouse = Mouse.instance | |
| 14 | mouse.read | |
| 15 | lcd = Lcd.instance | |
| 16 | lcd.off if @seconds >= SLEEP_TIME && lcd.on? | |
| 17 | ||
| 18 | if mouse.x_pos > 1900 | |
| 19 | @seconds = 0 | |
| 20 | lcd.on if lcd.off? if mouse.x_delta >= -10 && mouse.x_delta <= 10 && mouse.y_delta >= -10 && mouse.y_delta <= 10 | |
| 21 | else | |
| 22 | @seconds += 1 | |
| 23 | end | |
| 24 | end | |
| 25 | end | |
| 26 | ||
| 27 | class Lcd | |
| 28 | include Singleton | |
| 29 | ||
| 30 | def on | |
| 31 | return false if on? | |
| 32 | @state = :on | |
| 33 | `xrandr --output DVI-I-1 --auto --pos 1920x0` | |
| 34 | end | |
| 35 | ||
| 36 | def off | |
| 37 | return false if off? | |
| 38 | @state = :off | |
| 39 | `xrandr --output DVI-I-1 --off` | |
| 40 | end | |
| 41 | ||
| 42 | def on? | |
| 43 | state == :on | |
| 44 | end | |
| 45 | ||
| 46 | def off? | |
| 47 | state == :off | |
| 48 | end | |
| 49 | ||
| 50 | private | |
| 51 | ||
| 52 | def state | |
| 53 | @state = :on unless defined?(@state) | |
| 54 | @state | |
| 55 | end | |
| 56 | end | |
| 57 | ||
| 58 | class Mouse | |
| 59 | include Singleton | |
| 60 | ||
| 61 | def read | |
| 62 | save_last_position | |
| 63 | get_position | |
| 64 | true | |
| 65 | end | |
| 66 | ||
| 67 | def x_pos | |
| 68 | @x_pos.to_i | |
| 69 | end | |
| 70 | ||
| 71 | def x_delta | |
| 72 | @last_x_pos.to_i - @x_pos.to_i | |
| 73 | end | |
| 74 | ||
| 75 | def y_delta | |
| 76 | @last_y_pos.to_i - @y_pos.to_i | |
| 77 | end | |
| 78 | ||
| 79 | private | |
| 80 | ||
| 81 | def save_last_position | |
| 82 | @last_x_pos = @x_pos | |
| 83 | @last_y_pos = @y_pos | |
| 84 | end | |
| 85 | ||
| 86 | def get_position | |
| 87 | xdotool_output = `xdotool getmouselocation`.to_s | |
| 88 | @x_pos = xdotool_output[/x:(\d+)/, 1].to_i | |
| 89 | @y_pos = xdotool_output[/y:(\d+)/, 1].to_i | |
| 90 | end | |
| 91 | end | |
| 92 | ||
| 93 | trigger = Trigger.new | |
| 94 | ||
| 95 | while true do | |
| 96 | trigger.tic_tac | |
| 97 | sleep 2 | |
| 98 | end |