=================================================================== RCS file: /home/cvs/OpenXM_contrib2/windows/post-msg-asirgui/asir-mode.el,v retrieving revision 1.3 retrieving revision 1.10 diff -u -p -r1.3 -r1.10 --- OpenXM_contrib2/windows/post-msg-asirgui/asir-mode.el 2013/09/19 19:57:32 1.3 +++ OpenXM_contrib2/windows/post-msg-asirgui/asir-mode.el 2013/11/27 04:40:25 1.10 @@ -2,13 +2,40 @@ ;; ;; asir-mode.el -- asir mode ;; -;; $OpenXM: OpenXM_contrib2/windows/post-msg-asirgui/asir-mode.el,v 1.2 2013/08/29 17:39:29 ohara Exp $ + ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. +;; 1. Install +;; +;; **(for Windows) Write the following configuration to your .emacs file. +;; +;; (setq load-path (append load-path '((concat (getenv "ASIR_ROOTDIR") "/share/editor")))) +;; (setq auto-mode-alist (cons '("\\.rr$" . asir-mode) auto-mode-alist)) +;; (autoload 'asir-mode "asir-mode" "Asir mode" t) +;; +;; **(for unix) Copy this file to your emacs site-lisp folder and +;; write the following configuration to your .emacs file. +;; +;; (setq auto-mode-alist (cons '("\\.rr$" . asir-mode) auto-mode-alist)) +;; (autoload 'asir-mode "asir-mode" "Asir mode" t) +;; +;; Please run byte-compile for speed up. +;; +;; 2. Use +;; +;; If you open Risa/Asir source file (*.rr) by emacs, then asir-mode starts up automatically. +;; The following key binding can be used: +;; C-c s Asir starts up in another window. +;; C-c t Asir terminates. +;; C-c l The current buffer is loaded to Asir as a file. +;; C-c r Selected region is loaded to Asir as a file. +;; C-c p Selected region is pasted to Asir. +(require 'shell) + ;;;; AsirGUI for Windows (defvar asir-exec-path '("~/Desktop/asir/bin" "c:/Program Files/asir/bin" "c:/Program Files (x64)/asir/bin" "c:/asir/bin") "Default search path for asir binary in Windows") @@ -16,13 +43,13 @@ (defun asir-effective-exec-path () "Search path for command" (let* ((dir (getenv "ASIR_ROOTDIR")) - (path (append asir-exec-path exec-path))) - (if dir (cons (concat dir "/bin") path) path))) + (path (append asir-exec-path exec-path))) + (if dir (cons (concat dir "/bin") path) path))) (defun asir-executable-find (command) "Search for command" (let* ((exec-path (asir-effective-exec-path))) - (executable-find command))) + (executable-find command))) ;;;; Asir for UNIX (defvar asir-cmd-buffer-name "*asir-cmd*") @@ -30,73 +57,98 @@ (defun asir-cmd-load (filename) "Send `load' command to running asir process" (if (eq system-type 'windows-nt) - (let ((exec-path (asir-effective-exec-path))) - (start-process "asir-proc-cmdasir" nil "cmdasir" filename)) - (save-excursion - (if (get-buffer asir-cmd-buffer-name) - (progn - (set-buffer asir-cmd-buffer-name) - (goto-char (point-max)) - (insert (format "load(\"%s\");" filename)) - (comint-send-input)))))) + (let ((exec-path (asir-effective-exec-path))) + (start-process "asir-proc-cmdasir" nil "cmdasir" filename)) + (save-excursion + (if (get-buffer asir-cmd-buffer-name) + (progn + (set-buffer asir-cmd-buffer-name) + (goto-char (point-max)) + (insert (format "load(\"%s\");" filename)) + (comint-send-input)))))) (defun asir-start () "Start asir process" (interactive) (if (eq system-type 'windows-nt) ;; for Windows - (let ((exec-path (asir-effective-exec-path))) - (start-process "asir-proc-asirgui" nil "asirgui")) + (let ((exec-path (asir-effective-exec-path))) + (start-process "asir-proc-asirgui" nil "asirgui")) ;; for UNIX - (save-excursion - (if (not (get-buffer asir-cmd-buffer-name)) - (let ((current-frame (selected-frame))) - (or (not window-system) - (select-frame (make-frame))) - (shell (get-buffer-create asir-cmd-buffer-name)) ;; Switch to new buffer automatically - (sleep-for 1) - (goto-char (point-max)) - (insert "asir") - (comint-send-input) - (select-frame current-frame)))))) + (save-excursion + (if (not (get-buffer asir-cmd-buffer-name)) + (let ((current-frame (selected-frame))) + (if window-system + (progn + (select-frame (make-frame)) + (shell (get-buffer-create asir-cmd-buffer-name)) ;; Switch to new buffer automatically + (delete-other-windows)) + (if (>= emacs-major-version 24) + (progn + (split-window) + (other-window -1))) + (shell (get-buffer-create asir-cmd-buffer-name))) + (sleep-for 1) + (goto-char (point-max)) + (insert "asir") + (comint-send-input) + (select-frame current-frame)))))) (defun asir-terminate () "Terminate asir process" (interactive) (if (eq system-type 'windows-nt) ;; for Windows - (let ((exec-path (asir-effective-exec-path))) - (start-process "asir-proc-cmdasir" nil "cmdasir" "--quit")) + (let ((exec-path (asir-effective-exec-path))) + (start-process "asir-proc-cmdasir" nil "cmdasir" "--quit")) ;; for UNIX - (if (get-buffer asir-cmd-buffer-name) - (if (not window-system) - (let ((asir-cmd-window (get-buffer-window asir-cmd-buffer-name))) - (and (kill-buffer asir-cmd-buffer-name) - (or (not asir-cmd-window) (delete-window asir-cmd-window)))) - (let ((asir-cmd-frame (window-frame (get-buffer-window asir-cmd-buffer-name 0)))) - (and (kill-buffer asir-cmd-buffer-name) - (delete-frame asir-cmd-frame))))))) + (if (get-buffer asir-cmd-buffer-name) + (if (not window-system) + (let ((asir-cmd-window (get-buffer-window asir-cmd-buffer-name))) + (and (kill-buffer asir-cmd-buffer-name) + (or (not asir-cmd-window) (delete-window asir-cmd-window)))) + (let ((asir-cmd-frame (window-frame (get-buffer-window asir-cmd-buffer-name 0)))) + (and (kill-buffer asir-cmd-buffer-name) + (delete-frame asir-cmd-frame))))))) (defun asir-execute-current-buffer () - "Execute the current buffer on asir" + "Execute current buffer on asir" (interactive) (let ((exec-path (asir-effective-exec-path))) - (asir-cmd-load (buffer-file-name)))) + (asir-cmd-load (buffer-file-name)))) (defun asir-execute-region () - "Execute the region on asir" + "Execute region on asir" (interactive) - (save-excursion - (if mark-active - (let ((temp-file (make-temp-file (format "%s/cmdasir-" (or (getenv "TEMP") "/var/tmp")))) - (temp-buffer (generate-new-buffer " *asir-temp*"))) - (write-region (region-beginning) (region-end) temp-file) - (set-buffer temp-buffer) - (insert " end$") - (write-region (point-min) (point-max) temp-file t) ;; append - (kill-buffer temp-buffer) - (asir-cmd-load temp-file))))) + (if mark-active + (save-excursion + (let ((temp-file (make-temp-file (format "%s/cmdasir-" (or (getenv "TEMP") "/var/tmp")))) + (temp-buffer (generate-new-buffer " *asir-temp*"))) + (write-region (region-beginning) (region-end) temp-file) + (set-buffer temp-buffer) + (insert " end$") + (write-region (point-min) (point-max) temp-file t) ;; append + (kill-buffer temp-buffer) + (asir-cmd-load temp-file))))) +(defun asir-paste-region () + "Paste region to asir" + (interactive) + (if mark-active + (if (eq system-type 'windows-nt) + (let ((temp-file (make-temp-file (format "%s/cmdasir-" (getenv "TEMP")))) + (exec-path (asir-effective-exec-path))) + (write-region (region-beginning) (region-end) temp-file) + (start-process "asir-proc-cmdasir" nil "cmdasir" "--paste-contents" temp-file)) + (save-excursion + (let ((buffer (current-buffer)) + (start (region-beginning)) + (end (region-end))) + (set-buffer asir-cmd-buffer-name) + (goto-char (point-max)) + (insert-buffer-substring buffer start end) + (comint-send-input)))))) + ;;;; Extension for CC-mode. (require 'cc-mode) @@ -137,6 +189,7 @@ ["Terminate Asir" asir-terminate t] ["Execute Current Buffer on Asir" asir-execute-current-buffer (buffer-file-name)] ["Execute Region on Asir" asir-execute-region mark-active] + ["Paste Region to Asir" asir-paste-region mark-active] ))) (defvar asir-font-lock-extra-types nil @@ -174,6 +227,7 @@ Each list item should be a regexp matching a single id (define-key asir-mode-map (kbd "C-c t") 'asir-terminate) (define-key asir-mode-map (kbd "C-c l") 'asir-execute-current-buffer) (define-key asir-mode-map (kbd "C-c r") 'asir-execute-region) +(define-key asir-mode-map (kbd "C-c p") 'asir-paste-region) (easy-menu-define asir-menu asir-mode-map "asir Mode Commands" ;; Can use `asir' as the language for `c-mode-menu'