InlineEdit: Support Emacs and Vim key maps
Change-Id: I980afc3848f267811ab5890f9447fba16beed5d4
This commit is contained in:
@@ -20,6 +20,7 @@ import com.google.gerrit.client.account.AccountApi;
|
||||
import com.google.gerrit.client.account.EditPreferences;
|
||||
import com.google.gerrit.client.rpc.GerritCallback;
|
||||
import com.google.gerrit.client.ui.NpIntTextBox;
|
||||
import com.google.gerrit.extensions.client.KeyMapType;
|
||||
import com.google.gerrit.extensions.client.Theme;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.dom.client.ChangeEvent;
|
||||
@@ -61,6 +62,7 @@ class EditPreferencesBox extends Composite {
|
||||
@UiField ToggleButton whitespaceErrors;
|
||||
@UiField ToggleButton lineNumbers;
|
||||
@UiField ListBox theme;
|
||||
@UiField ListBox keyMap;
|
||||
@UiField Button apply;
|
||||
@UiField Button save;
|
||||
|
||||
@@ -68,6 +70,7 @@ class EditPreferencesBox extends Composite {
|
||||
this.view = view;
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
initTheme();
|
||||
initKeyMapType();
|
||||
}
|
||||
|
||||
void set(EditPreferences prefs) {
|
||||
@@ -81,6 +84,7 @@ class EditPreferencesBox extends Composite {
|
||||
whitespaceErrors.setValue(prefs.showWhitespaceErrors());
|
||||
lineNumbers.setValue(prefs.hideLineNumbers());
|
||||
setTheme(prefs.theme());
|
||||
setKeyMapType(prefs.keyMapType());
|
||||
}
|
||||
|
||||
@UiHandler("tabWidth")
|
||||
@@ -150,6 +154,14 @@ class EditPreferencesBox extends Composite {
|
||||
});
|
||||
}
|
||||
|
||||
@UiHandler("keyMap")
|
||||
void onKeyMap(@SuppressWarnings("unused") ChangeEvent e) {
|
||||
KeyMapType keyMapType = KeyMapType.valueOf(
|
||||
keyMap.getValue(keyMap.getSelectedIndex()));
|
||||
prefs.keyMapType(keyMapType);
|
||||
view.getEditor().setOption("keyMap", keyMapType.name().toLowerCase());
|
||||
}
|
||||
|
||||
@UiHandler("apply")
|
||||
void onApply(@SuppressWarnings("unused") ClickEvent e) {
|
||||
close();
|
||||
@@ -210,4 +222,27 @@ class EditPreferencesBox extends Composite {
|
||||
Theme.TWILIGHT.name().toLowerCase(),
|
||||
Theme.TWILIGHT.name());
|
||||
}
|
||||
|
||||
private void setKeyMapType(KeyMapType v) {
|
||||
String name = v != null ? v.name() : KeyMapType.DEFAULT.name();
|
||||
for (int i = 0; i < keyMap.getItemCount(); i++) {
|
||||
if (keyMap.getValue(i).equals(name)) {
|
||||
keyMap.setSelectedIndex(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
keyMap.setSelectedIndex(0);
|
||||
}
|
||||
|
||||
private void initKeyMapType() {
|
||||
keyMap.addItem(
|
||||
KeyMapType.DEFAULT.name().toLowerCase(),
|
||||
KeyMapType.DEFAULT.name());
|
||||
keyMap.addItem(
|
||||
KeyMapType.EMACS.name().toLowerCase(),
|
||||
KeyMapType.EMACS.name());
|
||||
keyMap.addItem(
|
||||
KeyMapType.VIM.name().toLowerCase(),
|
||||
KeyMapType.VIM.name());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,6 +165,10 @@ limitations under the License.
|
||||
<th><ui:msg>Theme</ui:msg></th>
|
||||
<td><g:ListBox ui:field='theme'/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Key Map</ui:msg></th>
|
||||
<td><g:ListBox ui:field='keyMap'/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><ui:msg>Tab Width</ui:msg></th>
|
||||
<td><x:NpIntTextBox ui:field='tabWidth'
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.google.gerrit.client.ui.InlineHyperlink;
|
||||
import com.google.gerrit.client.ui.Screen;
|
||||
import com.google.gerrit.common.PageLinks;
|
||||
import com.google.gerrit.extensions.client.EditPreferencesInfo;
|
||||
import com.google.gerrit.extensions.client.KeyMapType;
|
||||
import com.google.gerrit.reviewdb.client.Patch;
|
||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
@@ -257,11 +258,18 @@ public class EditScreen extends Screen {
|
||||
@Override
|
||||
public void registerKeys() {
|
||||
super.registerKeys();
|
||||
cm.addKeyMap(KeyMap.create()
|
||||
KeyMap localKeyMap = KeyMap.create();
|
||||
localKeyMap
|
||||
.on("Ctrl-L", gotoLine())
|
||||
.on("Cmd-L", gotoLine())
|
||||
.on("Cmd-S", save())
|
||||
.on("Ctrl-S", save()));
|
||||
.on("Cmd-S", save());
|
||||
|
||||
// TODO(davido): Find a better way to prevent key maps collisions
|
||||
if (prefs.keyMapType() != KeyMapType.EMACS) {
|
||||
localKeyMap.on("Ctrl-S", save());
|
||||
}
|
||||
|
||||
cm.addKeyMap(localKeyMap);
|
||||
}
|
||||
|
||||
private Runnable gotoLine() {
|
||||
@@ -441,7 +449,7 @@ public class EditScreen extends Screen {
|
||||
.set("scrollbarStyle", "overlay")
|
||||
.set("styleSelectedText", true)
|
||||
.set("showTrailingSpace", prefs.showWhitespaceErrors())
|
||||
.set("keyMap", "default")
|
||||
.set("keyMap", prefs.keyMapType().name().toLowerCase())
|
||||
.set("theme", prefs.theme().name().toLowerCase())
|
||||
.set("mode", mode != null ? mode.mode() : null));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user