Spec-Zone.ru › Julia 1.6

Интерактивная оболочка Julia REPL

Julia поставляется с полнофункциональной интерактивной командной строкой REPL (read-eval-print loop), встроенной в исполняемый файл julia. Помимо возможности быстро и легко вычислять выражения Julia, она имеет функцию поиска по истории, автодополнение, множество полезных сочетаний клавиш и специальные режимы помощи и работы с оболочкой. Запустить REPL можно, просто вызвав julia без аргументов или дважды щелкнув по исполняемому файлу:

$ julia

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.6.0 (2021-03-24)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |


julia>

Для выхода из интерактивной сессии, введите ^D — клавишу Control вместе с клавишей d на пустой строке — или введите exit() и нажмите клавишу Enter. REPL приветствует вас баннером и приглашением julia>.

Режимы приглашения

Режим Julia

REPL имеет пять основных режимов работы. Первый и наиболее распространенный — режим Julia. Это режим по умолчанию; каждая новая строка изначально начинается с julia>. Именно здесь вы можете вводить выражения Julia. Нажатие клавиши Enter после ввода завершенного выражения приведет к его оценке и отображению результата последнего выражения.

julia> string(1 + 2)
"3"

Существует ряд полезных функций, уникальных для интерактивной работы. В дополнение к отображению результата, REPL также связывает результат с переменной ans. Завершающая точка с запятой в строке может использоваться в качестве флага для подавления отображения результата.

julia> string(3 * 4);

julia> ans
"12"

В режиме Julia REPL поддерживает так называемое вставку приглашения. Это активируется при вставке текста, начинающегося с julia> в REPL. В этом случае анализируются только выражения, начинающиеся с julia>, другие удаляются. Это позволяет вставлять фрагмент кода, скопированный из сессии REPL, без необходимости удаления приглашений и выводов. Эта функция включена по умолчанию, но может быть отключена или включена в любое время с помощью REPL.enable_promptpaste(::Bool). Если она включена, вы можете попробовать ее, вставив блок кода выше этого абзаца непосредственно в REPL. Эта функция не работает в стандартном командном окне Windows из-за ограничений при обнаружении вставки.

Объекты выводятся в REPL с помощью функции show со специфическим IOContext. В частности, атрибут :limit установлен в значение true. Другие атрибуты могут получать в определенных show методах значение по умолчанию, если оно не задано, например :compact. В качестве экспериментальной функции возможно указать атрибуты, используемые REPL, через словарь Base.active_repl.options.iocontext (сопоставляя значения с атрибутами). Например:

julia> rand(2, 2)
2×2 Array{Float64,2}:
 0.8833    0.329197
 0.719708  0.59114

julia> show(IOContext(stdout, :compact => false), "text/plain", rand(2, 2))
 0.43540323669187075  0.15759787870609387
 0.2540832269192739   0.4597637838786053
julia> Base.active_repl.options.iocontext[:compact] = false;

julia> rand(2, 2)
2×2 Array{Float64,2}:
 0.2083967319174056  0.13330606013126012
 0.6244375177790158  0.9777957560761545

Чтобы автоматически определять значения этого словаря при запуске, можно использовать функцию atreplinit в файле ~/.julia/config/startup.jl, например:

atreplinit() do repl
    repl.options.iocontext[:compact] = false
end

Режим справки

Когда курсор находится в начале строки, режим приглашения можно изменить на режим справки, набрав ?. Julia попытается вывести справку или документацию для всего, что введено в режиме справки:

julia> ? # upon typing ?, the prompt changes (in place) to: help?>

help?> string
search: string String Cstring Cwstring RevString randstring bytestring SubString

  string(xs...)

  Create a string from any values using the print function.

Также можно запросить макросы, типы и переменные:

help?> @time
  @time

  A macro to execute an expression, printing the time it took to execute, the number of allocations,
  and the total number of bytes its execution caused to be allocated, before returning the value of the
  expression.

  See also @timev, @timed, @elapsed, and @allocated.

help?> Int32
search: Int32 UInt32

  Int32 <: Signed

  32-bit signed integer type.

Строковый или регулярный литерал ищет все строковые описания документации, используя apropos:

help?> "aprop"
REPL.stripmd
Base.Docs.apropos

