LINUX.ORG.RU

Пара вопросов по Emacs

 


0

1

Всем привет! Я около года небольшими темпами изучаю Emacs и накопилось ряд вопросов

  1. когда я удаляю строки по Control-Backspace - та строка которая удаляется копируется в буфер, что очень неудобно. Как это отключить?
  2. когда я наживаю посмотреть список открытых окон C-x C-b то открывается ниже окно с открытыми вкладками, но фокус остается на старом окне - можно ли это изменить или как то автоматом на весь экран открывать новое окно?
  3. иногда бывают проблемы с кодировкой - как правильно конвертировать в другую кодировку?

(defun k/kill-whole-line ()
  "Deletes a whole line, but does not put it in the kill-ring."
  (interactive)
  (delete-region (line-beginning-position) (line-end-position))
  (delete-char 1))

(defun k/kill-line ()
  "Deletes a line, but does not put it in the kill-ring."
  (interactive)
  (delete-region (point) (line-end-position)))
  1. Погрузитесь в мир vertico & consult & marginalia. Там есть все это и даже больше.

  2. https://www.emacswiki.org/emacs/GnuEmacsRussification

Kostafey
()
Последнее исправление: Kostafey (всего исправлений: 2)

копируется в буфер, что очень неудобно. Как это отключить

Это фича, не надо это отключать.

можно ли это изменить или как то автоматом на весь экран открывать новое окно

Можно прикрутить адвайс/хук после выполнения list-buffers, но я бы посоветовал просто забиндить ibuffer-other-window на Super-b.

как правильно конвертировать в другую кодировку

В наше время лучше какими-то внешними средствами конвертировать всё старинное говно мамонта в utf-8. Ну а вообще, recode-region (подробности)

PS: советую обмазаться helm, winner-mode, windmove, golden-ratio.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от no-such-file

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

за советы спасибо, буду смотреть

dark-initr0
() автор топика
Ответ на: комментарий от no-such-file

Это фича, не надо это отключать.

Ну хз, я вот, например, чаще всего сначала копирую что-то, потом удаляю строку и вставляю, при таком порядке, чтобы вставить скопированную строку приходится еще использовать M-y.

snake266 ★★
()

Ну что ж, этот день настал. Долго я терпел этот беспредел, больше не буду. Пришла пора разобраться с ним раз и навсегда!

;; https://emacs.stackexchange.com/a/37680
(defun my-delete-backward-word ()
  "Deletes word backward without placing it to the kill ring."
  (interactive "*")
  (push-mark)
  (backward-word)
  (delete-region (point) (mark)))

Биндим это дело на C-<backspace> и блаженствуем. Старое поведение остаётся доступно по M-<backspace>. Зачем его навесили на несколько сочетаний? Загадка.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от snake266

при таком порядке

Могу ответить как в известном анекдоте: «не делайте так».

Проблема «отключения» в том, что создаётся неодинаковое поведение и потом нужно будет помнить и думать где через kill-ring удаляется, а где нет.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от dark-initr0

после приходиться снова копировать в буфер текст

Зачем? Он там остаётся, просто не наверху. Лучше поставить таки helm. Там и навигация по файлам более удобная (без необходимости что-то удалять) и kill-ring можно смотреть в отдельном окне и выбирать что вставлять.

no-such-file ★★★★★
()

Тебе не конвертировать, а распознавать надо. Или принудительно переоткрывать файло, указывая в какой кодировкой надо. В vim это делается :e ++enc=cp1251

mrjaggers
()
26 марта 2024 г.
Ответ на: комментарий от anonymous

вроде такого : в ~/.emacs:


(defun recode-buffer-to-cp1251 ()
  (interactive)
  (labels ((do-recode nil
		      (encode-coding-region (point-min) (point-max)
					    buffer-file-coding-system)
		      (decode-coding-region (point-min) (point-max) 'cp1251)
		      (set-buffer-file-coding-system 'cp1251)))
    (if buffer-read-only
	(let ((buffer-read-only nil))
	  (do-recode)
	  (set-buffer-modified-p nil))
      (do-recode))))

(defun recode-buffer-to-cp866 ()
  (interactive)
  (labels ((do-recode nil
		      (encode-coding-region (point-min) (point-max)
					    buffer-file-coding-system)
		      (decode-coding-region (point-min) (point-max) 'cp866)
		      (set-buffer-file-coding-system 'cp866)))
    (if buffer-read-only
	(let ((buffer-read-only nil))
	  (do-recode)
	  (set-buffer-modified-p nil))
      (do-recode))))

(defun recode-buffer-to-utf-8 ()
  (interactive)
  (labels ((do-recode nil
		      (encode-coding-region (point-min) (point-max)
					    buffer-file-coding-system)
		      (decode-coding-region (point-min) (point-max) 'utf-8)
		      (set-buffer-file-coding-system 'utf-8)))
    (if buffer-read-only
	(let ((buffer-read-only nil))
	  (do-recode)
	  (set-buffer-modified-p nil))
      (do-recode))))

;; -- from init. el --
;; Mule cyrillic config
(set-language-environment 'UTF-8)

а потом просто если не в дефолтной UTF8, то делаешь M-x recode-buffer-to-cp1251 например, ну или C-x C-e (set-buffer-file-coding-system 'XXX)

вообще нужно массово local variables пользоваться: 23.7 Specifying a File’s Coding System (File Variables](https://www.gnu.org/software/emacs/manual/html_node/emacs/File-Variables.html)

дока еще подсказывает, что и C-x RET r (revert-buffer-with-coding-system) должно работать

anonymous
()