summaryrefslogtreecommitdiff
path: root/gtkex.scm
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@umlautS.umlaeute.mur.at>2018-04-30 21:45:07 +0200
committerIOhannes m zmölnig <zmoelnig@umlautS.umlaeute.mur.at>2018-04-30 21:45:07 +0200
commitbe4b008536f3c28b5f025c8618ac3acb1cd065ad (patch)
treed58751a8750d39e167289b357c96e6da3e5fe67a /gtkex.scm
parent0f71f6cd817b5747663b516d620059680789fbc1 (diff)
New upstream version 18.3
Diffstat (limited to 'gtkex.scm')
-rw-r--r--gtkex.scm103
1 files changed, 51 insertions, 52 deletions
diff --git a/gtkex.scm b/gtkex.scm
index 0bdcf71..2bf3229 100644
--- a/gtkex.scm
+++ b/gtkex.scm
@@ -27,54 +27,57 @@
(repl_buf (gtk_text_buffer_new #f))
(prompt_not_editable #f))
- (define (evaluate-expression expr)
- (let ((pos (GtkTextIter))
- (result (catch #t
- (lambda ()
- (object->string (eval-string expr (rootlet)))) ; default is (curlet)
- (lambda args
- (format #f "~A: ~S" (car args) (apply format #f (cadr args)))))))
- (gtk_text_buffer_get_end_iter repl_buf pos)
- (gtk_text_buffer_insert repl_buf pos "\n" 1)
- (gtk_text_buffer_insert repl_buf pos result (length result))))
-
- (define (get-current-expression)
- (let ((m (gtk_text_buffer_get_insert repl_buf))
- (pos (GtkTextIter))
- (previous (GtkTextIter))
- (next (GtkTextIter))
- (temp (GtkTextIter)))
- (gtk_text_buffer_get_iter_at_mark repl_buf pos m)
- (if (gtk_text_iter_backward_search pos s7-prompt 0 temp previous #f)
- (begin
- (if (not (gtk_text_iter_forward_search pos s7-prompt 0 next temp #f))
- (gtk_text_buffer_get_end_iter repl_buf next)
- (begin
- (gtk_text_iter_backward_search next "\n" 0 pos temp #f)
- (gtk_text_iter_backward_search pos "\n" 0 next temp #f)))
- (gtk_text_buffer_get_text repl_buf previous next #t))
- "")))
-
- (define (repl-key-press w event data)
- (let ((key (gtk_event_keyval event)))
- (if (equal? key return-key)
- (let ((pos (GtkTextIter)))
-
- (evaluate-expression (get-current-expression))
-
- (gtk_text_buffer_get_end_iter repl_buf pos)
- (gtk_text_buffer_insert_with_tags repl_buf pos
- (string-append (string #\newline) s7-prompt)
- (+ 1 (length s7-prompt))
- (list prompt_not_editable))
- (gtk_text_buffer_place_cursor repl_buf pos)
- (gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW repl)
- (gtk_text_buffer_get_insert repl_buf))
- (g_signal_stop_emission (GPOINTER w)
- (g_signal_lookup "key_press_event"
- (G_OBJECT_TYPE (G_OBJECT w)))
- 0)))
- #f))
+ (define repl-key-press
+ (let ((evaluate-expression
+ (lambda (expr)
+ (let ((pos (GtkTextIter))
+ (result (catch #t
+ (lambda ()
+ (object->string (eval-string expr (rootlet)))) ; default is (curlet)
+ (lambda args
+ (format #f "~A: ~S" (car args) (apply format #f (cadr args)))))))
+ (gtk_text_buffer_get_end_iter repl_buf pos)
+ (gtk_text_buffer_insert repl_buf pos "\n" 1)
+ (gtk_text_buffer_insert repl_buf pos result (length result)))))
+
+ (get-current-expression
+ (lambda ()
+ (let ((m (gtk_text_buffer_get_insert repl_buf))
+ (pos (GtkTextIter))
+ (previous (GtkTextIter))
+ (next (GtkTextIter))
+ (temp (GtkTextIter)))
+ (gtk_text_buffer_get_iter_at_mark repl_buf pos m)
+ (if (not (gtk_text_iter_backward_search pos s7-prompt 0 temp previous #f))
+ ""
+ (begin
+ (if (not (gtk_text_iter_forward_search pos s7-prompt 0 next temp #f))
+ (gtk_text_buffer_get_end_iter repl_buf next)
+ (begin
+ (gtk_text_iter_backward_search next "\n" 0 pos temp #f)
+ (gtk_text_iter_backward_search pos "\n" 0 next temp #f)))
+ (gtk_text_buffer_get_text repl_buf previous next #t)))))))
+
+ (lambda (w event data)
+ (let ((key (gtk_event_keyval event)))
+ (if (equal? key return-key)
+ (let ((pos (GtkTextIter)))
+
+ (evaluate-expression (get-current-expression))
+
+ (gtk_text_buffer_get_end_iter repl_buf pos)
+ (gtk_text_buffer_insert_with_tags repl_buf pos
+ (string-append (string #\newline) s7-prompt)
+ (+ 1 (length s7-prompt))
+ (list prompt_not_editable))
+ (gtk_text_buffer_place_cursor repl_buf pos)
+ (gtk_text_view_scroll_mark_onscreen (GTK_TEXT_VIEW repl)
+ (gtk_text_buffer_get_insert repl_buf))
+ (g_signal_stop_emission (GPOINTER w)
+ (g_signal_lookup "key_press_event"
+ (G_OBJECT_TYPE (G_OBJECT w)))
+ 0)))
+ #f))))
(gtk_container_add (GTK_CONTAINER scrolled_window) repl)
(gtk_text_view_set_buffer (GTK_TEXT_VIEW repl) repl_buf)
@@ -83,10 +86,6 @@
(gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW repl) #t)
(gtk_text_view_set_left_margin (GTK_TEXT_VIEW repl) 4)
- (if (provided? 'gtk4)
- (gdk_window_set_event_compression (gtk_widget_get_window repl) #f)
- ;(gtk_widget_set_events repl GDK_ALL_EVENTS_MASK)
- )
(g_signal_connect (G_OBJECT repl) "key_press_event" repl-key-press)
;; TODO in gtk4 I think repl-key-press receives 2 args