help?> r"ap..p"
Base.:∘
Base.shell_escape_posixly
Distributed.CachingPool
REPL.stripmd
Base.Docs.apropos

Режим справки можно выйти, нажав Backspace в начале строки.

Режим оболочки

Так же как режим справки полезен для быстрого доступа к документации, другой распространенной задачей является использование системной оболочки для выполнения системных команд. Так же как ? переключается в режим справки, находясь в начале строки, точка с запятой (;) переведет вас в режим оболочки. Выйти из него можно, нажав Backspace в начале строки.

julia> ; # upon typing ;, the prompt changes (in place) to: shell>

shell> echo hello
hello

Для пользователей Windows, режим оболочки Julia не предоставляет доступ к командам оболочки Windows. Поэтому это не сработает:

julia> ; # upon typing ;, the prompt changes (in place) to: shell>

shell> dir
ERROR: IOError: could not spawn `dir`: no such file or directory (ENOENT)
Stacktrace!
.......

Однако, вы можете получить доступ к PowerShell так:

julia> ; # upon typing ;, the prompt changes (in place) to: shell>

shell> powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\elm>

... и к cmd.exe так (см. команду dir):

julia> ; # upon typing ;, the prompt changes (in place) to: shell>

shell> cmd
Microsoft Windows [version 10.0.17763.973]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\elm>dir
 Volume in drive C has no label
 Volume Serial Number is 1643-0CD7
  Directory of C:\Users\elm

29/01/2020  22:15    <DIR>          .
29/01/2020  22:15    <DIR>          ..
02/02/2020  08:06    <DIR>          .atom

Режим менеджера пакетов

Режим менеджера пакетов принимает специализированные команды для загрузки и обновления пакетов. Он активируется нажатием клавиши ] в приглашении REPL Julia и закрывается нажатием CTRL-C или клавиши Backspace в начале строки. Приглашение для этого режима — pkg>. Он поддерживает свой собственный режим справки, который активируется нажатием ? в начале строки приглашения pkg>. Режим менеджера пакетов описан в руководстве Pkg, доступном по адресу https://julialang.github.io/Pkg.jl/v1/.

Режимы поиска

Во всех вышеперечисленных режимах выполненные строки сохраняются в файле истории, который можно искать. Для запуска инкрементного поиска по предыдущей истории введите ^R — клавишу Control вместе с клавишей r . Приглашение изменится на (reverse-i-search)`':, и при вводе запроса поиск будет отображаться в кавычках. Последний результат, соответствующий запросу, будет динамически обновляться справа от двоеточия по мере ввода. Чтобы найти более ранний результат с использованием того же запроса, просто снова введите ^R.

Так же как ^R — обратный поиск, ^S — прямой поиск с приглашением (i-search)`':. Их можно использовать совместно для перемещения по предыдущим или последующим соответствующим результатам соответственно.

Сочетания клавиш

Оболочка Julia REPL широко использует сочетания клавиш. Несколько сочетаний клавиш с Control уже были представлены выше (^D для выхода, ^R и ^S для поиска), но их гораздо больше. Помимо клавиш Control, также существуют сочетания клавиш с клавишей Alt или Option. Они варьируются в зависимости от платформы, но большинство терминалов используют Alt или Option вместе с другой клавишей для отправки мета-ключа (или могут быть настроены для этого), или нажав Esc, а затем клавишу.

