aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--main.cpp6
-rw-r--r--parser.cpp16
-rw-r--r--parser.h2
-rw-r--r--sciteco.h2
4 files changed, 19 insertions, 7 deletions
diff --git a/main.cpp b/main.cpp
index 452b9a8..f17ef1b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -40,11 +40,11 @@ message_display(GtkMessageType type, const gchar *fmt, ...)
gtk_label_set_text(GTK_LABEL(message_widget), buf);
}
-void
+sptr_t
editor_msg(unsigned int iMessage, uptr_t wParam, sptr_t lParam)
{
- scintilla_send_message(SCINTILLA(editor_widget),
- iMessage, wParam, lParam);
+ return scintilla_send_message(SCINTILLA(editor_widget),
+ iMessage, wParam, lParam);
}
static gboolean
diff --git a/parser.cpp b/parser.cpp
index 6c92bc2..7978962 100644
--- a/parser.cpp
+++ b/parser.cpp
@@ -73,6 +73,14 @@ StateStart::StateStart() : State()
transitions['\v'] = this;
}
+void
+StateStart::move(gint64 n)
+{
+ sptr_t pos = editor_msg(SCI_GETCURRENTPOS);
+ editor_msg(SCI_GOTOPOS, pos + n);
+ undo.push_msg(SCI_GOTOPOS, pos);
+}
+
State *
StateStart::custom(gchar chr)
{
@@ -103,7 +111,7 @@ StateStart::custom(gchar chr)
expressions.push_calc(Expressions::OP_ADD);
break;
case '-':
- if (!expressions.args() &&
+ if (!expressions.args() ||
expressions.peek_num() == G_MAXINT64)
expressions.set_num_sign(-expressions.num_sign);
else
@@ -133,8 +141,10 @@ StateStart::custom(gchar chr)
* commands
*/
case 'C':
- editor_msg(SCI_CHARRIGHT);
- undo.push_msg(SCI_CHARLEFT);
+ move(expressions.pop_num_calc());
+ break;
+ case 'R':
+ move(-expressions.pop_num_calc());
break;
case '=':
message_display(GTK_MESSAGE_OTHER, "%" G_GINT64_FORMAT,
diff --git a/parser.h b/parser.h
index 11a6d56..9cef0f6 100644
--- a/parser.h
+++ b/parser.h
@@ -39,6 +39,8 @@ class StateStart : public State {
public:
StateStart();
+ void move(gint64 n);
+
State *custom(gchar chr);
};
diff --git a/sciteco.h b/sciteco.h
index 3d5b360..49963c4 100644
--- a/sciteco.h
+++ b/sciteco.h
@@ -18,7 +18,7 @@ void message_display(GtkMessageType type, const gchar *fmt, ...);
void cmdline_keypress(gchar key);
void cmdline_display(const gchar *cmdline);
-void editor_msg(unsigned int iMessage, uptr_t wParam = 0, sptr_t lParam = 0);
+sptr_t editor_msg(unsigned int iMessage, uptr_t wParam = 0, sptr_t lParam = 0);
gboolean macro_execute(const gchar *macro);