;;; ravi-init-maps.el --- extra keys -*- lexical-binding: t; -*- ;; Copyright (C) 2015 Ravi R Kiran ;; Author: ;; Keywords: ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Extra keybindings (use-package hydra :ensure t) (use-package hydra-posframe :load-path (lambda () (ravi/emacs-file "site-lisp/hydra-posframe")) :after hydra :if window-system :config (hydra-posframe-mode) (setq hydra-posframe-poshandler #'posframe-poshandler-frame-bottom-center) :diminish hydra-posframe-mode) (use-package pretty-hydra :after hydra) (use-package operate-on-number :bind (("M-g M-d" . hydra-operate-on-number/body)) :config (progn ;; Monkey-patch to fix: ;; https://github.com/knu/operate-on-number.el/issues/5 ;; https://github.com/knu/operate-on-number.el/issues/4 (defun oon--replace-number (parsed number) "Replace a number specified by PARSED with NUMBER." (let* ((base (elt parsed 0)) (beg (elt parsed 1)) (spos (elt parsed 2)) (nbeg (elt parsed 3)) (nend (elt parsed 4)) (str (buffer-substring-no-properties nbeg nend)) (abs (if (numberp number) (abs number) number)) (sign (if (or (not (numberp number)) (< 0 number)) ?+ ?-))) (if (and (null spos) (= sign ?-)) (error "cannot replace with a negative number!")) (goto-char nbeg) (delete-region nbeg nend) (insert (oon--format-number abs base str)) (if spos (save-excursion (goto-char spos) (if (or (when (looking-at "[+-]") (delete-char 1) t) (= sign ?-)) (insert-char sign)))))) (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)))) (provide 'ravi-init-maps) ;;; ravi-init-maps.el ends here