Skip to content

Commit 86169c6

Browse files
authored
Add preview/file interface for easier external async preview integration (#706)
* Add preview/file interface for easier external integration * Pass winwidth and winheight of preview panel * Abstract clap#preview#maple_opts() * Extract clap#client#call_preview_file() * Fix vint * . * . * Update CHANGELOG.md
1 parent c7e013c commit 86169c6

File tree

6 files changed

+46
-14
lines changed

6 files changed

+46
-14
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
- [neovim] Add zindex option to fix the tricky floating_win overlapping, and add border for the preview window, use `let g:clap_popup_border = 'nil'` to disable the order. #693
88
- Impl preview for `quickfix` provider. #691
9+
- Impl `preview/file` for easier external async preview integration. #706
910

1011
### Changed
1112

@@ -17,6 +18,7 @@
1718
- [neovim] Fix the action dialog creation using floating_win. #688
1819
- Fix the indicator winwidth is not flexible. #687
1920
- Fix the icon offset when restoring the full display line for grep provider. #701
21+
- Fix the Pyo3 compilation on M1. #707
2022

2123
### Perf
2224

autoload/clap/client.vim

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ function! clap#client#handle(msg) abort
1212
let decoded = json_decode(a:msg)
1313

1414
if has_key(decoded, 'force_execute') && has_key(s:handlers, decoded.id)
15-
call s:handlers[decoded.id](get(decoded, 'result', v:null), get(decoded, 'error', v:null))
16-
call remove(s:handlers, decoded.id)
15+
let Handler = remove(s:handlers, decoded.id)
16+
call Handler(get(decoded, 'result', v:null), get(decoded, 'error', v:null))
1717
return
1818
endif
1919

@@ -23,8 +23,8 @@ function! clap#client#handle(msg) abort
2323
endif
2424

2525
if has_key(s:handlers, decoded.id)
26-
call s:handlers[decoded.id](get(decoded, 'result', v:null), get(decoded, 'error', v:null))
27-
call remove(s:handlers, decoded.id)
26+
let Handler = remove(s:handlers, decoded.id)
27+
call Handler(get(decoded, 'result', v:null), get(decoded, 'error', v:null))
2828
return
2929
endif
3030
endfunction
@@ -71,6 +71,10 @@ function! clap#client#call_on_move(method, callback, ...) abort
7171
call clap#client#call(a:method, a:callback, params)
7272
endfunction
7373

74+
function! clap#client#call_preview_file(extra) abort
75+
call clap#client#call('preview/file', function('clap#impl#on_move#handler'), clap#preview#maple_opts(a:extra))
76+
endfunction
77+
7478
function! clap#client#notify(method, params) abort
7579
let s:req_id += 1
7680
call clap#job#daemon#send_message(json_encode({

autoload/clap/preview.vim

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,15 @@ function! clap#preview#async_open_with_delay() abort
148148
let s:preview_timer = timer_start(s:preview_delay, { -> clap#impl#on_move#invoke_async()})
149149
endfunction
150150

151+
function! clap#preview#maple_opts(extra) abort
152+
let opts = {
153+
\ 'fpath': fnamemodify(fnameescape(g:clap.display.getcurline()), ':p'),
154+
\ 'preview_width': winwidth(g:clap.preview.winid),
155+
\ 'preview_height': winheight(g:clap.preview.winid),
156+
\ }
157+
return type(a:extra) == v:t_dict ? extend(opts, a:extra) : opts
158+
endfunction
159+
151160
if has('nvim')
152161
let s:header_ns_id = nvim_create_namespace('clap_preview_header')
153162
" Sometimes the first line of preview window is used for the header.

crates/maple_cli/src/stdio_server/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ fn loop_handle_rpc_message(rx: &Receiver<String>) {
9494
match &msg.method[..] {
9595
"initialize_global_env" => initialize_global(msg), // should be called only once.
9696
"init_ext_map" => message_handlers::parse_filetypedetect(msg),
97+
"preview/file" => message_handlers::preview_file(msg),
9798
"filer" => filer::handle_filer_message(msg),
9899
"quickfix" => quickfix::preview_quickfix_entry(msg),
99100
"dumb_jump" => dumb_jump::handle_dumb_jump_message(msg),

crates/maple_cli/src/stdio_server/session/message_handlers/mod.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
33
use std::collections::HashMap;
44

5+
use anyhow::Result;
56
use serde_json::json;
67

7-
use crate::stdio_server::{types::Message, write_response};
8+
use crate::stdio_server::{previewer, types::Message, write_response};
89

910
pub fn parse_filetypedetect(msg: Message) {
1011
let output = msg.get_string_unsafe("autocmd_filetypedetect");
@@ -30,3 +31,25 @@ pub fn parse_filetypedetect(msg: Message) {
3031

3132
write_response(result);
3233
}
34+
35+
async fn preview_file_impl(msg: Message) -> Result<()> {
36+
let fpath = msg.get_string("fpath")?;
37+
let winwidth = msg.get_u64("preview_width")?;
38+
let winheight = msg.get_u64("preview_height")?;
39+
40+
let (lines, fname) = previewer::preview_file(fpath, winheight as usize, winwidth as usize)?;
41+
42+
let result = json!({"id": msg.id, "result": json!({"lines": lines, "fname": fname})});
43+
44+
write_response(result);
45+
46+
Ok(())
47+
}
48+
49+
pub fn preview_file(msg: Message) {
50+
tokio::spawn(async move {
51+
if let Err(e) = preview_file_impl(msg).await {
52+
log::error!("Error when previewing the file: {}", e);
53+
}
54+
});
55+
}

crates/matcher/src/bonus/recent_files.rs

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,8 @@ pub struct RecentFiles(Vec<String>);
77

88
impl RecentFiles {
99
pub fn calc_bonus(&self, item: &SourceItem, base_score: Score) -> Score {
10-
if let Err(bonus) = self.0.iter().try_for_each(|s| {
11-
if s.contains(&item.raw) {
12-
let bonus = base_score / 3;
13-
Err(bonus)
14-
} else {
15-
Ok(())
16-
}
17-
}) {
18-
bonus
10+
if self.0.iter().any(|s| s.contains(&item.raw)) {
11+
base_score / 3
1912
} else {
2013
0
2114
}

0 commit comments

Comments
 (0)