Сочетание клавиш Описание
Управление программой
^D Выход (при пустом буфере)
^C Прервать или отменить
^L Очистить экран консоли
Возврат/Ввод, ^J Новая строка, выполнение, если команда завершена
meta-Возврат/Ввод Вставить новую строку без выполнения
? или ; Открыть справку или режим командной строки (в начале строки)
^R, ^S Инкрементный поиск в истории, описанный выше
Перемещение курсора
Стрелка вправо, ^F Переместить вправо на один символ
Стрелка влево, ^B Переместить влево на один символ
ctrl-Вправо, meta-F Переместить вправо на одно слово
ctrl-Влево, meta-B Переместить влево на одно слово
Начало, ^A Переместить к началу строки
Конец, ^E Переместить к концу строки
Стрелка вверх, ^P Переместить вверх на одну строку (или перейти к предыдущей записи истории, соответствующей тексту перед курсором)
Стрелка вниз, ^N Переместить вниз на одну строку (или перейти к следующей записи истории, соответствующей тексту перед курсором)
Shift-Стрелка Перемещение курсора в соответствии с направлением стрелки, при активации области ("выбор с выделением")
PgUp, meta-P Перейти к предыдущей записи истории
PgDown, meta-N Перейти к следующей записи истории
meta-< Перейти к первой записи истории (текущего сеанса, если она находится до текущей позиции в истории)
meta-> Перейти к последней записи истории
^-Space Установить "метку" в области редактирования (и деактивировать область, если она активна)
^-Space ^-Space Установить "метку" в области редактирования и сделать область "активной", т.е. выделенной
^G Деактивировать область (т.е. сделать ее невыделенной)
^X^X Поменять текущую позицию с меткой
Редактирование
Backspace, ^H Удалить предыдущий символ или всю область, когда она активна
Delete, ^D Удалить следующий символ (если в буфере есть текст)
meta-Backspace Удалить предыдущее слово
meta-d Удалить следующее слово
^W Удалить предыдущий текст до ближайшего пробела
meta-w Скопировать текущую область в буфер обмена
meta-W Удалить текущую область, поместив текст в буфер обмена
^K Удалить до конца строки, поместив текст в буфер обмена
^Y Вставить текст из буфера обмена
meta-y Заменить ранее вставленный текст более ранней записью из буфера обмена
^T Переставить символы вокруг курсора
meta-Up arrow Переставить текущую строку со строкой выше
meta-Down arrow Переставить текущую строку со строкой ниже
meta-u Преобразовать следующее слово в верхний регистр
meta-c Преобразовать следующее слово в регистр заглавных букв
meta-l Преобразовать следующее слово в нижний регистр
^/, ^_ Отменить предыдущее действие редактирования
^Q Ввести число в REPL и нажать ^Q для открытия редактора в соответствующем стековом фрейме или методе
meta-Left Arrow Отступ текущей строки влево
meta-Right Arrow Отступ текущей строки вправо
meta-. Вставить последнее слово из предыдущей записи истории

Настройка сочетаний клавиш

Сочетания клавиш REPL Julia могут быть полностью настроены по желанию пользователя путем передачи словаря в REPL.setup_interface. Ключами этого словаря могут быть символы или строки. Ключ '*' относится к стандартному действию. Сочетания клавиш "Управление" плюс символ x указаны с помощью "^x" . Сочетания "Meta" плюс x могут быть записаны как "\\M-x" или "\ex", а сочетания "Управление" плюс x могут быть записаны как "\\C-x" или "^x". Значения настраиваемой карты сочетаний клавиш должны быть nothing (указывающее, что вход должен быть проигнорирован) или функциями, принимающими сигнатуру (PromptState, AbstractREPL, Char). Функция REPL.setup_interface должна вызываться перед инициализацией REPL, зарегистрировав операцию с помощью atreplinit. Например, чтобы привязать стрелки вверх и вниз к перемещению по истории без префиксного поиска, можно поместить следующий код в ~/.julia/config/startup.jl:

import REPL
import REPL.LineEdit

const mykeys = Dict{Any,Any}(
    # Up Arrow
    "\e[A" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_prev(s, LineEdit.mode(s).hist)),
    # Down Arrow
    "\e[B" => (s,o...)->(LineEdit.edit_move_down(s) || LineEdit.history_next(s, LineEdit.mode(s).hist))
)

function customize_keys(repl)
    repl.interface = REPL.setup_interface(repl; extra_repl_keymap = mykeys)
end

atreplinit(customize_keys)

Пользователи должны обратиться к LineEdit.jl для поиска доступных действий при нажатии клавиш.

Автодополнение

В обоих режимах REPL (Julia и справки) можно ввести несколько первых символов функции или типа, а затем нажать клавишу Tab, чтобы получить список всех совпадений:

julia> stri[TAB]
stride     strides     string      strip

julia> Stri[TAB]
StridedArray    StridedMatrix    StridedVecOrMat  StridedVector    String

Клавиша Tab также может использоваться для замены математических символов LaTeX их эквивалентами Unicode и получения списка совпадений LaTeX:

julia> \pi[TAB]
julia> π
π = 3.1415926535897...

