File 2301-stdlib-add-shell-multiline_prompt_func-1.patch of Package erlang
From 73cd01c77df3d33ae5eaf53febd272a2424ac570 Mon Sep 17 00:00:00 2001
From: frazze-jobb <frazze@erlang.org>
Date: Thu, 2 Nov 2023 14:50:01 +0100
Subject: [PATCH] stdlib: add shell:multiline_prompt_func/1
updates stdlib and kernel dependencies
---
lib/kernel/src/kernel.app.src | 2 +-
lib/kernel/test/interactive_shell_SUITE.erl | 11 +++++++++-
lib/stdlib/doc/src/shell.xml | 23 ++++++++++++++++-----
lib/stdlib/doc/src/stdlib_app.xml | 10 +++++++++
lib/stdlib/src/shell.erl | 9 +++++++-
lib/stdlib/src/stdlib.app.src | 2 +-
6 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/lib/kernel/src/kernel.app.src b/lib/kernel/src/kernel.app.src
index a06840ac1c..e871fbb2cc 100644
--- a/lib/kernel/src/kernel.app.src
+++ b/lib/kernel/src/kernel.app.src
@@ -162,7 +162,7 @@
{shell_history_drop,[]}
]},
{mod, {kernel, []}},
- {runtime_dependencies, ["erts-14.0", "stdlib-5.0",
+ {runtime_dependencies, ["erts-14.0", "stdlib-6.0",
"sasl-3.0", "crypto-5.0"]}
]
}.
diff --git a/lib/kernel/test/interactive_shell_SUITE.erl b/lib/kernel/test/interactive_shell_SUITE.erl
index 39834cbce4..b15216317e 100644
--- a/lib/kernel/test/interactive_shell_SUITE.erl
+++ b/lib/kernel/test/interactive_shell_SUITE.erl
@@ -481,7 +481,7 @@ shell_multiline_prompt(Config) ->
Term1 = start_tty([{args,["-stdlib","shell_multiline_prompt","{shell,inverted_space_prompt}"]}|Config]),
Term2 = start_tty([{args,["-stdlib","shell_multiline_prompt","\"...> \""]}|Config]),
Term3 = start_tty([{args,["-stdlib","shell_multiline_prompt","edlin"]}|Config]),
-
+ Term4 = start_tty(Config),
try
check_location(Term1, {0, 0}),
send_tty(Term1,"\na"),
@@ -507,6 +507,15 @@ shell_multiline_prompt(Config) ->
ok
after
stop_tty(Term3)
+ end,
+ try
+ send_tty(Term4, "shell:multiline_prompt_func(\"-> \").\n"),
+ check_content(Term4, "default"),
+ send_tty(Term4, "a\nb"),
+ check_content(Term4, "-> b"),
+ ok
+ after
+ stop_tty(Term4)
end.
shell_clear(Config) ->
diff --git a/lib/stdlib/doc/src/shell.xml b/lib/stdlib/doc/src/shell.xml
index a6bba8dcb4..3de6f34680 100644
--- a/lib/stdlib/doc/src/shell.xml
+++ b/lib/stdlib/doc/src/shell.xml
@@ -898,7 +898,10 @@ q - quit erlang
function by calling <seemfa marker="#prompt_func/1">
<c>prompt_func/1</c></seemfa> or by setting application
configuration parameter <c>shell_prompt_func</c> for the
- STDLIB application.</p>
+ STDLIB application. Similarly the multiline prompt can
+ be configured as well, by calling <seemfa marker="#multiline_prompt_func/1">
+ <c>multiline_prompt_func/1</c></seemfa> or by setting the application
+ parameter <c>shell_multiline_prompt</c> for the STDLIB application.</p>
<p>A customized prompt function is stated as a tuple
<c>{Mod, Func}</c>. The function is called as
@@ -952,7 +955,8 @@ q - quit erlang
<desc>
<p>Configures the multiline prompt as inverted space.
It may be set explicitly as
- <c>-stdlib shell_multiline_prompt {shell, inverted_space_prompt}</c>.</p>
+ <c>-stdlib shell_multiline_prompt {shell, inverted_space_prompt}</c>
+ or calling <c>multiline_prompt_func({shell, inverted_space_prompt}).</c></p>
</desc>
</func>
@@ -971,7 +975,16 @@ q - quit erlang
</func>
<func>
- <name name="prompt_width" arity="1" since="OTP 27.0"/>
+ <name name="multiline_prompt_func" arity="1" since="OTP 27.0"/>
+ <fsummary>Set the shell multiline prompt.</fsummary>
+ <desc>
+ <p>Sets the shell multiline prompt function to <c><anno>PromptFunc</anno></c>.
+ The previous prompt function is returned.</p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="prompt_width" arity="1" since="OTP 27.0"/>
<fsummary>Computes the width of a prompt.</fsummary>
<desc>
<p>It receives a prompt and computes its width,
diff --git a/lib/stdlib/doc/src/stdlib_app.xml b/lib/stdlib/doc/src/stdlib_app.xml
index e12bc8b17f..6d455d0949 100644
--- a/lib/stdlib/doc/src/stdlib_app.xml
+++ b/lib/stdlib/doc/src/stdlib_app.xml
@@ -80,6 +80,16 @@
</list>
<p>Can be used to set a customized Erlang shell prompt function.</p>
</item>
+ <tag><marker id="shell_multiline_prompt"/><c>shell_multiline_prompt = {Mod, Func} | string() | default</c></tag>
+ <item>
+ <p>where</p>
+ <list type="bulleted">
+ <item><c>Mod = atom()</c></item>
+ <item><c>Func = atom()</c></item>
+ </list>
+ <p>Can be used to set a customized multiline shell prompt function. The multiline prompt function
+ takes the main prompt as its only parameter.</p>
+ </item>
<tag><marker id="shell_saved_results"/><c>shell_saved_results = integer() >= 0</c></tag>
<item>
<p>Can be used to determine how many results are saved by the Erlang
diff --git a/lib/stdlib/src/shell.erl b/lib/stdlib/src/shell.erl
index 2e174b499b..760889164c 100644
--- a/lib/stdlib/src/shell.erl
+++ b/lib/stdlib/src/shell.erl
@@ -23,7 +23,7 @@
-export([get_state/0, get_function/2]).
-export([start_restricted/1, stop_restricted/0]).
-export([local_func/0, local_func/1, local_allowed/3, non_local_allowed/3]).
--export([catch_exception/1, prompt_func/1, strings/1]).
+-export([catch_exception/1, prompt_func/1, multiline_prompt_func/1, strings/1]).
-export([start_interactive/0, start_interactive/1]).
-export([read_and_add_records/5]).
-export([default_multiline_prompt/1, inverted_space_prompt/1]).
@@ -1697,6 +1697,13 @@ catch_exception(Bool) ->
prompt_func(PromptFunc) ->
set_env(stdlib, shell_prompt_func, PromptFunc, ?DEF_PROMPT_FUNC).
+-spec multiline_prompt_func(PromptFunc) -> PromptFunc2 when
+ PromptFunc :: 'default' | {module(),function()} | string(),
+ PromptFunc2 :: 'default' | {module(),function()} | string().
+
+multiline_prompt_func(PromptFunc) ->
+ set_env(stdlib, shell_multiline_prompt, PromptFunc, ?DEF_PROMPT_FUNC).
+
-spec strings(Strings) -> Strings2 when
Strings :: boolean(),
Strings2 :: boolean().
diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src
index 932d05e895..1894a2cb2c 100644
--- a/lib/stdlib/src/stdlib.app.src
+++ b/lib/stdlib/src/stdlib.app.src
@@ -116,6 +116,6 @@
dets]},
{applications, [kernel]},
{env, []},
- {runtime_dependencies, ["sasl-3.0","kernel-9.0","erts-13.1","crypto-4.5",
+ {runtime_dependencies, ["sasl-3.0","kernel-9.2","erts-13.1","crypto-4.5",
"compiler-5.0"]}
]}.
--
2.35.3