1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-14 09:42:10 -04:00

keybinds: fix empty string args, more writable provider options

This commit is contained in:
bbedward
2026-01-07 15:38:44 -05:00
parent 3dd21382ba
commit db1de9df38
15 changed files with 644 additions and 255 deletions

View File

@@ -187,7 +187,15 @@ func (n *NiriProvider) formatRawAction(action string, args []string) string {
}
}
return action + " " + strings.Join(args, " ")
quotedArgs := make([]string, len(args))
for i, arg := range args {
if arg == "" {
quotedArgs[i] = `""`
} else {
quotedArgs[i] = arg
}
}
return action + " " + strings.Join(quotedArgs, " ")
}
func (n *NiriProvider) formatKey(kb *NiriKeyBinding) string {
@@ -293,9 +301,15 @@ func (n *NiriProvider) loadOverrideBinds() (map[string]*overrideBind, error) {
continue
}
keyStr := parser.formatBindKey(kb)
action := n.buildActionFromNode(child)
if action == "" {
action = n.formatRawAction(kb.Action, kb.Args)
}
binds[keyStr] = &overrideBind{
Key: keyStr,
Action: n.formatRawAction(kb.Action, kb.Args),
Action: action,
Description: kb.Description,
Options: n.extractOptions(child),
}
@@ -305,6 +319,36 @@ func (n *NiriProvider) loadOverrideBinds() (map[string]*overrideBind, error) {
return binds, nil
}
func (n *NiriProvider) buildActionFromNode(bindNode *document.Node) string {
if len(bindNode.Children) == 0 {
return ""
}
actionNode := bindNode.Children[0]
kdlStr := strings.TrimSpace(actionNode.String())
if kdlStr == "" {
return ""
}
return n.kdlActionToInternal(kdlStr)
}
func (n *NiriProvider) kdlActionToInternal(kdlAction string) string {
parts := n.parseActionParts(kdlAction)
if len(parts) == 0 {
return kdlAction
}
for i, part := range parts {
if part == "" {
parts[i] = `""`
}
}
return strings.Join(parts, " ")
}
func (n *NiriProvider) extractOptions(node *document.Node) map[string]any {
if node.Properties == nil {
return make(map[string]any)