diff options
| author | lung <git@lung.fyi> | 2026-10-08 02:58:13 +0300 |
|---|---|---|
| committer | lung <git@lung.fyi> | 2026-10-08 02:58:14 +0300 |
| commit | 2219f9b60fb3cd42991bece1fa55a503862d26a8 (patch) | |
| tree | ca3830c0673bda6e458631fced2462214ad5e14d /kernel | |
| parent | 96aa6d3f0bfcc437d840cd338c92257ae58942f2 (diff) | |
/etc/profile and C-BS, start a little README.md handbook
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/input.rv | 8 | ||||
| -rw-r--r-- | kernel/main.rv | 4 | ||||
| -rw-r--r-- | kernel/seed.rv | 12 | ||||
| -rw-r--r-- | kernel/tty.rv | 3 |
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 |
