From 08677a44a56f898a721316e8b2c64ee78c5f9755 Mon Sep 17 00:00:00 2001 From: Ravi R Kiran Date: Mon, 3 Feb 2014 08:41:44 -0800 Subject: Indirect regions diff --git a/ravi-init-navigation.el b/ravi-init-navigation.el index 838b86d..9e88808 100644 --- a/ravi-init-navigation.el +++ b/ravi-init-navigation.el @@ -83,6 +83,13 @@ :ensure t ) +(use-package indirect + :commands indirect-region + :init + (progn + (bind-key "I" 'indirect-region region-bindings-mode-map)) + ) + (use-package visual-regexp :bind (("C-c r" . vr/replace) ("C-c q" . vr/query-replace) diff --git a/site-lisp/indirect.el b/site-lisp/indirect.el new file mode 100644 index 0000000..f49bdb5 --- /dev/null +++ b/site-lisp/indirect.el @@ -0,0 +1,38 @@ +;; From http://www.emacswiki.org/cgi-bin/wiki.pl?IndirectBuffers + +(defun indirect-buffer () + "Edit stuff in this buffer in an indirect buffer. + The indirect buffer can have another major mode." + (interactive) + (let ((buffer-name (generate-new-buffer-name "*indirect*"))) + (pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name)))) + +(defvar indirect-mode-name nil + "Mode to set for indirect buffers.") +(make-variable-buffer-local 'indirect-mode-name) + +(defun indirect-region (start end) + "Edit the current region in another buffer. + If the buffer-local variable `indirect-mode-name' is not set, prompt + for mode name to choose for the indirect buffer interactively. + Otherwise, use the value of said variable as argument to a funcall." + (interactive "r") + (let ((buffer-name (generate-new-buffer-name "*indirect*")) + (mode + (if (not indirect-mode-name) + (setq indirect-mode-name + (intern + (completing-read + "Mode (default `org-mode'): " + (mapcar (lambda (e) + (list (symbol-name e))) + (apropos-internal "-mode$" 'commandp)) + nil t nil nil "org-mode"))) + indirect-mode-name))) + (pop-to-buffer (make-indirect-buffer (current-buffer) buffer-name)) + (funcall mode) + (narrow-to-region start end) + (goto-char (point-min)) + (shrink-window-if-larger-than-buffer))) + +(provide 'indirect) -- cgit v0.10.1