mirror of
https://github.com/gitui-org/gitui
synced 2026-05-23 08:58:21 +00:00
Automatically convert spaces to dashes in branch names
This commit is contained in:
parent
8619c07f3f
commit
33cced6312
3 changed files with 65 additions and 6 deletions
|
|
@ -11,9 +11,10 @@ use crate::{
|
|||
};
|
||||
use anyhow::Result;
|
||||
use asyncgit::sync::{self, RepoPathRef};
|
||||
use crossterm::event::Event;
|
||||
use crossterm::event::{Event, KeyCode, KeyEvent};
|
||||
use easy_cast::Cast;
|
||||
use ratatui::{layout::Rect, widgets::Paragraph, Frame};
|
||||
use std::borrow::Cow;
|
||||
|
||||
pub struct CreateBranchPopup {
|
||||
repo: RepoPathRef,
|
||||
|
|
@ -57,11 +58,28 @@ impl Component for CreateBranchPopup {
|
|||
|
||||
fn event(&mut self, ev: &Event) -> Result<EventState> {
|
||||
if self.is_visible() {
|
||||
if self.input.event(ev)?.is_consumed() {
|
||||
let ev = match ev {
|
||||
Event::Key(KeyEvent {
|
||||
code: KeyCode::Char(c),
|
||||
modifiers,
|
||||
kind,
|
||||
state,
|
||||
}) => Cow::Owned(Event::Key(KeyEvent {
|
||||
code: KeyCode::Char(strings::normalize_branch_name_char(
|
||||
*c,
|
||||
)),
|
||||
modifiers: *modifiers,
|
||||
kind: *kind,
|
||||
state: *state,
|
||||
})),
|
||||
_ => Cow::Borrowed(ev),
|
||||
};
|
||||
|
||||
if self.input.event(&ev)?.is_consumed() {
|
||||
return Ok(EventState::Consumed);
|
||||
}
|
||||
|
||||
if let Event::Key(e) = ev {
|
||||
if let Event::Key(e) = ev.as_ref() {
|
||||
if key_match(e, self.key_config.keys.enter) {
|
||||
self.create_branch();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,9 +11,10 @@ use crate::{
|
|||
};
|
||||
use anyhow::Result;
|
||||
use asyncgit::sync::{self, RepoPathRef};
|
||||
use crossterm::event::Event;
|
||||
use crossterm::event::{Event, KeyCode, KeyEvent};
|
||||
use easy_cast::Cast;
|
||||
use ratatui::{layout::Rect, widgets::Paragraph, Frame};
|
||||
use std::borrow::Cow;
|
||||
|
||||
pub struct RenameBranchPopup {
|
||||
repo: RepoPathRef,
|
||||
|
|
@ -57,11 +58,28 @@ impl Component for RenameBranchPopup {
|
|||
|
||||
fn event(&mut self, ev: &Event) -> Result<EventState> {
|
||||
if self.is_visible() {
|
||||
if self.input.event(ev)?.is_consumed() {
|
||||
let ev = match ev {
|
||||
Event::Key(KeyEvent {
|
||||
code: KeyCode::Char(c),
|
||||
modifiers,
|
||||
kind,
|
||||
state,
|
||||
}) => Cow::Owned(Event::Key(KeyEvent {
|
||||
code: KeyCode::Char(strings::normalize_branch_name_char(
|
||||
*c,
|
||||
)),
|
||||
modifiers: *modifiers,
|
||||
kind: *kind,
|
||||
state: *state,
|
||||
})),
|
||||
_ => Cow::Borrowed(ev),
|
||||
};
|
||||
|
||||
if self.input.event(&ev)?.is_consumed() {
|
||||
return Ok(EventState::Consumed);
|
||||
}
|
||||
|
||||
if let Event::Key(e) = ev {
|
||||
if let Event::Key(e) = ev.as_ref() {
|
||||
if key_match(e, self.key_config.keys.enter) {
|
||||
self.rename_branch();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -438,6 +438,13 @@ pub fn ellipsis_trim_start(s: &str, width: usize) -> Cow<'_, str> {
|
|||
}
|
||||
}
|
||||
|
||||
pub const fn normalize_branch_name_char(c: char) -> char {
|
||||
match c {
|
||||
' ' => '-',
|
||||
c => c,
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq, Clone, Copy)]
|
||||
pub enum CheckoutOptions {
|
||||
KeepLocalChanges,
|
||||
|
|
@ -1934,3 +1941,19 @@ pub mod commands {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_spaces_are_replaced_by_dashes_in_branch_name() {
|
||||
let input = "feature/auto replace spaces in branch name";
|
||||
let output: String =
|
||||
input.chars().map(normalize_branch_name_char).collect();
|
||||
assert_eq!(
|
||||
output,
|
||||
"feature/auto-replace-spaces-in-branch-name"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue