ddu.vim
ddu.vim copied to clipboard
ddu screenshots
I want to add the screenshots link in README. If you have good screenshots for ddu.vim, can you add it in this issue?
ddu + colorscheme source
Thank you!
with ddu-source-buffer
with mr.vim + ddu-source-mr
ddu-source-rg with 'autoAction': {'name': 'preview'}
ui-ff's uiParams.
ddu-vim-ui-select, which replaces Neovim's vim.ui.select
with ddu.
It is good.
Note: I think ddu-ui
topic should be added instead of ddu-source
.
Well, it uses other ddu ui instead?
Yes, it does not implement new ui. It's intended to use with ui-ff.
Oh, OK.
ddu-ui-ff ddu-source-lsp Code Action with Preview
Built a ddu setup with several UIs and sources.
https://github.com/Shougo/ddu.vim/assets/74786563/f56692f8-ad1b-4fa3-877a-8fdbe2ef3ce7
ddu-ui-filer ddu-source-file ddu-ui-ff ddu-source-rg ddu-source-git_status
ddu-filter-converter_hl_dir ddu-filter-converter_devicon
sample code
type DduUiSize = {
winRow: number;
winCol: number;
winWidth: number;
winHeight: number;
previewFloating: boolean;
previewSplit: "vertical" | "horizontal";
previewRow: number;
previewCol: number;
previewHeight: number;
previewWidth: number;
};
async function uiSize(
args: ConfigArguments,
splitRaitio: number,
previewSplit: "horizontal" | "vertical",
): Promise<DduUiSize> {
const denops = args.denops;
const FRAME_SIZE = 2;
const columns = await opt.columns.get(denops);
const lines = await opt.lines.get(denops);
const winRow = -1;
const winCol = 0;
let winHeight!: number;
let winWidth!: number;
let previewRow!: number;
let previewCol!: number;
let previewHeight!: number;
let previewWidth!: number;
if (previewSplit === "horizontal") {
winHeight = Math.floor(lines / splitRaitio);
winWidth = columns - FRAME_SIZE - 1;
previewRow = lines - FRAME_SIZE;
previewCol = 0;
previewHeight = (lines - winHeight) - (FRAME_SIZE * 3);
previewWidth = winWidth;
} else if (previewSplit === "vertical") {
winHeight = lines - FRAME_SIZE - 1;
winWidth = Math.floor(columns / splitRaitio);
previewRow = 0;
previewCol = columns - FRAME_SIZE;
previewHeight = winHeight;
previewWidth = columns - winWidth - (FRAME_SIZE * 3);
}
return {
winRow: winRow,
winCol: winCol,
winWidth: winWidth,
winHeight: winHeight,
previewFloating: true,
previewSplit: previewSplit,
previewRow: previewRow,
previewCol: previewCol,
previewHeight: previewHeight,
previewWidth: previewWidth,
};
}
// examples
export class Config extends BaseConfig {
override async config(args: ConfigArguments): Promise<void> {
args.contextBuilder.patchGlobal({
uiParams: {
filer: {
...{
split: "floating",
splitDirection: "topleft",
floatingBorder: "single",
sort: "filename",
sortTreesFirst: true,
displayRoot: false,
previewFloatingBorder: "single",
previewWindowOptions: [
["&signcolumn", "no"],
["&foldcolumn", 0],
["&foldenable", 0],
["&number", 0],
["&relativenumber", 0],
["&wrap", 0],
],
},
...await uiSize(args, 5, "vertical"),
},
},
})
args.contextBuilder.patchLocal("ripgrep-ff", {
ui: "ff",
uiParams: {
ff: {
...{
startAutoAction: true,
autoAction: {
delay: 0,
name: "preview",
},
autoResize: false,
startFilter: true,
filterFloatingPosition: "top",
},
...await uiSize(args, 3, "horizontal"),
}
},
sources: [
{
name: "rg",
options: {
matchers: [],
volatile: true,
},
},
],
});
args.contextBuilder.patchLocal("git_status-ff", {
ui: "ff",
uiParams: {
ff: {
...{
startAutoAction: true,
autoAction: {
delay: 0,
name: "preview",
},
autoResize: false,
filterFloatingPosition: "bottom",
},
...await uiSize(args, 2, "vertical"),
},
},
sources: [
{
name: "git_status",
},
],
});
return Promise.resolve();
}
}