From 611019f2df23eaee87419a82f2bdf63044ce0cff Mon Sep 17 00:00:00 2001 From: Fredrik Ekre Date: Wed, 15 Apr 2020 14:06:19 +0200 Subject: [PATCH] WIP: Implement Julia's show machinery. --- Project.toml | 2 +- src/Gnuplot.jl | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index 12699e9..6b1ed41 100644 --- a/Project.toml +++ b/Project.toml @@ -18,7 +18,7 @@ ColorSchemes = "^3.5" ColorTypes = "^0.10" Colors = "^0.12" DataStructures = "^0.17" -ReplMaker="^0.2" +ReplMaker = "^0.2" StatsBase = "^0.33" StructC14N = "^0.3" julia = "^1.2" diff --git a/src/Gnuplot.jl b/src/Gnuplot.jl index b5ccba1..25bbd44 100644 --- a/src/Gnuplot.jl +++ b/src/Gnuplot.jl @@ -1100,7 +1100,7 @@ function driver(_args...; is3d=false) end end elems = elems[sortperm(getfield.(elems, :mid))] - display(elems) # debug + # display(elems) # debug # Set dataset names and send them to gnuplot process for elem in elems @@ -1140,9 +1140,9 @@ function driver(_args...; is3d=false) end end - (doDump) && (execall(gp)) + # (doDump) && (execall(gp)) - return nothing + return gp end @@ -1327,6 +1327,41 @@ save(sid::Symbol; kw...) = execall(getsession(sid); kw...) save( file::AbstractString; kw...) = savescript(getsession() , file, kw...) save(sid::Symbol, file::AbstractString; kw...) = savescript(getsession(sid), file, kw...) +# ╭───────────────────────────────────────────────────────────────────╮ +# │ Interfacing Julia's show │ +# ╰───────────────────────────────────────────────────────────────────╯ +# -------------------------------------------------------------------- + +# Define a display that will be used when Gnuplot.jl is used +# in the Julia REPL (see PGFPlotsX.jl). +struct GnuplotDisplay <: AbstractDisplay end +function __init__() + pushdisplay(GnuplotDisplay()) + atreplinit(i -> begin + if PlotDisplay() in Base.Multimedia.displays + popdisplay(GnuplotDisplay()) + end + pushdisplay(GnuplotDisplay()) + end) +end +function Base.display(d::GnuplotDisplay, gp::Session) + execall(gp) + return +end +function Base.show(io::IO, ::MIME"image/svg+xml", gp::Session) + tmpfile = tempname()*".svg" + execall(gp; output=tmpfile, term="svg") + write(io, read(tmpfile)) + rm(tmpfile; force=true) + return +end +function Base.show(io::IO, ::MIME"image/png", gp::Session) + tmpfile = tempname()*".png" + execall(gp; output=tmpfile, term="png") + write(io, read(tmpfile)) + rm(tmpfile; force=true) + return +end # ╭───────────────────────────────────────────────────────────────────╮ # │ HIGH LEVEL FACILITIES │