是这样的,在下想写一个函数,能够编译并在 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,并且运行编译产生的可执行文件,还望各位大侠指点。
谢谢各位!