Заработай на задачках

Бывает нужно посчитать количество символов в готовом тексте. Я поковырял elisp и разродился двумя простенькими функциями.

Подсчёт всех символов в буффере Emacs

Функция выглядит следующим образом:

(defun total-symbol-counter() (interactive) (let ((count 0)) (setq count (- (point-max) (point-min))) (message "Количество всех символов: %d" count) ) )

По-порядку:

  • defun total-symbol-counter() – определение функции total-symbol-counter без атрибутов.
  • interactive – переход в интерактивный режим, необходимо для запуска функции по сочетанию клавиш Alt-x.
  • let ((count 0)) – определение локальной переменной count со значением 0.
  • setq count (- (point-max) (point-min)) – присвоение count разницы между максимальной возможной и минимальной позицией указателя в буфере.
  • message “Количество всех символов: %d” count – вывод сообщения.

Подсчёт символов в файле Emacs, кроме определённых шаблоном

Предыдущая реализация функции учитывает перевод строки, конец файла, пробелы и другие специальные символы. Мне это не нужно. Требуется только цифры, буквы и знаки препинания.

Модифицированный вариант:

(defun symbol-counter() (interactive) (let ((count 0)) (save-excursion (goto-char (point-min)) (while (re-search-forward "[^ \t\n\r\f\v]" (point-max) t) (setq count (1+ count)) ) (message "Количество символов: %d" count) ) ) )

Что нового:

  • save-excursion – сохраняет позицию курсора и возвращает его после выхода из блока.
  • goto-char (point-min) – переходим на начало буфера.
  • while (re-search-forward “[^ \t\n\r\f\v]” (point-max) t) – пока поиск следующего символа по шаблону [^ \t\n\r\f\v] завершается удачно.
  • setq count (1+ count) – увеличивает значение count на 1.

Шаблон [^ \t\n\r\f\v] определяет любой символ, который не является пробелом, табуляцией, концом файла и т.д.

Использование функций

Достаточно поместить эти две функции в файл конфигурации ~/.emacs. После этого их можно запускать по названию, используя сочетание клавиш Alt-x.

Для большего удобства можно назначить и свою комбинацию, к примеру Ctrl-c + Ctrl-s в ~/.emacs:

(global-set-key (kbd "C-c C-s") 'symbol-counter)

После исполнения в специальном буфере должно отображаться такое миленькое сообщение:
emacs подсчёт символов

Я буду очень рад комментарию!

Не переживайте, e-mail нигде не отображается. Обязательные поля помечены *

Навигация по записям