我在 JavaScript 中有一個名為 LIPS 的 Scheme 解釋器。我有可執行文件,它在終端仿真器中工作,但在 GNU Emacs 劣質模式(使用run-scheme函數)中被破壞。我已經使用 Readline 重現了這個簡單的 Node.js REPL 的問題:var prompt = 'lips> ';var continuePrompt = '... ';const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: prompt, terminal: !!process.stdin.isTTY // true in Emacs});if (process.stdin.isTTY) { rl.prompt();}rl.on('line', function(line) { if (process.stdin.isTTY) { rl.prompt(); }});第一個問題是,當我輸入重復的輸出內容時,它是文字命令行回顯:lips> 101010lips> '(1 2 3)'(1 2 3)(1 2 3)lips>我找到了解決方案,其中:(setq comint-process-echoes t)但另一個問題是,在調整大小時,它會不斷追加提示。所以我有這個:lips> lips> lips> lips> lips>這是提示,因為如果我設置:(setq comint-prompt-read-only t)我無法刪除該文本。編輯:如果我調用 (read) 也使用 readline 獲取輸入,也會發生同樣的情況,它會不斷添加空格。我正在閱讀 Node.js 源代碼,它也使用 readline 并且在運行時運行良好run-js,Kawa Scheme Interpreter 可以正常工作,但它不使用 readline: (setq inferior-js-program-command "node --interactive") (run-js)這行得通,它不是運行方案,但它是相同的模式,我也嘗試run-js使用我的方案解釋器運行相同的代碼,并且它在調整大小時也顯示相同的提示重復。 (setq inferior-js-program-command "/home/kuba/projects/jcubic/lips/bin/lips.js") (run-js)
如何編寫適用于 GNU Emacs 的 Node.js REPL?
胡子哥哥
2022-06-09 17:06:54