add export config script

This commit is contained in:
alice pellerin
2026-04-25 18:18:08 -05:00
parent 7741bb112e
commit adfb780521
6 changed files with 102 additions and 27 deletions
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/swift
import Foundation
func camelCaseToSnakeCase(_ string: Substring) -> String {
var output = string.first?.lowercased() ?? ""
var previousCharacterWasUppercase = false
for character in string.dropFirst() {
if character.isUppercase {
if previousCharacterWasUppercase {
output.append(character.lowercased())
} else {
output += "_\(character.lowercased())"
previousCharacterWasUppercase = true
}
} else if character.isNumber {
output += "_\(character)"
previousCharacterWasUppercase = false
} else {
output.append(character)
previousCharacterWasUppercase = false
}
}
return output
}
let defaultConfigPath = URL(filePath: "src/config/default.rs")
let lines = try String(contentsOf: defaultConfigPath, encoding: .utf8)
.split(separator: "\n", omittingEmptySubsequences: false)
.dropFirst(14)
.dropLast(6)
precondition(lines.first!.contains("Mode::Normal"))
var mode: String?
for line in lines {
if let match = line.wholeMatch(of: #/.*Mode::(?'mode'\w*),.*/#) {
mode = match.output.mode.lowercased()
} else if line.contains("None") {
print("[\(mode!)]")
} else if let match = line.wholeMatch(of: #/.*PartialAction::(?'partialAction'\w*).*/#) {
let partialAction = match.output.partialAction.lowercased()
print("[\(mode!).\(partialAction)]")
} else if let match = line.wholeMatch(of: #/.*\(keypress\("(?'keypress'.*?)"\), (?'action'.*?)\.into\(\)\).*/#) {
if match.output.keypress.contains(where: { !($0.isLetter || $0.isNumber) }) {
print(
"\"\(match.output.keypress)\"",
"=",
"\"\(camelCaseToSnakeCase(match.output.action))\""
)
} else {
print(
match.output.keypress,
"=",
"\"\(camelCaseToSnakeCase(match.output.action))\""
)
}
} else {
print()
}
}
+18 -18
View File
@@ -310,15 +310,15 @@ impl From<BufferAction> for &str {
KeepPrimarySelection => "keep_primary_selection", KeepPrimarySelection => "keep_primary_selection",
RemovePrimarySelection => "remove_primary_selection", RemovePrimarySelection => "remove_primary_selection",
SplitSelectionsInto1s => "split_selections_into_1_s", SplitSelectionsInto1s => "split_selections_into_1s",
SplitSelectionsInto2s => "split_selections_into_2_s", SplitSelectionsInto2s => "split_selections_into_2s",
SplitSelectionsInto3s => "split_selections_into_3_s", SplitSelectionsInto3s => "split_selections_into_3s",
SplitSelectionsInto4s => "split_selections_into_4_s", SplitSelectionsInto4s => "split_selections_into_4s",
SplitSelectionsInto5s => "split_selections_into_5_s", SplitSelectionsInto5s => "split_selections_into_5s",
SplitSelectionsInto6s => "split_selections_into_6_s", SplitSelectionsInto6s => "split_selections_into_6s",
SplitSelectionsInto7s => "split_selections_into_7_s", SplitSelectionsInto7s => "split_selections_into_7s",
SplitSelectionsInto8s => "split_selections_into_8_s", SplitSelectionsInto8s => "split_selections_into_8s",
SplitSelectionsInto9s => "split_selections_into_9_s", SplitSelectionsInto9s => "split_selections_into_9s",
JumpToSelectedOffset => "jump_to_selected_offset", JumpToSelectedOffset => "jump_to_selected_offset",
JumpToSelectedOffsetRelativeToMark => "jump_to_selected_offset_relative_to_mark", JumpToSelectedOffsetRelativeToMark => "jump_to_selected_offset_relative_to_mark",
@@ -393,15 +393,15 @@ impl TryFrom<&str> for BufferAction {
"keep_primary_selection" => Ok(KeepPrimarySelection), "keep_primary_selection" => Ok(KeepPrimarySelection),
"remove_primary_selection" => Ok(RemovePrimarySelection), "remove_primary_selection" => Ok(RemovePrimarySelection),
"split_selections_into_1_s" => Ok(SplitSelectionsInto1s), "split_selections_into_1s" => Ok(SplitSelectionsInto1s),
"split_selections_into_2_s" => Ok(SplitSelectionsInto2s), "split_selections_into_2s" => Ok(SplitSelectionsInto2s),
"split_selections_into_3_s" => Ok(SplitSelectionsInto3s), "split_selections_into_3s" => Ok(SplitSelectionsInto3s),
"split_selections_into_4_s" => Ok(SplitSelectionsInto4s), "split_selections_into_4s" => Ok(SplitSelectionsInto4s),
"split_selections_into_5_s" => Ok(SplitSelectionsInto5s), "split_selections_into_5s" => Ok(SplitSelectionsInto5s),
"split_selections_into_6_s" => Ok(SplitSelectionsInto6s), "split_selections_into_6s" => Ok(SplitSelectionsInto6s),
"split_selections_into_7_s" => Ok(SplitSelectionsInto7s), "split_selections_into_7s" => Ok(SplitSelectionsInto7s),
"split_selections_into_8_s" => Ok(SplitSelectionsInto8s), "split_selections_into_8s" => Ok(SplitSelectionsInto8s),
"split_selections_into_9_s" => Ok(SplitSelectionsInto9s), "split_selections_into_9s" => Ok(SplitSelectionsInto9s),
"jump_to_selected_offset" => Ok(JumpToSelectedOffset), "jump_to_selected_offset" => Ok(JumpToSelectedOffset),
"jump_to_selected_offset_relative_to_mark" => Ok(JumpToSelectedOffsetRelativeToMark), "jump_to_selected_offset_relative_to_mark" => Ok(JumpToSelectedOffsetRelativeToMark),
+2 -2
View File
@@ -42,7 +42,7 @@ pub struct Buffer {
#[derive(Debug)] #[derive(Debug)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum Mode { pub enum Mode {
Normal, Select, Insert Normal, Select, // Insert
} }
#[derive(Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)] #[derive(Clone, Copy, Hash, PartialEq, Eq, Serialize, Deserialize)]
@@ -69,7 +69,7 @@ impl TryFrom<&str> for PartialAction {
"replace" => Ok(Replace), "replace" => Ok(Replace),
"space" => Ok(Space), "space" => Ok(Space),
"repeat" => Ok(Repeat), "repeat" => Ok(Repeat),
"to" => Ok(Till), "till" => Ok(Till),
_ => Err(()), _ => Err(()),
} }
} }
+2 -2
View File
@@ -40,7 +40,7 @@ impl Mode {
match self { match self {
Self::Normal => " NORMAL ", Self::Normal => " NORMAL ",
Self::Select => " SELECT ", Self::Select => " SELECT ",
Self::Insert => " INSERT ", // Self::Insert => " INSERT ",
} }
} }
@@ -48,7 +48,7 @@ impl Mode {
match self { match self {
Self::Normal => Color::Blue, Self::Normal => Color::Blue,
Self::Select => Color::Yellow, Self::Select => Color::Yellow,
Self::Insert => Color::Green, // Self::Insert => Color::Green,
} }
} }
} }
+6
View File
@@ -106,6 +106,9 @@ impl Default for Config {
].into()), ].into()),
(Some(PartialAction::Space), [ (Some(PartialAction::Space), [
(keypress("w"), Save.into()), (keypress("w"), Save.into()),
(keypress("q"), QuitIfSaved.into()),
(keypress("Q"), Quit.into()),
].into()), ].into()),
(Some(PartialAction::Repeat), [ (Some(PartialAction::Repeat), [
(keypress("i"), MoveByteUp.into()), (keypress("i"), MoveByteUp.into()),
@@ -235,6 +238,9 @@ impl Default for Config {
].into()), ].into()),
(Some(PartialAction::Space), [ (Some(PartialAction::Space), [
(keypress("w"), Save.into()), (keypress("w"), Save.into()),
(keypress("q"), QuitIfSaved.into()),
(keypress("Q"), Quit.into()),
].into()), ].into()),
(Some(PartialAction::Repeat), [ (Some(PartialAction::Repeat), [
(keypress("i"), ExtendByteUp.into()), (keypress("i"), ExtendByteUp.into()),
+6 -5
View File
@@ -45,17 +45,18 @@ const BYTES_OF_PADDING: usize = LINES_OF_PADDING * BYTES_PER_LINE;
// - inspector translations for varint // - inspector translations for varint
// - repeated actions may only be cursor actions // - repeated actions may only be cursor actions
// - shouldn't crash // - shouldn't crash
// - gg/G in select mode
// - gl/gj in select mode
// - scrolling in select mode // - scrolling in select mode
// - +/- to edit selected bytes by amount // - M mark at selected offset (like Jm)
// - search // - search
// - ascii and bytes (`/` and `A-/`?) // - ascii and bytes (`/` and `A-/`?)
// - diffing // - diffing
// - doesn't have to be anything fancy, just compare each byte 1:1 // - doesn't have to be anything fancy, just compare each byte 1:1
// - s/A-k/A-K // - s/A-k/A-K
// - sm select marks // - (not) sm select marks
// - C-a/C-x // - C-a/C-x
// - +/- to edit selected bytes by amount ?
// - operate on entire selection (u16/u32/etc)
// - hex or decimal ?
// - modifications // - modifications
// - insert/append // - insert/append
// - mode // - mode
@@ -65,8 +66,8 @@ const BYTES_OF_PADDING: usize = LINES_OF_PADDING * BYTES_PER_LINE;
// - change // - change
// - edit character panel // - edit character panel
// - modifier on existing keys like teehee? or jump to panel? // - modifier on existing keys like teehee? or jump to panel?
// - A-r replaces with ASCII ?
// - if jump to panel, space? // - if jump to panel, space?
// - visual gg/G
// - jumplist // - jumplist
// - p // - p
// - [/] to cycle view offset? // - [/] to cycle view offset?