feat: add copy_file_name command
This commit is contained in:
parent
b958e8989d
commit
ebfb9f7184
3 changed files with 74 additions and 0 deletions
|
@ -66,6 +66,7 @@
|
||||||
["ctrl+c l g r", "references"],
|
["ctrl+c l g r", "references"],
|
||||||
["ctrl+c l h h", "hover"],
|
["ctrl+c l h h", "hover"],
|
||||||
["ctrl+c l r r", "rename_symbol"],
|
["ctrl+c l r r", "rename_symbol"],
|
||||||
|
["ctrl+c f", "copy_file_name"],
|
||||||
|
|
||||||
["super+l = =", "format"],
|
["super+l = =", "format"],
|
||||||
["super+l = r", "format"],
|
["super+l = r", "format"],
|
||||||
|
|
|
@ -54,6 +54,8 @@
|
||||||
["ctrl+t", "move_to_char", "move_or_select_to_char_right"],
|
["ctrl+t", "move_to_char", "move_or_select_to_char_right"],
|
||||||
["ctrl+x", "cut"],
|
["ctrl+x", "cut"],
|
||||||
["ctrl+c", "copy"],
|
["ctrl+c", "copy"],
|
||||||
|
["alt+C", "copy_file_name"],
|
||||||
|
["ctrl+k alt+c", "copy_file_name", "file_name_only"],
|
||||||
["ctrl+v", "system_paste"],
|
["ctrl+v", "system_paste"],
|
||||||
["ctrl+u", "pop_cursor"],
|
["ctrl+u", "pop_cursor"],
|
||||||
["ctrl+k m", "change_file_type"],
|
["ctrl+k m", "change_file_type"],
|
||||||
|
|
|
@ -2690,6 +2690,77 @@ pub const Editor = struct {
|
||||||
}
|
}
|
||||||
pub const copy_meta: Meta = .{ .description = "Copy selection to clipboard" };
|
pub const copy_meta: Meta = .{ .description = "Copy selection to clipboard" };
|
||||||
|
|
||||||
|
fn copy_cursel_file_name(
|
||||||
|
self: *const Self,
|
||||||
|
writer: anytype,
|
||||||
|
) Result {
|
||||||
|
if (self.file_path) |file_path|
|
||||||
|
try writer.writeAll(file_path)
|
||||||
|
else
|
||||||
|
try writer.writeByte('*');
|
||||||
|
}
|
||||||
|
|
||||||
|
fn copy_cursel_file_name_and_location(
|
||||||
|
self: *const Self,
|
||||||
|
cursel: *const CurSel,
|
||||||
|
writer: anytype,
|
||||||
|
) Result {
|
||||||
|
try self.copy_cursel_file_name(writer);
|
||||||
|
if (cursel.selection) |sel_| {
|
||||||
|
var sel = sel_;
|
||||||
|
sel.normalize();
|
||||||
|
if (sel.begin.row == sel.end.row)
|
||||||
|
try writer.print(":{d}:{d}:{d}", .{
|
||||||
|
sel.begin.row + 1,
|
||||||
|
sel.begin.col + 1,
|
||||||
|
sel.end.col + 1,
|
||||||
|
})
|
||||||
|
else
|
||||||
|
try writer.print(":{d}:{d}:{d}:{d}", .{
|
||||||
|
sel.begin.row + 1,
|
||||||
|
sel.begin.col + 1,
|
||||||
|
sel.end.row + 1,
|
||||||
|
sel.end.col + 1,
|
||||||
|
});
|
||||||
|
} else if (cursel.cursor.col != 0)
|
||||||
|
try writer.print(":{d}:{d}", .{ cursel.cursor.row + 1, cursel.cursor.col + 1 })
|
||||||
|
else
|
||||||
|
try writer.print(":{d}", .{cursel.cursor.row + 1});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn copy_file_name(self: *Self, ctx: Context) Result {
|
||||||
|
var mode: enum { all, primary_only, file_name_only } = .all;
|
||||||
|
_ = ctx.args.match(.{tp.extract(&mode)}) catch false;
|
||||||
|
var text: std.ArrayListUnmanaged(u8) = .empty;
|
||||||
|
const writer = text.writer(self.allocator);
|
||||||
|
var first = true;
|
||||||
|
switch (mode) {
|
||||||
|
.file_name_only => try self.copy_cursel_file_name(writer),
|
||||||
|
.primary_only => try self.copy_cursel_file_name_and_location(
|
||||||
|
self.get_primary(),
|
||||||
|
writer,
|
||||||
|
),
|
||||||
|
else => for (self.cursels.items) |*cursel_| if (cursel_.*) |*cursel| {
|
||||||
|
if (first) first = false else try writer.writeByte('\n');
|
||||||
|
try self.copy_cursel_file_name_and_location(cursel, writer);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if (text.items.len > 0) {
|
||||||
|
if (text.items.len > 100)
|
||||||
|
self.logger.print("copy:{s}...", .{
|
||||||
|
std.fmt.fmtSliceEscapeLower(text.items[0..100]),
|
||||||
|
})
|
||||||
|
else
|
||||||
|
self.logger.print("copy:{s}", .{
|
||||||
|
std.fmt.fmtSliceEscapeLower(text.items),
|
||||||
|
});
|
||||||
|
self.set_clipboard(try text.toOwnedSlice(self.allocator));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub const copy_file_name_meta: Meta = .{
|
||||||
|
.description = "Copy file name and location to clipboard",
|
||||||
|
};
|
||||||
|
|
||||||
pub fn copy_internal_vim(self: *Self, _: Context) Result {
|
pub fn copy_internal_vim(self: *Self, _: Context) Result {
|
||||||
const root = self.buf_root() catch return;
|
const root = self.buf_root() catch return;
|
||||||
var first = true;
|
var first = true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue