Julia의 REPL에서 다채로운 출력을한다 (놀이)
10692 단어 Julia
오늘은
TerminalMenus 의 실장을 조사하고 있으면(자) 이런 할 수 있을 것 같다라고 하는 물건으로 만든 재료입니다. TerminalMenus 자체는 Julia의 REPL에서 상호 작용을 가능하게하고 결과에 따라 처리를 분기 할 수있는 도구로 Julia 표준에 내장되어 있습니다. 이번에는 구현을 바라보고있는 지식에서 얻은 코드를 소개합니다.
할 수있는 일
아래의 GIF를 참조하십시오.
터미널 상에 출력되는 문자(뒤)에 색을 붙인 것을 순차적으로 프린트하고 있는 것이 됩니다.
구현
아래 코드를 그대로 실행합니다.
$ julia --color=yes partypeople.jl
--color
옵션을 활성화하지 않으면 배경에 색상이 한정되지 않으므로 외로운 출력이됩니다.
partypeople.jl#=
julia --color=yes partypeople.jl
=#
using Crayons
using Crayons.Box
using ColorTypes
const SPACE = " " # one white space
BG_COLORS=[
#BLACK_BG ,
RED_BG ,
GREEN_BG ,
YELLOW_BG ,
BLUE_BG ,
MAGENTA_BG ,
CYAN_BG ,
LIGHT_GRAY_BG ,
DEFAULT_BG ,
DARK_GRAY_BG ,
LIGHT_RED_BG ,
LIGHT_GREEN_BG ,
LIGHT_YELLOW_BG ,
LIGHT_BLUE_BG ,
LIGHT_MAGENTA_BG ,
LIGHT_CYAN_BG ,
WHITE_BG ,
]
function draw(c,H,W; init::Bool=false)
H,W = 5,10
buf = IOBuffer()
if !init
print(buf, "\x1b[999D\x1b[$(H)A") #rollback H-times
end
for i in 1:H
msg = repeat("$(rand(1:9))",W)
println(buf, c, msg, Crayon(reset=true))
end
print(buf |> take! |> String)
end
function clean(H)
buf = IOBuffer()
for i in 1:H+1
print(buf, "\x1b[2K") # clear line
print(buf, "\x1b[999D\x1b[$(1)A") # rollback
end
print(buf |> take! |> String)
end
function partypeople()
H,W=5,10
draw(BLACK_BG,H,W,init=true)
for c in BG_COLORS
draw(c,H,W)
sleep(0.1)
end
clean(H)
end
partypeople()
하고 있는 일
Crayon으로 색칠
draw
함수는 컬러 문자를 출력합니다. for 루프를 보면 msg
에 저장된 문자열을 println
하는 방법을 볼 수 있습니다.
색상을 지정하기 위해 Crayons.jl
에 정의 된 Crayon 구조체는 msg
앞뒤에 끼워져 있습니다. 엔티티는 인쇄 제어 \e[31m
(적색) 또는 \e[0m
(취소)와 같은 명령을 끼고 있습니다.
예를 들어 아래 그림과 같이 출력에 사용하는 색을 제어시킬 수 있습니다.
반복 인쇄하기 위해
인쇄한 후 실행 취소
print(buf, "\x1b[999D\x1b[$(H)A")
를 하면 프린트를 하는 장소를 H행분 되돌려 줍니다. 이것을 하는 것으로 출력이 다르--와 흐르는 것을 막고 있습니다.
보통 println("Hello") 라고 하면 프린트한 결과의 다음의 행에 커서가 나오는군요. 계속 println("World")
Hello
World
와 같이 이전의 출력인 Hello
가 남아 있습니다. 커서를 1행 되돌려 World
를 쓰면 Hello
가 사라지고 World
"만"이 남는 구조입니다.
Step 1 | Step 2 | Step 3
Hello | > Hello | World
World> | (上に持っていく) |
실제로 움직여 주신 분이 이해가 진행된다고 생각합니다.
후 정리
clean
함수에서 draw
를 한 결과를 지 웁니다. print(buf, "\x1b[2K")
하고 행을 지우고 커서를 한 행 위에 가져간다는 조작을 프린트한 행수 반복한다는 것을 하고 있습니다.
요약
아래 코드를 그대로 실행합니다.
$ julia --color=yes partypeople.jl
--color
옵션을 활성화하지 않으면 배경에 색상이 한정되지 않으므로 외로운 출력이됩니다.partypeople.jl
#=
julia --color=yes partypeople.jl
=#
using Crayons
using Crayons.Box
using ColorTypes
const SPACE = " " # one white space
BG_COLORS=[
#BLACK_BG ,
RED_BG ,
GREEN_BG ,
YELLOW_BG ,
BLUE_BG ,
MAGENTA_BG ,
CYAN_BG ,
LIGHT_GRAY_BG ,
DEFAULT_BG ,
DARK_GRAY_BG ,
LIGHT_RED_BG ,
LIGHT_GREEN_BG ,
LIGHT_YELLOW_BG ,
LIGHT_BLUE_BG ,
LIGHT_MAGENTA_BG ,
LIGHT_CYAN_BG ,
WHITE_BG ,
]
function draw(c,H,W; init::Bool=false)
H,W = 5,10
buf = IOBuffer()
if !init
print(buf, "\x1b[999D\x1b[$(H)A") #rollback H-times
end
for i in 1:H
msg = repeat("$(rand(1:9))",W)
println(buf, c, msg, Crayon(reset=true))
end
print(buf |> take! |> String)
end
function clean(H)
buf = IOBuffer()
for i in 1:H+1
print(buf, "\x1b[2K") # clear line
print(buf, "\x1b[999D\x1b[$(1)A") # rollback
end
print(buf |> take! |> String)
end
function partypeople()
H,W=5,10
draw(BLACK_BG,H,W,init=true)
for c in BG_COLORS
draw(c,H,W)
sleep(0.1)
end
clean(H)
end
partypeople()
하고 있는 일
Crayon으로 색칠
draw
함수는 컬러 문자를 출력합니다. for 루프를 보면 msg
에 저장된 문자열을 println
하는 방법을 볼 수 있습니다.
색상을 지정하기 위해 Crayons.jl
에 정의 된 Crayon 구조체는 msg
앞뒤에 끼워져 있습니다. 엔티티는 인쇄 제어 \e[31m
(적색) 또는 \e[0m
(취소)와 같은 명령을 끼고 있습니다.
예를 들어 아래 그림과 같이 출력에 사용하는 색을 제어시킬 수 있습니다.
반복 인쇄하기 위해
인쇄한 후 실행 취소
print(buf, "\x1b[999D\x1b[$(H)A")
를 하면 프린트를 하는 장소를 H행분 되돌려 줍니다. 이것을 하는 것으로 출력이 다르--와 흐르는 것을 막고 있습니다.
보통 println("Hello") 라고 하면 프린트한 결과의 다음의 행에 커서가 나오는군요. 계속 println("World")
Hello
World
와 같이 이전의 출력인 Hello
가 남아 있습니다. 커서를 1행 되돌려 World
를 쓰면 Hello
가 사라지고 World
"만"이 남는 구조입니다.
Step 1 | Step 2 | Step 3
Hello | > Hello | World
World> | (上に持っていく) |
실제로 움직여 주신 분이 이해가 진행된다고 생각합니다.
후 정리
clean
함수에서 draw
를 한 결과를 지 웁니다. print(buf, "\x1b[2K")
하고 행을 지우고 커서를 한 행 위에 가져간다는 조작을 프린트한 행수 반복한다는 것을 하고 있습니다.
요약
Hello
World
Step 1 | Step 2 | Step 3
Hello | > Hello | World
World> | (上に持っていく) |
하고 터미널에서의 대화 조작을 가능하게 하고 있습니다. 노력하면 Julia만으로 간단한 에디터 만들 수 있을 것 같네요. 여가 시간은 꼭 부디.
덤
오츠키 씨가 빙글빙글 회전합니다.
function moonbar()
try
print("\x1b[?25l") # hide cursor
while true
for 🌝 ∈ '🌑':'🌘'
sleep(0.1)
print(🌝)
print('\r')
end
end
finally
print("\x1b[?25h") # unhide cursor
end
end
moonbar()
이것도 마찬가지로 출력하는 장소를 컨트롤하고 있습니다. Nowloading ... 라는 느낌의 상황에서 사용해보십시오.
Reference
이 문제에 관하여(Julia의 REPL에서 다채로운 출력을한다 (놀이)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SatoshiTerasaki/items/0c28814b912bbb3bb97e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function moonbar()
try
print("\x1b[?25l") # hide cursor
while true
for 🌝 ∈ '🌑':'🌘'
sleep(0.1)
print(🌝)
print('\r')
end
end
finally
print("\x1b[?25h") # unhide cursor
end
end
moonbar()
Reference
이 문제에 관하여(Julia의 REPL에서 다채로운 출력을한다 (놀이)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SatoshiTerasaki/items/0c28814b912bbb3bb97e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)