mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-24 13:32:50 -05:00
niri: fix some keybind tab issues
- Fix args for screenshot - move-column stuff is focus=true by default - Parsing fixes part of #914
This commit is contained in:
@@ -371,6 +371,18 @@ func (n *NiriProvider) buildActionNode(action string) *document.Node {
|
||||
|
||||
node.SetName(parts[0])
|
||||
for _, arg := range parts[1:] {
|
||||
if strings.Contains(arg, "=") {
|
||||
kv := strings.SplitN(arg, "=", 2)
|
||||
switch kv[1] {
|
||||
case "true":
|
||||
node.AddProperty(kv[0], true, "")
|
||||
case "false":
|
||||
node.AddProperty(kv[0], false, "")
|
||||
default:
|
||||
node.AddProperty(kv[0], kv[1], "")
|
||||
}
|
||||
continue
|
||||
}
|
||||
node.AddArgument(arg, "")
|
||||
}
|
||||
return node
|
||||
@@ -379,7 +391,7 @@ func (n *NiriProvider) buildActionNode(action string) *document.Node {
|
||||
func (n *NiriProvider) parseActionParts(action string) []string {
|
||||
var parts []string
|
||||
var current strings.Builder
|
||||
var inQuote, escaped bool
|
||||
var inQuote, escaped, wasQuoted bool
|
||||
|
||||
for _, r := range action {
|
||||
switch {
|
||||
@@ -389,17 +401,19 @@ func (n *NiriProvider) parseActionParts(action string) []string {
|
||||
case r == '\\':
|
||||
escaped = true
|
||||
case r == '"':
|
||||
wasQuoted = true
|
||||
inQuote = !inQuote
|
||||
case r == ' ' && !inQuote:
|
||||
if current.Len() > 0 {
|
||||
if current.Len() > 0 || wasQuoted {
|
||||
parts = append(parts, current.String())
|
||||
current.Reset()
|
||||
wasQuoted = false
|
||||
}
|
||||
default:
|
||||
current.WriteRune(r)
|
||||
}
|
||||
}
|
||||
if current.Len() > 0 {
|
||||
if current.Len() > 0 || wasQuoted {
|
||||
parts = append(parts, current.String())
|
||||
}
|
||||
return parts
|
||||
@@ -508,6 +522,10 @@ func (n *NiriProvider) writeBindNode(sb *strings.Builder, bind *overrideBind, in
|
||||
sb.WriteString(" ")
|
||||
n.writeArg(sb, arg.ValueString(), forceQuote)
|
||||
}
|
||||
if child.Properties.Exist() {
|
||||
sb.WriteString(" ")
|
||||
sb.WriteString(strings.TrimLeft(child.Properties.String(), " "))
|
||||
}
|
||||
}
|
||||
sb.WriteString("; }\n")
|
||||
}
|
||||
|
||||
@@ -265,6 +265,11 @@ func (p *NiriParser) parseKeybindNode(node *document.Node, _ string) *NiriKeyBin
|
||||
for _, arg := range actionNode.Arguments {
|
||||
args = append(args, arg.ValueString())
|
||||
}
|
||||
if actionNode.Properties != nil {
|
||||
if val, ok := actionNode.Properties.Get("focus"); ok {
|
||||
args = append(args, "focus="+val.String())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var description string
|
||||
|
||||
@@ -602,8 +602,24 @@ func TestNiriParseActionWithProperties(t *testing.T) {
|
||||
for _, kb := range result.Section.Keybinds {
|
||||
switch kb.Action {
|
||||
case "move-column-to-workspace":
|
||||
if len(kb.Args) != 1 {
|
||||
t.Errorf("move-column-to-workspace should have 1 arg, got %d", len(kb.Args))
|
||||
if len(kb.Args) != 2 {
|
||||
t.Errorf("move-column-to-workspace should have 2 args (index + focus), got %d", len(kb.Args))
|
||||
}
|
||||
hasIndex := false
|
||||
hasFocus := false
|
||||
for _, arg := range kb.Args {
|
||||
if arg == "1" || arg == "2" {
|
||||
hasIndex = true
|
||||
}
|
||||
if arg == "focus=false" {
|
||||
hasFocus = true
|
||||
}
|
||||
}
|
||||
if !hasIndex {
|
||||
t.Errorf("move-column-to-workspace missing index arg")
|
||||
}
|
||||
if !hasFocus {
|
||||
t.Errorf("move-column-to-workspace missing focus=false arg")
|
||||
}
|
||||
case "next-window":
|
||||
if kb.Key != "Tab" {
|
||||
|
||||
Reference in New Issue
Block a user