diff --git a/emacs.el b/emacs.el index da3a70f..87aaa2c 100644 --- a/emacs.el +++ b/emacs.el @@ -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 ()