use rmpv::Value;
use crate::api::*;
use crate::error::Error;
use crate::value_vec;
impl Buffer {
pub fn line_count(&mut self) -> Result<i64, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_line_count", value_vec!(self.data))?;
Ok(ret.as_i64().unwrap())
}
pub fn attach(&mut self, send_buffer: bool, opts: Vec<(Value, Value)>) -> Result<bool, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_attach", value_vec!(self.data, send_buffer, opts))?;
Ok(ret.as_bool().unwrap())
}
pub fn detach(&mut self) -> Result<bool, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_detach", value_vec!(self.data))?;
Ok(ret.as_bool().unwrap())
}
pub fn get_lines(
&mut self,
start: i64,
end: i64,
strict_indexing: bool,
) -> Result<Vec<String>, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call(
"nvim_buf_get_lines",
value_vec!(self.data, start, end, strict_indexing),
)?;
Ok(ret
.as_array()
.unwrap()
.iter()
.map(|x| x.as_str().unwrap().to_string())
.collect())
}
pub fn set_lines(
&mut self,
start: i64,
end: i64,
strict_indexing: bool,
replacement: Vec<String>,
) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call(
"nvim_buf_set_lines",
value_vec!(self.data, start, end, strict_indexing, replacement),
)?;
Ok(())
}
pub fn set_text(
&mut self,
start_row: i64,
start_col: i64,
end_row: i64,
end_col: i64,
replacement: Vec<String>,
) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call(
"nvim_buf_set_text",
value_vec!(
self.data,
start_row,
start_col,
end_row,
end_col,
replacement
),
)?;
Ok(())
}
pub fn get_text(
&mut self,
start_row: i64,
start_col: i64,
end_row: i64,
end_col: i64,
opts: Vec<(Value, Value)>,
) -> Result<Vec<String>, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call(
"nvim_buf_get_text",
value_vec!(self.data, start_row, start_col, end_row, end_col, opts),
)?;
Ok(ret
.as_array()
.unwrap()
.iter()
.map(|x| x.as_str().unwrap().to_string())
.collect())
}
pub fn get_offset(&mut self, index: i64) -> Result<i64, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_get_offset", value_vec!(self.data, index))?;
Ok(ret.as_i64().unwrap())
}
pub fn get_var(&mut self, name: String) -> Result<Value, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_get_var", value_vec!(self.data, name))?;
Ok(ret.to_owned())
}
pub fn get_changedtick(&mut self) -> Result<i64, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_get_changedtick", value_vec!(self.data))?;
Ok(ret.as_i64().unwrap())
}
pub fn get_keymap(&mut self, mode: String) -> Result<Vec<Vec<(Value, Value)>>, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_get_keymap", value_vec!(self.data, mode))?;
Ok(ret
.as_array()
.unwrap()
.iter()
.map(|x| {
x.as_array()
.unwrap()
.iter()
.map(|x| {
let v = x.as_array().unwrap();
(v[0].to_owned(), v[1].to_owned())
})
.collect()
})
.collect())
}
pub fn set_keymap(
&mut self,
mode: String,
lhs: String,
rhs: String,
opts: Vec<(Value, Value)>,
) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call(
"nvim_buf_set_keymap",
value_vec!(self.data, mode, lhs, rhs, opts),
)?;
Ok(())
}
pub fn del_keymap(&mut self, mode: String, lhs: String) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call("nvim_buf_del_keymap", value_vec!(self.data, mode, lhs))?;
Ok(())
}
pub fn set_var(&mut self, name: String, value: Value) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call("nvim_buf_set_var", value_vec!(self.data, name, value))?;
Ok(())
}
pub fn del_var(&mut self, name: String) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call("nvim_buf_del_var", value_vec!(self.data, name))?;
Ok(())
}
pub fn get_name(&mut self) -> Result<String, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_get_name", value_vec!(self.data))?;
Ok(ret.as_str().unwrap().to_string())
}
pub fn set_name(&mut self, name: String) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call("nvim_buf_set_name", value_vec!(self.data, name))?;
Ok(())
}
pub fn is_loaded(&mut self) -> Result<bool, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_is_loaded", value_vec!(self.data))?;
Ok(ret.as_bool().unwrap())
}
pub fn delete(&mut self, opts: Vec<(Value, Value)>) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call("nvim_buf_delete", value_vec!(self.data, opts))?;
Ok(())
}
pub fn is_valid(&mut self) -> Result<bool, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_is_valid", value_vec!(self.data))?;
Ok(ret.as_bool().unwrap())
}
pub fn del_mark(&mut self, name: String) -> Result<bool, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_del_mark", value_vec!(self.data, name))?;
Ok(ret.as_bool().unwrap())
}
pub fn set_mark(
&mut self,
name: String,
line: i64,
col: i64,
opts: Vec<(Value, Value)>,
) -> Result<bool, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call(
"nvim_buf_set_mark",
value_vec!(self.data, name, line, col, opts),
)?;
Ok(ret.as_bool().unwrap())
}
pub fn get_mark(&mut self, name: String) -> Result<(i64, i64), Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_get_mark", value_vec!(self.data, name))?;
let v = ret.as_array().unwrap();
Ok((v[0].as_i64().unwrap(), v[1].as_i64().unwrap()))
}
pub fn call(&mut self, fun: Value) -> Result<Value, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_call", value_vec!(self.data, fun))?;
Ok(ret.to_owned())
}
pub fn create_user_command(
&mut self,
name: String,
command: Value,
opts: Vec<(Value, Value)>,
) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call(
"nvim_buf_create_user_command",
value_vec!(self.data, name, command, opts),
)?;
Ok(())
}
pub fn del_user_command(&mut self, name: String) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call("nvim_buf_del_user_command", value_vec!(self.data, name))?;
Ok(())
}
pub fn get_commands(
&mut self,
opts: Vec<(Value, Value)>,
) -> Result<Vec<(Value, Value)>, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_get_commands", value_vec!(self.data, opts))?;
Ok(ret
.as_array()
.unwrap()
.iter()
.map(|x| {
let v = x.as_array().unwrap();
(v[0].to_owned(), v[1].to_owned())
})
.collect())
}
pub fn get_extmark_by_id(
&mut self,
ns_id: i64,
id: i64,
opts: Vec<(Value, Value)>,
) -> Result<Vec<i64>, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call(
"nvim_buf_get_extmark_by_id",
value_vec!(self.data, ns_id, id, opts),
)?;
Ok(ret
.as_array()
.unwrap()
.iter()
.map(|x| x.as_i64().unwrap())
.collect())
}
pub fn get_extmarks(
&mut self,
ns_id: i64,
start: Value,
end: Value,
opts: Vec<(Value, Value)>,
) -> Result<Vec<Value>, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call(
"nvim_buf_get_extmarks",
value_vec!(self.data, ns_id, start, end, opts),
)?;
Ok(ret
.as_array()
.unwrap()
.iter()
.map(|x| x.to_owned())
.collect())
}
pub fn set_extmark(
&mut self,
ns_id: i64,
line: i64,
col: i64,
opts: Vec<(Value, Value)>,
) -> Result<i64, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call(
"nvim_buf_set_extmark",
value_vec!(self.data, ns_id, line, col, opts),
)?;
Ok(ret.as_i64().unwrap())
}
pub fn del_extmark(&mut self, ns_id: i64, id: i64) -> Result<bool, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call("nvim_buf_del_extmark", value_vec!(self.data, ns_id, id))?;
Ok(ret.as_bool().unwrap())
}
pub fn add_highlight(
&mut self,
ns_id: i64,
hl_group: String,
line: i64,
col_start: i64,
col_end: i64,
) -> Result<i64, Error> {
let mut session = self.session.lock().unwrap();
let ret = session.call(
"nvim_buf_add_highlight",
value_vec!(self.data, ns_id, hl_group, line, col_start, col_end),
)?;
Ok(ret.as_i64().unwrap())
}
pub fn clear_namespace(
&mut self,
ns_id: i64,
line_start: i64,
line_end: i64,
) -> Result<(), Error> {
let mut session = self.session.lock().unwrap();
session.call(
"nvim_buf_clear_namespace",
value_vec!(self.data, ns_id, line_start, line_end),
)?;
Ok(())
}
}