From 408f8311dd071924d62ae10d0078e595e9137a9e Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Wed, 7 Nov 2012 08:35:16 +0100 Subject: fixed "-" processing and improved C command, added R command --- main.cpp | 6 +++--- parser.cpp | 16 +++++++++++++--- parser.h | 2 ++ sciteco.h | 2 +- 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); -- cgit v1.2.3