/quickopen

Instantly open files in Vim and Emacs within 250k-file projects with fuzziness

Primary LanguagePythonApache License 2.0Apache-2.0

Open files in Vim or Emacs quickly with fuzzy expressions and a live-updating
UI, even for directory-trees containing hundreds of thousands of files.

Fuzzy? When you enter "rwh", quickopen finds files like
       RenderWidgetHost
       render-widget-host
       threaded_window_handler

The results are ranked by relevance. In 10s of milliseconds. So you get new results
as you type. Thus, you might refine 'rwh' to 'rwhcpp' to get
render_widget_host.cpp

Key features:
- Blazingly fast! 15ms search time on full 180k-file Chrome directory tree.
- Integration with vim gf and emacs ff-find-other-file when they get stuck
- Index maintained in-memory, persists across editor sessions/instances
- Reasonablly pretty GUI, with fallback to curses in terminal sessions
- Same backend shared between emacs and vim

Coming soon:
- Searches influenced by open/current buffers


Dependencies
================================================================================
Linux:
        python-gtk2

OSX:
        http://www.wxpython.org/download.php#stable
        wxPython 2.8-osx-unicode-2.6

Setting up the quickopen daemon
================================================================================
 0. Tell quickopen to index some directories...
      nduca: ~/quickopen $ ./quickopen add ~/chromium
      nduca: ~/quickopen $ ./quickopen add ~/quickopen
      nduca: ~/quickopen $ ./quickopen ignore \*LayoutTests\*

 1. Check quickopen's status:
      nduca: ~/quickopen $ ./quickopen rawsearch foo
      Database is not fully indexed. Wait a bit or try quickopen status

      nduca: ~/quickopen $ ./quickopen status
      Syncing: 17802 files found, 116 dirs pending

      nduca: ~/quickopen $ ./quickopen status
      up-to-date: 158553 files indexed; 2-threaded searches

VIM Setup
================================================================================

Using pathogen:
1. http://github.com/tpope/vim-pathogen
2. git submodule add https://github.com/natduca/quickopen ~/.vim/bundle/quickopen

By hand:
1. source quickopen/plugin/quickopen.vim

Emacs Setup
================================================================================

By hand:
  (load quickopen/elisp/quickopen.el)

Using site-lisp:
  git clone https://github.com/natduca/quickopen.git ~/.emacs/site-lisp

And if site-lisp isn't set up yet:
  (let ((site-lisp-dir (expand-file-name "~/.emacs/site-lisp")))
    (when (file-exists-p site-lisp-dir)
      (let ((default-directory site-lisp-dir))
        (normal-top-level-add-to-load-path '("."))
        (normal-top-level-add-subdirs-to-load-path))))

Consider setting up binding ff-find-other-file to a hotkey if you haven't done
so already. Quickopen will be used if the basic ff-find-other-file produces no
results:
  (global-set-key (kbd "M-o") (lambda ()
                                (interactive "")
                                (ff-find-other-file)
                                ))
  (global-set-key (kbd "M-O") (lambda ()
                                (interactive "")
                                (ff-find-other-file t)
                                ))

Visual SlickEdit Setup
================================================================================

 1. Ensure that the directory containing quickopend is in your path.

 2. Load the quickopen macro module by clicking Macro > Load Module..., and
    selecting slickedit/QuickOpen.e.

 3. Now set up a key binding for quick open.
    a) Click, Tools > Options...
    b) Expand 'Keyboard and Mouse'
    c) Select 'Key Bindings'
    d) Type QuickOpen in the 'Search by command:' text box. If all goes well,
       this command will exist and be found.
    e) Then click the 'Add..' button and bind to whichever keys you please,
       but I strongly recommend ctrl+shift+o for consistency with vim.

Usage
================================================================================

  1. VIM:              C-O                   (ctrl-shift-o)  to open
                       gf   c-w                              to goto file

     Emacs:            M-S-o                 (meta-shift-o)  to open
                       C-Q                                   to open

     Visual SlickEdit: C-O                   (ctrl-shift-o)  to open

  2. Command line
      nduca: ~/quickopen $ ./quickopen
         <brings up a GUI for a picking a file,
          prints file picked to stdout once done>