66 lines
1.7 KiB
Bash
Executable File
66 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# SendVerbatim - Send the selected text to ollie as-is (wrapped in code fence)
|
|
#
|
|
# Usage: Select text, then middle-click SendVerbatim in the tag
|
|
|
|
set -euo pipefail
|
|
|
|
if [[ -z "${winid:-}" ]]; then
|
|
echo "SendVerbatim must be run from within acme" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Get the window name (filename) from the tag
|
|
filename=$(9p read acme/$winid/tag | awk '{print $1}')
|
|
|
|
# Read the current selection
|
|
echo 'addr=dot' | 9p write acme/$winid/ctl
|
|
selection=$(9p read acme/$winid/xdata 2>/dev/null || true)
|
|
|
|
if [[ -z "$selection" ]]; then
|
|
echo "No selection. Select some text first." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Ensure acme session/agent exists
|
|
eval $(acme-ollie-ensure)
|
|
|
|
# Detect language from file extension
|
|
lang=""
|
|
if [[ -n "$filename" && "$filename" != *"+Errors" && "$filename" != "+*" ]]; then
|
|
ext="${filename##*.}"
|
|
case "$ext" in
|
|
go) lang="go" ;;
|
|
c|h) lang="c" ;;
|
|
cpp|cc|cxx|hpp|hxx) lang="cpp" ;;
|
|
py) lang="python" ;;
|
|
js) lang="javascript" ;;
|
|
ts) lang="typescript" ;;
|
|
rs) lang="rust" ;;
|
|
rb) lang="ruby" ;;
|
|
java) lang="java" ;;
|
|
kt) lang="kotlin" ;;
|
|
sh|bash) lang="bash" ;;
|
|
zsh) lang="zsh" ;;
|
|
pl) lang="perl" ;;
|
|
lua) lang="lua" ;;
|
|
sql) lang="sql" ;;
|
|
html) lang="html" ;;
|
|
css) lang="css" ;;
|
|
json) lang="json" ;;
|
|
yaml|yml) lang="yaml" ;;
|
|
toml) lang="toml" ;;
|
|
xml) lang="xml" ;;
|
|
md) lang="markdown" ;;
|
|
diff) lang="diff" ;;
|
|
*) lang="" ;;
|
|
esac
|
|
fi
|
|
|
|
# Build and send the prompt
|
|
prompt="\`\`\`${lang}
|
|
$selection
|
|
\`\`\`"
|
|
|
|
echo "$prompt" | o "$OLLIE_SESSION/$OLLIE_AGENT" prompt
|