@@ -1764,11 +1764,21 @@ function ends_with_semicolon(code)
17641764 return semi
17651765end
17661766
1767- function banner (io:: IO = stdout ; short = false )
1768- if Base. GIT_VERSION_INFO. tagged_commit
1769- commit_string = Base. TAGGED_RELEASE_BANNER
1767+ """
1768+ banner(io::IO = stdout, preferred::Symbol = :full)
1769+
1770+ Print the "Julia" informative banner to `io`, using the `preferred` variant
1771+ if reasonable and known.
1772+
1773+ !!! warning
1774+ The particular banner selected by `preferred` is liable to being changed
1775+ without warning. The current variants are: `:tiny`, `:short`, `:narrow`, and `:full`.
1776+ """
1777+ function banner (io:: IO = stdout , preferred:: Symbol = :full )
1778+ commit_string = if Base. GIT_VERSION_INFO. tagged_commit
1779+ Base. AnnotatedString (TAGGED_RELEASE_BANNER, :face => :shadow )
17701780 elseif isempty (Base. GIT_VERSION_INFO. commit)
1771- commit_string = " "
1781+ styled ""
17721782 else
17731783 days = Int (floor ((ccall (:jl_clock_now , Float64, ()) - Base. GIT_VERSION_INFO. fork_master_timestamp) / (60 * 60 * 24 )))
17741784 days = max (0 , days)
@@ -1777,60 +1787,65 @@ function banner(io::IO = stdout; short = false)
17771787 commit = Base. GIT_VERSION_INFO. commit_short
17781788
17791789 if distance == 0
1780- commit_string = " Commit $(commit) ($(days) $(unit) old master)"
1790+ styled """ Commit {grey:$commit} \
1791+ ({warning:⌛ {italic:$days $unit}} old master)"""
17811792 else
17821793 branch = Base. GIT_VERSION_INFO. branch
1783- commit_string = " $(branch) /$(commit) (fork: $(distance) commits, $(days) $(unit) )"
1794+ styled """ {emphasis:$branch}/{grey:$commit} \
1795+ ({italic:{success:{bold,(slant=normal):↑} $distance commits}, \
1796+ {warning:{(slant=normal):⌛} $days $unit}})"""
17841797 end
17851798 end
17861799
1787- commit_date = isempty (Base. GIT_VERSION_INFO. date_string) ? " " : " ($(split (Base. GIT_VERSION_INFO. date_string)[1 ]) )"
1788-
1789- if get (io, :color , false ):: Bool
1790- c = Base. text_colors
1791- tx = c[:normal ] # text
1792- jl = c[:normal ] # julia
1793- d1 = c[:bold ] * c[:blue ] # first dot
1794- d2 = c[:bold ] * c[:red ] # second dot
1795- d3 = c[:bold ] * c[:green ] # third dot
1796- d4 = c[:bold ] * c[:magenta ] # fourth dot
1797-
1798- if short
1799- print (io,"""
1800- $(d3) o$(tx) | Version $(VERSION )$(commit_date)
1801- $(d2) o$(tx) $(d4) o$(tx) | $(commit_string)
1802- """ )
1803- else
1804- print (io,""" $(d3) _$(tx)
1805- $(d1) _$(tx) $(jl) _$(tx) $(d2) _$(d3) (_)$(d4) _$(tx) | Documentation: https://docs.julialang.org
1806- $(d1) (_)$(jl) | $(d2) (_)$(tx) $(d4) (_)$(tx) |
1807- $(jl) _ _ _| |_ __ _$(tx) | Type \" ?\" for help, \" ]?\" for Pkg help.
1808- $(jl) | | | | | | |/ _` |$(tx) |
1809- $(jl) | | |_| | | | (_| |$(tx) | Version $(VERSION )$(commit_date)
1810- $(jl) _/ |\\ __'_|_|_|\\ __'_|$(tx) | $(commit_string)
1811- $(jl) |__/$(tx) |
1812-
1813- """ )
1814- end
1815- else
1816- if short
1817- print (io,"""
1818- o | Version $(VERSION )$(commit_date)
1819- o o | $(commit_string)
1820- """ )
1821- else
1822- print (io,"""
1823- _
1824- _ _ _(_)_ | Documentation: https://docs.julialang.org
1825- (_) | (_) (_) |
1826- _ _ _| |_ __ _ | Type \" ?\" for help, \" ]?\" for Pkg help.
1827- | | | | | | |/ _` | |
1828- | | |_| | | | (_| | | Version $(VERSION )$(commit_date)
1829- _/ |\\ __'_|_|_|\\ __'_| | $(commit_string)
1830- |__/ |
1831-
1832- """ )
1833- end
1800+ commit_date = isempty (Base. GIT_VERSION_INFO. date_string) ? " " : styled " {light:($(split(Base.GIT_VERSION_INFO.date_string)[1]))}"
1801+ doclink = styled " {bold:Documentation:} {(underline=grey),link={https://docs.julialang.org}:https://docs.julialang.org}"
1802+ help = styled " Type {repl_prompt_help:?} for help, {repl_prompt_pkg:]?} for {(underline=grey),link={https://pkgdocs.julialang.org/}:Pkg} help."
1803+
1804+ sizenames = (:tiny , :short , :narrow , :full )
1805+ maxsize = something (findfirst (== (preferred), sizenames), length (sizenames))
1806+ size = min (if all (displaysize (io) .>= (8 , 70 )); 4 # Full size
1807+ elseif all (displaysize (io) .>= (8 , 45 )); 3 # Narrower
1808+ elseif all (displaysize (io) .>= (3 , 50 )); 2 # Tiny
1809+ else 1 end ,
1810+ max (0 , maxsize))
1811+
1812+ if size == 4 # Full size
1813+ print (io, styled """
1814+ {bold,green:_}
1815+ {bold,blue:_} _ {bold:{red:_}{green:(_)}{magenta:_}} {shadow:│} $doclink
1816+ {bold,blue:(_)} | {bold:{red:(_)} {magenta:(_)}} {shadow:│}
1817+ _ _ _| |_ __ _ {shadow:│} $help
1818+ | | | | | | |/ _` | {shadow:│}
1819+ | | |_| | | | (_| | {shadow:│} Version {bold:$VERSION}$commit_date
1820+ _/ |\\ __'_|_|_|\\ __'_| {shadow:│} $commit_string
1821+ |__/ {shadow:│}
1822+ \n """ )
1823+ elseif size == 3 # Rotated
1824+ print (io, styled """
1825+ {bold,green:_}
1826+ {bold,blue:_} _ {bold:{red:_}{green:(_)}{magenta:_}}
1827+ {bold,blue:(_)} | {bold:{red:(_)} {magenta:(_)}}
1828+ _ _ _| |_ __ _
1829+ | | | | | | |/ _` |
1830+ | | |_| | | | (_| |
1831+ _/ |\\ __'_|_|_|\\ __'_|
1832+ |__/
1833+
1834+ $doclink
1835+ $help
1836+
1837+ Version {bold:$VERSION}$commit_date
1838+ $commit_string
1839+ \n """ )
1840+ elseif size == 2 # Tiny
1841+ print (io, styled """
1842+ {bold,green:o} {shadow:│} Version {bold:$VERSION}$commit_date
1843+ {bold:{red:o} {magenta:o}} {shadow:│} $commit_string
1844+ """ , ifelse (displaysize (io) > (12 , 0 ), " \n " , " " ))
1845+ elseif size == 1 && Base. GIT_VERSION_INFO. tagged_commit # Text only
1846+ print (io, styled """ {bold:{blue:∴} {magenta:Julia} $VERSION}$commit_date\n """ )
1847+ elseif size == 1 # Text only
1848+ print (io, styled """ {bold:{blue:∴} {magenta:Julia} $VERSION}$commit_date $commit_string\n """ )
18341849 end
18351850end
18361851
0 commit comments