Operating on numbers with emacs hydra
Operating on numbers in place in any emacs buffer is one of the cool
features that no one thinks they need, but is surprisingly handy,
especially for converting bit-masks between decimal and hexadecimal
during programming. Akinori Musha's operate-on-number package makes it
very easy to set it up with a single keybinding. The only minor issue
is that the instructions for setting it up refer to smartrep while my
preferred package for setting up such keybindings is hydra. Assuming a
recent enough version of hydra (where an escaping bug has been fixed),
here is the elisp code needed to set up operate-on-number using
hydra:
(defhydra hydra-operate-on-number () " Arithmetic operations: + - * / Remainder: \\ Exponent: \\^ Arithmetic shift: < > Base conversion: b o x X # Format: %%%% " ("+" apply-operation-to-number-at-point) ("-" apply-operation-to-number-at-point) ("*" apply-operation-to-number-at-point) ("/" apply-operation-to-number-at-point) ("\\" apply-operation-to-number-at-point) ("^" apply-operation-to-number-at-point) ("<" apply-operation-to-number-at-point) (">" apply-operation-to-number-at-point) ("b" apply-operation-to-number-at-point :exit t) ("o" apply-operation-to-number-at-point :exit t) ("x" apply-operation-to-number-at-point :exit t) ("X" apply-operation-to-number-at-point :exit t) ("#" apply-operation-to-number-at-point :exit t) ("%" apply-operation-to-number-at-point :exit t))
The only trick is to format the help string correctly with all the
escape sequences required by hydra. I bind the generated function
hydra-operate-on-number/body to M-g M-d.