diff --git a/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyCommand.java b/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyCommand.java index ba4f62649d..032db653ba 100644 --- a/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyCommand.java +++ b/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyCommand.java @@ -24,6 +24,7 @@ public abstract class KeyCommand implements KeyPressHandler { public static final int M_CTRL = 1 << 16; public static final int M_ALT = 2 << 16; public static final int M_META = 4 << 16; + public static final int M_SHIFT = 8 << 16; public static boolean same(final KeyCommand a, final KeyCommand b) { return a.getClass() == b.getClass() && a.helpText.equals(b.helpText); @@ -58,6 +59,9 @@ public abstract class KeyCommand implements KeyPressHandler { if ((keyMask & M_META) == M_META) { modifier(b, KeyConstants.I.keyMeta()); } + if ((keyMask & M_SHIFT) == M_SHIFT) { + modifier(b, KeyConstants.I.keyShift()); + } final char c = (char) (keyMask & 0xffff); switch (c) { diff --git a/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyConstants.java b/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyConstants.java index 56fb85c71e..b4cb41e3a3 100644 --- a/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyConstants.java +++ b/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyConstants.java @@ -32,6 +32,7 @@ public interface KeyConstants extends Constants { String keyCtrl(); String keyAlt(); String keyMeta(); + String keyShift(); String keyEnter(); String keyEsc(); } diff --git a/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyConstants.properties b/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyConstants.properties index e21daf502e..2e12b078ad 100644 --- a/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyConstants.properties +++ b/gerrit-gwtexpui/src/main/java/com/google/gwtexpui/globalkey/client/KeyConstants.properties @@ -10,5 +10,6 @@ thenOtherKey = then keyCtrl = Ctrl keyAlt = Alt keyMeta = Meta +keyShift = Shift keyEnter = Enter keyEsc = Esc diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java index 0a01adc6bf..0eb4918a29 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/SideBySide2.java @@ -316,12 +316,30 @@ public class SideBySide2 extends Screen { (header.hasNext() ? header.next : header.up).go(); } }) - .on("Shift-Alt-/", new Runnable() { + .on("Shift-/", new Runnable() { @Override public void run() { new ShowHelpCommand().onKeyPress(null); } }) + .on("Ctrl-F", new Runnable() { + @Override + public void run() { + CodeMirror.handleVimKey(cm, "/"); + } + }) + .on("Space", new Runnable() { + @Override + public void run() { + CodeMirror.handleVimKey(cm, ""); + } + }) + .on("Ctrl-A", new Runnable() { + @Override + public void run() { + cm.execCommand("selectAll"); + } + }) .on("N", maybeNextVimSearch(cm)) .on("P", diffChunkNav(cm, true)) .on("Shift-O", openClosePublished(cm)) @@ -336,9 +354,13 @@ public class SideBySide2 extends Screen { keysNavigation.add(new UpToChangeCommand2(revision, 0, 'u')); keysNavigation.add(new NoOpKeyCommand(0, 'j', PatchUtil.C.lineNext())); keysNavigation.add(new NoOpKeyCommand(0, 'k', PatchUtil.C.linePrev())); + keysNavigation.add(new NoOpKeyCommand(0, 'n', PatchUtil.C.chunkNext2())); + keysNavigation.add(new NoOpKeyCommand(0, 'p', PatchUtil.C.chunkPrev2())); keysAction = new KeyCommandSet(Gerrit.C.sectionActions()); keysAction.add(new NoOpKeyCommand(0, 'o', PatchUtil.C.expandComment())); + keysAction.add(new NoOpKeyCommand( + KeyCommand.M_SHIFT, 'o', PatchUtil.C.expandAllCommentsOnCurrentLine())); keysAction.add(new KeyCommand(0, 'r', PatchUtil.C.toggleReviewed()) { @Override public void onKeyPress(KeyPressEvent event) { diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.java index c6793d6387..908801b22b 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.java @@ -45,10 +45,13 @@ public interface PatchConstants extends Constants { String lineNext(); String chunkPrev(); String chunkNext(); + String chunkPrev2(); + String chunkNext2(); String commentPrev(); String commentNext(); String fileList(); String expandComment(); + String expandAllCommentsOnCurrentLine(); String toggleReviewed(); String markAsReviewedAndGoToNext(); diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.properties index 5259a4caa7..a1b61929f5 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.properties +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchConstants.properties @@ -27,10 +27,13 @@ linePrev = Previous line lineNext = Next line chunkPrev = Previous diff chunk or comment chunkNext = Next diff chunk or comment +chunkPrev2 = Previous diff chunk +chunkNext2 = Next diff chunk or search result commentPrev = Previous comment commentNext = Next comment fileList = Browse files in patch set expandComment = Expand or collapse comment +expandAllCommentsOnCurrentLine = Expand or collapse all comments on current line toggleReviewed = Toggle the reviewed flag markAsReviewedAndGoToNext = Mark patch as reviewed and go to next unreviewed patch diff --git a/gerrit-gwtui/src/main/java/net/codemirror/lib/CodeMirror.java b/gerrit-gwtui/src/main/java/net/codemirror/lib/CodeMirror.java index 96daa49376..564e646a15 100644 --- a/gerrit-gwtui/src/main/java/net/codemirror/lib/CodeMirror.java +++ b/gerrit-gwtui/src/main/java/net/codemirror/lib/CodeMirror.java @@ -291,6 +291,10 @@ public class CodeMirror extends JavaScriptObject { return o; }-*/; + public final native void execCommand(String cmd) /*-{ + this.execCommand(cmd); + }-*/; + public static final native void addKeyMap(String name, KeyMap km) /*-{ $wnd.CodeMirror.keyMap[name] = km; }-*/; diff --git a/gerrit-gwtui/src/main/java/net/codemirror/lib/Loader.java b/gerrit-gwtui/src/main/java/net/codemirror/lib/Loader.java index 46e7a717d4..d2954ba936 100644 --- a/gerrit-gwtui/src/main/java/net/codemirror/lib/Loader.java +++ b/gerrit-gwtui/src/main/java/net/codemirror/lib/Loader.java @@ -90,7 +90,8 @@ class Loader { private static void initVimKeys() { // TODO: Better custom keybindings, remove temporary navigation hacks. KeyMap km = CodeMirror.cloneKeyMap("vim"); - for (String s : new String[] {"A", "C", "O", "R", "U", "Ctrl-C"}) { + for (String s : new String[] { + "A", "C", "O", "R", "U", "Ctrl-C", "Ctrl-O"}) { km.remove(s); } CodeMirror.addKeyMap("vim_ro", km);