将Emacs缓冲区传递给C

将Emacs缓冲区传递给C,c,emacs,C,Emacs,我想写一个C程序,它接收Emacs缓冲区的一个区域,并用它的输出替换该区域 这是我的C程序: #include <stdio.h> int main(int argc, char *argv[]) { printf("The argument given was: %s\n",argv[1]); } 然后把二进制文件放到我的路径中。当我这样做的时候 c_example Hello 在候机楼,我得到 The argument given was: Hello 但如果我在Em

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

这是我的C程序:

#include <stdio.h>

int main(int argc, char *argv[]) {
  printf("The argument given was: %s\n",argv[1]);
}
然后把二进制文件放到我的路径中。当我这样做的时候

c_example Hello
在候机楼,我得到

The argument given was: Hello
但如果我在Emacs缓冲区中选择Hello,并在带有C-u M-| C|示例的区域上使用shell命令,它将被替换为

The argument given was: (null)

相反。这是为什么?

传递给filter命令的emacs缓冲区的内容不是从命令行检索的,而是从标准输入检索的。您应该使用FGET或来自的任何其他输入函数来读取它

请尝试以下版本:

#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;
}

传递给filter命令的emacs缓冲区的内容不是从命令行检索的,而是从标准输入检索的。您应该使用FGET或来自的任何其他输入函数来读取它

请尝试以下版本:

#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;
}

不是Emacs用户,但我猜管道字符表示您正在将缓冲区管道化为标准输入。不是Emacs用户,但我猜管道字符表示您正在将缓冲区管道化为标准输入。