Skip to content

Commit 0dcd297

Browse files
committed
feat(nvim): support picker buffer direction
1 parent 31abafa commit 0dcd297

File tree

6 files changed

+25
-15
lines changed

6 files changed

+25
-15
lines changed

lua/xbase/pickers.lua

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
local M = {}
22
local a = require "telescope.actions"
3+
local action_set = require "telescope.actions.set"
34
local s = require "telescope.actions.state"
45
local finder = require("telescope.finders").new_table
56
local picker = require("telescope.pickers").new
@@ -8,9 +9,10 @@ local maker = require("telescope.pickers.entry_display").create
89
local xbase = require "xbase"
910
local watch = require "xbase.watch"
1011

11-
local handle_action = function(bufnr)
12+
local handle_action = function(direction, bufnr)
1213
a.close(bufnr)
1314
local selected = s.get_selected_entry()
15+
selected.direction = direction
1416

1517
if selected.command == "Build" then
1618
xbase.build(selected)
@@ -105,7 +107,9 @@ M.watch = function(opts)
105107
end,
106108
},
107109
attach_mappings = function(_, _)
108-
a.select_default:replace(handle_action)
110+
a.select_default:replace(function(bufnr)
111+
handle_action(nil, bufnr)
112+
end)
109113
return true
110114
end,
111115
}):find()
@@ -160,7 +164,9 @@ M.build_run = function(command, opts)
160164
end,
161165
},
162166
attach_mappings = function(_, _)
163-
a.select_default:replace(handle_action)
167+
action_set.select:replace(function(bufnr, direction)
168+
handle_action(direction, bufnr)
169+
end)
164170
return true
165171
end,
166172
}):find()

src/daemon/requests/build.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::{nvim::BufferDirection, types::BuildConfiguration};
33
use std::fmt::Debug;
44

55
#[cfg(feature = "daemon")]
6-
use crate::{constants::DAEMON_STATE, nvim::WatchLogger, xcode::stream_build};
6+
use crate::{constants::DAEMON_STATE, nvim::Logger, xcode::stream_build};
77

88
/// Build a project.
99
#[derive(Debug, Serialize, Deserialize)]
@@ -30,7 +30,7 @@ impl Handler for Build {
3030

3131
let direction = self.direction.clone();
3232

33-
WatchLogger::new(nvim, "Build", &config)
33+
Logger::new(nvim, "Build", &config)
3434
.log_stream(stream_build(&root, &config).await?, direction, true, true)
3535
.await?;
3636

src/nvim.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
mod buffer;
22
#[cfg(feature = "daemon")]
3-
mod watchlogger;
3+
mod logger;
44

55
pub use buffer::BufferDirection;
66

77
#[cfg(feature = "daemon")]
88
use nvim_rs::compat::tokio::Compat;
99

1010
#[cfg(feature = "daemon")]
11-
pub use watchlogger::*;
11+
pub use logger::*;
1212

1313
use serde::{Deserialize, Serialize};
1414

src/nvim/buffer.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,21 @@ use serde::{Deserialize, Serialize};
77
#[derive(Clone, Debug, strum::EnumString, Serialize, Deserialize)]
88
#[strum(ascii_case_insensitive)]
99
pub enum BufferDirection {
10-
Float,
10+
Default,
1111
Vertical,
1212
Horizontal,
13+
TabEdit,
1314
}
1415

1516
#[cfg(feature = "daemon")]
1617
impl BufferDirection {
1718
pub fn to_nvim_command(&self, bufnr: i64) -> String {
1819
match self {
19-
// TOOD: support build log float
20-
BufferDirection::Float => format!("sbuffer {bufnr}"),
20+
// TOOD: support build log float as default
21+
BufferDirection::Default => format!("sbuffer {bufnr}"),
2122
BufferDirection::Vertical => format!("vert sbuffer {bufnr}"),
2223
BufferDirection::Horizontal => format!("sbuffer {bufnr}"),
24+
BufferDirection::TabEdit => format!("tabe {bufnr}"),
2325
}
2426
}
2527

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ use anyhow::Result;
55
use nvim_rs::{Buffer, Window};
66
use tokio_stream::{Stream, StreamExt};
77

8-
pub struct WatchLogger<'a> {
8+
pub struct Logger<'a> {
99
pub nvim: &'a NvimClient,
1010
pub title: &'a str,
1111
pub request: &'a BuildConfiguration,
1212
}
1313

14-
impl<'a> WatchLogger<'a> {
14+
impl<'a> Logger<'a> {
1515
pub fn new(nvim: &'a NvimClient, title: &'a str, request: &'a BuildConfiguration) -> Self {
1616
Self {
1717
nvim,
@@ -47,6 +47,9 @@ impl<'a> WatchLogger<'a> {
4747
);
4848

4949
let buf = Buffer::new(nvim.log_bufnr.into(), nvim.inner().clone());
50+
// TODO(nvim): close log buffer if it is open for new direction
51+
//
52+
// Currently the buffer direction will be ignored if the buffer is opened already
5053

5154
if clear {
5255
buf.set_lines(0, -1, false, vec![]).await?;
@@ -58,7 +61,6 @@ impl<'a> WatchLogger<'a> {
5861
};
5962

6063
// TODO(nvim): build log correct height
61-
// TODO(nvim): make auto clear configurable
6264
let command =
6365
match BufferDirection::get_window_direction(nvim, direction, nvim.log_bufnr).await {
6466
Ok(open_command) => open_command,

src/watcher/handle/target.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::{WatchArguments, WatchError};
22
use crate::constants::DAEMON_STATE;
33
use crate::daemon::{WatchKind, WatchTarget};
4-
use crate::nvim::WatchLogger;
4+
use crate::nvim::Logger;
55
use crate::types::{BuildConfiguration, Client};
66
use crate::xcode;
77
use anyhow::Result;
@@ -68,7 +68,7 @@ pub async fn create(req: WatchArguments) -> Result<(), WatchError> {
6868
}
6969
};
7070

71-
WatchLogger::new(nvim, "Build", &config)
71+
Logger::new(nvim, "Build", &config)
7272
.log_stream(stream, None, false, false)
7373
.await
7474
.map_err(WatchError::r#continue)?;

0 commit comments

Comments
 (0)