Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cli: add callJson ipc subcommand #22

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

jmoggr
Copy link

@jmoggr jmoggr commented Mar 2, 2025

The arguments parser for the ipc call subcommand allow_extra_args does not gracefully handle many JSON strings. It will allow '{"hello": "world"}', but it will strip out square brackets and split the JSON string on commas, among other issues.

This is worked around by adding a new callJson ipc subcommand which accepts one string argument which is passed directly to the ipc call.

I understand that this is kind of hacky, and am open to modify this or taking a different approach. I do think something should be done for JSON because it can be somewhat frustrating to debug/learn when simple cases work but complex cases fail. At the very least I could ditch this change and update the documentation for arguments.

The `arguments` parser for the `ipc call` subcommand `allow_extra_args`
does not gracefully handle many JSON strings. It will allow
'{"hello": "world"}', but it will strip out square brackets and split
the JSON string on commas.

This is worked around by adding a new `callJson` ipc subcommand which
accepts one string argument which is passed directly to the ipc call.
@outfoxxed
Copy link
Member

This doesn't do anything differently than a normal call, which already don't strip out square brackets or split on commas.

@outfoxxed outfoxxed closed this Mar 2, 2025
@jmoggr
Copy link
Author

jmoggr commented Mar 2, 2025

which already don't strip out square brackets or split on commas.

That is not the behavior I am experiencing

splitting on commas:
 qs ipc call jsonTarget sendJson '[{"a": 1},{"b":2}]'
Too many arguments provided (1 required but 2 were provided.)
Function definition: function sendJson(jsonString: string): void

stripping brackets:
 qs ipc call jsonTarget sendJson '[]'
Too few arguments provided (1 required but 0 were provided.)
Function definition: function sendJson(jsonString: string): void

code:

import Quickshell
import Quickshell.Io

ShellRoot {
    IpcHandler {
        target: "jsonTarget"

        function sendJson(jsonString: string): void {
            console.log(jsonString);
        }
    }
}

@outfoxxed
Copy link
Member

Looked into it. Appears to be a misfeature in the argument parser we use when parsing lists, which can't be disabled. Note that it will only trigger when the first character is '[' and the last character is ']'. I recommend wrapping it in an object for now to avoid those characters.

As it stands I don't want to merge this because it should just work without another subcommand.

@outfoxxed outfoxxed reopened this Mar 3, 2025
@outfoxxed outfoxxed force-pushed the master branch 2 times, most recently from 8e572bc to eabf79e Compare March 19, 2025 22:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants