summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDelapouite <delapouite@gmail.com>2018-02-13 14:35:10 +0100
committerDelapouite <delapouite@gmail.com>2018-02-13 14:35:10 +0100
commitfccfc76e8935a3ce0cd89f6c03d2aae13b8af077 (patch)
tree2a112d31b68827df190d2a8748c67fb65fe190ed /src
parentc939c30135930ebe6dbf963649e81a732e0830af (diff)
Add trim_selections primitive
Diffstat (limited to 'src')
-rw-r--r--src/normal.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/normal.cc b/src/normal.cc
index 1019ef46..0e00a978 100644
--- a/src/normal.cc
+++ b/src/normal.cc
@@ -1618,6 +1618,22 @@ void spaces_to_tabs(Context& context, NormalParams params)
SelectionList{ buffer, std::move(spaces) }.insert("\t"_str, InsertMode::Replace);
}
+void trim_selections(Context& context, NormalParams)
+{
+ auto& buffer = context.buffer();
+ for (auto& sel : context.selections())
+ {
+ auto beg = buffer.iterator_at(sel.min());
+ auto end = buffer.iterator_at(sel.max());
+ while (beg != end and is_blank(*beg))
+ ++beg;
+ while (beg != end and is_blank(*end))
+ --end;
+ sel.min() = beg.coord();
+ sel.max() = end.coord();
+ }
+}
+
SelectionList read_selections_from_register(char reg, Context& context)
{
if (not is_basic_alpha(reg) and reg != '^')
@@ -2166,6 +2182,8 @@ static const HashMap<Key, NormalCmd, MemoryDomain::Undefined, KeymapBackend> key
{ {'@'}, {"convert tabs to spaces in selections", tabs_to_spaces} },
{ {alt('@')}, {"convert spaces to tabs in selections", spaces_to_tabs} },
+ { {'_'}, {"trim selections", trim_selections} },
+
{ {'C'}, {"copy selection on next lines", copy_selections_on_next_lines<Forward>} },
{ {alt('C')}, {"copy selection on previous lines", copy_selections_on_next_lines<Backward>} },