我正在尝试来自Elisp Cookbook的一些代码,我最初想的是这段代码:
(defun process-file (file)
"Read the contents of a file into a temp buffer and then do
something there."
(when (file-readable-p file)
(with-temp-buffer
(insert-file-contents file)
(goto-char (point-min))
(while (not (eobp))
;; do something here with buffer content
(forward-line)))))
将在我的emacs窗口中创建一个新的(未命名/未保存)缓冲区,包含该文件的内容(并可能在前台打开)。但是,这不会发生。你能引导我走向这个吗?
编辑:我做了一点实验,并得到了这个:(defun myTest (file)
(interactive "f")
; check if file is readable
(when (file-readable-p file)
; create a new "untitled" buffer
(let ((myBuf (get-buffer-create "untitled")))
; make it the current displayed buffer
(switch-to-buffer myBuf)
(insert "Hello"))))
这是这样做的吗?
由于这是一个名为“无标题”的缓冲区,因此我只能在会话中拥有其中一个。有没有什么我可以用来拥有多个,而不是诉诸随机数?
答案 0 :(得分:3)
生成唯一缓冲区名称的elisp方法是使用generate-new-buffer-name
。文档是:
(generate-new-buffer-name NAME &optional IGNORE)
返回一个字符串,该字符串是基于NAME的无现有缓冲区的名称。 如果没有名为NAME的实时缓冲区,则返回NAME。除此以外 通过附加`'来修改名称,增加NUMBER(从...开始) 2)直到找到未使用的名称,然后返回该名称。可选的 第二个参数IGNORE指定一个可以使用的名称(如果是的话) 即使具有该名称的缓冲区存在,也要按照要尝试的顺序进行。