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