julia> e\_1[TAB] = [1,0]
julia> e₁ = [1,0]
2-element Array{Int64,1}:
 1
 0

julia> e\^1[TAB] = [1 0]
julia> e¹ = [1 0]
1×2 Array{Int64,2}:
 1  0

julia> \sqrt[TAB]2     # √ is equivalent to the sqrt function
julia> √2
1.4142135623730951

julia> \hbar[TAB](h) = h / 2\pi[TAB]
julia> ħ(h) = h / 2π
ħ (generic function with 1 method)

julia> \h[TAB]
\hat              \hermitconjmatrix  \hkswarow          \hrectangle
\hatapprox        \hexagon           \hookleftarrow     \hrectangleblack
\hbar             \hexagonblack      \hookrightarrow    \hslash
\heartsuit        \hksearow          \house             \hspace

julia> α="\alpha[TAB]"   # LaTeX completion also works in strings
julia> α="α"

Полный список автодополнений можно найти в разделе «Ввод Unicode» руководства.

Автодополнение путей работает для строк и режима командной строки Julia:

julia> path="/[TAB]"
.dockerenv  .juliabox/   boot/        etc/         lib/         media/       opt/         root/        sbin/        sys/         usr/
.dockerinit bin/         dev/         home/        lib64/       mnt/         proc/        run/         srv/         tmp/         var/
shell> /[TAB]
.dockerenv  .juliabox/   boot/        etc/         lib/         media/       opt/         root/        sbin/        sys/         usr/
.dockerinit bin/         dev/         home/        lib64/       mnt/         proc/        run/         srv/         tmp/         var/

Автодополнение может помочь в исследовании доступных методов, соответствующих входным аргументам:

