aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader.cpp
diff options
context:
space:
mode:
authorGravatar Julian Aron Prenner <julian@linux4you.it>2014-01-15 11:39:19 +0100
committerGravatar Julian Aron Prenner <julian@linux4you.it>2014-01-15 11:39:19 +0100
commitdede320630397e66391a7c3fbd547a76fb9a3b88 (patch)
treea7f3e818451f2d60e50576df217b4eb1febe99f3 /reader.cpp
parent874d3aca45ccb14a73be00f2e25293d1ba0f2f9d (diff)
Rename 'new-mode' to 'sets-mode', prepare for selection support.
Diffstat (limited to 'reader.cpp')
-rw-r--r--reader.cpp41
1 files changed, 33 insertions, 8 deletions
diff --git a/reader.cpp b/reader.cpp
index 801be1ae..37f35fac 100644
--- a/reader.cpp
+++ b/reader.cpp
@@ -255,6 +255,15 @@ public:
/** The current position of the cursor in buff. */
size_t buff_pos;
+ /** Indicates whether a selection is currently active */
+ bool sel_active;
+
+ /** The start position of the current selection, if one. */
+ size_t sel_start_pos;
+
+ /** The stop position of the current selection, if one. */
+ size_t sel_stop_pos;
+
/** Name of the current application */
wcstring app_name;
@@ -339,6 +348,9 @@ public:
token_history_pos(0),
search_pos(0),
buff_pos(0),
+ sel_active(0),
+ sel_start_pos(0),
+ sel_stop_pos(0),
complete_func(0),
highlight_function(0),
test_func(0),
@@ -432,6 +444,16 @@ static void term_donate()
}
+
+/**
+ Update the cursor position
+*/
+static void update_buff_pos(int buff_pos)
+{
+ data->buff_pos = buff_pos;
+}
+
+
/**
Grab control of terminal
*/
@@ -792,7 +814,7 @@ bool reader_data_t::expand_abbreviation_as_necessary(size_t cursor_backtrack)
size_t new_buff_pos = this->buff_pos + new_cmdline.size() - this->command_line.size();
this->command_line.swap(new_cmdline);
- data->buff_pos = new_buff_pos;
+ update_buff_pos(new_buff_pos);
data->command_line_changed();
result = true;
}
@@ -1566,7 +1588,7 @@ static void accept_autosuggestion(bool full)
data->command_line.push_back(wc);
}
}
- data->buff_pos = data->command_line.size();
+ update_buff_pos(data->command_line.size());
data->command_line_changed();
reader_super_highlight_me_plenty(data->buff_pos);
reader_repaint();
@@ -2153,7 +2175,7 @@ static void set_command_line_and_position(const wcstring &new_str, size_t pos)
{
data->command_line = new_str;
data->command_line_changed();
- data->buff_pos = pos;
+ update_buff_pos(pos);
reader_super_highlight_me_plenty(data->buff_pos);
reader_repaint();
}
@@ -2402,7 +2424,7 @@ static void move_word(bool move_right, bool erase, enum move_word_style_t style,
}
else
{
- data->buff_pos = buff_pos;
+ update_buff_pos(buff_pos);
reader_repaint();
}
@@ -2434,7 +2456,7 @@ void reader_set_buffer(const wcstring &b, size_t pos)
if (pos > command_line_len)
pos = command_line_len;
- data->buff_pos = pos;
+ update_buff_pos(pos);
data->search_mode = NO_SEARCH;
data->search_buff.clear();
@@ -3143,7 +3165,7 @@ const wchar_t *reader_readline(void)
case R_BEGINNING_OF_BUFFER:
{
- data->buff_pos = 0;
+ update_buff_pos(0);
reader_repaint();
break;
@@ -3154,6 +3176,8 @@ const wchar_t *reader_readline(void)
{
data->buff_pos = data->command_length();
+ update_buff_pos(data->command_length());
+
reader_repaint();
break;
}
@@ -3239,7 +3263,7 @@ const wchar_t *reader_readline(void)
/* Move the cursor to the end */
if (data->buff_pos != end_of_token_offset)
{
- data->buff_pos = end_of_token_offset;
+ update_buff_pos(end_of_token_offset);
reader_repaint();
}
@@ -3704,7 +3728,8 @@ const wchar_t *reader_readline(void)
line_offset_old = data->buff_pos - parse_util_get_offset_from_line(data->command_line, line_old);
total_offset_new = parse_util_get_offset(data->command_line, line_new, line_offset_old - 4*(indent_new-indent_old));
- data->buff_pos = total_offset_new;
+
+ update_buff_pos(total_offset_new);
reader_repaint();
}