将Emacs缓冲区传递给C.

时间:2016-07-30 22:16:54

标签: c emacs

我想写一个C程序,它接收一个Emacs缓冲区的区域,并用它的输出替换该区域。

这是我的C程序:

#include <stdio.h>

int main(int argc, char *argv[]) {
  printf("The argument given was: %s\n",argv[1]);
}

我用

编译它
g++ -Wall -o c_example c_example.c

并将二进制文件放入我的路径中。当我做的时候

c_example Hello

在终端,我得到了

The argument given was: Hello

但如果我在Emacs缓冲区中选择“Hello”并使用带有“C-u M- | c_example”的shell-command-on-region,则将其替换为

The argument given was: (null)

代替。这是为什么?

1 个答案:

答案 0 :(得分:4)

传递给filter命令的emacs缓冲区的内容不是从命令行检索的,而是从标准输入检索的。您应该使用fgets()<stdio.h>中的任何其他输入函数来阅读它。

试试这个版本:

#include <stdio.h>

int main(void) {
    char line[80];
    if (fgets(line, sizeof line, stdin)) {
        printf("The first line of the buffer is: %s", line);
    }
    return 0;
}