=================================================================== RCS file: /home/cvs/OpenXM_contrib2/windows/post-msg-asirgui/asir-mode.el,v retrieving revision 1.8 retrieving revision 1.9 diff -u -p -r1.8 -r1.9 --- OpenXM_contrib2/windows/post-msg-asirgui/asir-mode.el 2013/11/16 06:54:12 1.8 +++ OpenXM_contrib2/windows/post-msg-asirgui/asir-mode.el 2013/11/27 04:23:07 1.9 @@ -2,154 +2,58 @@ ;; ;; asir-mode.el -- asir mode ;; -;; $OpenXM: OpenXM_contrib2/windows/post-msg-asirgui/asir-mode.el,v 1.7 2013/09/21 10:51:45 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") +(defconst asir-exec-path-default '("~/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") -(defun asir-effective-exec-path () +(defvar asir-exec-path asir-exec-path-default + "Search path for asir binary") + +(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) +(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*") - -(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)))))) - -(defun asir-start () - "Start asir process" +(defun asir-start-asirgui () + "Run asirgui" (interactive) - (if (eq system-type 'windows-nt) - ;; for Windows - (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))) - (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)))))) + (let ((exec-path (asir-effective-exec-path))) + (start-process "asir-proc-asirgui" nil "asirgui"))) -(defun asir-terminate () - "Terminate asir process" +(defun asir-terminate-asirgui () + "Execute the current buffer on asir" (interactive) - (if (eq system-type 'windows-nt) - ;; for Windows - (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))))))) + (let ((exec-path (asir-effective-exec-path))) + (start-process "asir-proc-cmdasir" nil "cmdasir" "--quit"))) -(defun asir-execute-current-buffer () - "Execute current buffer on asir" +(defun asir-execute-current-buffer-on-asir () + "Execute the current buffer on asir" (interactive) (let ((exec-path (asir-effective-exec-path))) - (asir-cmd-load (buffer-file-name)))) + (start-process "asir-proc-cmdasir" nil "cmdasir" (buffer-file-name)))) -(defun asir-execute-region () - "Execute region on asir" +(defun asir-execute-region-on-asir () + "Execute the region on asir" (interactive) - (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))))) + (save-excursion + (if mark-active + (let ((exec-path (asir-effective-exec-path)) + (temp-file (make-temp-file (format "%s/cmdasir-" (getenv "TEMP"))))) + (write-region (region-beginning) (region-end) temp-file) + (start-process "asir-proc-cmdasir" nil "cmdasir" 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) @@ -186,11 +90,12 @@ asir (append (c-lang-const c-mode-menu c) '("----" - ["Start Asir" asir-start t] - ["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] + ["Start asirgui" asir-start-asirgui (eq system-type 'windows-nt)] + ["Terminate asirgui" asir-terminate-asirgui (eq system-type 'windows-nt)] + ["Execute the current buffer on asir" asir-execute-current-buffer-on-asir + (and (eq system-type 'windows-nt) (buffer-file-name))] + ["Execute the region on asir" asir-execute-region-on-asir + (and (eq system-type 'windows-nt) mark-active)] ))) (defvar asir-font-lock-extra-types nil @@ -222,13 +127,6 @@ Each list item should be a regexp matching a single id ;; Add bindings which are only useful for asir map) "Keymap used in asir-mode buffers.") - -;; Key binding for asir-mode -(define-key asir-mode-map (kbd "C-c s") 'asir-start) -(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'