             when 'open'
                 target = e.filename
                 if target?
-                    @props.actions.open_file(path:target, foreground:true)
+                    @props.actions.open_file
+                        path       : target
+                        foreground : not info.ctrl_down
             when 'set'
                 @props.actions.set_active_tab('settings')
 
-    keydown: (e) ->
-        if e.keyCode == 27
-            @props.actions.setState(search:'', page:0)
-
-    on_change: (e) ->
-        e.preventDefault()
-        x = ReactDOM.findDOMNode(@refs.project_log_search).value
-        @props.actions.setState(search : x, page : 0)
+    on_change: (value) ->
+        @props.actions.setState(search : value, page : 0)
 
     render: ->
-        <form onSubmit={@do_open_selected}>
-            <FormGroup>
-                <InputGroup>
-                    <FormControl
-                        autoFocus
-                        type        = 'search'
-                        value       = @props.search
-                        ref         = 'project_log_search'
-                        placeholder = 'Search log...'
-                        onChange    = {@on_change}
-                        onKeyDown   = {@keydown}
-                        />
-                        <InputGroup.Button>
-                            {@render_clear_button()}
-                        </InputGroup.Button>
-                </InputGroup>
-            </FormGroup>
-        </form>
+        <SearchInput
+            autoFocus   = {true}
+            autoSelect  = {true}
+            placeholder = 'Search log...'
+            value       = {@props.search}
+            on_change   = {@on_change}
+            on_submit   = {@open_selected}
+            on_up       = {@props.decrement_cursor}
+            on_down     = {@props.increment_cursor}
+            on_escape   = {=> @props.actions.setState(search:'', page:0)}
+        />
 
 selected_item =
     backgroundColor : '#08c'

        search           : rtypes.string
        actions          : rtypes.object.isRequired
        selected         : rtypes.object

    clear_and_focus_input: ->
        ReactDOM.findDOMNode(@refs.project_log_search).focus()
        @props.actions.setState(search:'', page:0)

    render_clear_button: ->
        s = if @props.search?.length > 0 then 'warning' else "default"
        <Button onClick={@clear_and_focus_input} bsStyle={s}>
            <Icon name='times-circle' />
        </Button>

    do_open_selected: (e) ->
        e.preventDefault()
        e = @props.selected?.event
        if not e?
            return

        num_pages = Math.ceil(log.length / PAGE_SIZE)
        page = @props.page
        log = log.slice(PAGE_SIZE*page, PAGE_SIZE*(page+1))
        @displayed_log_size = log.length
        if log.length > 0
            cursor = log[@state.cursor_index].id
            selected = log[@state.cursor_index]
        else
            cursor = undefined
            selected = undefined
