tlc: add Edit extension/menu/highlighting file commands
Wire three Command menu items that open TLC's config files in the built-in editor: extensions, user menu, and file highlighting rules. Files are created empty if they don't exist. Cmd::EditExtensionFile → ~/.config/tlc/extensions Cmd::EditMenuFile → ~/.config/tlc/menu Cmd::EditHighlightFile → ~/.config/tlc/filehighlight.ini Added open_config_file() helper in dialog_ops.rs that resolves the config dir via ProjectDirs, creates parent + empty file if missing, then opens the editor. Command menu now has all 20 items (was 17/20).
This commit is contained in:
@@ -790,9 +790,9 @@ MC's F9 bar has 5 entries: **Left** · **File** · **Command** · **Options** ·
|
||||
| 15 | Screen list | Alt-` | ✅ Done | — | `Cmd::ScreenList` dialog (15g) |
|
||||
| 16 | Undelete files | (none) | ❌ N/A | SKIP |
|
||||
| 17 | Listing format edit | (none) | ❌ Missing | SKIP |
|
||||
| 18 | Edit extension file | (menu) | ❌ Missing | LOW |
|
||||
| 19 | Edit menu file | (menu) | ❌ Missing | LOW |
|
||||
| 20 | Edit highlighting file | (menu) | ❌ Missing | LOW |
|
||||
| 18 | Edit extension file | (menu) | ✅ Done | — | Opens `~/.config/tlc/extensions` in editor |
|
||||
| 19 | Edit menu file | (menu) | ✅ Done | — | Opens `~/.config/tlc/menu` in editor |
|
||||
| 20 | Edit highlighting file | (menu) | ✅ Done | — | Opens `~/.config/tlc/filehighlight.ini` in editor |
|
||||
|
||||
#### Options Menu (10 items)
|
||||
|
||||
|
||||
@@ -268,6 +268,32 @@ impl FileManager {
|
||||
self.status.set_message(format!("Editing {}:{}", path.display(), line));
|
||||
}
|
||||
|
||||
/// Open `~/.config/tlc/<name>` in the editor, creating it
|
||||
/// empty if it does not exist. Used by the Command menu's
|
||||
/// "Edit extension file", "Edit menu file", and "Edit
|
||||
/// highlighting file" entries.
|
||||
pub fn open_config_file(&mut self, name: &str) {
|
||||
let path = match directories::ProjectDirs::from("org", "redbearos", "tlc") {
|
||||
Some(d) => d.config_dir().join(name),
|
||||
None => {
|
||||
self.status
|
||||
.set_message("Cannot determine config directory".to_string());
|
||||
return;
|
||||
}
|
||||
};
|
||||
if !path.exists() {
|
||||
if let Some(parent) = path.parent() {
|
||||
let _ = std::fs::create_dir_all(parent);
|
||||
}
|
||||
let _ = std::fs::write(&path, "");
|
||||
}
|
||||
let mut ed = crate::editor::Editor::open(&path);
|
||||
let _ = ed.restore_cursor_position();
|
||||
self.editor = Some(ed);
|
||||
self.status
|
||||
.set_message(format!("Editing {}", path.display()));
|
||||
}
|
||||
|
||||
/// Open the F3 viewer at a specific 1-based line number.
|
||||
pub fn open_viewer_at_line(&mut self, path: &Path, line: u64) {
|
||||
match crate::viewer::Viewer::open(path) {
|
||||
|
||||
@@ -516,6 +516,18 @@ impl FileManager {
|
||||
)));
|
||||
Ok(true)
|
||||
}
|
||||
Cmd::EditExtensionFile => {
|
||||
self.open_config_file("extensions");
|
||||
Ok(true)
|
||||
}
|
||||
Cmd::EditMenuFile => {
|
||||
self.open_config_file("menu");
|
||||
Ok(true)
|
||||
}
|
||||
Cmd::EditHighlightFile => {
|
||||
self.open_config_file("filehighlight.ini");
|
||||
Ok(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,10 @@ fn build_menus() -> Vec<Menu> {
|
||||
MenuItem::item("Active VFS list", Cmd::VfsList),
|
||||
MenuItem::item("Background jobs", Cmd::Jobs),
|
||||
MenuItem::separator(),
|
||||
MenuItem::item("Edit extension file", Cmd::EditExtensionFile),
|
||||
MenuItem::item("Edit menu file", Cmd::EditMenuFile),
|
||||
MenuItem::item("Edit highlighting file", Cmd::EditHighlightFile),
|
||||
MenuItem::separator(),
|
||||
MenuItem::item("Toggle panels", Cmd::TogglePanels),
|
||||
]),
|
||||
Menu::new("Options", vec![
|
||||
|
||||
@@ -183,6 +183,12 @@ pub enum Cmd {
|
||||
Encoding,
|
||||
/// Alt-n — open a network connection (FTP/SFTP/Shell).
|
||||
Connection,
|
||||
/// Command menu — edit the extension mapping file.
|
||||
EditExtensionFile,
|
||||
/// Command menu — edit the user menu file.
|
||||
EditMenuFile,
|
||||
/// Command menu — edit the file highlighting rules.
|
||||
EditHighlightFile,
|
||||
}
|
||||
|
||||
impl Cmd {
|
||||
@@ -265,6 +271,9 @@ impl Cmd {
|
||||
Cmd::PanelFilter => "Panel filter",
|
||||
Cmd::Encoding => "Display encoding",
|
||||
Cmd::Connection => "Network connection",
|
||||
Cmd::EditExtensionFile => "Edit extension file",
|
||||
Cmd::EditMenuFile => "Edit menu file",
|
||||
Cmd::EditHighlightFile => "Edit highlighting file",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user