Подтвердить что ты не робот

Как убить буфер в emacs без ответа?

Как убить буфер в emacs без допроса.

4b9b3361

Ответ 1

Это приведет к удалению текущего видимого буфера без подтверждения, если буфер не был изменен. В этом последнем случае вам нужно ответить y/n.

(global-set-key [(control x) (k)] 'kill-this-buffer)

Ответ 2

Я использую этот

(defun volatile-kill-buffer ()
   "Kill current buffer unconditionally."
   (interactive)
   (let ((buffer-modified-p nil))
     (kill-buffer (current-buffer))))

(global-set-key (kbd "C-x k") 'volatile-kill-buffer)     ;; Unconditionally kill unmodified buffers.

Он уничтожит буфер, если он не будет изменен.

Ответ 3

Хорошо, я немного покопался в руководстве по Emacs и нашел рабочее решение (по состоянию на Emacs 23.4.1). Это почти идентично решению Noufal:

(defun kill-this-buffer-volatile ()
    "Kill current buffer, even if it has been modified."
    (interactive)
    (set-buffer-modified-p nil)
    (kill-this-buffer))

Я немного переименовал функцию, чтобы сделать ее более близкой родственницей к kill-this-buffer.

По-видимому, в EmacsWiki есть страница по этой теме по адресу http://www.emacswiki.org/emacs/KillBufferUnconditional (изменена в 2007 году), но код является лишь копией Noufal's.

Ответ 4

Я использую следующий фрагмент кода - в отличие от решения Noufal о игнорировании модифицируемого буфера, это сохранит буфер и затем убьет его. Он также удаляет окно, которое имеет значение, когда вы показываете несколько дополнительных окон - по умолчанию оно будет удалять окно вместо перехода на другой буфер. (Чтобы использовать это удобно, вам нужно, конечно, привязать к нему какой-то ключ).

;; Kill the current buffer immediatly, saving it if needed.
(defvar kill-save-buffer-delete-windows t
  "*Delete windows when `kill-save-buffer' is used.
If this is non-nil, then `kill-save-buffer' will also delete the corresponding
windows.  This is inverted by `kill-save-buffer' when called with a prefix.")
(defun kill-save-buffer (arg)
  "Save the current buffer (if needed) and then kill it.
Also, delete its windows according to `kill-save-buffer-delete-windows'.
A prefix argument ARG reverses this behavior."
  (interactive "P")
  (let ((del kill-save-buffer-delete-windows))
    (when arg (setq del (not del)))
    (when (and (buffer-file-name) (not (file-directory-p (buffer-file-name))))
      (save-buffer))
    (let ((buf (current-buffer)))
      (when del (delete-windows-on buf))
      (kill-buffer buf))))

Ответ 5

Используйте (kill-current-buffer) вместо (kill-this-buffer) если вы хотите связать его с каким-то ключом. Смотрите документы для (kill-this-buffer)

...

Эта команда может быть надежно вызвана только из строки меню, в противном случае она может решить молча ничего не делать.

и (kill-current-buffer)

...

Это похоже на "kill-this-buffer", но его не нужно вызывать через строку меню, и оно не обращает внимания на рамку строки меню.

Поэтому я бы init.el следующее в мой init.el:

(global-set-key (kbd "C-x k") 'kill-current-buffer)

Это работает по крайней мере в Emacs 26.1.