Инициализация 0.1.0
This commit is contained in:
commit
abdc9d4cce
10 changed files with 158 additions and 0 deletions
4
source/examples/shell/package.d
Normal file
4
source/examples/shell/package.d
Normal file
|
@ -0,0 +1,4 @@
|
|||
module examples.shell;
|
||||
|
||||
public import examples.shell.pipe;
|
||||
public import examples.shell.spinner;
|
26
source/examples/shell/pipe.d
Normal file
26
source/examples/shell/pipe.d
Normal file
|
@ -0,0 +1,26 @@
|
|||
module examples.shell.pipe;
|
||||
|
||||
import std.process : pipeProcess, Redirect, wait;
|
||||
import std.stdio : writeln;
|
||||
|
||||
void pipeShell()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Выполняем команду ping с аргументами
|
||||
auto pipes = pipeProcess(["ping", "8.8.8.8", "-c", "4"], Redirect.stdout);
|
||||
|
||||
// Читаем вывод команды построчно
|
||||
foreach (line; pipes.stdout.byLine)
|
||||
{
|
||||
writeln(line);
|
||||
}
|
||||
|
||||
// Ожидаем завершения процесса
|
||||
wait(pipes.pid);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
writeln("Ошибка: ", e.msg);
|
||||
}
|
||||
}
|
49
source/examples/shell/spinner.d
Normal file
49
source/examples/shell/spinner.d
Normal file
|
@ -0,0 +1,49 @@
|
|||
module examples.shell.spinner;
|
||||
|
||||
import std.stdio;
|
||||
import core.thread;
|
||||
import core.time;
|
||||
import core.stdc.signal : signal, SIGINT;
|
||||
import core.stdc.stdio : fprintf, stderr;
|
||||
import core.stdc.stdlib : exit;
|
||||
|
||||
// Обработчик сигнала Ctrl+C
|
||||
extern (C) void handleCtrlC(int sig) nothrow @nogc
|
||||
{
|
||||
// Используем fprintf для вывода в stderr
|
||||
fprintf(stderr, "\033[?25h\rInterrupted! \n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void spinnerShell()
|
||||
{
|
||||
// Устанавливаем обработчик для SIGINT (Ctrl+C)
|
||||
signal(SIGINT, &handleCtrlC);
|
||||
|
||||
// Расширенный набор брайлевских символов для плавной анимации
|
||||
immutable dchar[] spinner = [
|
||||
'⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧'
|
||||
];
|
||||
ulong i = 0;
|
||||
|
||||
// Скрываем курсор
|
||||
write("\033[?25l");
|
||||
|
||||
// Пример длительного процесса
|
||||
foreach (j; 0 .. 40)
|
||||
{
|
||||
// Выводим текущий символ спиннера
|
||||
writef("\rProcessing... %c", spinner[i]);
|
||||
// Сбрасываем буфер вывода
|
||||
stdout.flush();
|
||||
|
||||
// Переключаем символ спиннера
|
||||
i = (i + 1) % spinner.length;
|
||||
|
||||
// Задержка для анимации
|
||||
Thread.sleep(dur!("msecs")(100));
|
||||
}
|
||||
|
||||
// Восстанавливаем курсор и очищаем строку
|
||||
write("\033[?25h\rDone! \n");
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue