hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
19.55k stars 821 forks source link

New dispatcher: monitor #3508

Open Zeioth opened 11 months ago

Zeioth commented 11 months ago

Description

Proposal

Current workaround

One can already achieve this behavior by using hyprctl like this

# Note: Turning on/off monitors can cause waybar/hyprpaper to crash sometimes. 
#       To ensure they keep running, we restart them after turning on/off a monitor.

submap=mode_displays

# MODE IMPLEMENTATION
# -------------------------------------

# One display
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      o,        exec,            hyprctl --batch "reload; keyword monitor $screen1, disable; keyword monitor $screen2, disable; keyword monitor $screen3, disable; keyword monitor $screen5, disable; keyword monitor $screen6, disable; dispatch exec pkill -9 waybar && sleep 0.1 && waybar; dispatch exec pkill -9 hyprpaper && sleep 0.1 && hyprpaper"

# Three displays
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      t,        exec,            hyprctl --batch "reload; keyword monitor $screen1, disable; keyword monitor $screen2, disable; keyword monitor $screen3, disable; dispatch exec pkill -9 waybar && sleep 0.1 && waybar; dispatch exec pkill -9 hyprpaper && sleep 0.1 && hyprpaper"

# Four displays
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      f,        exec,            hyprctl --batch "reload; keyword monitor $screen1, disable; keyword monitor $screen3, disable; dispatch exec pkill -9 waybar && sleep 0.1 && waybar; dispatch exec pkill -9 hyprpaper && sleep 0.1 && hyprpaper"

# Six displays
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      s,        exec,            hyprctl --batch "reload; dispatch exec pkill -9 waybar && sleep 0.1 && waybar; dispatch exec pkill -9 hyprpaper && sleep 0.1 && hyprpaper"

# Exit conditions
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      escape,   submap,          reset
bind =    ,      o,        submap,          reset
bind =    ,      t,        submap,          reset
bind =    ,      f,        submap,          reset
bind =    ,      s,        submap,          reset

# -------------------------------------

submap=reset

In comparison with having a dispatcher

submap=mode_displays

# MODE IMPLEMENTATION
# -------------------------------------

# One display
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      o,        exec,            off $screen1
bind =    ,      o,        dpms,            off $screen1
bind =    ,      o,        dpms,            off $screen2
bind =    ,      o,        dpms,            off $screen3
bind =    ,      o,        dpms,            on  $screen4
bind =    ,      o,        dpms,            off $screen5
bind =    ,      o,        dpms,            off $screen6

# Three displays
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      t,        dpms,            off $screen1
bind =    ,      t,        dpms,            off $screen2
bind =    ,      t,        dpms,            off $screen3
bind =    ,      t,        dpms,            on  $screen4
bind =    ,      t,        dpms,            on  $screen5
bind =    ,      t,        dpms,            on  $screen6

# Four displays
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      f,        dpms,            off $screen1
bind =    ,      f,        dpms,            on  $screen2
bind =    ,      f,        dpms,            off $screen3
bind =    ,      f,        dpms,            on  $screen4
bind =    ,      f,        dpms,            on  $screen5
bind =    ,      f,        dpms,            on  $screen6

# Six displays
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      s,        dpms,            on $screen1
bind =    ,      s,        dpms,            on $screen2
bind =    ,      s,        dpms,            on $screen3
bind =    ,      s,        dpms,            on $screen4
bind =    ,      s,        dpms,            on $screen5
bind =    ,      s,        dpms,            on $screen6

# Exit conditions
#BIND     MOD    KEY       DISPATCHER       VALUE
bind =    ,      escape,   submap,          reset
bind =    ,      o,        submap,          reset
bind =    ,      t,        submap,          reset
bind =    ,      f,        submap,          reset
bind =    ,      s,        submap,          reset

# -------------------------------------

submap=reset

Which is considerably more straightforward and cleaner.

Zeioth commented 11 months ago

Related to #2549 and a few others