Detailed changes
@@ -12196,6 +12196,7 @@ dependencies = [
"ui",
"util",
"workspace",
+ "zed_actions",
]
[[package]]
@@ -12299,7 +12300,6 @@ dependencies = [
"shellexpand 2.1.2",
"smol",
"task",
- "tasks_ui",
"terminal",
"theme",
"ui",
@@ -25,7 +25,7 @@ ui.workspace = true
util.workspace = true
workspace.workspace = true
language.workspace = true
-
+zed_actions.workspace = true
[dev-dependencies]
editor = { workspace = true, features = ["test-support"] }
@@ -3,6 +3,7 @@ use editor::{tasks::task_context, Editor};
use gpui::{AppContext, Task as AsyncTask, ViewContext, WindowContext};
use modal::TasksModal;
use project::{Location, WorktreeId};
+use task::TaskId;
use workspace::tasks::schedule_task;
use workspace::{tasks::schedule_resolved_task, Workspace};
@@ -25,9 +26,13 @@ pub fn init(cx: &mut AppContext) {
.read(cx)
.task_inventory()
.and_then(|inventory| {
- inventory
- .read(cx)
- .last_scheduled_task(action.task_id.as_ref())
+ inventory.read(cx).last_scheduled_task(
+ action
+ .task_id
+ .as_ref()
+ .map(|id| TaskId(id.clone()))
+ .as_ref(),
+ )
})
{
if action.reevaluate_context {
@@ -3,13 +3,13 @@ use std::sync::Arc;
use crate::active_item_selection_properties;
use fuzzy::{StringMatch, StringMatchCandidate};
use gpui::{
- impl_actions, rems, Action, AnyElement, AppContext, DismissEvent, EventEmitter, FocusableView,
+ rems, Action, AnyElement, AppContext, DismissEvent, EventEmitter, FocusableView,
InteractiveElement, Model, ParentElement, Render, SharedString, Styled, Subscription, Task,
View, ViewContext, VisualContext, WeakView,
};
use picker::{highlighted_match_with_paths::HighlightedText, Picker, PickerDelegate};
use project::{task_store::TaskStore, TaskSourceKind};
-use task::{ResolvedTask, TaskContext, TaskId, TaskTemplate};
+use task::{ResolvedTask, TaskContext, TaskTemplate};
use ui::{
div, h_flex, v_flex, ActiveTheme, Button, ButtonCommon, ButtonSize, Clickable, Color,
FluentBuilder as _, Icon, IconButton, IconButtonShape, IconName, IconSize, IntoElement,
@@ -18,48 +18,7 @@ use ui::{
};
use util::ResultExt;
use workspace::{tasks::schedule_resolved_task, ModalView, Workspace};
-
-use serde::Deserialize;
-
-/// Spawn a task with name or open tasks modal
-#[derive(PartialEq, Clone, Deserialize, Default)]
-pub struct Spawn {
- #[serde(default)]
- /// Name of the task to spawn.
- /// If it is not set, a modal with a list of available tasks is opened instead.
- /// Defaults to None.
- pub task_name: Option<String>,
-}
-
-impl Spawn {
- pub fn modal() -> Self {
- Self { task_name: None }
- }
-}
-
-/// Rerun last task
-#[derive(PartialEq, Clone, Deserialize, Default)]
-pub struct Rerun {
- /// Controls whether the task context is reevaluated prior to execution of a task.
- /// If it is not, environment variables such as ZED_COLUMN, ZED_FILE are gonna be the same as in the last execution of a task
- /// If it is, these variables will be updated to reflect current state of editor at the time task::Rerun is executed.
- /// default: false
- #[serde(default)]
- pub reevaluate_context: bool,
- /// Overrides `allow_concurrent_runs` property of the task being reran.
- /// Default: null
- #[serde(default)]
- pub allow_concurrent_runs: Option<bool>,
- /// Overrides `use_new_terminal` property of the task being reran.
- /// Default: null
- #[serde(default)]
- pub use_new_terminal: Option<bool>,
-
- /// If present, rerun the task with this ID, otherwise rerun the last task.
- pub task_id: Option<TaskId>,
-}
-
-impl_actions!(task, [Rerun, Spawn]);
+pub use zed_actions::{Rerun, Spawn};
/// A modal used to spawn new tasks.
pub(crate) struct TasksModalDelegate {
@@ -24,7 +24,6 @@ itertools.workspace = true
language.workspace = true
project.workspace = true
task.workspace = true
-tasks_ui.workspace = true
search.workspace = true
serde.workspace = true
serde_json.workspace = true
@@ -218,7 +218,7 @@ impl TerminalPanel {
// context menu will be gone the moment we spawn the modal.
.action(
"Spawn task",
- tasks_ui::Spawn::modal().boxed_clone(),
+ zed_actions::Spawn::modal().boxed_clone(),
)
});
@@ -1044,8 +1044,8 @@ impl Item for TerminalView {
.shape(ui::IconButtonShape::Square)
.tooltip(|cx| Tooltip::text("Rerun task", cx))
.on_click(move |_, cx| {
- cx.dispatch_action(Box::new(tasks_ui::Rerun {
- task_id: Some(task_id.clone()),
+ cx.dispatch_action(Box::new(zed_actions::Rerun {
+ task_id: Some(task_id.0.clone()),
allow_concurrent_runs: Some(true),
use_new_terminal: Some(false),
reevaluate_context: false,
@@ -58,3 +58,43 @@ pub struct OpenRecent {
}
gpui::impl_actions!(projects, [OpenRecent]);
gpui::actions!(projects, [OpenRemote]);
+
+/// Spawn a task with name or open tasks modal
+#[derive(PartialEq, Clone, Deserialize, Default)]
+pub struct Spawn {
+ #[serde(default)]
+ /// Name of the task to spawn.
+ /// If it is not set, a modal with a list of available tasks is opened instead.
+ /// Defaults to None.
+ pub task_name: Option<String>,
+}
+
+impl Spawn {
+ pub fn modal() -> Self {
+ Self { task_name: None }
+ }
+}
+
+/// Rerun last task
+#[derive(PartialEq, Clone, Deserialize, Default)]
+pub struct Rerun {
+ /// Controls whether the task context is reevaluated prior to execution of a task.
+ /// If it is not, environment variables such as ZED_COLUMN, ZED_FILE are gonna be the same as in the last execution of a task
+ /// If it is, these variables will be updated to reflect current state of editor at the time task::Rerun is executed.
+ /// default: false
+ #[serde(default)]
+ pub reevaluate_context: bool,
+ /// Overrides `allow_concurrent_runs` property of the task being reran.
+ /// Default: null
+ #[serde(default)]
+ pub allow_concurrent_runs: Option<bool>,
+ /// Overrides `use_new_terminal` property of the task being reran.
+ /// Default: null
+ #[serde(default)]
+ pub use_new_terminal: Option<bool>,
+
+ /// If present, rerun the task with this ID, otherwise rerun the last task.
+ pub task_id: Option<String>,
+}
+
+impl_actions!(task, [Spawn, Rerun]);