| @@ -1851,48 +1851,9 @@ This mode is a simplified version of `adoc-mode'." | |||
| (defvar awk-preview--env nil | |||
| "`awk-preview--env' struct object of currently running.") | |||
| (make-variable-buffer-local 'awk-preview--env) | |||
| (defvar awk-preview--point-beg | |||
| nil | |||
| "Point of beginning.") | |||
| (make-variable-buffer-local 'awk-preview--point-beg) | |||
| (defvar awk-preview--point-end | |||
| nil | |||
| "Point of end.") | |||
| (make-variable-buffer-local 'awk-preview--point-end) | |||
| (defvar awk-preview--preview-point-beg | |||
| nil | |||
| "Point of beginning. | |||
| Used by preview buffer and always same as awk-preview--point-beg.") | |||
| (make-variable-buffer-local 'awk-preview--preview-point-beg) | |||
| (defvar awk-preview--preview-point-end | |||
| nil | |||
| "Point of beginning. | |||
| Used by preview buffer and may defferent from awk-preview--point-end.") | |||
| (make-variable-buffer-local 'awk-preview--preview-point-end) | |||
| (defvar awk-preview--program-filename | |||
| nil | |||
| "Awk preview program file name.") | |||
| (make-variable-buffer-local 'awk-preview--program-filename) | |||
| (defvar awk-preview--source-buffer | |||
| nil | |||
| "Awk source buffer.") | |||
| (make-variable-buffer-local 'awk-preview--source-buffer) | |||
| (defvar awk-preview--preview-buffer | |||
| nil | |||
| "Awk preview buffer.") | |||
| (make-variable-buffer-local 'awk-preview--preview-buffer) | |||
| (defvar awk-preview--program-buffer | |||
| nil | |||
| "Awk program buffer.") | |||
| (make-variable-buffer-local 'awk-preview--program-buffer) | |||
| (defvar awk-preview--window-configuration | |||
| nil | |||
| "Awk preview window configuration.") | |||
| (put 'awk-preview--env | |||
| 'permanent-local | |||
| t) | |||
| (defun awk-preview--invoke-awk (buf beg end progfile output &optional delete) | |||
| "Execute PROGFILE awk process with BEG and END input and output to OUTPUT buffer. | |||
| @@ -1921,11 +1882,9 @@ Delete the text between BEG and END when DELETE is non-nil." | |||
| "*AWK Preview<%s>*" | |||
| "Buffer name of awk preview.") | |||
| (defun awk-preview--create-program-buffer (source preview) | |||
| "Create and show awk program buffer for SOURCE and PREVIEW buffer. | |||
| Return that buffer." | |||
| (let ((source-name (buffer-name source))) | |||
| (defun awk-preview--create-program-buffer (e) | |||
| "Create 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) | |||
| @@ -1933,92 +1892,99 @@ Return that buffer." | |||
| (awk-mode) | |||
| (awk-preview-program-mode 1) | |||
| (setq awk-preview--source-buffer source) | |||
| (setq awk-preview--preview-buffer preview) | |||
| (setq awk-preview--program-buffer (current-buffer)) | |||
| (setq awk-preview--program-filename (make-temp-file "awk-preview-" | |||
| nil | |||
| ".awk")) | |||
| (setf (awk-preview--env-program-buffer e) (current-buffer)) | |||
| (setf (awk-preview--env-program-filename e) (make-temp-file "awk-preview-" | |||
| nil | |||
| ".awk")) | |||
| (setq awk-preview--env e) | |||
| (current-buffer)))) | |||
| (defun awk-preview-program-buffer-kill-hook () | |||
| "Cleanup for awk-preview program buffer." | |||
| (when awk-preview--program-filename | |||
| (delete-file awk-preview--program-filename))) | |||
| (when (and awk-preview--env | |||
| (awk-preview--env-program-filename awk-preview--env)) | |||
| (delete-file (awk-preview--env-program-filename awk-preview--env)))) | |||
| (add-hook 'kill-buffer-hook | |||
| 'awk-preview-program-buffer-kill-hook) | |||
| (defun awk-preview--create-preview-buffer (source) | |||
| "Create preview buffer of SOURCE buffer and return it." | |||
| (with-current-buffer source | |||
| (defun awk-preview--create-preview-buffer (e) | |||
| "Create preview buffer for `awk-preview--env' object E." | |||
| (with-current-buffer (awk-preview--env-source-buffer e) | |||
| ;; TODO: Do not unset buffer-file-name in let | |||
| (let ((buffer-file-name nil) | |||
| (beg awk-preview--point-beg) | |||
| (end awk-preview--point-end)) | |||
| (beg (awk-preview--env-point-beg e)) | |||
| (end (awk-preview--env-point-end e))) | |||
| (with-current-buffer (clone-buffer (format awk-preview-preview-buffer-name | |||
| (buffer-name))) | |||
| (awk-preview-program-mode 1) | |||
| (setq awk-preview--preview-point-beg beg) | |||
| (setq awk-preview--preview-point-end end) | |||
| (setq awk-preview--source-buffer source) | |||
| (setq awk-preview--preview-buffer (current-buffer)) | |||
| (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) (current-buffer)) | |||
| (goto-char end) | |||
| (setq buffer-read-only t) | |||
| (setq awk-preview--env e) | |||
| (current-buffer))))) | |||
| (defun awk-preview (beg end) | |||
| "Run awk and preview result." | |||
| (interactive "r") | |||
| (setq awk-preview--point-beg beg) | |||
| (setq awk-preview--point-end end) | |||
| (setq awk-preview--source-buffer (current-buffer)) | |||
| (setq awk-preview--preview-buffer | |||
| (awk-preview--create-preview-buffer (current-buffer))) | |||
| (setq awk-preview--program-buffer | |||
| (awk-preview--create-program-buffer (current-buffer) | |||
| awk-preview--preview-buffer)) | |||
| ;; At creation of preview buffer, program buffer is not available so set this | |||
| ;; here | |||
| (let ((b awk-preview--program-buffer)) | |||
| (with-current-buffer awk-preview--preview-buffer | |||
| (setq awk-preview--program-buffer b))) | |||
| (setq awk-preview--window-configuration | |||
| (current-window-configuration)) | |||
| (set-window-buffer (get-buffer-window awk-preview--source-buffer) | |||
| awk-preview--preview-buffer) | |||
| (pop-to-buffer awk-preview--program-buffer) | |||
| (switch-to-buffer awk-preview--program-buffer) | |||
| (awk-preview-update-preview) | |||
| ) | |||
| (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-preview-buffer e) | |||
| (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) | |||
| (with-current-buffer awk-preview--program-buffer | |||
| (with-current-buffer (awk-preview--env-program-buffer awk-preview--env) | |||
| (write-region (point-min) | |||
| (point-max) | |||
| awk-preview--program-filename)) | |||
| (awk-preview--env-program-filename awk-preview--env))) | |||
| (let ((output (with-current-buffer (get-buffer-create " *awk-preview output*") | |||
| (erase-buffer) | |||
| (current-buffer))) | |||
| (progfile (with-current-buffer awk-preview--program-buffer | |||
| awk-preview--program-filename))) | |||
| (with-current-buffer awk-preview--source-buffer | |||
| (awk-preview--invoke-awk (current-buffer) | |||
| awk-preview--point-beg | |||
| awk-preview--point-end | |||
| progfile | |||
| output) | |||
| (with-current-buffer awk-preview--preview-buffer | |||
| (let ((inhibit-read-only t)) | |||
| (goto-char awk-preview--preview-point-end) | |||
| (delete-region awk-preview--preview-point-beg (point)) | |||
| (insert-buffer-substring output) | |||
| (setq awk-preview--preview-point-end (point)))) | |||
| (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-commit () | |||