diff --git a/TODO.FACTOR.txt b/TODO.FACTOR.txt
index 147f5d4f25..b5817299a7 100644
--- a/TODO.FACTOR.txt
+++ b/TODO.FACTOR.txt
@@ -1,7 +1,6 @@
- auto-invoke code gc
- fix alien-callback/SEH bug on win32
- list mouse gestures
-- search gadget should use list
- maybe simplify list into displaying list a sequence of strings
- the mouse button overload sucks, use popup menus instead
- nested presentation mouse over is not right
@@ -12,10 +11,8 @@
- better help result ranking
- minibuffer should show a title
- browser: toolbar is missing
-- new search gadget:
- - field does not move caret properly
- - use it instead of the old search gadget
- - listener: 'edit a file' feature
+- listener: 'edit a file' feature
+- viewport sizing issue
+ ui:
diff --git a/library/help/markup.factor b/library/help/markup.factor
index 69ded476db..3c0d5793dc 100644
--- a/library/help/markup.factor
+++ b/library/help/markup.factor
@@ -135,11 +135,14 @@ M: f print-element drop ;
! Some links
: >link ( obj -- obj ) dup link? [ ] unless ;
-: $link ( element -- )
- first link-style [
+: ($link) ( article -- )
+ link-style [
dup article-title swap >link write-object
] with-style ;
+: $link ( element -- )
+ first ($link) ;
+
: $vocab-link ( element -- )
first link-style [
dup write-object
diff --git a/library/syntax/parser.factor b/library/syntax/parser.factor
index 2342963736..d8b09309d2 100644
--- a/library/syntax/parser.factor
+++ b/library/syntax/parser.factor
@@ -107,7 +107,7 @@ TUPLE: bad-escape ;
global [
{
"scratchpad" "syntax" "arrays" "compiler" "definitions"
- "errors" "generic" "hashtables" "help" "inference"
+ "errors" "generic" "hashtables" "inference"
"io" "kernel" "listener" "math"
"memory" "modules" "namespaces" "parser" "prettyprint"
"sequences" "shells" "strings" "styles" "test"
diff --git a/library/ui/load.factor b/library/ui/load.factor
index f9c3472a43..aa4e9b8b62 100644
--- a/library/ui/load.factor
+++ b/library/ui/load.factor
@@ -33,15 +33,14 @@ PROVIDE: library/ui {
"text/elements.factor"
"text/editor.factor"
"text/commands.factor"
- "text/field.factor"
"text/interactor.factor"
"gadgets/presentations.factor"
"ui.factor"
"tools/tools.factor"
+ "tools/search.factor"
"tools/messages.factor"
"tools/listener.factor"
"tools/walker.factor"
- "tools/search.factor"
"tools/browser.factor"
"tools/help.factor"
"tools/dataflow.factor"
@@ -52,7 +51,6 @@ PROVIDE: library/ui {
"test/models.factor"
"test/document.factor"
"test/rectangles.factor"
- "test/fields.factor"
"test/commands.factor"
"test/panes.factor"
"test/editor.factor"
diff --git a/library/ui/test/fields.factor b/library/ui/test/fields.factor
deleted file mode 100644
index 85bb43ef03..0000000000
--- a/library/ui/test/fields.factor
+++ /dev/null
@@ -1,7 +0,0 @@
-IN: temporary
-USING: gadgets-text kernel models namespaces test ;
-
-[ ] [ f dup "model" set "field" set ] unit-test
-[ ] [ "Hello world" "field" get set-editor-text ] unit-test
-[ "Hello world" ] [ "field" get field-commit ] unit-test
-[ "Hello world" ] [ "model" get model-value ] unit-test
diff --git a/library/ui/text/editor.factor b/library/ui/text/editor.factor
index f48d30644a..a7bbcd1609 100644
--- a/library/ui/text/editor.factor
+++ b/library/ui/text/editor.factor
@@ -123,7 +123,8 @@ M: editor model-changed
] when drop ;
M: loc-monitor model-changed
- loc-monitor-editor control-self scroll>caret ;
+ loc-monitor-editor control-self
+ dup relayout-1 scroll>caret ;
: draw-caret ( -- )
editor get editor-focused? [
diff --git a/library/ui/text/field.factor b/library/ui/text/field.factor
deleted file mode 100644
index 43fa1a057a..0000000000
--- a/library/ui/text/field.factor
+++ /dev/null
@@ -1,21 +0,0 @@
-! Copyright (C) 2006 Slava Pestov
-! See http://factorcode.org/license.txt for BSD license.
-IN: gadgets-text
-USING: gadgets generic kernel models sequences gadgets-theme ;
-
-TUPLE: field model ;
-
-C: field ( model -- field )
- over set-delegate
- [ set-field-model ] keep
- dup dup set-control-self ;
-
-: field-commit ( field -- string )
- [ editor-text ] keep
- [ field-model [ dupd set-model ] when* ] keep
- select-all ;
-
-field "Field commands" {
- { "Clear input" T{ key-down f { C+ } "k" } [ control-model clear-doc ] }
- { "Accept input" T{ key-down f f "RETURN" } [ field-commit drop ] }
-} define-commands
diff --git a/library/ui/text/interactor.factor b/library/ui/text/interactor.factor
index 79023a19c8..4eae030bee 100644
--- a/library/ui/text/interactor.factor
+++ b/library/ui/text/interactor.factor
@@ -60,4 +60,5 @@ M: interactor stream-readln
interactor "Interactor commands" {
{ "Evaluate" T{ key-down f f "RETURN" } [ interactor-commit ] }
+ { "Clear input" T{ key-down f { C+ } "k" } [ control-model clear-doc ] }
} define-commands
diff --git a/library/ui/tools/browser.factor b/library/ui/tools/browser.factor
index 09053fee4f..c4e14ac0be 100644
--- a/library/ui/tools/browser.factor
+++ b/library/ui/tools/browser.factor
@@ -45,7 +45,7 @@ TUPLE: tile definition gadget ;
dup faint-boundary ;
C: tile ( definition -- gadget )
- 2dup { tile }
+ 2dup { tile } "Word commands"
over set-gadget-delegate
[ set-tile-definition ] keep ;
@@ -87,9 +87,24 @@ C: navigator ( -- gadget )
C: browser ( -- gadget )
{
- { [ ] set-browser-navigator f 1/5 }
- { [ ] set-browser-definitions [ ] 3/5 }
- { [ [ apropos ] ] set-browser-search f 1/5 }
+ {
+ [ ]
+ set-browser-navigator
+ f
+ 1/5
+ }
+ {
+ [ ]
+ set-browser-definitions
+ [ ]
+ 3/5
+ }
+ {
+ [ "" [ browser call-tool ] ]
+ set-browser-search
+ f
+ 1/5
+ }
} { 0 1 } make-track* ;
M: browser focusable-child* browser-search ;
diff --git a/library/ui/tools/help.factor b/library/ui/tools/help.factor
index b48a0512d5..936650b422 100644
--- a/library/ui/tools/help.factor
+++ b/library/ui/tools/help.factor
@@ -22,8 +22,18 @@ TUPLE: help-gadget pane history search ;
C: help-gadget ( -- gadget )
dup init-history {
- { [ ] set-help-gadget-pane [ ] 4/5 }
- { [ [ search-help. ] ] set-help-gadget-search f 1/5 }
+ {
+ [ ]
+ set-help-gadget-pane
+ [ ]
+ 4/5
+ }
+ {
+ [ "" [ help-gadget call-tool ] ]
+ set-help-gadget-search
+ f
+ 1/5
+ }
} { 0 1 } make-track* ;
M: help-gadget focusable-child* help-gadget-search ;
diff --git a/library/ui/tools/listener.factor b/library/ui/tools/listener.factor
index 0273a26368..ef23f7dd12 100644
--- a/library/ui/tools/listener.factor
+++ b/library/ui/tools/listener.factor
@@ -128,7 +128,7 @@ M: listener-gadget tool-help
: insert-completion ( completion -- )
find-listener [
- >r peek word-name r> listener-gadget-input user-input
+ >r word-name r> listener-gadget-input user-input
] keep hide-minibuffer ;
listener-gadget "Toolbar" {
diff --git a/library/ui/tools/search.factor b/library/ui/tools/search.factor
index 09df128166..efadc74cab 100644
--- a/library/ui/tools/search.factor
+++ b/library/ui/tools/search.factor
@@ -6,39 +6,12 @@ gadgets-panes gadgets-scrolling gadgets-text gadgets-theme
generic help tools kernel models sequences words
gadgets-borders gadgets-lists namespaces ;
-TUPLE: search-gadget input ;
-
-: ( model quot -- )
- [ over empty? [ 2drop ] [ call ] if ] curry
- ;
-
-: ( field -- gadget )
- {
- { [ "Search: "