mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-04 04:42:05 -04:00
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/AvengeMedia/DankMaterialShell/core/internal/log"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var randrCmd = &cobra.Command{
|
|
Use: "randr",
|
|
Short: "Query output display information",
|
|
Long: "Query Wayland compositor for output names, scales, resolutions and refresh rates via zwlr-output-management",
|
|
Run: runRandr,
|
|
}
|
|
|
|
func init() {
|
|
randrCmd.Flags().Bool("json", false, "Output in JSON format")
|
|
}
|
|
|
|
type randrJSON struct {
|
|
Outputs []randrOutput `json:"outputs"`
|
|
}
|
|
|
|
func runRandr(cmd *cobra.Command, args []string) {
|
|
outputs, err := queryRandr()
|
|
if err != nil {
|
|
log.Fatalf("%v", err)
|
|
}
|
|
|
|
jsonFlag, _ := cmd.Flags().GetBool("json")
|
|
|
|
if jsonFlag {
|
|
data, err := json.Marshal(randrJSON{Outputs: outputs})
|
|
if err != nil {
|
|
log.Fatalf("failed to marshal JSON: %v", err)
|
|
}
|
|
fmt.Println(string(data))
|
|
return
|
|
}
|
|
|
|
for i, out := range outputs {
|
|
if i > 0 {
|
|
fmt.Println()
|
|
}
|
|
status := "enabled"
|
|
if !out.Enabled {
|
|
status = "disabled"
|
|
}
|
|
fmt.Printf("%s (%s)\n", out.Name, status)
|
|
fmt.Printf(" Scale: %.4g\n", out.Scale)
|
|
fmt.Printf(" Resolution: %dx%d\n", out.Width, out.Height)
|
|
if out.Refresh > 0 {
|
|
fmt.Printf(" Refresh: %.2f Hz\n", float64(out.Refresh)/1000.0)
|
|
}
|
|
}
|
|
}
|