diff options
Diffstat (limited to 'site-lisp')
| -rw-r--r-- | site-lisp/indirect.el | 38 |
1 files changed, 38 insertions, 0 deletions
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) |
