dunlin

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

buffer.fnl (2552B)


      1 (local { : Gtk : Gdk : WebKit2 : cairo } (require :lgi))
      2 (local { : view } (require :fennel))
      3 (import-macros {: trace} :macros)
      4 
      5 (fn new-buffer [name]
      6   (var property-change-listener nil)
      7   (let [props {}
      8         widget (WebKit2.WebView {
      9                                  ;; :on_decide_policy
     10                                  ;; (fn [self decision dtype]
     11                                  ;;   (if (and
     12                                  ;;        (WebKit2.ResponsePolicyDecision:is_type_of decision)
     13                                  ;;        (not (decision:is_mime_type_supported)))
     14                                  ;;       (do
     15                                  ;;         (download decision.request.uri decision.response.http_headers)
     16                                  ;;         (decision:ignore)
     17                                  ;;         true)
     18                                  ;;       false))
     19                                  :on_notify
     20                                  (fn [self pspec]
     21                                     (when (not (= pspec.name :parent))
     22                                       (let [val (. self pspec.name)]
     23                                         (tset props pspec.name val)
     24                                         (when property-change-listener
     25                                           (property-change-listener
     26                                            pspec.name val)))
     27                                         ))
     28                                  })]
     29     (let [settings (widget:get_settings)]
     30       ;; (print :font (settings:get_default_font_family)
     31       ;;        :size (settings:get_default_font_size))
     32       (settings:set_enable_write_console_messages_to_stdout true)
     33       (widget:set_settings settings))
     34 
     35     {:webview widget
     36      :name name
     37      :subscribe-property-changes
     38      (fn [self cb]
     39        (set property-change-listener cb))
     40      :location #(widget:get_uri)
     41      :visit (fn [_ u] (widget:load_uri u))
     42      :back #(widget:go_back)
     43      :properties props}))
     44 
     45 (let [buffers {}]
     46   {
     47    :new (fn [name]
     48           (let [b (new-buffer name)]
     49             (tset buffers name b)
     50             b))
     51    :find (fn [term] (. buffers term))
     52    ;; will rename this to "find" once we've got rid of the
     53    ;; only remaining call to the existing Buffer.find
     54    :match (fn [s] (icollect [name buffer (pairs buffers)]
     55                     (if (string.find name s)
     56                         (values buffer))))
     57    :next (fn [buffer]
     58            (let [n (or (next buffers buffer.name) (next buffers))]
     59              (. buffers n)))
     60 
     61    })