diff options
| author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-07 08:35:16 +0100 |
|---|---|---|
| committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-11-07 08:35:16 +0100 |
| commit | 408f8311dd071924d62ae10d0078e595e9137a9e (patch) | |
| tree | 05c32509a20314aa12043365d6bdb7a53f3df05b | |
| parent | 8a7d756c01d63761226725288caba0a1563389b0 (diff) | |
fixed "-" processing and improved C command, added R command
| -rw-r--r-- | main.cpp | 6 | ||||
| -rw-r--r-- | parser.cpp | 16 | ||||
| -rw-r--r-- | parser.h | 2 | ||||
| -rw-r--r-- | sciteco.h | 2 |
4 files changed, 19 insertions, 7 deletions
@@ -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 @@ -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, @@ -39,6 +39,8 @@ class StateStart : public State { public: StateStart(); + void move(gint64 n); + State *custom(gchar chr); }; @@ -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); |
