aboutsummaryrefslogtreecommitdiff
path: root/sam.c
diff options
context:
space:
mode:
Diffstat (limited to 'sam.c')
-rw-r--r--sam.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/sam.c b/sam.c
index fdbc4e4..d5b7bf5 100644
--- a/sam.c
+++ b/sam.c
@@ -1005,7 +1005,7 @@ static Filerange address_line_evaluate(Address *addr, File *file, Filerange *ran
return text_range_new(line, text_line_next(txt, line));
}
-static Filerange address_evaluate(Address *addr, File *file, Filerange *range, int sign) {
+static Filerange address_evaluate(Address *addr, File *file, Selection *sel, Filerange *range, int sign) {
Filerange ret = text_range_empty();
do {
@@ -1024,7 +1024,12 @@ static Filerange address_evaluate(Address *addr, File *file, Filerange *range, i
break;
case '\'':
{
- size_t pos = text_mark_get(file->text, file->marks[addr->number]);
+ size_t pos = EPOS;
+ Array *marks = &file->marks[addr->number];
+ size_t idx = sel ? view_selections_number(sel) : 0;
+ SelectionRegion *sr = array_get(marks, idx);
+ if (sr)
+ pos = text_mark_get(file->text, sr->cursor);
ret = text_range_new(pos, pos);
break;
}
@@ -1057,7 +1062,7 @@ static Filerange address_evaluate(Address *addr, File *file, Filerange *range, i
{
Filerange left, right;
if (addr->left)
- left = address_evaluate(addr->left, file, range, 0);
+ left = address_evaluate(addr->left, file, sel, range, 0);
else
left = text_range_new(0, 0);
@@ -1065,7 +1070,7 @@ static Filerange address_evaluate(Address *addr, File *file, Filerange *range, i
range = &left;
if (addr->right) {
- right = address_evaluate(addr->right, file, range, 0);
+ right = address_evaluate(addr->right, file, sel, range, 0);
} else {
size_t size = text_size(file->text);
right = text_range_new(size, size);
@@ -1093,7 +1098,7 @@ static bool count_evaluate(Command *cmd) {
static bool sam_execute(Vis *vis, Win *win, Command *cmd, Selection *sel, Filerange *range) {
bool ret = true;
if (cmd->address && win)
- *range = address_evaluate(cmd->address, win->file, range, 0);
+ *range = address_evaluate(cmd->address, win->file, sel, range, 0);
cmd->iteration++;
switch (cmd->argv[0][0]) {