# java-scrapbook - Java のコード片を実行する

- Author: miyamuko <URL:mailto:miyamuko (at) mtb.biglobe.ne.jp>
- URL: <URL:http://miyamuko.s56.xrea.com/xyzzy/java-scrapbook.html>
- Version: $Id: java-scrapbook.l,v 1.11 2004/09/13 17:02:06 miyamuko Exp $

## 1 説明

Java のコード片を実行します。

ちょっとしたコードの実行結果を知りたい場合に便利です。 名前からもわかるとおり Eclipse にある ScrapBook のぱくりです。

## 2 できること

- 簡単に Java ソースを生成しコンパイル → 実行できる。
- import 文を指定できる。
- classpath を指定できる。
  - eclipse の .classpath 読み込める。

## 3 これからやるかもしれないこと

- メソッド定義
- クラス定義
- package 名の指定
- バッファを作らずに実行結果をカーソル位置に挿入する
  - エラーになったら表示する
- 複数の jdk を簡単に切り替え可能にする
  - 同じコードを複数の jdk で実行して結果を全部表示
    - 実行結果はバージョンごとにバッファを作ることもできる (diff しやすい)
- package-list を読み込んでワイルドカードで import 指定

## 4 インストール

NetInstaller でインストールした場合は 3 以降を、 NetInstaller + `ni-autoload` を使っている人は 4 以降で OK です。

1. アーカイブをダウンロードします。

   <URL:http://miyamuko.s56.xrea.com/xyzzy/archives/java-scrapbook.zip>

2. アーカイブを展開して、$XYZZY/site-lisp 配下にファイルをコピーします。

3. ~/.xyzzy または $XYZZY/site-lisp/siteinit.l に以下のコードを追加します。

       ;; java-scrapbook
       (require "java-scrapbook")

4. 設定を反映させるため xyzzy を再起動してください。

   ※siteinit.l に記述した場合には再ダンプが必要です。

5. 実行したいコード片をリージョンで指定して `M-x java-scrapbook-region` 、 または `M-x java-scrapbook-oneliner` 、`M-x java-scrapbook-display` でミニバッファから一行入力して実行します。

   例: システムプロパティを表示する例 (java-scrapbook-oneliner で入力)。

       System.getProperties().list(System.out);

## 5 リファレンス

### 5.1 関数

`java-scrapbook-current-kill`
  kill ring の文字列を java コード片として実行します。
`java-scrapbook-clipboard`
  クリップボードの文字列を java コード片として実行します。
`java-scrapbook-buffer`
  バッファ全体を Java コードを実行します。
`java-scrapbook-region`
  リージョンの Java コードを実行します。
`java-scrapbook-oneliner`
  ミニバッファから Java のコードを一行入力して実行します。
`java-scrapbook-display`

  ミニバッファから Java の式を一行入力してその評価結果を表示します。

  入力した値はそのまま System.out.println の引数に渡します。 よって入力するのは Java の式である必要があります。 (= セミコロンはいらない)

### 5.2 変数

`*java-scrapbook-template*`

  生成するソースファイルのテンプレートを指定します。

  テンプレートは以下の引数を与えられ format されます。

  1. import 宣言のリスト

     *java-scrapbook-import-list* で指定したリストです。

  2. コード片中に書いてある import 宣言のリスト
  3. クラス名
  4. 実行する Java コード片
`*java-scrapbook-import-list*`

  import 宣言のリストです。

  デフォルトは Java 1.4 の java. で始まり AWT と Applet 以外のパッケージです。

  Java 1.2 or 1.3 を利用している人は以下のようにしてください。

      (setf *java-scrapbook-import-list* *java-scrapbook-java1.3-import-list*)

  新しく追加する場合は以下のようにしてください。

      (pushnew "javax.accessibility.*" *java-scrapbook-import-list* :test #'equal)
      (pushnew "javax.crypto.*" *java-scrapbook-import-list* :test #'equal)

`*java-scrapbook-java1.3-import-list*`
`*java-scrapbook-java1.4-import-list*`
  それぞれ Java 1.2/1.3 と Java1.4 の import 宣言のリストです。
`*java-scrapbook-substitute-alist*`

  生成する Java コードの置換リストです。

  デフォルトでは sout と serr がそれぞれ System.out.println と System.err.println に置換されるように なっています。

  新しく追加する場合は以下のようにしてください。

      (pushnew '("regexp" . "replacement") *java-scrapbook-substitute-alist*)

  例:

      (pushnew '("ae" . "assertEquals") *java-scrapbook-substitute-alist*)

`*java-scrapbook-keep-file-p*`

  生成した Java ファイルを保存・削除を決定するフラグです。

  生成したファイルを削除しないなら以下のように non-nil を指定してください。

      (setq *java-scrapbook-keep-file-p* t)

  生成先は環境変数 %Temp% 配下（たぶん）の Scrap_〜.book というディレクトリです。

  デフォルトは nil （削除する）です。

`*java-scrapbook-source-buffer-name*`
`*java-scrapbook-javac-buffer-name*`
`*java-scrapbook-java-buffer-name*`

  それぞれ生成したソースコード、コンパイル結果、実行結果を 書き込むバッファ名です。

  デフォルトはすべて同じで *Java Scrap* です。

`*java-scrapbook-java-command*`
`*java-scrapbook-javac-command*`

  Java の実行コマンドとコンパイルコマンドを指定します。

  文字列以外を指定すると適当に文字列に変換します。 関数を指定した場合 funcall するので動的に値を変更できます。

`*java-scrapbook-before-java-hook*`
`*java-scrapbook-before-javac-hook*`

  なんとなく用意したフックです。 プリプロセッサに通したいとか ajc したいとかに使えるかも。

  それぞれ java コマンドの前と javac コマンドの前に `run-hook-with-args-while-success` で実行します。 フックが nil を返すとその時点ですべての実行を中断します。

  フックの引数は次のとおりです。

  1. 生成したソースファイルの絶対パス
  2. クラス名
`*java-scrapbook-search-eclipse-classpath-p*`

  Eclipse の .classpath ファイルを読み込むかどうかを指定します。 nil を指定した場合、読み込みません。

  .classpath の検索はカレントディレクトリから上位に探します。

`*java-scrapbook-classpath*`

  クラスパスを指定します。 デフォルト値は環境変数 CLASSPATH の値です。

  *java-scrapbook-search-eclipse-classpath-p* に non-nil を指定した場合 Eclipse の .classpath ファイルを読み込んでクラスパスの 先頭に追加します。

`*java-scrapbook-erase-output-buffer*`
  javac コマンドや java コマンド実行前にバッファの内容を削除する場合 t (デフォルト nil)。

## 6 ライセンス

java-scrapbook は修正 BSD ライセンスに基づいて利用可能です。

    Copyright (C) 2003-2004 MIYAMUKO Katsuyuki. All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are
    met:

    1 Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer as the first lines
      of this file unmodified.

    2 Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

    THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGE.