如何从node.js REPL启动类似vi或emacs的编辑器



我想从node.js REPL启动一个类似vi或emacs的编辑器。

到目前为止,我已经尝试了两种方法:

  1. 节点加载项

    以下是我的editor.cc的样子:

    const char *tempFile = "TEMP_FILE"; // File to be opened with the editor
    Handle<Value> launchEditor (const Arguments& args) {
        const char *editor = "vi";
        Local<String> buffer;
        pid_t pid = fork();
        if (pid == 0) {
            execlp(editor, editor, tempFile, NULL);
            // Exit with "command-not-found" if above fails.
            exit(127);
        } else {
            waitpid(pid, 0, 0);
            char *fileContent = readTempFile(); // Simple file IO code to read file.
            buffer = String::New(fileContent);
            free(fileContent);
        }
        return buffer;
    }
    
    // MAKE IT A NODE MODULE
    void Init(Handle<Object> target) {
        target->Set(String::NewSymbol("editor"), FunctionTemplate::New(launchEditor)->GetFunction());
    }
    NODE_MODULE(editor, Init)
    

    当我有节点v0.6.12(使用node-waf编译)时,这就起作用了,但是当我将node更新到v0.8.1时,此代码停止工作(编译具有node-gyp)。编辑器根本没有出现,文件读取并返回内容(使用emacs),或者编辑器作为后台运行进程(与vi)!有什么需要我更改的地方才能使用0.8.1吗?

    即使编辑器是作为后台进程启动的,我也可以从代码本身将其带到前台吗?

  2. 子进程模块

    spawn = require('child_process').spawn;
    editor = spawn('emacs', ['TEMP_FILE']);
    

    但这并不能正常工作。对于emacs,它显示错误input is not a tty和vi给出了一个奇怪的接口。

有人能帮助解决上面的任何一个问题,或者提出其他可行的解决方案吗?

大约一周前我刚刚偶然发现了一个,你应该试试:节点编辑器

最新更新