6 フィードバック・モード

フィードバック・モードでは、JShell内でプロンプト、フィードバックおよび他の相互作用を判定します。異なるレベルのフィードバックを備えた事前定義済モードを提供します。必要に応じて、カスタム・モードを作成できます。

フィードバック・モードの設定

フィードバック・モードとは、名前付きのユーザー対話構成です。フィードバック・モードでは、JShellとの相互作用で使用されるプロンプトおよびフィードバックを定義します。事前定義済モードは利便性のために提供されています。必要に応じて、カスタム・モードを作成できます。

事前定義済モードは変更できませんが、カスタム・モードのベースとして使用できます。事前定義済モードは、詳細度の降順に詳細通常, 簡易およびサイレントです。

次の表に、事前定義済モードの相違点を示します。

モード 値のスニペット 宣言 更新 コマンド プロンプト

詳細

名前 ==> 値(および説明)

あり

あり

あり

jshell>

通常

名前 ==> 値

あり

なし

あり

jshell>

簡易

名前 ==> 値(式のみ)

なし

なし

なし

jshell>

サイレント

なし

なし

なし

なし

->

  • モード列は、説明されているモードを示します。

  • 値のスニペット列は、式、割当ておよび変数宣言などの値を持つスニペットに表示される内容を示します。

  • 宣言列は、フィードバックを宣言またはメソッド、クラス、列挙、インタフェースおよび注釈インタフェースに対して表示するかどうかを示します。

  • 更新列は、現在のスニペット以外のスニペットへの変更を表示するかどうかを示します。

  • コマンド列には、コマンドが成功を示すフィードバックを返すかどうかを示します。

  • プロンプト列は、使用されているプロンプトを示します。

デフォルトのフィードバック・モードは通常です。フィードバック・モードを変更するには、コマンドライン・オプションを設定するか、次の例に示すように/set feedbackコマンドを使用します。

jshell> /set feedback verbose 
|  Feedback mode: verbose

jshell> 2 + 2
$1 ==> 4
|  created scratch variable $1 : int

jshell> /set feedback silent 
-> 2 + 2
-> /set feedback normal 
|  Feedback mode: normal

jshell> 2 + 2
$3 ==> 4

jshell> /set feedback concise 
jshell> 2 + 2
$4 ==> 4
jshell> 

設定が通常または詳細の場合、コマンド・フィードバックでは設定が表示されますが、簡易およびサイレントモードでは表示されないことに注意してください。モードがサイレントに設定されている場合、式2+2の異なる3つの形式のフィードバックにはフィードバックなしが含まれていることにも注意してください。

現在の使用可能なフィードバック・モードを確認するには、オプションを指定しないで/set feedbackコマンドを使用します。現在のモードがこれを設定するコマンドとして表示されることに注意してください。

jshell> /set feedback 
|  /set feedback verbose
|  
|  Available feedback modes:
|     concise
|     normal
|     silent
|     verbose

フィードバック・モードの定義

カスタム・フィードバックを使用すると、表示するプロンプトおよびJShellに入力する様々な要素に対して受け取るフィードバックを定義できます。

フィードバック・モードには、次の設定があります。

  • プロンプト: 通常および継続

  • 切捨て: 表示される値の最大の長さ

  • 形式: 返されるフィードバックの形式

事前定義済モードは変更できませんが、次の例に示すように既存モードのコピーは容易に作成できます。

jshell> /set mode mine normal -command
|  Created new feedback mode: mine

新規モードmineは、通常モードのコピーです。-commandオプションは、コマンド・フィードバックが必要であることを示します。発生するアクションの説明がコマンドに不要な場合、-commandではなく、-quietを使用します。

プロンプトの設定

すべての/setコマンドと同様に、設定なしで/set promptコマンドを使用すると、現在の設定が表示されます。

jshell> /set prompt normal
|  /set prompt normal "\njshell> " "   ...> "

前述の例で返されるフィードバックでは、最初の文字列は通常のプロンプトで、2番目の文字列は継続プロンプトです。これは、スニペットが複数行にわたる場合に使用されます。次の例は、新しいモードに切り替えてこれを試す方法を示しています。

jshell> /set prompt mine "\nmy mode: "  ".......: "

jshell> /set feedback mine
|  Feedback mode: mine

my mode: class C {
.......:    int x;
.......: }
|  created class C

my mode:

プロンプトの文字列には%sが含まれることがありますが、これは次のスニペットIDに置き換えられます。ただし、コマンドが入力されたか、スニペットがエラーで終了した場合、ユーザーがプロンプトで入力する値にはそのIDを割り当てられない場合があります。

すべての設定には現在のセッションの期間があり、これらは/resetコマンドでリセットされません。今後のセッション用にこの設定をデフォルトにする場合、-retainオプションを使用して、これらを保持します。次の例は、カスタム・モードをセッション間で保持する方法を示しています。

