Commit Graph

931 Commits

Author SHA1 Message Date
Corey Johnson & Nathan Sobo
c3b5cd19ea Editor can have custom key event handler.
editor.keyEventHandler.handleKeyEvent is passed all key events. When it returns true, the event is not handled by Ace.
2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
7f3396c125 Rename createKeyEvent to keydownEvent 2012-01-11 13:16:10 -08:00
Corey Johnson & Nathan Sobo
6ed0684eed Fix Project.getFilePaths spec. It returns relative paths. 2012-01-11 13:16:10 -08:00
Nathan Sobo
65605409b0 Favor key bindings with the most specific CSS selectors
Now if a keypress event bubbles to an element with bindings for
multiple matching selectors, the most specific selector is chosen. This
allows us to override a keybinding by using a more specific selector.
For example, say we have an editor instance inside of the file-finder
widget, so that the user can use all their normal bindings when they
type the name of the file. Except when they hit <esc> we want to close
the file finder, not do whatever they normally have it bound to. Now we
can just say:

```
.file-finder .editor {
  <esc>: close-file-finder
}
```

And we're assured that our binding will take precedence.
2012-01-11 13:16:10 -08:00
Nathan Sobo
f5be55e000 Only trigger bindings on the closest ancestor node of an event target.
Say we have a structure like:

div.parent
  div.child
    div.grandchild

And we have two mappings:

.parent { x: foo }
.child { x:bar }

If there's an event originating on grandchild, it will *only* trigger
bar, because that selector selects a closer ancestor.
2012-01-11 13:16:10 -08:00
Nathan Sobo
9c98e971fc Key binding selectors match events on descendants 2012-01-11 13:16:10 -08:00
Nathan Sobo
18e614e88d Start experiment: associate key bindings with CSS selectors
KeyEventHandler holds references to BindingSets. The name "binding set"
is based on the concept of a CSS ruleset. The idea is to choose a key
binding for an event based on what selectors (match / most closely
contain) the event's target DOM node.
2012-01-11 13:16:10 -08:00
Nathan Sobo
3a1d167a0f Command map allows for ambiguous key pattern prefix matches.
If we have pattern 'da' and 'dad' both mapped, when 'da' is typed, the KeyMap waits for a given timeout for another character to be entered. If the time elapses, it goes ahead and executes the action for 'da'. But if a 'd' is subsequently entered, it executes 'dad'.
2012-01-11 13:16:10 -08:00
Nathan Sobo
d0ff3c7d4a Start on CommandMap for Vim-style command mode. Matches patterns involving multiple key events. 2012-01-11 13:16:10 -08:00
Nathan Sobo
b0dc93d8cc Fix breakage 2012-01-07 02:07:55 -08:00
Nathan Sobo
36e9269e85 Merge branch 'master' of github.com:probablycorey/Atomicity 2012-01-06 19:57:35 -08:00
Nathan Sobo
df7ad14e2c 💄 2012-01-06 15:18:10 -08:00
Corey Johnson & Nathan Sobo
18b9782b16 Opening a previously opened url restores the same buffer and session. 2012-01-05 16:33:53 -08:00
Corey Johnson & Nathan Sobo
12cf511a40 💄 2012-01-05 13:10:00 -08:00
Corey Johnson & Nathan Sobo
8446b6c751 Open buffers with Project.open 2012-01-05 13:08:55 -08:00
Corey Johnson & Nathan Sobo
23c3cbf85f Add Project.open, which returns a buffer for an absolute/relative path. 2012-01-05 12:02:25 -08:00
Corey Johnson & Nathan Sobo
5293ba7469 Add fs.join 2012-01-05 12:01:55 -08:00
Corey Johnson & Nathan Sobo
1c24ad0fdd Eliminate Editor.open 2012-01-05 11:26:14 -08:00
Corey Johnson & Nathan Sobo
b5b1ac67fa Remove slow specs 2012-01-05 11:20:18 -08:00
Corey Johnson & Nathan Sobo
aee7df0b9f Add Editor.setBuffer 2012-01-05 11:13:55 -08:00
Corey Johnson
4121b2076e Display relative paths in the file finder 2012-01-05 11:01:17 -08:00
Nathan Sobo
192166d61a Merge branch 'master' of github.com:probablycorey/Atomicity
Conflicts:
	src/atom/project.coffee
