editor: Add actions for inserting UUIDs (#21656)

This PR adds two new actions for generating and inserting UUIDs into the
buffer:


https://github.com/user-attachments/assets/a3445a98-07e2-40b8-9773-fd750706cbcc

Release Notes:

- Added `editor: insert uuid v4` and `editor: insert uuid v7` actions
for inserting generated UUIDs into the editor.
This commit is contained in:
Marshall Bowers 2024-12-06 14:32:09 -05:00 committed by GitHub
parent 7a1a7929bd
commit 5142e38d2b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 42 additions and 1 deletions

View file

@ -105,6 +105,7 @@ pub struct MoveDownByLines {
#[serde(default)]
pub(super) lines: u32,
}
#[derive(PartialEq, Clone, Deserialize, Default)]
pub struct SelectUpByLines {
#[serde(default)]
@ -166,6 +167,13 @@ pub struct SpawnNearestTask {
pub reveal: task::RevealStrategy,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, Deserialize, Default)]
pub enum UuidVersion {
#[default]
V4,
V7,
}
impl_actions!(
editor,
[
@ -271,6 +279,8 @@ gpui::actions!(
HalfPageUp,
Hover,
Indent,
InsertUuidV4,
InsertUuidV7,
JoinLines,
KillRingCut,
KillRingYank,

View file

@ -12004,6 +12004,33 @@ impl Editor {
.detach();
}
pub fn insert_uuid_v4(&mut self, _: &InsertUuidV4, cx: &mut ViewContext<Self>) {
self.insert_uuid(UuidVersion::V4, cx);
}
pub fn insert_uuid_v7(&mut self, _: &InsertUuidV7, cx: &mut ViewContext<Self>) {
self.insert_uuid(UuidVersion::V7, cx);
}
fn insert_uuid(&mut self, version: UuidVersion, cx: &mut ViewContext<Self>) {
self.transact(cx, |this, cx| {
let edits = this
.selections
.all::<Point>(cx)
.into_iter()
.map(|selection| {
let uuid = match version {
UuidVersion::V4 => uuid::Uuid::new_v4(),
UuidVersion::V7 => uuid::Uuid::now_v7(),
};
(selection.range(), uuid.to_string())
});
this.edit(edits, cx);
this.refresh_inline_completion(true, false, cx);
});
}
/// Adds a row highlight for the given range. If a row has multiple highlights, the
/// last highlight added will be used.
///

View file

@ -456,6 +456,8 @@ impl EditorElement {
register_action(view, cx, Editor::open_active_item_in_terminal);
register_action(view, cx, Editor::reload_file);
register_action(view, cx, Editor::spawn_nearest_task);
register_action(view, cx, Editor::insert_uuid_v4);
register_action(view, cx, Editor::insert_uuid_v7);
}
fn register_key_listeners(&self, cx: &mut WindowContext, layout: &EditorLayout) {