diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1e45777
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.lein-deps-sum
+classes/
+lib/
diff --git a/project.clj b/project.clj
index de0ccc6..2ffc9a7 100644
--- a/project.clj
+++ b/project.clj
@@ -1,12 +1,12 @@
-(defproject clooj "0.4.4"
+(defproject clooj "0.5"
:description "clooj, a small IDE for clojure"
:url "https://github.com/arthuredelstein/clooj"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:main clooj.core
- :dependencies [[org.clojure/clojure "1.5.0"]
+ :dependencies [[org.clojure/clojure "1.5.1"]
[clj-inspector "0.0.12"]
[slamhound "1.2.0"]
[com.cemerick/pomegranate "0.0.11"]
- [com.fifesoft/rsyntaxtextarea "2.0.2"]
- [org.clojure/tools.nrepl "0.2.2"]])
+ [com.fifesoft/rsyntaxtextarea "2.5.0"]
+ [org.clojure/tools.nrepl "0.2.3"]])
diff --git a/src/clooj/core.clj b/src/clooj/core.clj
index 6df32d7..81f9a45 100644
--- a/src/clooj/core.clj
+++ b/src/clooj/core.clj
@@ -7,7 +7,8 @@
(:import (javax.swing AbstractListModel BorderFactory JDialog
JFrame JLabel JList JMenuBar JOptionPane
JPanel JScrollPane JSplitPane JTextArea
- JTextField JTree KeyStroke SpringLayout JTextPane
+ JTextField JTree KeyStroke SpringLayout
+ JTextPane JCheckBox JButton
ListSelectionModel
UIManager)
(javax.swing.event TreeSelectionListener
@@ -15,8 +16,9 @@
(javax.swing.tree DefaultMutableTreeNode DefaultTreeModel
TreePath TreeSelectionModel)
(java.awt Insets Rectangle Window)
- (java.awt.event AWTEventListener FocusAdapter
- MouseAdapter WindowAdapter KeyAdapter)
+ (java.awt.event AWTEventListener FocusAdapter
+ MouseAdapter WindowAdapter
+ ActionListener KeyAdapter)
(java.awt AWTEvent Color Font GridLayout Toolkit)
(java.net URL)
(java.util.concurrent LinkedBlockingQueue)
@@ -34,10 +36,10 @@
[clooj.navigate :as navigate]
[clooj.project :as project]
[clooj.indent :as indent]
- [clooj.style :as style]
[clooj.brackets :as brackets]
[clooj.highlighting :as highlighting]
- [clooj.search :as search])
+ [clooj.search :as search]
+ [clooj.settings :as settings])
(:gen-class
:methods [^{:static true} [show [] void]]))
@@ -72,6 +74,7 @@
(.setBracketMatchingEnabled false)
(.setAutoIndentEnabled false)
(.setAntiAliasingEnabled true)
+ (.setLineWrap wrap)
))
(def get-clooj-version
@@ -84,46 +87,74 @@
URL. slurp read-string (nth 2))
(catch Exception _ nil)))))
-;; font
-
-(defonce current-font (atom nil))
-
-(defn font [name size]
- (Font. name Font/PLAIN size))
-
-(def default-font
- (cond (utils/is-mac) ["Monaco" 11]
- (utils/is-win) ["Courier New" 12]
- :else ["Monospaced" 12]))
+;; settings
+
+(def default-settings
+ (merge
+ (zipmap [:font-name :font-size]
+ (cond (utils/is-mac) ["Monaco" 11]
+ (utils/is-win) ["Courier New" 12]
+ :else ["Monospaced" 12]))
+ {:line-wrap-doc false
+ :line-wrap-repl-out false
+ :line-wrap-repl-in false
+ :show-only-monospaced-fonts true
+ }))
+
+(defn load-settings []
+ (atom
+ (merge default-settings
+ (utils/read-value-from-prefs utils/clooj-prefs "settings"))))
+
+(defn save-settings [settings]
+ (utils/write-value-to-prefs
+ utils/clooj-prefs
+ "settings"
+ settings))
+
+(defn apply-settings [app settings]
+
+ (defn set-line-wrapping [text-area mode]
+ (.setLineWrap text-area mode))
-(defn set-font
- ([app font-name size]
- (let [f (font font-name size)]
+ (defn set-font
+ [app font-name size]
+ (let [f (Font. font-name Font/PLAIN size)]
(utils/awt-event
- (utils/write-value-to-prefs utils/clooj-prefs "app-font"
- [font-name size])
(dorun (map #(.setFont (app %) f)
[:doc-text-area :repl-in-text-area
:repl-out-text-area :arglist-label
:search-text-area :help-text-area
- :completion-list]))
- (reset! current-font [font-name size]))))
- ([app font-name]
- (let [size (second @current-font)]
- (set-font app font-name size))))
-
-(defn load-font [app]
- (apply set-font app (or (utils/read-value-from-prefs utils/clooj-prefs "app-font")
- default-font)))
+ :completion-list])))))
+
+ (set-line-wrapping
+ (:doc-text-area app)
+ (:line-wrap-doc settings))
+ (set-line-wrapping
+ (:repl-in-text-area app)
+ (:line-wrap-repl-in settings))
+ (set-line-wrapping
+ (:repl-out-text-area app)
+ (:line-wrap-repl-out settings))
+ (set-font app
+ (:font-name settings)
+ (:font-size settings))
+ (reset! (:settings app) settings)
+ (save-settings settings))
+
+;; font
+
(defn resize-font [app fun]
- (let [[name size] @current-font]
- (set-font app name (fun size))))
+ (apply-settings app (update-in @(:settings app)
+ [:font-size]
+ fun)))
(defn grow-font [app] (resize-font app inc))
(defn shrink-font [app] (resize-font app dec))
+
;; caret finding
(def highlight-agent (agent nil))
@@ -285,11 +316,18 @@
(defn make-scroll-pane [text-area]
(RTextScrollPane. text-area))
-(defn setup-search-text-area [app]
+(defn setup-search-elements [app]
+ (.setVisible (:search-match-case-checkbox app) false)
+ (.setVisible (:search-regex-checkbox app) false)
+ (doto (:search-close-button app)
+ (.setVisible false)
+ (.setBorder nil)
+ (.addActionListener
+ (reify ActionListener
+ (actionPerformed [_ _] (search/stop-find app)))))
(let [sta (doto (app :search-text-area)
(.setVisible false)
- (.setBorder (BorderFactory/createLineBorder Color/DARK_GRAY))
- (.addFocusListener (proxy [FocusAdapter] [] (focusLost [_] (search/stop-find app)))))]
+ (.setBorder (BorderFactory/createLineBorder Color/DARK_GRAY)))]
(utils/add-text-change-listener sta #(search/update-find-highlight % app false))
(utils/attach-action-keys sta ["ENTER" #(search/highlight-step app false)]
["shift ENTER" #(search/highlight-step app true)]
@@ -300,11 +338,12 @@
(.setVisible true)
))
-(defn exit-if-closed [^java.awt.Window f]
+(defn exit-if-closed [^java.awt.Window f app]
(when-not @embedded
(.addWindowListener f
(proxy [WindowAdapter] []
(windowClosing [_]
+ (save-caret-position app)
(System/exit 0))))))
(def no-project-txt
@@ -326,6 +365,19 @@
(select menu File > New...)
2. edit an existing file by selecting one at left.