diff --git a/.config/polybar/launch.sh b/.config/polybar/launch.sh index 7f50108..ae2b6ac 100755 --- a/.config/polybar/launch.sh +++ b/.config/polybar/launch.sh @@ -29,19 +29,19 @@ function kill_polybar function compile_src { - pushd $POLYBAR_PATH/scripts/src/polytasks || return + pushd $POLYBAR_PATH/scripts/src/polytasks > /dev/null || return echo "Compiling polytasks..." go build -buildvcs=false -ldflags="-s -w" -o $POLYBAR_PATH/scripts/polytasks . - popd || return + popd > /dev/null || return } function launch_polybar { + compile_src for monitor in $(polybar --list-monitors | cut -d":" -f1); do export MONITOR=$monitor polybar top -c $POLYBAR_PATH/bar.ini >/dev/null & done - compile_src wait_for_polybar started } diff --git a/.config/polybar/scripts/src/polytasks/main.go b/.config/polybar/scripts/src/polytasks/main.go index 50d5dcf..2f95cb7 100644 --- a/.config/polybar/scripts/src/polytasks/main.go +++ b/.config/polybar/scripts/src/polytasks/main.go @@ -31,6 +31,7 @@ var iconMap = map[string]string{ "org.gnome.evince": "", "org.gnome.fileroller": "", "org.gnome.nautilus": "", + "org.gnome.papers": "", "org.gnome.settings": "", "org.telegram.desktop": "", "seahorse": "", @@ -107,7 +108,7 @@ func getWindowList(conn *dbus.Conn) ([]WindowInfo, error) { success, value, err := evalJS(conn, js) if err != nil { - return nil, fmt.Errorf("failed to get window list: %w", err) + return nil, fmt.Errorf("failed to eval for getting window list: %w", err) } var allWindows []WindowInfo @@ -136,10 +137,10 @@ func getActiveWindow(conn *dbus.Conn) (int, error) { success, value, err := evalJS(conn, js) if err != nil { - return 0, fmt.Errorf("failed to get active window: %w", err) + return 0, fmt.Errorf("failed to eval for getting active window: %w", err) } - if success { + if success && value != "" { var id int if err := json.Unmarshal([]byte(value), &id); err != nil { return 0, fmt.Errorf("failed to parse active window ID: %w", err) @@ -199,21 +200,11 @@ func focusOrMinimize(conn *dbus.Conn, windowID int) error { return nil } -func polyPrintWindowList(conn *dbus.Conn) error { - windows, err := getWindowList(conn) - if err != nil { - return fmt.Errorf("failed to get window list: %w", err) - } - +func polyPrintWindowList(windows []WindowInfo, activeID int) { if len(windows) > 0 { fmt.Print("%{T4}Tasks: %{T-}") } for _, win := range windows { - activeID, err := getActiveWindow(conn) - if err != nil { - return fmt.Errorf("failed to get active window: %w", err) - } - icon := getIcon(win.Class) if win.ID == activeID { icon = fmt.Sprintf("%s%s%s", activeLeft, icon, activeRight) @@ -223,8 +214,6 @@ func polyPrintWindowList(conn *dbus.Conn) error { fmt.Printf("%%{T6}%s%%{T-}%%{A}%%{A}", icon) } fmt.Println() - - return nil } func handleCLICommands(conn *dbus.Conn, args []string) error { @@ -290,19 +279,20 @@ func main() { windows, err := getWindowList(conn) if err != nil { + fmt.Println("Error getting window list:", err) continue } activeID, err := getActiveWindow(conn) if err != nil { + fmt.Println("Error getting active window:", err) continue } if len(windows) != lastWindowCount || activeID != lastActiveWindow { - if err := polyPrintWindowList(conn); err == nil { - lastWindowCount = len(windows) - lastActiveWindow = activeID - } + polyPrintWindowList(windows, activeID) + lastWindowCount = len(windows) + lastActiveWindow = activeID } } }