From b112608c8da31a05c37e4500de55caea09b1c7cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mogens=20Br=C3=B8dsgaard=20Lund?= Date: Sun, 6 Jun 2021 16:18:44 +0200 Subject: [PATCH] Display shorter paths to avoid lines breaking --- src/liq/editor.cljc | 12 +++++++++--- src/liq/modes/buffer_chooser_mode.cljc | 14 ++++++++------ src/liq/util.cljc | 18 ++++++++++++++++++ 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/liq/editor.cljc b/src/liq/editor.cljc index c2b4dfe..194a0da 100644 --- a/src/liq/editor.cljc +++ b/src/liq/editor.cljc @@ -216,17 +216,23 @@ ([nameid] (when (@state ::output-handler) (apply-to-buffer nameid buffer/update-tow) - (let [buf (get-buffer nameid)] + (let [buf (get-buffer nameid) + cols (((-> @state ::output-handler :dimensions)) :cols) + namepart (util/shorten-path (or (buf ::buffer/filename) (buf ::buffer/name)) (max 10 (- cols 36))) + spaces (format (str "%-" (max 1 (- cols (count namepart) 36)) "s") "") + pct (int (/ (* 100.0 (-> buf ::buffer/cursor ::buffer/row)) (-> buf ::buffer/lines count)))] (apply-to-buffer "*status-line*" #(-> % buffer/clear (buffer/insert-string - (str (or (buf ::buffer/filename) (buf ::buffer/name)) " " + (str namepart ; (or (buf ::buffer/filename) (buf ::buffer/name)) " " (if (buffer/dirty? buf) " [+] " " ") (cond (= (buf ::buffer/mode) :insert) "-- INSERT -- " (= (buf ::buffer/mode) :visual) "-- VISUAL -- " true " ") - (-> buf ::buffer/cursor ::buffer/row) "," (-> buf ::buffer/cursor ::buffer/col))) + spaces + (-> buf ::buffer/cursor ::buffer/row) "," (-> buf ::buffer/cursor ::buffer/col) + " " pct "%")) buffer/beginning-of-buffer buffer/update-tow)) ;((@state ::output-handler) (get-buffer "*status-line*")) diff --git a/src/liq/modes/buffer_chooser_mode.cljc b/src/liq/modes/buffer_chooser_mode.cljc index 8f0f866..9890531 100644 --- a/src/liq/modes/buffer_chooser_mode.cljc +++ b/src/liq/modes/buffer_chooser_mode.cljc @@ -7,12 +7,14 @@ (defn load-content [buf] - (-> buf - buffer/clear - (buffer/insert-string (str/join "\n" - (map #(str (% ::buffer/name) (if (buffer/dirty? %) " [+]" " ")) - (rest (editor/all-buffers))))) - buffer/beginning-of-buffer)) + (let [cols (((-> @editor/state ::editor/output-handler :dimensions)) :cols)] + (-> buf + buffer/clear + (buffer/insert-string (str/join "\n" + (map #(str (util/shorten-path (% ::buffer/name) (max 10 (- cols 8))) + (if (buffer/dirty? %) " [+]" " ")) + (rest (editor/all-buffers))))) + buffer/beginning-of-buffer))) (defn run [] diff --git a/src/liq/util.cljc b/src/liq/util.cljc index 9112d8e..7bb6bc8 100644 --- a/src/liq/util.cljc +++ b/src/liq/util.cljc @@ -200,3 +200,21 @@ (str/join "\n" filtered) "\n" (str/join "\n" stacklines)))) +(defn shorten-path + "Display shorter version of path" + [path width] + (if (<= (count path) width) + path + (let [slashes (count (re-seq #"[/\\]" path)) + p1 (loop [n 0] + (let [p (str/replace-first + path + (re-pattern (str "(?<=[^/\\\\][/\\\\])([^/\\\\]*[/\\\\]){" n "}[^/\\\\]*")) + "...")] + (if (or (<= (count p) width) (>= n (- slashes 3))) + p + (recur (inc n))))) + p2 (str/replace-first path #".*(?=[/\\])" "...")] + (if (<= (count p1) width) + p1 + p2))))