blob: f49bdb565dc8cd7796544d1c3add9060445c9599 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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)
|