summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/init-text.el25
1 files changed, 25 insertions, 0 deletions
diff --git a/lisp/init-text.el b/lisp/init-text.el
index c733927..ecd4831 100644
--- a/lisp/init-text.el
+++ b/lisp/init-text.el
@@ -31,4 +31,29 @@ is non-nil, the region is copied with `x-select-text'."
(when arg
(x-select-text (buffer-substring-no-properties (point-min) (point-max))))))
+(defun km/columnify-file (delim)
+ "Separate current file on DELIM using column program.
+
+By default, DELIM is set to \",\". With a single prefix argument,
+use whitespace as the delimiter. With two prefix arguments,
+prompt for a delimiter.
+
+If a columnified buffer already exists, just switch to it."
+ (interactive (list (cond ((not current-prefix-arg) ",")
+ ((> (prefix-numeric-value current-prefix-arg) 4)
+ (read-string "Delimiter: "))
+ (t nil))))
+ (let* ((bufname (buffer-name))
+ (output-buffer-name (concat "*cols: " bufname "*"))
+ (output-buffer (get-buffer output-buffer-name))
+ (fname (file-relative-name buffer-file-name))
+ (col-args '("-t")))
+ (unless output-buffer
+ (setq output-buffer (get-buffer-create output-buffer-name))
+ (when delim
+ (add-to-list 'col-args (format "-s'%s'" delim)))
+ (apply 'call-process "column" fname output-buffer nil
+ col-args))
+ (switch-to-buffer output-buffer)))
+
(provide 'init-text)