mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
vrepl: implement the 'pin' command from crepl (#15371)
This commit is contained in:
parent
fd1b6efea6
commit
8c33a40c5a
@ -16,6 +16,7 @@ mut:
|
|||||||
indent int // indentation level
|
indent int // indentation level
|
||||||
in_func bool // are we inside a new custom user function
|
in_func bool // are we inside a new custom user function
|
||||||
line string // the current line entered by the user
|
line string // the current line entered by the user
|
||||||
|
is_pin bool // does the repl 'pin' entered source code
|
||||||
//
|
//
|
||||||
modules []string // all the import modules
|
modules []string // all the import modules
|
||||||
alias map[string]string // all the alias used in the import
|
alias map[string]string // all the alias used in the import
|
||||||
@ -68,6 +69,7 @@ fn repl_help() {
|
|||||||
|reset Clears the accumulated program, so you can start a fresh.
|
|reset Clears the accumulated program, so you can start a fresh.
|
||||||
|Ctrl-C, Ctrl-D, exit Exits the REPL.
|
|Ctrl-C, Ctrl-D, exit Exits the REPL.
|
||||||
|clear Clears the screen.
|
|clear Clears the screen.
|
||||||
|
|pin Pins the entered program to the top.
|
||||||
'.strip_margin())
|
'.strip_margin())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,6 +210,18 @@ fn (mut r Repl) parse_import(line string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clear the screen, then list source code
|
||||||
|
fn (mut r Repl) pin() {
|
||||||
|
term.erase_clear()
|
||||||
|
r.list_source()
|
||||||
|
}
|
||||||
|
|
||||||
|
// print source code
|
||||||
|
fn (mut r Repl) list_source() {
|
||||||
|
source_code := r.current_source_code(true, true)
|
||||||
|
println('\n${source_code.replace('\n\n', '\n')}')
|
||||||
|
}
|
||||||
|
|
||||||
fn highlight_console_command(command string) string {
|
fn highlight_console_command(command string) string {
|
||||||
return term.bright_white(term.bright_bg_black(' $command '))
|
return term.bright_white(term.bright_bg_black(' $command '))
|
||||||
}
|
}
|
||||||
@ -349,8 +363,15 @@ fn run_repl(workdir string, vrepl_prefix string) int {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if r.line == 'list' {
|
if r.line == 'list' {
|
||||||
source_code := r.current_source_code(true, true)
|
r.list_source()
|
||||||
println('\n${source_code.replace('\n\n', '\n')}')
|
continue
|
||||||
|
}
|
||||||
|
if r.line == 'pin' {
|
||||||
|
r.is_pin = !r.is_pin
|
||||||
|
if r.is_pin {
|
||||||
|
r.pin()
|
||||||
|
println('')
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// Save the source only if the user is printing something,
|
// Save the source only if the user is printing something,
|
||||||
@ -452,6 +473,10 @@ fn run_repl(workdir string, vrepl_prefix string) int {
|
|||||||
r.temp_lines.delete(0)
|
r.temp_lines.delete(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if r.is_pin && !temp_flag {
|
||||||
|
r.pin()
|
||||||
|
println('')
|
||||||
|
}
|
||||||
print_output(s)
|
print_output(s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user