;;; RCCTL-MODE.EL --- rcctl okecon frontend ;; Copyright (C) 2003 NaO ;; Author: NaO ;; Maintainer: NaO ;; Created: 06 Jan 2003 ;; Version: 0.2 ;; Keywords: RCCTL おけこん ;; 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 1, or (at your option) ;; any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; A copy of the GNU General Public License can be obtained from this ;; program's author (send electronic mail to ) or from ;; the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA ;; 02139, USA. ;; LCD Archive Entry: ;; rcctl-mode|NaO| ;; |rcctl frontend ;; |$Date$|$Revision$|~/packages/rcctl-mode.el ;;; Commentary: ;;; W341連合(http://www.wig.nu/w341/) のPC用カラオケ選曲番号送信ハード ;;; 「おけこん」を使うモード。コマンドライン送信プログラムのrcctlを裏で呼びます。 ;;; その際カーソル位置の送信文字と思われる文字列を送ります。 ;;; 1. rcctl-mode.elをload-pathの通ったところに置きます。 ;;; 2. ~/.emacs に以下の記述をします。 ;;; (autoload 'rcctl-mode "rcctl-mode" "Major mode for okecon/rcctl." t nil) ;;; 3. 適当な曲番号リストを表示後M-x rcctl-modeとやって起動します。 ;;; 4. 曲番号送信は C-cC-c 'rcctl-send' ;;; 5. メーカ指定は C-cC-m 'rcctl-maker-set'。初期値(Σ0)。 ;;; ミニバッファでメーカ名を'A1'とか入れます。補完効きません。 ;;; 6. ツールバーにメニューを付けたのでそっちで選んでもOK。 ;;; え?コンソール上だからメニューが選べない?自分でなんとかして。 ;;; 7. 他のキー割り当ては以下。 ;;; KeyUp: C-cC-u, KeyDown: C-cC-d, Start: C-cC-s, Stop: C-cC-p, Clear: C-cC-l ;;; rcctl自体をパスのある場所に置いてない場合は ;;; (setq rcctl-exec-prog "~/bin/hoge/rcctl") ;;; 等と設定してください。 ;;; Emacsはjapan-util.elが入っててeasymenu.elが入ってるのを使ってください。 ;;; 20.3〜くらい?バージョンチェックはしてません。 ;;; カーソルのある所でその下にある空白で区切られた文字列を ;;; 引数にしてrcctlを呼んで実行します ;;; 数字は全角英数字、全角ハイフン、半角英数字、半角ハイフンを認識 ;;; それ以外の文字は全て区切り文字として認識。 ;;; 例えば全角スペース、半角スペース、タブ、カンマ、改行 ;;; ;;; 送信文字として有効な例 ;;; 1234 10a35 200-12 12-3,11A78 345B2, KU KD ST SP CL ;;; 1234 10A30 90−10 79B3 ;;; ;;; 「普通の英単語」や空白も送信されますがrcctlで無視してくれるから気にせず渡します:-) ;;; 送信ログは*Messages*バッファから自分で取ってこよう。 ;;; 言い訳。mode作ったの初めてなんで、かなり怪しげです。 ;;; っていうかemacs lispを書くこと自体が不自由なので ;;; 問題がある時はできれば教えて頂けると幸い。 ;;; Change log: ;; $Log$ ;;; Code: (defconst rcctl-mode-version "0.2" "$Id$ Report bugs to: NaO ") (defvar rcctl-delimiter-regexp "[^-0-9A-Za-z0-9A-Za-z−]" "rcctlの区切り文字(送信文字以外)") (defvar rcctl-exec-prog "rcctl" "rcctl送信プログラム") (defvar rcctl-maker "C0" "rcctlの送信するメーカーと初期値") (defun rcctl-get-sendno () "カーソル位置の送信文字列を取り出して返す。全角英数字の場合は半角にする。 カーソル位置から左の区切り文字まで戻り、次の区切り文字までを送信文字と設定。" (let (beg) (save-excursion (progn (re-search-backward rcctl-delimiter-regexp) (forward-char 1) (setq beg (point)) (re-search-forward rcctl-delimiter-regexp) (backward-char 1) (japanese-hankaku (buffer-substring beg (point))))))) (defun rcctl-send (&optional nm) "rcctl送信" (interactive) (let (no) (if (not nm) (setq no (rcctl-get-sendno)) (setq no nm)) (message "Send: %s %s %s." rcctl-exec-prog rcctl-maker no) (call-process rcctl-exec-prog nil nil nil rcctl-maker no))) (defun rcctl-send-keyup () "" (interactive) (rcctl-send "KU")) (defun rcctl-send-keydown () "" (interactive) (rcctl-send "KD")) (defun rcctl-send-start () "" (interactive) (rcctl-send "ST")) (defun rcctl-send-stop () "" (interactive) (rcctl-send "SP")) (defun rcctl-send-clear () "" (interactive) (rcctl-send "CL")) (defun rcctl-maker-set (maker) "rcctlのメーカーをセットする" (interactive "sSet rcctl maker (like C0): ") (setq rcctl-maker maker) (setq mode-line-process (concat ":" rcctl-maker)) (force-mode-line-update) maker) (defun rcctl-maker-set2 (maker) "rcctlのメーカーをセットする" (setq rcctl-maker maker) (setq mode-line-process (concat ":" rcctl-maker)) (force-mode-line-update)) (define-derived-mode rcctl-mode text-mode "Rcctl" "Major mode for おけこん/rcctl. W341連合(http://www.wig.nu/w341/) のPC用カラオケ選曲番号送信ハード 「おけこん」を使うモード。コマンドライン送信プログラムのrcctlを裏で呼びます。 その際カーソル位置の送信文字と思われる文字列を送ります。 rcctl-sendで起動します。送信メーカーは'rcctl-maker-set'で設定します。 \\{rcctl-mode-map}" (setq mode-line-process (concat ":" rcctl-maker))) (define-key rcctl-mode-map "\C-c\C-m" 'rcctl-maker-set) (define-key rcctl-mode-map "\C-c\C-c" 'rcctl-send) (define-key rcctl-mode-map "\C-c\C-u" 'rcctl-send-keyup) (define-key rcctl-mode-map "\C-c\C-d" 'rcctl-send-keydown) (define-key rcctl-mode-map "\C-c\C-s" 'rcctl-send-start) (define-key rcctl-mode-map "\C-c\C-p" 'rcctl-send-stop) (define-key rcctl-mode-map "\C-c\C-l" 'rcctl-send-clear) (require 'easymenu) (easy-menu-define rcctl-mode-menu rcctl-mode-map "Rcctl Menu." (list "Rcctl" ["Send" rcctl-send t] "-" ["KeyUp" rcctl-send-keyup t] ["KeyDn" rcctl-send-keydown t] ["Start" rcctl-send-start t] ["Stop" rcctl-send-stop t] ["Clear" rcctl-send-clear t] "-" (list "Maker Select" ["X2000" (rcctl-maker-set2 "X") t] ["GIGA" (rcctl-maker-set2 "G") t] ["JOYSOUND" (rcctl-maker-set2 "J") t] ["HyperJOY" (rcctl-maker-set2 "H") t] ["東映BeMAX'S" (rcctl-maker-set2 "B") t] ["セガカラ" (rcctl-maker-set2 "P") t] ["DAM" (rcctl-maker-set2 "D") t] ["孫悟空/Syncom" (rcctl-maker-set2 "S") t] ["NET7000" (rcctl-maker-set2 "N") t] ["B-Kara" (rcctl-maker-set2 "K") t] ["Mac21" (rcctl-maker-set2 "M1") t] (list "U-kara" ["1" (rcctl-maker-set2 "U1") t] ["2" (rcctl-maker-set2 "U2") t]) (list "Alisa3" (list "(No→Op)" ["0" (rcctl-maker-set2 "A0") t] ["1" (rcctl-maker-set2 "A1") t] ["2" (rcctl-maker-set2 "A2") t] ["3" (rcctl-maker-set2 "A3") t] ["4" (rcctl-maker-set2 "A4") t]) (list "(Mk→No)" ["0" (rcctl-maker-set2 "L0") t] ["1" (rcctl-maker-set2 "L1") t] ["2" (rcctl-maker-set2 "L2") t] ["3" (rcctl-maker-set2 "L3") t] ["4" (rcctl-maker-set2 "L4") t] ["5" (rcctl-maker-set2 "L5") t] ["6" (rcctl-maker-set2 "L6") t] ["7" (rcctl-maker-set2 "L7") t] ["8" (rcctl-maker-set2 "L8") t] ["9" (rcctl-maker-set2 "L9") t]) (list "(Op→No)" ["1" (rcctl-maker-set2 "Z1") t] ["2" (rcctl-maker-set2 "Z2") t] ["3" (rcctl-maker-set2 "Z3") t] ["4" (rcctl-maker-set2 "Z4") t])) (list "TOEI システム" ["1" (rcctl-maker-set2 "T1") t] ["2" (rcctl-maker-set2 "T2") t] ["3" (rcctl-maker-set2 "T3") t] ["4" (rcctl-maker-set2 "T4") t] ["5" (rcctl-maker-set2 "T5") t] ["6" (rcctl-maker-set2 "T6") t] ["7" (rcctl-maker-set2 "T7") t] ["8" (rcctl-maker-set2 "T8") t]) (list "Σシステム" ["0" (rcctl-maker-set2 "C0") t] ["1" (rcctl-maker-set2 "C1") t] ["2" (rcctl-maker-set2 "C2") t] ["3" (rcctl-maker-set2 "C3") t] ["4" (rcctl-maker-set2 "C4") t] ["5" (rcctl-maker-set2 "C5") t] ["6" (rcctl-maker-set2 "C6") t] ["7" (rcctl-maker-set2 "C7") t] ["8" (rcctl-maker-set2 "C8") t] ["9" (rcctl-maker-set2 "C9") t] ["10" (rcctl-maker-set2 "C10") t] ["11" (rcctl-maker-set2 "C11") t] ["12" (rcctl-maker-set2 "C12") t] ["13" (rcctl-maker-set2 "C13") t] ["14" (rcctl-maker-set2 "C14") t] ["15" (rcctl-maker-set2 "C15") t]) (list "カラオケの鉄人" ["0" (rcctl-maker-set2 "I0") t] ["1" (rcctl-maker-set2 "I1") t] ["2" (rcctl-maker-set2 "I2") t] ["3" (rcctl-maker-set2 "I3") t] ["4" (rcctl-maker-set2 "I4") t] ["5" (rcctl-maker-set2 "I5") t] ["6" (rcctl-maker-set2 "I6") t] ["7" (rcctl-maker-set2 "I7") t] ["8" (rcctl-maker-set2 "I8") t] ["9" (rcctl-maker-set2 "I9") t])))) (provide 'rcctl-mode) ;;; RCCTL-MODE.EL ends here