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
21.72k stars 900 forks source link

focusworkspaceoncurrentmonitor previous doesn't work when the previous workspace is empty #7947

Open luravoid opened 1 month ago

luravoid commented 1 month ago

Already reported ? *

Regression?

No

System Info and Version

System/Version info ```sh hyprctl systeminfo -c Hyprland, built from branch at commit 8b9e385943d1a9fd0f8c6070fa1eae507ae26145 (). Date: 2024-09-11 Tag: , commits: 5213 flags: (if any) System Information: System name: Linux Node name: desktop Release: 6.10.9 Version: #1-NixOS SMP PREEMPT_DYNAMIC Sun Sep 8 05:56:41 UTC 2024 GPU information: 29:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev e7) (prog-if 00 [VGA controller]) os-release: ANSI_COLOR="1;34" BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues" BUILD_ID="24.11.20240926.1925c60" DOCUMENTATION_URL="https://nixos.org/learn.html" HOME_URL="https://nixos.org/" ID=nixos IMAGE_ID="" IMAGE_VERSION="" LOGO="nix-snowflake" NAME=NixOS PRETTY_NAME="NixOS 24.11 (Vicuna)" SUPPORT_URL="https://nixos.org/community.html" VERSION="24.11 (Vicuna)" VERSION_CODENAME=vicuna VERSION_ID="24.11" plugins: hypreasymotion by Zakk ver 1.0 ======Config-Start====== Config File: /home/scay/.config/hypr/hyprland.conf: Read Succeeded exec-once = /nix/store/4a86f7kq7757fjwf5zzwk0jxixn4330n-dbus-1.14.10/bin/dbus-update-activation-environment --systemd DISPLAY HYPRLAND_INSTANCE_SIGNATURE WAYLAND_DISPLAY XDG_CURRENT_DESKTOP && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target plugin=/nix/store/lmkkqs3yarhcvdqvz8k3d9r4iqgc2mar-hypreasymotion/lib/libhypreasymotion.so animations { bezier=wind, 0.05, 0.9, 0.1, 1.05 bezier=winIn, 0.76, 0.42, 0.74, 0.87 bezier=winOut, 0.76, 0.42, 0.74, 0.87 bezier=workIn, 0.72, -0.07, 0.41, 0.98 bezier=linear, 1, 1, 1, 1 animation=windows, 1, 1.5, wind, popin animation=windowsIn, 1, 1.5, workIn, popin animation=windowsOut, 1, 1.5, workIn, popin animation=windowsMove, 1, 1.5, wind, slide animation=fadeIn, 1, 1.5, winIn animation=fadeOut, 1, 1.5, winOut animation=workspaces, 1, 1.5, workIn, slide animation=specialWorkspace, 1, 2, workIn, slidevert enabled=true } binds { allow_workspace_cycles=true } decoration { blur { enabled=true noise=0.300000 passes=6 size=10 } dim_special=0.700000 drop_shadow=true rounding=0 shadow_ignore_window=true shadow_offset=6 6 shadow_range=30 shadow_render_power=4 } general { $mainMod=SUPER border_part_of_window=false border_size=2 col.active_border=rgb(ebdbb2) col.inactive_border=rgb(1d2021) gaps_in=7 gaps_out=14 layout=master no_border_on_floating=false resize_on_border=true } input { touchpad { natural_scroll=true } float_switch_override_focus=0 follow_mouse=1 kb_layout=pl kb_options=caps:swapescape mouse_refocus=0 natural_scroll=false numlock_by_default=true sensitivity=0 } misc { disable_hyprland_logo=true focus_on_activate=false force_default_wallpaper=0 new_window_takes_over_fullscreen=1 } plugin { easymotion { bgcolor=rgba(40,40,40,1) bordercolor=rgb(ebdbb2) bordersize=1 motionkeys=jkhluiopynmbfdsatgrvcewqzx1234567890 rounding=0 textcolor=rgb(ebdbb2) textfont=Terminus textpadding=7,15,7,15 textsize=30 } } bind=$mainMod, Q, killactive bind=ALT, F4, exec, killall brave && hyprctl dispatch exit bind=$mainMod SHIFT, F, exec, togglefloating bind=$mainMod, M, fullscreen, 1 bind=$mainMod, F, fullscreen bind=$mainMod ALT CTRL, L, exec, hyprlock bind=$mainMod CTRL SHIFT, B, exec, ~/.config/waybar/launch.sh bind=$mainMod SHIFT, M, exec, pypr zoom bind=$mainMod SHIFT, P, exec, betterpin bind=$mainMod ALT, P, exec, changelayout bind=$mainMod SHIFT, I, exec, wininfo bind=$mainMod ALT, C, exec, python3 floatinggrid.py horizontal bind=$mainMod ALT, X, exec, python3 floatinggrid.py vertical bind=$mainMod, semicolon, exec, colorpicker bind=$mainMod ALT, semicolon, exec, hyprctl seterror disable bind=$mainMod, RETURN, exec, kitty bind=$mainMod, W, exec, brave bind=$mainMod, P, exec, pkill tofi || tofi-run | xargs hyprctl dispatch exec bind=$mainMod, $mainMod_L, exec, pkill tofi || tofi-drun --drun-launch=true bind=$mainMod, R, exec, kitty --class yazi -e yazi bind=$mainMod, C, exec, kitty --class neovim -e nvim bind=$mainMod CTRL, slash, exec, ocr bind=$mainMod CTRL, D, exec, pkill tofi || quicklinks --kitty bind=$mainMod CTRL, X, exec, pkill tofi || powermenu bind=$mainMod CTRL, C, exec, pkill tofi || cliphist list | tofi | cliphist decode | wl-copy bind=$mainMod CTRL, W, exec, pkill tofi || focuswindow tofi bind=$mainMod CTRL, E, exec, pkill tofi || togglespecial-menu bind=$mainMod CTRL, Z, exec, pkill tofi || selectwallpaper bind=$mainMod CTRL, S, exec, screenshot-wl sf bind=, 82, exec, screenshot-wl m bind=$mainMod, 82, exec, screenshot-wl p bind=$mainMod ALT, 82, exec, grimblast copysave output bind=$mainMod, F10, pass, ^(com.obsproject.Studio)$ bind=$mainMod, 1, exec, closespecial -x 1 bind=$mainMod, 2, exec, closespecial -x 2 bind=$mainMod, 3, exec, closespecial -x 3 bind=$mainMod, 4, exec, closespecial -x 4 bind=$mainMod, 5, exec, closespecial -x 5 bind=$mainMod, 6, exec, closespecial -x 6 bind=$mainMod, 7, exec, closespecial -x 7 bind=$mainMod, 8, exec, closespecial -x 8 bind=$mainMod, 9, exec, closespecial -x 9 bind=$mainMod, 0, exec, closespecial -x 10 bind=$mainMod, Tab, exec, prevclosespecial bind=$mainMod, V, exec, pypr change_workspace -1 bind=$mainMod, N, exec, pypr change_workspace +1 bind=$mainMod CTRL, right, exec, closespecial -x r+1 bind=$mainMod CTRL, left, exec, closespecial -x r-1 bind=$mainMod CTRL, down, exec, closespecial -x empty bind=$mainMod ALT, 1, movetoworkspace, 1 bind=$mainMod ALT, 2, movetoworkspace, 2 bind=$mainMod ALT, 3, movetoworkspace, 3 bind=$mainMod ALT, 4, movetoworkspace, 4 bind=$mainMod ALT, 5, movetoworkspace, 5 bind=$mainMod ALT, 6, movetoworkspace, 6 bind=$mainMod ALT, 7, movetoworkspace, 7 bind=$mainMod ALT, 8, movetoworkspace, 8 bind=$mainMod ALT, 9, movetoworkspace, 9 bind=$mainMod ALT, 0, movetoworkspace, 10 bind=$mainMod ALT, V, movetoworkspace, r-1 bind=$mainMod ALT, N, movetoworkspace, r+1 bind=$mainMod SHIFT, 1, movetoworkspacesilent, 1 bind=$mainMod SHIFT, 2, movetoworkspacesilent, 2 bind=$mainMod SHIFT, 3, movetoworkspacesilent, 3 bind=$mainMod SHIFT, 4, movetoworkspacesilent, 4 bind=$mainMod SHIFT, 5, movetoworkspacesilent, 5 bind=$mainMod SHIFT, 6, movetoworkspacesilent, 6 bind=$mainMod SHIFT, 7, movetoworkspacesilent, 7 bind=$mainMod SHIFT, 8, movetoworkspacesilent, 8 bind=$mainMod SHIFT, 9, movetoworkspacesilent, 9 bind=$mainMod SHIFT, 0, movetoworkspacesilent, 10 bind=$mainMod SHIFT, V, movetoworkspacesilent, r-1 bind=$mainMod SHIFT, N, movetoworkspacesilent, r+1 bind=$mainMod CTRL, 2, exec, togglewindow -c Brave-browser bind=$mainMod CTRL, 3, exec, togglewindow -c neovim bind=$mainMod CTRL, 4, exec, togglewindow -c yazi bind=$mainMod CTRL, 5, exec, togglewindow -c obsidian bind=$mainMod CTRL, 6, exec, togglewindow -c Zotero bind=$mainMod CTRL, 7, exec, togglewindow -c vesktop bind=$mainMod SHIFT, W, exec, togglewindow -c Brave-browser bind=$mainMod SHIFT, O, exec, togglewindow -c obsidian bind=$mainMod SHIFT, E, exec, togglewindow -b bind=$mainMod, E, exec, pkill tofi || togglewindow -r 'tofi --height 400 --prompt-text=Window: ' bind=$mainMod SHIFT, U, exec, toggleurgent -t bind=$mainMod, U, focusurgentorlast bind=$mainMod, comma, focusmonitor, +1 bind=$mainMod, period, focusmonitor, -1 bind=$mainMod SHIFT, comma, movewindow,mon:+1 bind=$mainMod SHIFT, period, movewindow,mon:-1 bind=$mainMod, SPACE, exec, pypr shift_monitors +1 bind=$mainMod, backslash, togglespecialworkspace, scratchpad bind=$mainMod SHIFT, backslash, exec, movetospecial --silent in out special:scratchpad bind=$mainMod CTRL, backslash, exec, movetospecial --silent in out --launcher bind=$mainMod, grave, togglespecialworkspace, obsidian bind=$mainMod, S, togglespecialworkspace, music bind=$mainMod SHIFT, R, togglespecialworkspace, rss bind=$mainMod, T, togglespecialworkspace, tasks bind=$mainMod SHIFT, A, togglespecialworkspace, anki bind=$mainMod, bracketright, togglespecialworkspace, ai bind=$mainMod ALT, F, togglespecialworkspace, dict bind=$mainMod ALT, D, togglespecialworkspace, type bind=$mainMod CTRL, P, togglespecialworkspace, mail bind=$mainMod, Y, togglespecialworkspace, sound bind=$mainMod, B, exec, dynamicwindow -v special:dynamic bind=$mainMod SHIFT, B, exec, dynamicwindow -t special:dynamic bind=$mainMod, G, exec, hyprtabs bind=$mainMod SHIFT, G, togglegroup bind=$mainMod CTRL, J, changegroupactive, f bind=$mainMod CTRL, K, changegroupactive, b bind=$mainMod CTRL SHIFT, J, movegroupwindow, f bind=$mainMod CTRL SHIFT, K, movegroupwindow, b bind=$mainMod, J, layoutmsg, cyclenext bind=$mainMod, K, layoutmsg, cycleprev bind=$mainMod SHIFT, J, layoutmsg, swapnext bind=$mainMod SHIFT, K, layoutmsg, swapprev bind=$mainMod, I, layoutmsg, addmaster bind=$mainMod, D, layoutmsg, removemaster bind=$mainMod CTRL, RETURN, layoutmsg, focusmaster bind=$mainMod SHIFT, RETURN, layoutmsg, swapwithmaster bind=$mainMod ALT, M, layoutmsg, orientationcycle center left bind=$mainMod ALT, up, layoutmsg, orientationtop bind=$mainMod ALT, down, layoutmsg, orientationbottom bind=$mainMod ALT, left, layoutmsg, orientationleft bind=$mainMod ALT, right, layoutmsg, orientationright bind=$mainMod, Z, exec, easymotion binde=,XF86AudioMute,exec, changevolume mute binde=,XF86AudioRaiseVolume,exec, changevolume up binde=,XF86AudioLowerVolume,exec, changevolume down binde=$mainMod SHIFT, H, resizeactive, 0 80 binde=$mainMod, H, resizeactive, -100 0 binde=$mainMod SHIFT, L, resizeactive, 0 -80 binde=$mainMod, L, resizeactive, 100 0 bindl=,XF86MonBrightnessUp, exec, brightnessctl set 5%+ bindl=,XF86MonBrightnessDown, exec, brightnessctl set 5%- bindl=$mainMod, XF86MonBrightnessUp, exec, brightnessctl set 100%+ bindl=$mainMod, XF86MonBrightnessDown, exec, brightnessctl set 100%- bindm=$mainMod, mouse:272, movewindow bindm=$mainMod, mouse:273, resizewindow exec-once=systemctl --user import-environment & exec-once=hash dbus-update-activation-environment 2>/dev/null & exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP & exec-once=poweralertd & exec-once=waybar & exec-once=swaync & exec-once=nm-applet & exec-once=blueman-applet & exec-once=wl-paste --watch cliphist store & exec-once=pypr & exec-once=hyprpaper & exec-once=hyprctl setcursor Bibata-Modern-Ice 24 & exec-once=[workspace 5 silent] obsidian exec-once=hyprlock exec-once=lxqt-policykit-agent exec-once=windowstate & exec-once=toggleurgent & exec-once=groupbind-run & layerrule=blur, waybar layerrule=blur, rofi layerrule=blur, launcher layerrule=dimaround, launcher layerrule=noanim, launcher layerrule=animation slide right, swaync-control-center windowrulev2=noblur,class:(Xdg-desktop-portal-gtk) windowrulev2=size 75% 80%,class:(Xdg-desktop-portal-gtk),title:(Open Files) windowrulev2=size 75% 80%,class:(Xdg-desktop-portal-gtk),title:(All Files) windowrulev2=size 50% 55%,class:(pulsemixer) windowrulev2=float,class:^(net.davidotek.pupgui2)$ windowrulev2=float,class:^(yad)$ windowrulev2=float,class:^(qt5ct)$ windowrulev2=float,class:^(nwg-look)$ windowrulev2=float,class:^(org.kde.ark)$ windowrulev2=float,class:^(pavucontrol)$ windowrulev2=float,class:^(blueman-manager)$ windowrulev2=float,class:^(nm-applet)$ windowrulev2=float,class:^(nm-connection-editor)$ windowrulev2=float,class:^(org.kde.polkit-kde-authentication-agent-1)$ windowrulev2=float,class:^(com.obsproject.Studio)$,title:^(Controls)$ windowrulev2=float,class:(Xdg-desktop-portal-gtk),title:(Open Files) windowrulev2=float,class:(Xdg-desktop-portal-gtk),title:(All Files) windowrulev2=float,class:(pulsemixer) windowrulev2=fullscreen,class:(mpv) windowrulev2=fullscreen,class:(com.stremio.stremio) windowrulev2=tile,class:(Brave-browser),title:(inoreader) windowrulev2=tile,class:(Brave-browser),title:(chat.openai) windowrulev2=tile,class:(Brave-browser),title:(gemini) windowrulev2=tile,class:(Brave-browser),title:(copilot.microsoft.com) windowrulev2=tile,class:(Microsoft-edge),title:(copilot.microsoft.com) windowrulev2=tile,class:(Brave-browser),title:(todoist) windowrulev2=tile,class:(Brave-browser),title:(monkeytype) windowrulev2=tile,class:(scrcpy) windowrulev2=group set,class:(Brave-browser),title:(chat.openai) windowrulev2=group set,class:(Brave-browser),title:(gemini) windowrulev2=group set,class:(Brave-browser),title:(copilot.microsoft.com) windowrulev2=group set,class:(Microsoft-edge),title:(copilot.microsoft.com) windowrulev2=group set,class:(dictionary) windowrulev2=group set,class:(translate) windowrulev2=workspace 2, class:(Brave-browser) windowrulev2=workspace 3, class:(VSCodium) windowrulev2=workspace 3, title:(VSCodium) windowrulev2=workspace 3, class:(neovim) windowrulev2=workspace 4, class:(thunar) windowrulev2=workspace 4, class:(Thunar) windowrulev2=workspace 4, class:(yazi) windowrulev2=workspace 5, class:(obsidian) windowrulev2=workspace 5, class:(scrcpy) windowrulev2=workspace 6, title:(Zotero) windowrulev2=workspace 6, title:(calibre-gui) windowrulev2=workspace 7, class:(discord) windowrulev2=workspace 7, class:(vesktop) windowrulev2=workspace 8, class:(mpv) windowrulev2=workspace 8, class:(com.stremio.stremio) windowrulev2=workspace 8, class:(steam) windowrulev2=workspace special:music silent, class:(Spotify) windowrulev2=workspace special:music silent, class:(spotify_tui) windowrulev2=workspace special:mail, class:(thunderbird) windowrulev2=workspace special:anki, class:(Anki) windowrulev2=workspace special:anki, class:(anki) windowrulev2=workspace special:rss silent,class:(Brave-browser),title:(inoreader) windowrulev2=workspace special:ai silent,class:(Brave-browser),title:(chat.openai) windowrulev2=workspace special:ai silent,class:(Brave-browser),title:(gemini) windowrulev2=workspace special:ai silent,class:(Brave-browser),title:(copilot.microsoft.com) windowrulev2=workspace special:ai silent,class:(Microsoft-edge),title:(copilot.microsoft.com) windowrulev2=workspace special:tasks silent,class:(Brave-browser),title:(todoist) windowrulev2=workspace special:type silent,class:(Brave-browser),title:(monkeytype) windowrulev2=workspace special:dict silent,class:(dictionary) windowrulev2=workspace special:dict silent,class:(translate) workspace=1 workspace=2 workspace=3 workspace=4 workspace=5 workspace=6 workspace=7 workspace=8 workspace=9 workspace=10 workspace=special:scratchpad,gapsin:7,gapsout:64 workspace=special:obsidian,gapsin:7,gapsout:64,on-created-empty:obsidianspecial workspace=special:music,on-created-empty:spotify workspace=special:mail,gapsin:7,gapsout:64,on-created-empty:thunderbird workspace=special:rss,gapsin:7,gapsout:64,on-created-empty:brave --app=https://inoreader.com workspace=special:ai,on-created-empty:autostart-ai workspace=special:anki,gapsin:7,gapsout:64,on-created-empty:anki workspace=special:tasks,gapsin:7,gapsout:64,on-created-empty:brave --app=https://app.todoist.com workspace=special:dict,gapsin:7,gapsout:64,on-created-empty:autostart-dict workspace=special:type,gapsin:7,gapsout:64,on-created-empty:brave --app=https://monkeytype.com workspace=special:sound,on-created-empty:kitty --title pulsemixer --class pulsemixer -e pulsemixer workspace=s[false] f[1],gapsin:0,gapsout:0 monitor=,preferred,auto,auto xwayland { force_zero_scaling = true } ======Config-End======== ```

Description

When I use focusworkspaceoncurrentmonitor dispatcher and the previous workspace is empty, this error appears:

Command:

hyprctl dispatch focusworkspaceoncurrentmonitor previous

Output:

focusWorkspaceOnCurrentMonitor invalid workspace!

When I use workspace previous, instead of focusworkspaceoncurrentmonitor previous, everything works as expected, so this bug is only related to this specific dispatcher.

How to reproduce

  1. Switch to empty workspace
  2. Switch to non-empty workspace
  3. Exec in terminal: hyprctl dispatch focusworkspaceoncurrentmonitor previous

Crash reports, logs, images, videos

No response

luravoid commented 1 week ago

any feedback on this issue?

vaxerski commented 6 days ago

MRs welcome