From c6d775bd0c52748c2efa910aaf754cbef43d16b8 Mon Sep 17 00:00:00 2001 From: Austin Miller Date: Sun, 21 Jan 2024 12:59:07 -0800 Subject: [PATCH] guile: append stray output to log This checks to see if there was a result found and if so gathers all text from after the end of the last prompt until '$n = ...'. If not then everything from the last prompt up until the next is gathered. In either scenario the stray text is appended to Conjure's log. This makes the Guile client more consistent with the built-in Fennel client. Also, this uses Fennel's support for multiple cond/body pairs within if forms thus removing a nested if. --- fnl/conjure/client/guile/socket.fnl | 34 +++++++++++++++++------------ fnl/conjure/sponsors.fnl | 1 - lua/conjure/client/guile/socket.lua | 25 +++++++++++++-------- lua/conjure/sponsors.lua | 2 +- 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/fnl/conjure/client/guile/socket.fnl b/fnl/conjure/client/guile/socket.fnl index ac63eb21..474303a9 100644 --- a/fnl/conjure/client/guile/socket.fnl +++ b/fnl/conjure/client/guile/socket.fnl @@ -115,22 +115,28 @@ (defn- parse-guile-result [s] (let [prompt (s:find "scheme@%([%w%-%s]+%)> ")] - (if prompt - (let [(ind1 ind2 result) (s:find "%$%d+ = ([^\n]+)\n")] - (if result - {:done? true - :error? false - :result result} - {:done? true - :error? false - :result (s:sub 1 (- prompt 1))})) - (if (s:find "scheme@%([%w%-%s]+%) %[%d+%]>") + (if + prompt + (let [(ind1 _ result) (s:find "%$%d+ = ([^\n]+)\n") + stray-output (s:sub + 1 + (- (if result ind1 prompt) 1))] + (when (> (length stray-output) 0) + (log.append + (-> (text.trim-last-newline stray-output) + (text.prefixed-lines "; (out) ")))) {:done? true - :error? true - :result nil} - {:done? false :error? false - :result s})))) + :result result}) + + (s:find "scheme@%([%w%-%s]+%) %[%d+%]>") + {:done? true + :error? true + :result nil} + + {:done? false + :error? false + :result s}))) (defn connect [opts] (disconnect) diff --git a/fnl/conjure/sponsors.fnl b/fnl/conjure/sponsors.fnl index 756d9371..743bad08 100644 --- a/fnl/conjure/sponsors.fnl +++ b/fnl/conjure/sponsors.fnl @@ -1,5 +1,4 @@ [ ;; Generated by: make sponsors -"AbhinavOmprakash" "Akeboshiwind" "aleksandersumowski" "AlexChalk" diff --git a/lua/conjure/client/guile/socket.lua b/lua/conjure/client/guile/socket.lua index b7e34336..1ebcc50d 100644 --- a/lua/conjure/client/guile/socket.lua +++ b/lua/conjure/client/guile/socket.lua @@ -156,18 +156,25 @@ _2amodule_2a["disconnect"] = disconnect local function parse_guile_result(s) local prompt = s:find("scheme@%([%w%-%s]+%)> ") if prompt then - local ind1, ind2, result = s:find("%$%d+ = ([^\n]+)\n") - if result then - return {["done?"] = true, result = result, ["error?"] = false} - else - return {["done?"] = true, result = s:sub(1, (prompt - 1)), ["error?"] = false} + local ind1, _0, result = s:find("%$%d+ = ([^\n]+)\n") + local stray_output + local function _21_() + if result then + return ind1 + else + return prompt + end end - else - if s:find("scheme@%([%w%-%s]+%) %[%d+%]>") then - return {["done?"] = true, ["error?"] = true, result = nil} + stray_output = s:sub(1, (_21_() - 1)) + if (#stray_output > 0) then + log.append(text["prefixed-lines"](text["trim-last-newline"](stray_output), "; (out) ")) else - return {result = s, ["done?"] = false, ["error?"] = false} end + return {["done?"] = true, result = result, ["error?"] = false} + elseif s:find("scheme@%([%w%-%s]+%) %[%d+%]>") then + return {["done?"] = true, ["error?"] = true, result = nil} + else + return {result = s, ["done?"] = false, ["error?"] = false} end end _2amodule_locals_2a["parse-guile-result"] = parse_guile_result diff --git a/lua/conjure/sponsors.lua b/lua/conjure/sponsors.lua index 4dec0e77..edc4d6bc 100644 --- a/lua/conjure/sponsors.lua +++ b/lua/conjure/sponsors.lua @@ -1,2 +1,2 @@ local _2afile_2a = "fnl/conjure/sponsors.fnl" -return {"AbhinavOmprakash", "Akeboshiwind", "aleksandersumowski", "AlexChalk", "alloy-d", "anthony-khong", "axvr", "beanpuppy", "BerkeleyTrue", "campbellr", "daveyarwood", "davidmh", "dharrigan", "djwhitt", "edlandm", "extradosages", "frenchy64", "fuadsaud", "harrisoncramer", "harrygallagher4", "jacobobryant", "jcpsantiago", "jkrasnay", "ketansrivastav", "kevinkrouse", "lucasdf", "lucaslollobrigida", "martinklepsch", "NickCellino", "nickcernis", "orestis", "penryu", "pyrmont", "qnkhuat", "rafaeldelboni", "rbatista", "rgm", "stelcodes", "thiru", "TimoKramer", "trev-dev", "valsen", "victorb", "zhming0"} \ No newline at end of file +return {"Akeboshiwind", "aleksandersumowski", "AlexChalk", "alloy-d", "anthony-khong", "axvr", "beanpuppy", "BerkeleyTrue", "campbellr", "daveyarwood", "davidmh", "dharrigan", "djwhitt", "edlandm", "extradosages", "frenchy64", "fuadsaud", "harrisoncramer", "harrygallagher4", "jacobobryant", "jcpsantiago", "jkrasnay", "ketansrivastav", "kevinkrouse", "lucasdf", "lucaslollobrigida", "martinklepsch", "NickCellino", "nickcernis", "orestis", "penryu", "pyrmont", "qnkhuat", "rafaeldelboni", "rbatista", "rgm", "stelcodes", "thiru", "TimoKramer", "trev-dev", "valsen", "victorb", "zhming0"} \ No newline at end of file