0

私は次のコードに少し問題があります(ファイルを削除してバッファを強制終了することになっています):

(defun bk-deletes-file ()
  "Closes the buffer and deletes associated file."
  (interactive)
  (let (curFile curBuffer)
    (if (file-exists-p buffer-file-name)
        (progn
          (setq curFile buffer-file-name)
          (delete-file buffer-file-name))
      (setq curFile 1))
    (setq curBuffer (buffer-name))
    (kill-this-buffer)
    (if (stringp curFile)
        (message "I've deleted %s and buried its buffer %s"
                 (file-name-nondirectory curFile) curBuffer)
      (message "I've buried %s buffer" curBuffer)
      )))

それは機能しません:私がbuffer-with-no-fileで行動するとき、それは「if:間違ったタイプの引数:stringp、nil」を与えます、私がbuffer-of-the-fileで行動するとき、それはそれがbuffer-であるかのように振る舞いますwith-no-file(つまり、「%sバッファを埋めました」と出力しますが、「%sを削除してバッファ%sを埋めました」と出力する必要があります)

4

1 に答える 1

1

私が知る限り、エラーは1つだけです。これは、ファイルに関連付けられていないバッファーではコードが機能しないことです。その場合、buffer-file-nameは文字列が渡されないことを訴えますnilfile-exists-p

動作するバージョンは次のとおりです(読みやすさとLispのグッドプラクティスがいくつか改善されています)。

(defun bk-deletes-file ()
  "Kills the buffer and deletes associated file."
  (interactive)
  (let ((current-file (buffer-file-name))
        (current-buffer (buffer-name)))
    (when current-file
      (delete-file current-file))
    (kill-this-buffer)
    (if current-file
        (message "I've deleted %s and killed its buffer %s"
                 (file-name-nondirectory current-file) current-buffer)
      (message "I've killed %s buffer" current-buffer))))
于 2012-08-07T12:15:05.190 に答える