Показать двоичную версию шестнадцатеричного значения в строке состояния
Я сейчас много занимаюсь программированием на C, что означает, что я пишу такие вещи постоянно:
(ioe_extra_A & 0xE7)
Было бы очень полезно, если бы при наведении курсора на 0xE7 emacs отобразил бы "0b1110 0111" в строке состояния или мини-буфере, чтобы я мог проверить, что моя маска - это то, что я имел в виду.
Как правило, независимо от того, что я хочу, чтобы emacs делал, 10 минут поиска в Google найдут ответ, но для этого я исчерпал свои навыки поиска и до сих пор не нашел ответа.
Спасибо заранее
1 ответ
Решение
Это похоже на работу:
(defvar my-hex-idle-timer nil)
(defun my-hex-idle-status-on ()
(interactive)
(when (timerp my-hex-idle-timer)
(cancel-timer my-hex-idle-timer))
(setq my-hex-idle-timer (run-with-idle-timer 1 t 'my-hex-idle-status)))
(defun my-hex-idle-status-off ()
(interactive)
(when (timerp my-hex-idle-timer)
(cancel-timer my-hex-idle-timer)
(setq my-hex-idle-timer nil)))
(defun int-to-binary-string (i)
"convert an integer into it's binary representation in string format
By Trey Jackson, from https://stackru.com/a/20577329/."
(let ((res ""))
(while (not (= i 0))
(setq res (concat (if (= 1 (logand i 1)) "1" "0") res))
(setq i (lsh i -1)))
(if (string= res "")
(setq res "0"))
res))
(defun my-hex-idle-status ()
(let ((word (thing-at-point 'word)))
(when (string-prefix-p "0x" word)
(let ((num (ignore-errors (string-to-number (substring word 2) 16))))
(message "In binary: %s" (int-to-binary-string num))))))
Тип M-x my-hex-idle-status-on
включить это.
Как уже было отмечено, спасибо Trey Jackson за int-to-binary-string
,