Added MVP
This commit is contained in:
parent
ba9601bb8d
commit
b8155e4a74
|
@ -0,0 +1,5 @@
|
||||||
|
module gitea.ashishdsouza.com/ashish/i3-last-scratchpad
|
||||||
|
|
||||||
|
go 1.21.12
|
||||||
|
|
||||||
|
require github.com/mdirkse/i3ipc v0.0.0-20171212230543-ac599a872375 // indirect
|
|
@ -0,0 +1,2 @@
|
||||||
|
github.com/mdirkse/i3ipc v0.0.0-20171212230543-ac599a872375 h1:PPiUjQrUS1oVKBPeRBa4uP8z6jkRgbwsD88QAzXM6Eo=
|
||||||
|
github.com/mdirkse/i3ipc v0.0.0-20171212230543-ac599a872375/go.mod h1:QCgFg+QImlvQdfX7W8i1ueSJJYNOeOKEApyCXQnyt+w=
|
|
@ -0,0 +1,22 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "github.com/mdirkse/i3ipc"
|
||||||
|
|
||||||
|
import "gitea.ashishdsouza.com/ashish/i3-last-scratchpad/notify"
|
||||||
|
import "gitea.ashishdsouza.com/ashish/i3-last-scratchpad/scratchpad"
|
||||||
|
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var ipcSocket, socketErr = i3ipc.GetIPCSocket()
|
||||||
|
if socketErr != nil {
|
||||||
|
notify.SendNotification("Failed to acquire i3 IPC socket", notify.CriticalPriority)
|
||||||
|
panic(socketErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
var lastScratchpadNode = scratchpad.GetLastScratchpadNode(ipcSocket)
|
||||||
|
if lastScratchpadNode == nil {
|
||||||
|
notify.SendNotification("Scratchpad is empty", notify.NormalPriority)
|
||||||
|
} else {
|
||||||
|
scratchpad.ShowScratchpadNode(ipcSocket, lastScratchpadNode)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package notify
|
||||||
|
|
||||||
|
import "os/exec"
|
||||||
|
|
||||||
|
|
||||||
|
type i3Urgency string
|
||||||
|
|
||||||
|
const (
|
||||||
|
LowPriority i3Urgency = "low"
|
||||||
|
NormalPriority i3Urgency = "normal"
|
||||||
|
CriticalPriority i3Urgency = "critical"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SendNotification(msg string, priority i3Urgency) {
|
||||||
|
var cmd = exec.Command("notify-send", "-u", string(priority), msg)
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func FatalNotification(msg string) {
|
||||||
|
SendNotification(msg, CriticalPriority)
|
||||||
|
panic(msg)
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package scratchpad
|
||||||
|
|
||||||
|
import "github.com/mdirkse/i3ipc"
|
||||||
|
|
||||||
|
import "gitea.ashishdsouza.com/ashish/i3-last-scratchpad/notify"
|
||||||
|
|
||||||
|
|
||||||
|
func GetLastScratchpadNode(ipcSocket *i3ipc.IPCSocket) *i3ipc.I3Node {
|
||||||
|
var root, err = ipcSocket.GetTree()
|
||||||
|
if err != nil {
|
||||||
|
notify.SendNotification("Failed to fetch layout tree", notify.CriticalPriority)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var leaves = root.Leaves()
|
||||||
|
for i := len(leaves) - 1; i >= 0; i-- {
|
||||||
|
if leaves[i].Parent == nil {
|
||||||
|
notify.FatalNotification("Leaf node nas no parent")
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://i3wm.org/docs/ipc.html#_tree_reply
|
||||||
|
if leaves[i].Parent.Scratchpad_State != "none" {
|
||||||
|
return leaves[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package scratchpad
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
import "github.com/mdirkse/i3ipc"
|
||||||
|
|
||||||
|
import "gitea.ashishdsouza.com/ashish/i3-last-scratchpad/notify"
|
||||||
|
|
||||||
|
|
||||||
|
func ShowScratchpadNode(ipcSocket *i3ipc.IPCSocket, node *i3ipc.I3Node) {
|
||||||
|
var i3Command = fmt.Sprintf("[con_id=%d] scratchpad show", node.ID)
|
||||||
|
if success, err := ipcSocket.Command(i3Command); !success {
|
||||||
|
notify.SendNotification("Failed to show scratchpad window", notify.CriticalPriority)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue