|
|
@@ -150,6 +150,7 @@ found, otherwise returns nil." |
|
|
|
;;window-organizer |
|
|
|
ilookup |
|
|
|
pasteboard |
|
|
|
awk-preview |
|
|
|
|
|
|
|
)) |
|
|
|
|
|
|
@@ -1800,294 +1801,6 @@ This mode is a simplified version of `adoc-mode'." |
|
|
|
'("\\.adoc\\'" . adoc-simple-mode))) |
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
;; awk-preview |
|
|
|
|
|
|
|
(defgroup awk-preview nil |
|
|
|
"Awk previewer." |
|
|
|
:tag "Awk Preview" |
|
|
|
:prefix "awk-preview-" |
|
|
|
:group 'tools) |
|
|
|
|
|
|
|
(defcustom awk-preview-program |
|
|
|
(or (executable-find "gawk") |
|
|
|
(executable-find "awk") |
|
|
|
"awk") |
|
|
|
"Awk program to execute." |
|
|
|
:type 'string |
|
|
|
:group 'awk-preview) |
|
|
|
|
|
|
|
(defcustom awk-preview-switches |
|
|
|
;; '("--sandbox") |
|
|
|
nil |
|
|
|
"String of awk options appended when running awk preview." |
|
|
|
:type '(repeat string) |
|
|
|
:group 'awk-preview) |
|
|
|
|
|
|
|
(defcustom awk-preview-default-program |
|
|
|
"# C-c C-l: Update preview C-c C-c: Commit and exit |
|
|
|
# C-c C-r: Resest to original C-c C-k: Abort |
|
|
|
{ |
|
|
|
print NR, $0 |
|
|
|
} |
|
|
|
" |
|
|
|
"Default awk command." |
|
|
|
:type 'string |
|
|
|
:group 'awk-preview) |
|
|
|
|
|
|
|
(defcustom awk-preview-kill-orphan-program-buffer |
|
|
|
'ask |
|
|
|
"This variable decides whether program buffers which do not visit any files |
|
|
|
will be killed when exiting awk-preview sessions. |
|
|
|
|
|
|
|
When set to nil, do not kill program buffers. |
|
|
|
When set to `ask', ask user whether to kill them. |
|
|
|
For other values always kill them silently. |
|
|
|
|
|
|
|
When a program buffer is visiting a file, the buffer will not be killed for any |
|
|
|
cases regardless of this variable." |
|
|
|
:type '(choice (const t) |
|
|
|
(const nil) |
|
|
|
(const ask)) |
|
|
|
:group 'awk-preview) |
|
|
|
|
|
|
|
(cl-defstruct awk-preview--env |
|
|
|
;; Whether awk-preview is currently running |
|
|
|
(running-p nil) |
|
|
|
;; Point of beg in source buffer |
|
|
|
(point-beg nil) |
|
|
|
;; Point of end in source buffer |
|
|
|
(point-end nil) |
|
|
|
;; Point of beginning |
|
|
|
;; Used by preview buffer and always same as point-beg |
|
|
|
(preview-point-beg nil) |
|
|
|
;; Point of beginning |
|
|
|
;; Used by preview buffer and may defferent from point-end |
|
|
|
(preview-point-end nil) |
|
|
|
;; Awk preview program temporary file name |
|
|
|
(program-filename nil) |
|
|
|
;; Source buffer |
|
|
|
(source-buffer nil) |
|
|
|
;; Preview buffer |
|
|
|
(preview-buffer nil) |
|
|
|
;; Program buffer |
|
|
|
(program-buffer nil) |
|
|
|
;; Window configuration when entering awk-review |
|
|
|
(window-configuration nil) |
|
|
|
) |
|
|
|
|
|
|
|
(defvar-local awk-preview--env nil |
|
|
|
"`awk-preview--env' struct object of currently running.") |
|
|
|
(put 'awk-preview--env |
|
|
|
'permanent-local |
|
|
|
t) |
|
|
|
|
|
|
|
(defun awk-preview--invoke-awk (buf beg end progfile output &optional delete display) |
|
|
|
"Execute PROGFILE awk process with BEG and END input and output to OUTPUT buffer. |
|
|
|
|
|
|
|
When OUTPUT is t the result will be output to BUF. |
|
|
|
Delete the text between BEG and END when DELETE is non-nil. |
|
|
|
|
|
|
|
DISPLAY non-nil means redisplay buffer as output is inserted." |
|
|
|
(with-current-buffer buf |
|
|
|
(let ((status (apply 'call-process-region |
|
|
|
beg |
|
|
|
end |
|
|
|
awk-preview-program |
|
|
|
delete |
|
|
|
output |
|
|
|
display |
|
|
|
`(,@awk-preview-switches "-f" ,progfile)))) |
|
|
|
(unless (eq status |
|
|
|
0) |
|
|
|
(error "awk-preview: Awk program exited abnormally.")) |
|
|
|
output))) |
|
|
|
|
|
|
|
(defvar awk-preview-program-buffer-name |
|
|
|
"*AWK Preview Program<%s>*" |
|
|
|
"Buffer name of awk preview program.") |
|
|
|
|
|
|
|
(defvar awk-preview-preview-buffer-name |
|
|
|
"*AWK Preview<%s>*" |
|
|
|
"Buffer name of awk preview.") |
|
|
|
|
|
|
|
(defun awk-preview--create-program-buffer (e) |
|
|
|
"Create new program buffer for `awk-preview--env' object E." |
|
|
|
(let ((source-name (buffer-name (awk-preview--env-source-buffer e)))) |
|
|
|
(with-current-buffer (generate-new-buffer (format awk-preview-program-buffer-name |
|
|
|
source-name)) |
|
|
|
(erase-buffer) |
|
|
|
(insert awk-preview-default-program) |
|
|
|
(awk-mode) |
|
|
|
(current-buffer)))) |
|
|
|
|
|
|
|
(defun awk-preview--setup-program-buffer (e buf) |
|
|
|
"Setup awk-preview program buffer for E with BUF." |
|
|
|
(with-current-buffer buf |
|
|
|
(awk-preview-program-mode 1) |
|
|
|
(setq awk-preview--env e)) |
|
|
|
(setf (awk-preview--env-program-buffer e) buf) |
|
|
|
(setf (awk-preview--env-program-filename e) (make-temp-file "awk-preview-" |
|
|
|
nil |
|
|
|
".awk")) |
|
|
|
buf) |
|
|
|
|
|
|
|
(defun awk-preview--create-setup-preview-buffer (e) |
|
|
|
"Create and setup preview buffer for `awk-preview--env' object E." |
|
|
|
(with-current-buffer (awk-preview--env-source-buffer e) |
|
|
|
(let ((beg (awk-preview--env-point-beg e)) |
|
|
|
(end (awk-preview--env-point-end e)) |
|
|
|
(buf (let ((orig buffer-file-name)) |
|
|
|
(unwind-protect |
|
|
|
(progn |
|
|
|
(setq buffer-file-name nil) |
|
|
|
(clone-buffer (format awk-preview-preview-buffer-name |
|
|
|
(buffer-name)))) |
|
|
|
(setq buffer-file-name orig))))) |
|
|
|
(with-current-buffer buf |
|
|
|
(awk-preview-program-mode 1) |
|
|
|
(goto-char end) |
|
|
|
(setq buffer-read-only t) |
|
|
|
(setq awk-preview--env e)) |
|
|
|
(setf (awk-preview--env-preview-point-beg e) beg) |
|
|
|
(setf (awk-preview--env-preview-point-end e) end) |
|
|
|
(setf (awk-preview--env-preview-buffer e) buf) |
|
|
|
buf))) |
|
|
|
|
|
|
|
(defun awk-preview (beg end &optional program-buffer) |
|
|
|
"Run awk and preview result." |
|
|
|
(interactive (if (use-region-p) |
|
|
|
(list (region-beginning) |
|
|
|
(region-end)) |
|
|
|
(list (point-min) |
|
|
|
(point-max)))) |
|
|
|
(when (and awk-preview--env |
|
|
|
(awk-preview--env-running-p awk-preview--env)) |
|
|
|
(error "AWK-Preview already running")) |
|
|
|
(let ((e (make-awk-preview--env))) |
|
|
|
(setf (awk-preview--env-point-beg e) beg) |
|
|
|
(setf (awk-preview--env-point-end e) end) |
|
|
|
|
|
|
|
(setf (awk-preview--env-source-buffer e) (current-buffer)) |
|
|
|
|
|
|
|
(awk-preview--create-setup-preview-buffer e) |
|
|
|
(awk-preview--setup-program-buffer e |
|
|
|
(or program-buffer |
|
|
|
(awk-preview--create-program-buffer e))) |
|
|
|
|
|
|
|
(setf (awk-preview--env-window-configuration e) |
|
|
|
(current-window-configuration)) |
|
|
|
|
|
|
|
(cl-assert (awk-preview--env-point-beg e)) |
|
|
|
(cl-assert (awk-preview--env-point-end e)) |
|
|
|
(cl-assert (awk-preview--env-preview-point-beg e)) |
|
|
|
(cl-assert (awk-preview--env-preview-point-end e)) |
|
|
|
(cl-assert (awk-preview--env-program-filename e)) |
|
|
|
(cl-assert (awk-preview--env-source-buffer e)) |
|
|
|
(cl-assert (awk-preview--env-preview-buffer e)) |
|
|
|
(cl-assert (awk-preview--env-program-buffer e)) |
|
|
|
(cl-assert (awk-preview--env-window-configuration e)) |
|
|
|
(setq awk-preview--env e) |
|
|
|
|
|
|
|
(set-window-buffer (get-buffer-window (awk-preview--env-source-buffer e)) |
|
|
|
(awk-preview--env-preview-buffer e)) |
|
|
|
(pop-to-buffer (awk-preview--env-program-buffer e)) |
|
|
|
|
|
|
|
(switch-to-buffer (awk-preview--env-program-buffer e)) |
|
|
|
(setf (awk-preview--env-running-p e) t) |
|
|
|
(awk-preview-update-preview) |
|
|
|
)) |
|
|
|
|
|
|
|
(defun awk-preview-update-preview () |
|
|
|
"Update awk-preview." |
|
|
|
(interactive) |
|
|
|
(cl-assert awk-preview--env) |
|
|
|
(with-current-buffer (awk-preview--env-program-buffer awk-preview--env) |
|
|
|
(write-region (point-min) |
|
|
|
(point-max) |
|
|
|
(awk-preview--env-program-filename awk-preview--env))) |
|
|
|
(let ((output (with-current-buffer (get-buffer-create " *awk-preview output*") |
|
|
|
(erase-buffer) |
|
|
|
(current-buffer))) |
|
|
|
(progfile (awk-preview--env-program-filename awk-preview--env))) |
|
|
|
(awk-preview--invoke-awk (awk-preview--env-source-buffer awk-preview--env) |
|
|
|
(awk-preview--env-point-beg awk-preview--env) |
|
|
|
(awk-preview--env-point-end awk-preview--env) |
|
|
|
progfile |
|
|
|
output) |
|
|
|
(with-current-buffer (awk-preview--env-preview-buffer awk-preview--env) |
|
|
|
(let ((inhibit-read-only t)) |
|
|
|
(goto-char (awk-preview--env-preview-point-end awk-preview--env)) |
|
|
|
(delete-region (awk-preview--env-preview-point-beg awk-preview--env) |
|
|
|
(point)) |
|
|
|
(insert-buffer-substring output) |
|
|
|
(setf (awk-preview--env-preview-point-end awk-preview--env) |
|
|
|
(point))) |
|
|
|
))) |
|
|
|
|
|
|
|
(defun awk-preview-reset () |
|
|
|
"Show original input in preview buffer." |
|
|
|
(interactive) |
|
|
|
(cl-assert awk-preview--env) |
|
|
|
(with-current-buffer (awk-preview--env-preview-buffer awk-preview--env) |
|
|
|
(let ((inhibit-read-only t)) |
|
|
|
(goto-char (awk-preview--env-preview-point-end awk-preview--env)) |
|
|
|
(delete-region (awk-preview--env-preview-point-beg awk-preview--env) |
|
|
|
(point)) |
|
|
|
(insert-buffer-substring (awk-preview--env-source-buffer awk-preview--env) |
|
|
|
(awk-preview--env-point-beg awk-preview--env) |
|
|
|
(awk-preview--env-point-end awk-preview--env)) |
|
|
|
(setf (awk-preview--env-preview-point-end awk-preview--env) |
|
|
|
(point))))) |
|
|
|
|
|
|
|
(defun awk-preview-commit () |
|
|
|
"Exit awk-preview and update buffer." |
|
|
|
(interactive) |
|
|
|
(cl-assert awk-preview--env) |
|
|
|
(awk-preview--invoke-awk (awk-preview--env-source-buffer awk-preview--env) |
|
|
|
(awk-preview--env-point-beg awk-preview--env) |
|
|
|
(awk-preview--env-point-end awk-preview--env) |
|
|
|
(awk-preview--env-program-filename awk-preview--env) |
|
|
|
t |
|
|
|
t |
|
|
|
t) |
|
|
|
(awk-preview--cleanup)) |
|
|
|
|
|
|
|
(defun awk-preview-abort () |
|
|
|
"Discard result and exit awk-preview." |
|
|
|
(interactive) |
|
|
|
(awk-preview--cleanup)) |
|
|
|
|
|
|
|
(defun awk-preview--cleanup() |
|
|
|
"Cleanup awk-preview buffers variables and files." |
|
|
|
(cl-assert awk-preview--env) |
|
|
|
(with-current-buffer (awk-preview--env-source-buffer awk-preview--env) |
|
|
|
(kill-buffer (awk-preview--env-preview-buffer awk-preview--env)) |
|
|
|
(when (and (not (buffer-file-name (awk-preview--env-program-buffer awk-preview--env))) |
|
|
|
(if (eq 'ask |
|
|
|
awk-preview-kill-orphan-program-buffer) |
|
|
|
(yes-or-no-p "Program buffer does not visit any file. Kill? ") |
|
|
|
awk-preview-kill-orphan-program-buffer)) |
|
|
|
(kill-buffer (awk-preview--env-program-buffer awk-preview--env))) |
|
|
|
(delete-file (awk-preview--env-program-filename awk-preview--env)) |
|
|
|
(setf (awk-preview--env-running-p awk-preview--env) nil)) |
|
|
|
(set-window-configuration (awk-preview--env-window-configuration awk-preview--env))) |
|
|
|
|
|
|
|
(defvar awk-preview-program-mode-map |
|
|
|
(let ((map (make-sparse-keymap))) |
|
|
|
(define-key map (kbd "C-c C-l") 'awk-preview-update-preview) |
|
|
|
(define-key map (kbd "C-c C-k") 'awk-preview-abort) |
|
|
|
(define-key map (kbd "C-c C-c") 'awk-preview-commit) |
|
|
|
(define-key map (kbd "C-c C-r") 'awk-preview-reset) |
|
|
|
map) |
|
|
|
"Keymap for `awk-preview-program-mode'.") |
|
|
|
|
|
|
|
(define-minor-mode awk-preview-program-mode |
|
|
|
"Minor mode for awk-preview program buffer." |
|
|
|
:lighter " AWKPrev" |
|
|
|
:keymap awk-preview-program-mode-map) |
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
|
|
;; editorconfig-auto-apply |
|
|
|
|
|
|
|