clojure-lanterna / src / lanterna / common.clj

(ns lanterna.common
  (:import com.googlecode.lanterna.input.Key)
  (:require [lanterna.constants :as c]))


(defn parse-key [^Key k]
  (when k
    (let [kind (c/key-codes (.getKind k))]
      (if (= kind :normal)
        (.getCharacter k)
        kind))))

(defn block-on
  "Repeatedly apply func to args until a non-nil value is returned.

  Options can include any of the following keys:

  :interval - sets the interval between function applications (default 50)
  :timeout  - sets the maximum amount of time blocking will occur before
              returning nil

  "
  ([func args] (block-on func args {}))
  ([func args {:as opts
               :keys [interval timeout]
               :or {interval 50
                    timeout Double/POSITIVE_INFINITY}}]
     (loop [timeout timeout]
       (when (> timeout 0)
         (let [val (apply func args)]
           (if (nil? val)
             (do (Thread/sleep interval)
                 (recur (- timeout interval)))
             val))))))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.