1
0
Fork 0
forked from fun/fun

CI action update. Some example directory refactoring. No code changes. (0.39.15)

This commit is contained in:
Johannes Findeisen 2026-03-31 01:57:16 +02:00
commit 9e6cb9fea4
10 changed files with 2 additions and 2 deletions

46
examples/ui/notcurses_hello.fun Executable file
View file

@ -0,0 +1,46 @@
#!/usr/bin/env fun
/*
* This file is part of the Fun programming language.
* https://fun-lang.xyz/
*
* Copyright 2025 Johannes Findeisen <you@hanez.org>
* Licensed under the terms of the Apache-2.0 license.
* https://opensource.org/license/apache-2-0
*
* Added: 2026-01-03
*/
/*
* Minimal Notcurses hello example.
*/
include <ui/notcurses.fun>
n = Notcurses()
if n.init() == 0
print("Notcurses not available. Rebuild with -DFUN_WITH_NOTCURSES=ON.")
exit(0)
n.clear()
n.draw_text(2, 0, "Fun + Notcurses")
n.draw_text(4, 0, "Press any key to exit...")
// blocking until key
_ = n.getch(0)
n.shutdown()
/* Possible output:
A TUI.
After exit:
3 renders, 991,14µs (223,57µs min, 330,38µs avg, 531,91µs max)
3 rasters, 320,76µs (106,45µs min, 106,92µs avg, 107,72µs max)
3 writes, 198,26µs (62,54µs min, 66,09µs avg, 69,94µs max)
59B (0B min, 19B avg, 30B max) 1 input Ghpa: 0
0 failed renders, 0 failed rasters, 0 refreshes, 0 input errors
RGB emits:elides: def 1:38 fg 0:0 bg 0:0
Cell emits:elides: 39:74805 (99,95%) 97,44% 0,00% 0,00%
Bmap emits:elides: 0:0 (0,00%) 0B (0,00%) SuM: 0 (0,00%)
*/

33
examples/ui/notcurses_menu.fun Executable file
View file

@ -0,0 +1,33 @@
#!/usr/bin/env fun
include <ui/notcurses.fun>
n = Notcurses()
if n.init() == 0
print("Notcurses not available. Build with -DFUN_WITH_NOTCURSES=ON.")
exit(1)
items = ["First", "Second", "Third", "Fourth"]
sel = 0
while true
n.clear()
// Title
n.set_style(0xFFFF00, 0x000000, 1) // bold yellow
n.draw_text(1, 2, "Demo Menu (j/k to move, Enter to select, ESC to quit)")
// Render menu list
n.menu(3, 4, items, sel, 30, 0, 32)
key = n.getch(0)
if key == 27 // ESC
break
if key == 106 // 'j'
sel = (sel + 1) % len(items)
if key == 107 // 'k'
sel = (sel - 1 + len(items)) % len(items)
if key == 10 // Enter
n.status_bar("Selected: " + items[sel], 32)
// brief wait
sleep_ms(300)
n.shutdown()

View file

@ -0,0 +1,38 @@
#!/usr/bin/env fun
include <ui/notcurses.fun>
n = Notcurses()
if n.init() == 0
print("Notcurses not available. Build with -DFUN_WITH_NOTCURSES=ON.")
exit(1)
n.clear()
sz = n.size()
rows = 24
cols = 80
if typeof(sz) == "array"
if len(sz) >= 2
rows = sz[0]
cols = sz[1]
y = to_number(rows) / 2
w = cols - 10
if w < 20
w = 20
i = 0
while i <= 100
// styles handled inside progress(); keep plane sane
rc = n.set_style(0x00FF00, 0x000000, 1)
frac = to_number(i) / 100
rc = n.progress(y, 5, w, frac, 0)
k = n.getch(10)
i = i + 1
// final message
rc = n.set_style(0xFFFFFF, 0x000000, 1)
rc = n.draw_text(y + 2, 5, "Done!")
rc = n.render()
rc = n.shutdown()

59
examples/ui/tk_file_manager.fun Executable file
View file

@ -0,0 +1,59 @@
#!/usr/bin/env fun
/*
* This file is part of the Fun programming language.
* https://fun-lang.xyz/
*
* Copyright 2025 Johannes Findeisen <you@hanez.org>
* Licensed under the terms of the Apache-2.0 license.
* https://opensource.org/license/apache-2-0
*
* Added: 2025-12-23
*/
#include <ui/tk.fun>
print("Initializing Fun File Manager...")
tk = TK()
tk.title("Fun File Manager")
// Current directory
dir = env("PWD")
if (dir == "")
dir = "."
print("Current directory: " + dir)
tk.label("path", "Current Dir: " + dir)
tk.pack("path")
// Files listbox
tk.listbox("files")
tk.pack("files")
// Populate listbox
fun refresh(tk, dir)
print("Refreshing file list for: " + dir)
tk.clear("files")
files = os_list_dir(dir)
print("Found " + to_string(len(files)) + " entries.")
for f in files
tk.insert("files", "end", f)
refresh(tk, dir)
// Refresh button
// Using tk.eval for button because tk.button currently exits the app.
tk.eval("button .refresh -text {Refresh} -command {puts {Refresh requested}}")
tk.pack("refresh")
// Exit button
tk.button("exit", "Exit")
tk.pack("exit")
print("Entering Tk loop...")
tk.loop()
print("Tk loop exited.")
/* Expected output:
A GUI... ;)
*/

33
examples/ui/tk_hello.fun Executable file
View file

@ -0,0 +1,33 @@
#!/usr/bin/env fun
/*
* This file is part of the Fun programming language.
* https://fun-lang.xyz/
*
* Copyright 2025 Johannes Findeisen <you@hanez.org>
* Licensed under the terms of the Apache-2.0 license.
* https://opensource.org/license/apache-2-0
*
* Added: 2025-12-09
*/
// Demonstrates the Tk stdlib wrapper class using the new Tk opcodes.
include <ui/tk.fun>
tk = TK()
tk.title("Fun + Tk GUI")
tk.label("hello", "Hello, world!")
tk.pack("hello")
tk.button("ok", "OK")
tk.pack("ok")
// Enter GUI loop (no-op if built without FUN_WITH_TCLTK)
tk.loop()
/* Expected output:
A GUI... ;)
*/

38
examples/ui/tk_testing.fun Executable file
View file

@ -0,0 +1,38 @@
#!/usr/bin/env fun
/*
* This file is part of the Fun programming language.
* https://fun-lang.xyz/
*
* Copyright 2025 Johannes Findeisen <you@hanez.org>
* Licensed under the terms of the Apache-2.0 license.
* https://opensource.org/license/apache-2-0
*
* Added: 2025-12-23
*/
#include <ui/tk.fun>
print("Testing os_list_dir...")
files = os_list_dir(".")
print("Found " + to_string(len(files)) + " files.")
if len(files) > 0
print("First file: " + files[0])
print("Testing tk_bind parsing...")
// We can't easily test Tk without an X server, but we can see if it crashes.
// If built with FUN_WITH_TCLTK, it should at least initialize.
// We use tk_eval to avoid full loop.
rc = tk_eval("set x 1")
print("tk_eval rc: " + to_string(rc))
if rc == 0
print("Tcl Result: " + tk_result())
/* Expected output:
Testing os_list_dir...
Found 23 files.
First file: build
Testing tk_bind parsing...
tk_eval rc: 0
Tcl Result: 1
*/