;;; ravi-init-repl.el --- REPL utilities ;; Copyright (C) 2014 ;; 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: ;; Read-eval-print-loop support ;;; Code: (use-package comint :defer t :config (progn (bind-key "" 'comint-previous-matching-input-from-input comint-mode-map) (bind-key "" 'comint-next-matching-input-from-input comint-mode-map)) :ensure nil) (use-package octave-mod :mode ("\\.m\\'" . octave-mode) :config (progn (defun ravi/octave-shell-switch-to-shell () "Make sure that `inferior-octave-buffer' exists and is displayed." (interactive) (if (get-buffer inferior-octave-buffer) (pop-to-buffer (get-buffer inferior-octave-buffer)) (inferior-octave nil))) ) :ensure nil) (use-package repl-toggle :commands (rtog/activate rtog/toggle-repl) :bind (:map repl-toggle-mode-map ("" . rtog/toggle-repl)) :hook ((python-mode-hook . rtog/activate) (octave-mode-hook . rtog/activate) (emacs-lisp-mode-hook . rtog/activate)) :config (setq rtog/mode-repl-alist '((python-mode . python-shell-switch-to-shell) (octave-mode . ravi/octave-shell-switch-to-shell) (emacs-lisp-mode . ielm))) (setq rtog/goto-buffer-fun 'pop-to-buffer) ;; The default keybinding is not great (unbind-key "C-c C-z" repl-toggle-mode-map) :diminish repl-toggle-mode) ;; Calc and friends (use-package calc :bind (("H-c" . calc)) :config ;; whole-line-or-region messes up pasting into calc buffers (defun ravi/disable-whole-line-or-region-local-mode () (when (fboundp 'whole-line-or-region-local-mode) (whole-line-or-region-local-mode -1))) (add-hook 'calc-mode-hook #'ravi/disable-whole-line-or-region-local-mode) ;; Prefer primary selection for pasting with mouse (defun ravi/calc-yank-mouse (radix) (interactive "P") (let ((interprogram-paste-function 'gui-get-primary-selection)) (calc-yank radix))) (bind-key "" 'ravi/calc-yank-mouse calc-mode-map)) ;; Pretty print evaluation results; perhaps use eros here? (bind-key [remap eval-last-sexp] 'pp-eval-last-sexp) (provide 'ravi-init-repl) ;;; ravi-init-repl.el ends here