2012-01-04 19:05:01 -08:00
Nathan Sobo
1689824ad7 💄 2012-01-04 19:08:23 -07:00
Nathan Sobo
629c1ef239 If passed a directory path, fs.directory returns the path it is given (not the parent dir) 2012-01-04 19:07:55 -07:00
Nathan Sobo
80e4fda2f9 Filter out directory paths for FileFinder in Objective-C instead of JS.
Rename FileSystemHelper-contentsOfDirectoryAtPath… to -listFilesAtPath to make it clear that we're only listing files, not subdirectories. This is a fairly special purpose method but it saves us from calling back into objective-c a ton of times to filter them in JS, and makes bringing up the file finder ~2x as fast.
2012-01-04 18:22:22 -07:00
Nathan Sobo
be0fa84f1f Move fs support methods out of AtomController into FileSystemHelper 2012-01-04 18:01:31 -07:00
Nathan Sobo
ee53616d82 Ensure that all windows are closed before proceeding to next spec. 2012-01-04 17:33:06 -07:00
Corey Johnson
7e270d641d FileFinder removes itself when item is selected. 2012-01-04 15:47:41 -08:00
Corey Johnson
3ffe57f228 Project.getFilePaths returns full urls.
FileFinder.initialize takes a 'selected' callback.
2012-01-04 15:30:41 -08:00
Corey Johnson
9419a9ec86 Spread the app specs out. 2012-01-04 15:25:57 -08:00
Nathan Sobo
816f3774e1 Merge branch 'master' into asyncfs 2012-01-04 13:58:10 -07:00
Nathan Sobo
c21083ae24 Merge branch 'asyncfs' of github.com:probablycorey/Atomicity into asyncfs 2012-01-04 13:30:56 -07:00
Nathan Sobo
40e629b0ff Remove benchmarking calls. 2012-01-04 13:30:26 -07:00
Nathan Sobo
a16e596fdf Refactor objective-c side of fs.async.list and cleanup memory leaks. 2012-01-04 13:21:26 -07:00
Corey Johnson & Nathan Sobo
236ea5e906 RootView handles opening directories 2012-01-04 10:51:41 -08:00
Corey Johnson & Nathan Sobo
9fde405ebe cmd-o allows directories to be open 2012-01-04 10:50:53 -08:00
Nathan Sobo
faa39f6bdb Construct native JS array/strings in C for fs.async.list callback.
Converting from JS-cocoa wrapper values for every element in the array appears to be very slow. Here we construct native JS datatypes and it's much faster. This is very messy and leaky and needs to be cleaned up if we want to keep it.
2012-01-03 22:47:20 -07:00
Corey Johnson & Nathan Sobo
7ba7ba2c81 Ported absolute and isFile to Objective-c.
This took fileFinder loading from .8 seconds to .35 seconds.
2012-01-03 17:50:43 -08:00
Corey Johnson & Nathan Sobo
982d5a4426 Benchmarking reveals filtering out non-files takes forevs
toString everything        0.199
Filter out non-files       0.703
Everything                 0.961
2012-01-03 17:34:21 -08:00
Corey Johnson & Nathan Sobo
44802e9647 Hitting enter on FileFinder opens file in new window. 2012-01-03 17:08:13 -08:00
Corey Johnson & Nathan Sobo
f0976d4650 FileFinder requires the full filePath. 2012-01-03 17:08:04 -08:00
Nathan Sobo
1420ca9adb Rename Project.list -> Project.getFilePaths, and change its behavior.
getFilePaths only resolves to the project-relative paths of all files in the project, excluding directories.
2012-01-03 17:22:03 -07:00
Nathan Sobo
6dddb1aa26 RootView.toggleFileFinder scans urls asynchronously. 2012-01-03 16:39:09 -07:00
Nathan Sobo
07b40cdbeb RootView opens a project for the directory of the url passed to initialize.
Rename fixtures/file-finder-dir to fixtures/dir, because it's not really file-finder specific.
2012-01-03 16:01:46 -07:00
Corey Johnson & Nathan Sobo
f8b04cd902 RootView is initialized with a url and opens it with its editor 2012-01-03 13:57:10 -08:00
Corey Johnson & Nathan Sobo
2cfea9fa42 Fix broken specs 2012-01-03 14:40:31 -07:00
Corey Johnson & Nathan Sobo
5b3e0e9f83 fs.async.list takes a boolean 'recursive' flag. 2012-01-03 14:23:18 -07:00
Corey Johnson & Nathan Sobo
3822549007 Spec passes for fs.async.list. 2012-01-03 14:03:03 -07:00
Corey Johnson
d076b1a48c Async file finding works with with blocks 2012-01-03 11:11:11 -08:00
Corey Johnson & Nathan Sobo
b3a7e1e097 Add failing fs.async.list spec. 2012-01-03 11:18:08 -07:00