1
0
mirror of https://github.com/dcarrillo/dotfiles.git synced 2025-10-09 01:39:08 +00:00

[polybar] Improve polytasks

This commit is contained in:
2025-09-30 18:23:00 +02:00
parent 9fd1c3757a
commit 007c830330
2 changed files with 13 additions and 23 deletions

View File

@@ -29,19 +29,19 @@ function kill_polybar
function compile_src function compile_src
{ {
pushd $POLYBAR_PATH/scripts/src/polytasks || return pushd $POLYBAR_PATH/scripts/src/polytasks > /dev/null || return
echo "Compiling polytasks..." echo "Compiling polytasks..."
go build -buildvcs=false -ldflags="-s -w" -o $POLYBAR_PATH/scripts/polytasks . go build -buildvcs=false -ldflags="-s -w" -o $POLYBAR_PATH/scripts/polytasks .
popd || return popd > /dev/null || return
} }
function launch_polybar function launch_polybar
{ {
compile_src
for monitor in $(polybar --list-monitors | cut -d":" -f1); do for monitor in $(polybar --list-monitors | cut -d":" -f1); do
export MONITOR=$monitor export MONITOR=$monitor
polybar top -c $POLYBAR_PATH/bar.ini >/dev/null & polybar top -c $POLYBAR_PATH/bar.ini >/dev/null &
done done
compile_src
wait_for_polybar started wait_for_polybar started
} }

View File

@@ -31,6 +31,7 @@ var iconMap = map[string]string{
"org.gnome.evince": "", "org.gnome.evince": "",
"org.gnome.fileroller": "", "org.gnome.fileroller": "",
"org.gnome.nautilus": "", "org.gnome.nautilus": "",
"org.gnome.papers": "",
"org.gnome.settings": "", "org.gnome.settings": "",
"org.telegram.desktop": "", "org.telegram.desktop": "",
"seahorse": "", "seahorse": "",
@@ -107,7 +108,7 @@ func getWindowList(conn *dbus.Conn) ([]WindowInfo, error) {
success, value, err := evalJS(conn, js) success, value, err := evalJS(conn, js)
if err != nil { 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 var allWindows []WindowInfo
@@ -136,10 +137,10 @@ func getActiveWindow(conn *dbus.Conn) (int, error) {
success, value, err := evalJS(conn, js) success, value, err := evalJS(conn, js)
if err != nil { 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 var id int
if err := json.Unmarshal([]byte(value), &id); err != nil { if err := json.Unmarshal([]byte(value), &id); err != nil {
return 0, fmt.Errorf("failed to parse active window ID: %w", err) 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 return nil
} }
func polyPrintWindowList(conn *dbus.Conn) error { func polyPrintWindowList(windows []WindowInfo, activeID int) {
windows, err := getWindowList(conn)
if err != nil {
return fmt.Errorf("failed to get window list: %w", err)
}
if len(windows) > 0 { if len(windows) > 0 {
fmt.Print("%{T4}Tasks: %{T-}") fmt.Print("%{T4}Tasks: %{T-}")
} }
for _, win := range windows { 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) icon := getIcon(win.Class)
if win.ID == activeID { if win.ID == activeID {
icon = fmt.Sprintf("%s%s%s", activeLeft, icon, activeRight) 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.Printf("%%{T6}%s%%{T-}%%{A}%%{A}", icon)
} }
fmt.Println() fmt.Println()
return nil
} }
func handleCLICommands(conn *dbus.Conn, args []string) error { func handleCLICommands(conn *dbus.Conn, args []string) error {
@@ -290,19 +279,20 @@ func main() {
windows, err := getWindowList(conn) windows, err := getWindowList(conn)
if err != nil { if err != nil {
fmt.Println("Error getting window list:", err)
continue continue
} }
activeID, err := getActiveWindow(conn) activeID, err := getActiveWindow(conn)
if err != nil { if err != nil {
fmt.Println("Error getting active window:", err)
continue continue
} }
if len(windows) != lastWindowCount || activeID != lastActiveWindow { if len(windows) != lastWindowCount || activeID != lastActiveWindow {
if err := polyPrintWindowList(conn); err == nil { polyPrintWindowList(windows, activeID)
lastWindowCount = len(windows) lastWindowCount = len(windows)
lastActiveWindow = activeID lastActiveWindow = activeID
}
} }
} }
} }