my mode: /set mode mine -retain

my mode: /set feedback mine -retain
|  Feedback mode: mine

my mode: /exit 
|  Goodbye
% jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

my mode: 

切捨ての設定

値が長すぎる場合、表示時に切り捨てられます。/set truncationコマンドを使用して、値に表示される最大の長さを設定します。コマンドで設定が入力されない場合、現在の設定が表示されます。次の例は、通常モードから継承された設定を示しています。

my mode: /set truncation mine 
|  /set truncation mine 80 
|  /set truncation mine 1000 expression,varvalue

my mode: String big = IntStream.range(0,1200).mapToObj(n -> "" + (char) ('a' + n % 26)).collect(Collectors.joining())
big ==> "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv ... fghijklmnopqrstuvwxyzabcd"

切捨ての設定が有効になる条件は、切捨ての長さの後に入力したオプション・セレクタによって判定されます。2つのタイプのセレクタ(オンライン・ヘルプでは、セレクタの種類と呼ばれる)が定義されています。

  • ケース・セレクタは値が表示されるスニペットのタイプを指定します。

  • アクション・セレクタはスニペットに発生した内容を示します。

セレクタの詳細は、/help /set truncationを入力してください。

前述の例に示された設定は、値が式(expressionケース・セレクタ)の値、または変数名(varvalueケース・セレクタ)を入力して明示的にリクエストしたように変数の値でないかぎり、値が80文字に切り捨てられるということです。順序は重要で、最後に入力したものが使用されます。順序が逆になっている場合、すべての値は80文字に切り捨てられます。

次の例は、デフォルトの切捨てを100に設定しています。明示的にリクエストされた場合にのみ、長い値を示します。

my mode: /set truncation mine 100

my mode: /set truncation mine 300 varvalue

my mode: big + big
$2 ==> "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghi ... yzabcdefghijklmnopqrstuvwxyzabcd"

my mode: big
big ==> "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstu
vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl ... jklmnopq
rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"

my mode: /set mode mine -retain

新しい設定を維持するには、例の最後に示されているように変更内容を保持します。

形式の設定

スニペットの出力は、カスタマイズ可能な別の設定です。通常モードから継承される形式では、インポートはフィードバックを返さず、値のタイプは表示されません。

my mode: import java.beans.*

my mode: Locale.CANADA.getUnicodeLocaleAttributes()
$5 ==> []

スニペットの出力の形式は、/set formatコマンドを使用して設定されます。モード名とともにこれを入力します。設定しないと、現在の形式設定が表示されます。

my mode: /set format mine

このコマンドの拡張ヘルプが、/help /set formatコマンドで使用できます。これをこの項の後述の箇所(形式の定義時に使用するフィールドの説明)で参照として使用するために、これを指定できます。

表示される主なフィードバックは、displayフィールドによって判定されます。他のフィールドを定義すると、displayフィールドの定義に役立ちます。/help /set formatコマンドからの出力に表示されるように、サイレント以外の事前定義済モードは、これらのフィールドの一部を定義します。これらのフィールドは例に示されているモードで継承されます。インポートの表示定義が次の例に示されています。

my mode: /set format mine display "{pre}added import {name}{post}" import-added

my mode: /set format mine display "{pre}re-added import {name}{post}" import-modified,replaced

nameフィールドはスニペットの名前として事前定義されています。次の例は、フィードバックがインポートに対して返されることを示しています。

my mode: import java.beans.*
|  re-added import java.beans.*

表示定義で使用されるpreおよびpostフィールドは、フィードバック出力の各行の接頭辞および接尾辞の文字です。次の例は、縦棒の接頭辞を空の文字列に変更しています。

my mode: /set format mine pre ""

my mode: void m() {}
created method m()

my mode: import java.beans.*
re-added import java.beans.*

my mode: /set truncation mine 
/set truncation mine 100
/set truncation mine 300 varvalue

ノート:

接頭辞の文字を変更すると、feedbackコマンドを含め、すべてのフィードバックに影響を与えます。

値の表示時にタイプを表示するには、事前定義済モードで定義されるresultフィールドを変更します。

my mode: /set format mine result "{type} {name} = {value}{post}" added,modified,replaced-primary-ok

my mode: Locale.CANADA.getUnicodeLocaleAttributes()
Set<String> $11 = []

my mode: 2 + 2
int $12 = 4

この変更により、新規または更新された(added,modified,replaced)場合か、入力されたスニペット(primary)にあるか、エラーがない(ok)場合にのみ、resultが空でなくなります。

保持されているモードを永続的に削除するには、-deleteオプションを指定して-retainオプションを使用します。

my mode: /set feedback verbose -retain
|  Feedback mode: verbose

jshell> /set mode mine -delete -retain