diff options
author | Aditya <bluenerd@protonmail.com> | 2023-02-27 20:04:56 +0530 |
---|---|---|
committer | Aditya <bluenerd@protonmail.com> | 2023-02-27 20:04:56 +0530 |
commit | edc449275b6c04445f58b108ca0937a87c1e8430 (patch) | |
tree | 9fd484d58145b616f29a78857cc0b1c8b1c18f05 /oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh | |
parent | 6f5424ca96c4221ef433f545642669e9c104d0ed (diff) |
add zsh
Diffstat (limited to 'oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh')
-rw-r--r-- | oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh b/oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh new file mode 100644 index 0000000..49828d3 --- /dev/null +++ b/oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh @@ -0,0 +1,113 @@ +# JSON Tools +# Adds command line aliases useful for dealing with JSON + +# Check that user-defined method is installed +if [[ -n "$JSONTOOLS_METHOD" ]]; then + (( $+commands[$JSONTOOLS_METHOD] )) || unset JSONTOOLS_METHOD +fi + +# If method undefined, find the first one that is installed +if [[ -z "$JSONTOOLS_METHOD" ]]; then + for JSONTOOLS_METHOD in node python3 ruby; do + # If method found, break out of loop + (( $+commands[$JSONTOOLS_METHOD] )) && break + # Otherwise unset the variable + unset JSONTOOLS_METHOD + done + + # If no methods were found, exit the plugin + [[ -n "$JSONTOOLS_METHOD" ]] || return 1 +fi + +# Define json tools for each method +case "$JSONTOOLS_METHOD" in + node) + # node doesn't make it easy to deal with stdin, so we pass it as an argument with xargs -0 + function pp_json() { + xargs -0 node -e 'console.log(JSON.stringify(JSON.parse(process.argv[1]), null, 4));' + } + function is_json() { + xargs -0 node -e ' + try { + json = JSON.parse(process.argv[1]); + console.log("true"); + process.exit(0); + } catch (e) { + console.log("false"); + process.exit(1); + } + ' + } + function urlencode_json() { + xargs -0 node -e "console.log(encodeURIComponent(process.argv[1]))" + } + function urldecode_json() { + xargs -0 node -e "console.log(decodeURIComponent(process.argv[1]))" + } + ;; + python3) + function pp_json() { + python3 -c 'import sys; del sys.path[0]; import runpy; runpy._run_module_as_main("json.tool")' + } + function is_json() { + python3 -c ' +import sys; del sys.path[0]; +import json +try: + json.loads(sys.stdin.read()) + print("true"); sys.exit(0) +except ValueError: + print("false"); sys.exit(1) + ' + } + function urlencode_json() { + python3 -c ' +import sys; del sys.path[0]; +from urllib.parse import quote_plus +print(quote_plus(sys.stdin.read())) + ' + } + function urldecode_json() { + python3 -c ' +import sys; del sys.path[0]; +from urllib.parse import unquote_plus +print(unquote_plus(sys.stdin.read())) + ' + } + ;; + ruby) + function pp_json() { + ruby -e ' + require "json" + require "yaml" + puts JSON.parse(STDIN.read).to_yaml + ' + } + function is_json() { + ruby -e ' + require "json" + begin + puts !!JSON.parse(STDIN.read); exit(0) + rescue JSON::ParserError + puts false; exit(1) + end + ' + } + function urlencode_json() { + ruby -e 'require "cgi"; puts CGI.escape(STDIN.read)' + } + function urldecode_json() { + ruby -e 'require "cgi"; puts CGI.unescape(STDIN.read)' + } + ;; +esac +unset JSONTOOLS_METHOD + +## Add NDJSON support + +function {pp,is,urlencode,urldecode}_ndjson() { + local json jsonfunc="${0//ndjson/json}" + while read -r json; do + $jsonfunc <<< "$json" + done +} |