emacs: второстепенный режим для отображения чисел во всех видах системы счисления.

Я ищу пакет Emacs, который может распознавать числа и их основание.

Я хотел бы, чтобы он был интерактивным (чтобы указать значение выбранного числа или точки).

Возвращаемые значения могут быть напечатаны в минибуфер (затем буфер сообщений) или в отдельный буфер.

Может кто-нибудь объяснить, как я могу получить доступ к этим значениям и какие шаги мне нужно предпринять для создания такой функции?


person windrg00    schedule 09.12.2018    source источник


Ответы (1)


У меня нет полного прямого ответа для вас, но вот несколько библиотек, на которые вы можете посмотреть идеи о том, как реализовать это самостоятельно. Некоторые вопросы зависят от того, как вы хотите отображать/возвращать число.

  • modeline-char.el — дополнительный режим mlc-char-in-mode-line-mode показывает символ после точки в режиме- светлее строки, за которым следует =, за которым следует шестнадцатеричный код Unicode для символа. См. Показать символ в строке режима.

  • thingatpt+.el — такие функции, как number-at-point-decimal и number-at-point-hex. См. Thing At Point Plus.


Если распознаваемый текст использует стандартную форму Emacs для системы счисления и числа в этой системе счисления, вы можете определить radix-number-at-point. Эта форма описана в руководстве по Elisp, node Integer Basics. . Например, #13r90B3 — это то же число, что и десятичное целое число 19919.

Вот краткое определение. Вы можете настроить его.

(defun radix-number-at-point ()
  "Return the radix number at point, or nil if none is found."
  (when (thing-at-point-looking-at "-?#[0-9][0-9]*r[a-zA-Z0-9]+\\.?[a-zA-Z0-9]*" 500)
    (read (buffer-substring-no-properties (match-beginning 0) (match-end 0)))))

Вы также можете определить функцию, которая не требует явной части #rRADIX, например, автоматически пробует разные системы счисления, последовательно и, скажем, используя наименьшую систему счисления, которая возвращает число.

person Drew    schedule 09.12.2018
comment
Спасибо, Дрю. Мне это удалось. Но я столкнулся с другой проблемой. Он работает хорошо, но работает даже в минибуфере при глобальном включении. Не могли бы дать мне несколько советов, как отключить этот второстепенный режим в мини-буфере ?? - person windrg00; 08.04.2019
comment
Функция может проверить (minibuffer-window-active-p WINDOW). - person Drew; 08.04.2019