50 lines
1.5 KiB
EmacsLisp
50 lines
1.5 KiB
EmacsLisp
// runtime/fs.el — filesystem operations
|
|
// Thin El wrappers over seed primitives; no logic beyond what is needed
|
|
// to present a clean API. The heavy lifting lives in el_runtime.c.
|
|
|
|
fn fs_read(path: String) -> String {
|
|
return __fs_read(path)
|
|
}
|
|
|
|
fn fs_write(path: String, content: String) -> Bool {
|
|
return __fs_write(path, content)
|
|
}
|
|
|
|
fn fs_exists(path: String) -> Bool {
|
|
return __fs_exists(path)
|
|
}
|
|
|
|
fn fs_mkdir(path: String) -> Bool {
|
|
return __fs_mkdir(path)
|
|
}
|
|
|
|
fn fs_write_bytes(path: String, bytes: String, n: Int) -> Bool {
|
|
return __fs_write_bytes(path, bytes, n)
|
|
}
|
|
|
|
// fs_list — return list of filenames in a directory.
|
|
// __fs_list_raw returns a newline-separated string (possibly with a trailing
|
|
// newline); callers that need a clean list should filter empty strings.
|
|
fn fs_list(path: String) -> [String] {
|
|
let raw: String = __fs_list_raw(path)
|
|
return str_split(raw, "\n")
|
|
}
|
|
|
|
// fs_list_json — return a JSON array of filenames in a directory.
|
|
// Empty strings produced by a trailing newline are stripped before encoding.
|
|
fn fs_list_json(path: String) -> String {
|
|
let items: [String] = fs_list(path)
|
|
let n: Int = el_list_len(items)
|
|
let clean: [String] = el_list_empty()
|
|
let i: Int = 0
|
|
while i < n {
|
|
let item: String = el_list_get(items, i)
|
|
let trimmed: String = str_trim(item)
|
|
if !str_eq(trimmed, "") {
|
|
let clean = el_list_append(clean, "\"" + trimmed + "\"")
|
|
}
|
|
let i = i + 1
|
|
}
|
|
return json_build_array(clean)
|
|
}
|