Cargo.lock 🔗
@@ -8514,6 +8514,7 @@ dependencies = [
"indoc",
"itertools",
"language",
+ "language_selector",
"log",
"nvim-rs",
"parking_lot 0.11.2",
Conrad Irwin and Nate Butler created
Co-Authored-By: Nate Butler <iamnbutler@gmail.com>
Cargo.lock | 1 +
crates/theme/src/theme.rs | 2 +-
crates/vim/Cargo.toml | 1 +
crates/vim/src/mode_indicator.rs | 5 ++++-
crates/vim/src/vim.rs | 5 ++---
crates/workspace/src/status_bar.rs | 8 ++------
styles/src/style_tree/status_bar.ts | 31 ++++++++++++++-----------------
7 files changed, 25 insertions(+), 28 deletions(-)
@@ -8514,6 +8514,7 @@ dependencies = [
"indoc",
"itertools",
"language",
+ "language_selector",
"log",
"nvim-rs",
"parking_lot 0.11.2",
@@ -402,7 +402,7 @@ pub struct StatusBar {
pub height: f32,
pub item_spacing: f32,
pub cursor_position: TextStyle,
- pub vim_mode_indicator: TextStyle,
+ pub vim_mode_indicator: ContainedText,
pub active_language: Interactive<ContainedText>,
pub auto_update_progress_message: TextStyle,
pub auto_update_done_message: TextStyle,
@@ -33,6 +33,7 @@ search = { path = "../search" }
settings = { path = "../settings" }
workspace = { path = "../workspace" }
theme = { path = "../theme" }
+language_selector = { path = "../language_selector"}
[dev-dependencies]
indoc.workspace = true
@@ -40,7 +40,10 @@ impl View for ModeIndicator {
Mode::Visual { line: false } => "-- VISUAL --",
Mode::Visual { line: true } => "VISUAL LINE ",
};
- Label::new(text, theme.vim_mode_indicator.clone()).into_any()
+ Label::new(text, theme.vim_mode_indicator.text.clone())
+ .contained()
+ .with_style(theme.vim_mode_indicator.container)
+ .into_any()
}
}
@@ -289,9 +289,8 @@ impl Vim {
Some(cx.add_view(|_| ModeIndicator::new(vim.state.mode)));
};
let mode_indicator = vim.mode_indicator.as_ref().unwrap();
- // TODO: would it be better to depend on the diagnostics crate
- // so we can pass the type directly?
- let position = status_bar.position_of_named_item("DiagnosticIndicator");
+ let position = status_bar
+ .position_of_item::<language_selector::ActiveBufferLanguage>();
if let Some(position) = position {
status_bar.insert_item_after(position, mode_indicator.clone(), cx)
} else {
@@ -107,17 +107,13 @@ impl StatusBar {
where
T: StatusItemView,
{
- self.position_of_named_item(T::ui_name())
- }
-
- pub fn position_of_named_item(&self, name: &str) -> Option<usize> {
for (index, item) in self.left_items.iter().enumerate() {
- if item.as_ref().ui_name() == name {
+ if item.as_ref().ui_name() == T::ui_name() {
return Some(index);
}
}
for (index, item) in self.right_items.iter().enumerate() {
- if item.as_ref().ui_name() == name {
+ if item.as_ref().ui_name() == T::ui_name() {
return Some(index + self.left_items.len());
}
}
@@ -1,6 +1,8 @@
import { background, border, foreground, text } from "./components"
import { interactive, toggleable } from "../element"
import { useTheme } from "../common"
+import { text_button } from "../component/text_button"
+
export default function status_bar(): any {
const theme = useTheme()
@@ -26,21 +28,16 @@ export default function status_bar(): any {
right: 6,
},
border: border(layer, { top: true, overlay: true }),
- cursor_position: text(layer, "sans", "variant"),
- vim_mode_indicator: text(layer, "mono", "variant"),
- active_language: interactive({
- base: {
- padding: { left: 6, right: 6 },
- ...text(layer, "sans", "variant"),
- },
- state: {
- hovered: {
- ...text(layer, "sans", "on"),
- },
- },
+ cursor_position: text(layer, "sans", "variant", { size: "xs" }),
+ vim_mode_indicator: {
+ margin: { left: 6 },
+ ...text(layer, "mono", "variant", { size: "xs" }),
+ },
+ active_language: text_button({
+ color: "variant"
}),
- auto_update_progress_message: text(layer, "sans", "variant"),
- auto_update_done_message: text(layer, "sans", "variant"),
+ auto_update_progress_message: text(layer, "sans", "variant", { size: "xs" }),
+ auto_update_done_message: text(layer, "sans", "variant", { size: "xs" }),
lsp_status: interactive({
base: {
...diagnostic_status_container,
@@ -60,9 +57,9 @@ export default function status_bar(): any {
}),
diagnostic_message: interactive({
base: {
- ...text(layer, "sans"),
+ ...text(layer, "sans", { size: "xs" }),
},
- state: { hovered: text(layer, "sans", "hovered") },
+ state: { hovered: text(layer, "sans", "hovered", { size: "xs" }) },
}),
diagnostic_summary: interactive({
base: {
@@ -118,7 +115,7 @@ export default function status_bar(): any {
icon_color: foreground(layer, "variant"),
label: {
margin: { left: 6 },
- ...text(layer, "sans", { size: "sm" }),
+ ...text(layer, "sans", { size: "xs" }),
},
},
state: {