julia> max([TAB] # All methods are displayed, not shown here due to size of the list

julia> max([1, 2], [TAB] # All methods where `Vector{Int}` matches as first argument
max(x, y) in Base at operators.jl:215
max(a, b, c, xs...) in Base at operators.jl:281

julia> max([1, 2], max(1, 2), [TAB] # All methods matching the arguments.
max(x, y) in Base at operators.jl:215
max(a, b, c, xs...) in Base at operators.jl:281

Ключевые слова также отображаются в предлагаемых методах после ;, см. строку ниже, где limit и keepempty являются ключевыми аргументами:

julia> split("1 1 1", [TAB]
split(str::AbstractString; limit, keepempty) in Base at strings/util.jl:302
split(str::T, splitter; limit, keepempty) where T<:AbstractString in Base at strings/util.jl:277

Автодополнение методов использует вывод типов и, следовательно, может определить соответствие аргументов, даже если аргументы являются результатом функций. Функция должна быть стабильна по типу, чтобы автодополнение могло исключить несовпадающие методы.

Автодополнение также может помочь в автодополнении полей:

julia> import UUIDs

julia> UUIDs.uuid[TAB]
uuid1        uuid4         uuid_version

Поля для результатов функций также могут быть дополнены:

julia> split("","")[1].[TAB]
lastindex  offset  string

Автодополнение полей для результатов функций использует вывод типов, и оно может предлагать поля только в том случае, если функция стабильна по типу.

Ключи словарей также можно дополнить с помощью Tab:

julia> foo = Dict("qwer1"=>1, "qwer2"=>2, "asdf"=>3)
Dict{String,Int64} with 3 entries:
  "qwer2" => 2
  "asdf"  => 3
  "qwer1" => 1

julia> foo["q[TAB]

"qwer1" "qwer2"
julia> foo["qwer

Настройка цветов

Цвета, используемые Julia и REPL, также могут быть настроены. Чтобы изменить цвет приглашения Julia, добавьте что-то вроде следующего в ваш файл ~/.julia/config/startup.jl (который необходимо разместить в домашнем каталоге):

function customize_colors(repl)
    repl.prompt_color = Base.text_colors[:cyan]
end

atreplinit(customize_colors)

Доступные цветовые ключи можно увидеть, набрав Base.text_colors в режиме справки REPL. Кроме того, целые числа от 0 до 255 могут использоваться как цветовые ключи для терминалов с поддержкой 256 цветов.

Вы также можете изменить цвета для приглашений справки и командной строки, а также текста ввода и ответа, установив соответствующее поле repl в функции customize_colors выше (соответственно, help_color, shell_color, input_color, и answer_color). Для последних двух обязательно установить поле envcolors в false.

Также можно применить полужирный шрифт, используя Base.text_colors[:bold] в качестве цвета. Например, чтобы выводить ответы полужирным шрифтом, можно использовать следующее как ~/.julia/config/startup.jl:

function customize_colors(repl)
    repl.envcolors = false
    repl.answer_color = Base.text_colors[:bold]
end

atreplinit(customize_colors)

Также можно настроить цвет, используемый для отображения предупреждений и информационных сообщений, установив соответствующие переменные среды. Например, чтобы отобразить сообщения об ошибках, предупреждениях и информационные сообщения соответственно в пурпурном, жёлтом и сине-зелёном цветах, можно добавить следующее в ваш файл ~/.julia/config/startup.jl:

ENV["JULIA_ERROR_COLOR"] = :magenta
ENV["JULIA_WARN_COLOR"] = :yellow
ENV["JULIA_INFO_COLOR"] = :cyan

TerminalMenus

TerminalMenus — это подмодуль Julia REPL, который позволяет создавать небольшие, не навязчивые интерактивные меню в терминале.

Примеры

import REPL
using REPL.TerminalMenus

options = ["apple", "orange", "grape", "strawberry",
            "blueberry", "peach", "lemon", "lime"]

RadioMenu

Меню RadioMenu позволяет пользователю выбрать один вариант из списка. Функция request отображает интерактивное меню и возвращает индекс выбранного варианта. Если пользователь нажмёт 'q' или ctrl-c, функция request вернёт -1.

# `pagesize` is the number of items to be displayed at a time.
#  The UI will scroll if the number of options is greater
#   than the `pagesize`
menu = RadioMenu(options, pagesize=4)

# `request` displays the menu and returns the index after the
#   user has selected a choice
choice = request("Choose your favorite fruit:", menu)

if choice != -1
    println("Your favorite fruit is ", options[choice], "!")
else
    println("Menu canceled.")
end

Вывод:

Choose your favorite fruit:
^  grape
   strawberry
 > blueberry
v  peach
Your favorite fruit is blueberry!

MultiSelectMenu

Меню MultiSelectMenu позволяет пользователям выбрать несколько вариантов из списка.

# here we use the default `pagesize` 10
menu = MultiSelectMenu(options)

# `request` returns a `Set` of selected indices
# if the menu us canceled (ctrl-c or q), return an empty set
choices = request("Select the fruits you like:", menu)

if length(choices) > 0
    println("You like the following fruits:")
    for i in choices
        println("  - ", options[i])
    end
else
    println("Menu canceled.")
end

Вывод:

Select the fruits you like:
[press: d=done, a=all, n=none]
   [ ] apple
 > [X] orange
   [X] grape
   [ ] strawberry
   [ ] blueberry
   [X] peach
   [ ] lemon
   [ ] lime
You like the following fruits:
  - orange
  - grape
  - peach

Настройка

Подтипы ConfiguredMenu

Начиная с Julia 1.6, рекомендуемым способом настройки меню является использование конструктора. Например, стандартное меню с множественным выбором

julia> menu = MultiSelectMenu(options, pagesize=5);

julia> request(menu) # ASCII is used by default
[press: d=done, a=all, n=none]
   [ ] apple
   [X] orange
   [ ] grape
 > [X] strawberry
v  [ ] blueberry

можно вместо этого отобразить с помощью символов Unicode для выбора и навигации:

julia> menu = MultiSelectMenu(options, pagesize=5, charset=:unicode);

julia> request(menu)
[press: d=done, a=all, n=none]
   ⬚ apple
   ✓ orange
   ⬚ grape
 → ✓ strawberry
↓  ⬚ blueberry

Также возможна более детальная настройка:

julia> menu = MultiSelectMenu(options, pagesize=5, charset=:unicode, checked="YEP!", unchecked="NOPE", cursor='⧐');

julia> request(menu)
julia> request(menu)
[press: d=done, a=all, n=none]
   NOPE apple
   YEP! orange
   NOPE grape
 ⧐ YEP! strawberry
↓  NOPE blueberry

Помимо общего параметра charset, для RadioMenu следующие параметры подлежат настройке:

  • cursor::Char='>'|'→': символ, используемый для курсора
  • up_arrow::Char='^'|'↑': символ, используемый для вверх стрелки
  • down_arrow::Char='v'|'↓': символ, используемый для вниз стрелки
  • updown_arrow::Char='I'|'↕': символ, используемый для вверх/вниз стрелок в однострочном режиме
  • scroll_wrap::Bool=false: необязательное циклическое переключение в начале/конце меню
  • ctrl_c_interrupt::Bool=true: Если false, возвращать пустое значение при ^C, если true, выбрасывать InterruptException() при ^C

MultiSelectMenu добавляет:

  • checked::String="[X]"|"✓": строку, используемую для отмеченного элемента
  • unchecked::String="[ ]"|"⬚"): строку, используемую для неотмеченного элемента

Можно создавать новые типы меню самостоятельно. Типы, производные от TerminalMenus.ConfiguredMenu, настраивают параметры меню во время создания.

Легальный интерфейс

До версии Julia 1.6 (и по-прежнему поддерживается во всех версиях Julia 1.x) можно настроить меню, вызвав TerminalMenus.config().

Ссылки

REPL

Base.atreplinitФункция

atreplinit(f)

Регистрирует функцию с одним аргументом, которая вызывается перед инициализацией интерфейса REPL в интерактивных сессиях; это полезно для настройки интерфейса. Аргументом функции f является объект REPL. Эта функция должна вызываться из файла инициализации .julia/config/startup.jl.

исходный код

TerminalMenus

Настройка

REPL.TerminalMenus.ConfigТип

Config(; scroll_wrap=false, ctrl_c_interrupt=true, charset=:ascii, cursor::Char, up_arrow::Char, down_arrow::Char)

Настройка поведения меню выбора с помощью ключевых аргументов:

  • scroll_wrap, если true, вызывает циклическое переключение меню при прокрутке выше первого или ниже последнего элемента
  • ctrl_c_interrupt, если true, выбрасывает InterruptException при нажатии Ctrl-C во время выбора в меню. Если false, TerminalMenus.request вернёт значение по умолчанию из TerminalMenus.selected.
  • charset влияет на значения по умолчанию для cursor, up_arrow и down_arrow, и может быть :ascii или :unicode
  • cursor — символ, печатаемый для обозначения элемента, который будет выбран нажатием «Enter». Значения по умолчанию — '>' или '→', в зависимости от charset.
  • up_arrow — символ, печатаемый, если в отображении отсутствует первый элемент. Значения по умолчанию — '^' или '↑', в зависимости от charset.
  • down_arrow — символ, печатаемый, если в отображении отсутствует последний элемент. Значения по умолчанию — 'v' или '↓', в зависимости от charset.

Подтипы ConfiguredMenu будут печатать cursor, up_arrow и down_arrow автоматически по мере необходимости, ваш метод writeline не должен их печатать.

Config доступен начиная с Julia 1.6. В более старых версиях используйте глобальную переменную CONFIG.

исходный код

REPL.TerminalMenus.MultiSelectConfigТип

MultiSelectConfig(; charset=:ascii, checked::String, unchecked::String, kwargs...)

Настройка поведения меню множественного выбора с помощью ключевых аргументов:

  • checked — строка, печатаемая, когда элемент выбран. Значения по умолчанию — "[X]" или "✓", в зависимости от charset.
  • unchecked — строка, печатаемая, когда элемент не выбран. Значения по умолчанию — "[ ]" или "⬚", в зависимости от charset.

Все остальные ключевые аргументы описаны для TerminalMenus.Config. checked и unchecked не печатаются автоматически и должны быть напечатаны вашим методом writeline.

MultiSelectConfig доступен начиная с Julia 1.6. В более старых версиях используйте глобальную переменную CONFIG.

исходный код

REPL.TerminalMenus.configФункция

config( <see arguments> )

Функция только с ключевыми аргументами для настройки глобальных параметров меню

Аргументы

  • charset::Symbol=:na: символы пользовательского интерфейса (:ascii или :unicode); переопределяется другими аргументами
  • cursor::Char='>'|'→': символ, используемый для курсора
  • up_arrow::Char='^'|'↑': символ, используемый для вверх стрелки
  • down_arrow::Char='v'|'↓': символ, используемый для вниз стрелки
  • checked::String="[X]"|"✓": строка, используемая для отмеченного элемента
  • unchecked::String="[ ]"|"⬚"): строка, используемая для неотмеченного элемента
  • scroll::Symbol=:nowrap: Если :wrap переносит курсор в начало и конец, если :nowrap не переносить курсор
  • supress_output::Bool=false: Игнорируется устаревший аргумент, вместо этого передайте suppress_output как ключевой аргумент в request.
  • ctrl_c_interrupt::Bool=true: Если false, возвращать пустое значение при ^C, если true, выбрасывать InterruptException() при ^C

Начиная с Julia 1.6, config устарела. Используйте Config или MultiSelectConfig вместо неё.

исходный код

Взаимодействие с пользователем

REPL.TerminalMenus.requestФункция

request(m::AbstractMenu; cursor=1)

Отображает меню и переходит в интерактивный режим. cursor указывает номер элемента, используемый для начального положения курсора. cursor может быть Int или RefValue{Int}. Последний вариант полезен для наблюдения и управления положением курсора извне.

Возвращает selected(m).

Аргумент cursor требует Julia 1.6 или более поздней версии.

исходный код
request([term,] msg::AbstractString, m::AbstractMenu)

Сокращение для println(msg); request(m).

исходный код

Интерфейс расширения AbstractMenu

Любой подтип AbstractMenu должен быть изменяемым и содержать поля pagesize::Int и pageoffset::Int.

Любой подтип также должен реализовывать следующие функции:

REPL.TerminalMenus.pickФункция

pick(m::AbstractMenu, cursor::Int)

Определяет, что происходит, когда пользователь нажимает клавишу Enter, пока меню открыто. Если возвращается true, request() завершит работу. cursor указывает индекс выбранного элемента.

исходный код

REPL.TerminalMenus.cancelФункция

cancel(m::AbstractMenu)

Определите, что происходит при отмене пользователем ('q' или ctrl-c) меню. request() всегда завершит работу после вызова этой функции.

исходный код

REPL.TerminalMenus.writelineФункция

writeline(buf::IO, m::AbstractMenu, idx::Int, iscursor::Bool)

Выводит опцию с индексом idx в buf. iscursor, если true, указывает, что этот элемент находится в текущей позиции курсора (тот, который будет выбран нажатием "Enter").

Если m является ConfiguredMenu, TerminalMenus выведет индикатор курсора. В противном случае предполагается, что вызывающая функция обработает это отображение.

writeline требует Julia 1.6 или выше.

В более старых версиях Julia, это было writeLine(buf::IO, m::AbstractMenu, idx, iscursor::Bool) и предполагалось, что m не настроено. Индикаторы выбора и курсора можно получить из TerminalMenus.CONFIG.

Эта более старая функция поддерживается во всех версиях Julia 1.x, но будет удалена в Julia 2.0.

исходный код

Она также должна реализовывать либо options или numoptions:

REPL.TerminalMenus.optionsФункция

options(m::AbstractMenu)

Возвращает список строк, которые будут отображаться как опции на текущей странице.

В качестве альтернативы, реализуйте numoptions, в этом случае options не требуется.

исходный код

REPL.TerminalMenus.numoptionsФункция

numoptions(m::AbstractMenu) -> Int

Возвращает количество опций в меню m. По умолчанию length(options(m)).

Эта функция требует Julia 1.6 или более позднюю версию.

исходный код

Если подтип не имеет поля с именем selected, он также должен реализовывать

REPL.TerminalMenus.selectedФункция

selected(m::AbstractMenu)

Возвращает информацию о выбранной пользователем опции. По умолчанию возвращает m.selected.

исходный код

Следующие опциональны, но могут позволить дополнительную настройку:

REPL.TerminalMenus.headerФункция

header(m::AbstractMenu) -> String

Возвращает заголовок, который будет напечатан над меню. По умолчанию "".

исходный код

REPL.TerminalMenus.keypressФункция

keypress(m::AbstractMenu, i::UInt32) -> Bool

Обрабатывает любое нестандартное событие нажатия клавиши. Если возвращается true, TerminalMenus.request завершится. По умолчанию false.

исходный код

© 2009–2021 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.6.0/stdlib/REPL/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API