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
{
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
}

View File

@@ -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 {
polyPrintWindowList(windows, activeID)
lastWindowCount = len(windows)
lastActiveWindow = activeID
}
}
}
}