hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorlung <git@lung.fyi>2026-10-08 02:58:13 +0300
committerlung <git@lung.fyi>2026-10-08 02:58:14 +0300
commit2219f9b60fb3cd42991bece1fa55a503862d26a8 (patch)
treeca3830c0673bda6e458631fced2462214ad5e14d /kernel
parent96aa6d3f0bfcc437d840cd338c92257ae58942f2 (diff)
/etc/profile and C-BS, start a little README.md handbook
Diffstat (limited to 'kernel')
-rw-r--r--kernel/input.rv8
-rw-r--r--kernel/main.rv4
-rw-r--r--kernel/seed.rv12
-rw-r--r--kernel/tty.rv3
4 files changed, 23 insertions, 4 deletions
diff --git a/kernel/input.rv b/kernel/input.rv
index ed0f4f7..139edf0 100644
--- a/kernel/input.rv
+++ b/kernel/input.rv
@@ -34,7 +34,13 @@ fn decode_key(code) do
if code == 0x9d do shell.ctrl = :false return :nil end # ctrl up
if code >= 128 return :nil # other releases
if code == 28 return "\n" # enter
- if code == 14 return "\x08" # backspace
+ if code == 14 do
+ if shell.ctrl do
+ return "\x7f"
+ end
+
+ return "\x08"
+ end # backspace (ctrl: word erase)
if code < 2 return :nil
if code >= KEYMAP:len() return :nil
const character = if shell.shift KEYMAP_SHIFT[code] else KEYMAP[code]
diff --git a/kernel/main.rv b/kernel/main.rv
index 3363bde..67850d5 100644
--- a/kernel/main.rv
+++ b/kernel/main.rv
@@ -15,6 +15,10 @@ if (disk_sectors() != 0 and fs.ready == :false) do
seed_fs()
end
+if fs:size("/etc/profile") >= 0 do
+ run_script_path("/etc/profile", "profile", make_ctx("", { "" }))
+end
+
# lung will be happy
const default_face = load_ttf("/fonts/terminess.ttf", 32)
if default_face != :nil do
diff --git a/kernel/seed.rv b/kernel/seed.rv
index 058b57a..cbb96e0 100644
--- a/kernel/seed.rv
+++ b/kernel/seed.rv
@@ -23,8 +23,16 @@ fn seed_fs() do
fs:mkdir("/home")
fs:store("/etc/motd", "welcome to revel")
- fs:store("/home/balls.txt", "its lowk insane how big my balls are")
- fs:store("/home/i have big balls.txt", "dude my balls are actually massive")
+ fs:store("/etc/profile", """
+ # /etc/profile runs once at shell startup, keep it quick
+
+ if fs:size("/etc/motd") > 0 do
+ puts(fs:read_bytes("/etc/motd", 0, motd_size))
+ puts("\n")
+ end
+ """)
+ fs:store("/home/balls.txt", "its lowk insane how big my balls are lol jk\n\t- hachem")
+ fs:store("/home/i have big balls.txt", "dude my balls are actually massive lol jk\n\t- hachem")
seed_bin()
seed_fonts()
diff --git a/kernel/tty.rv b/kernel/tty.rv
index 5fcd224..680289f 100644
--- a/kernel/tty.rv
+++ b/kernel/tty.rv
@@ -137,7 +137,8 @@ global tty = {
if byte == 27 do self.esc = 1 return :nil end # ESC, start a sequence
if byte == 10 do self:submit() return :nil end # enter
- if byte == 8 or byte == 127 do self:backspace() return :nil end # bs / del
+ if byte == 8 do self:backspace() return :nil end # bs
+ if byte == 127 do self:erase_word() return :nil end # del (ctrl-bs): erase word
if byte == 1 do self:home() return :nil end # ctrl-a
if byte == 5 do self:to_end() return :nil end # ctrl-e
if byte == 3 do self:cancel() return :nil end # ctrl-c