elisp从文件内容创建未命名的缓冲区

时间:2011-08-30 16:04:59

标签: elisp

我正在尝试来自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"))))         

这是这样做的吗?

由于这是一个名为“无标题”的缓冲区,因此我只能在会话中拥有其中一个。有没有什么我可以用来拥有多个,而不是诉诸随机数?

1 个答案:

答案 0 :(得分:3)

生成唯一缓冲区名称的elisp方法是使用generate-new-buffer-name。文档是:

(generate-new-buffer-name NAME &optional IGNORE)
  

返回一个字符串,该字符串是基于NAME的无现有缓冲区的名称。   如果没有名为NAME的实时缓冲区,则返回NAME。除此以外   通过附加`'来修改名称,增加NUMBER(从...开始)   2)直到找到未使用的名称,然后返回该名称。可选的   第二个参数IGNORE指定一个可以使用的名称(如果是的话)   即使具有该名称的缓冲区存在,也要按照要尝试的顺序进行。