summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ravi-init-navigation.el7
-rw-r--r--site-lisp/indirect.el38
2 files changed, 45 insertions, 0 deletions
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)