怎样写一个「在新的 window 打开 eshell 并运行命令」的函数?

是这样的,在下想写一个函数,能够编译并在 eshell 中运行当前的 .c 文件,这样写一些玩具程序的时候就很方便了。

于是我写了这么个东西:

(defun kinono/run-c-program ()
  "这个函数使用 gcc 编译器把当前文件编译为同名可执行文件并运行"
  (interactive)
  (setq kinono--exe-name (file-name-sans-extension buffer-file-name))
  ;; `kinono--command‘ 是一条编译当前程序并运行可执行文件的命令,
  ;; 运行函数以后把这个变量的内容拷到系统 shell 里面执行,结果是正常的,所以命令肯定没写错
  (setq kinono--command (concat "gcc -std=c11 -Wall -o " kinono--exe-name " " (buffer-file-name) " && " kinono--exe-name))
  (eshell-command kinono--command))

(在下用的是 Spacemacs 所以那些变量的命名大概会有点奇怪,kinono 是我的配置层的名字)

打开一个 .c 程序并且运行这个函数,编译倒是成功了,但是没有像我想的那样跑出一个 eshell 窗口来运行我的程序并且和我交互,而是产生了这么一个错误:

cl--assertion-failed: Assertion failed: (not (eshell-interactive-process))

我去 Google 了这个错误也没有找到有用的信息。总之现在的问题就是,我想写这样一个函数,它可以打开一个新的 window(或者新的 frame 也可以),在里面跑 eshell,并且运行编译产生的可执行文件,还望各位大侠指点。

谢谢各位!

要不看看这个包?

感觉符合你的要求

编译程序这种事情,还是交给make靠谱一些.

这个非常好用!谢谢啦!!

1 个赞