diff --git a/packages/slate-hotkeys/src/index.js b/packages/slate-hotkeys/src/index.js
index b11573e99..752225de9 100644
--- a/packages/slate-hotkeys/src/index.js
+++ b/packages/slate-hotkeys/src/index.js
@@ -10,8 +10,10 @@ import { IS_IOS, IS_MAC } from 'slate-dev-environment'
const HOTKEYS = {
bold: 'mod+b',
compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],
- moveBackward: 'mod?+ctrl?+alt?+left',
- moveForward: 'mod?+ctrl?+alt?+right',
+ moveBackward: 'left',
+ moveForward: 'right',
+ moveWordBackward: 'ctrl+left',
+ moveWordForward: 'ctrl+right',
deleteBackward: 'shift?+backspace',
deleteForward: 'shift?+delete',
extendBackward: 'shift+left',
@@ -24,6 +26,8 @@ const HOTKEYS = {
const APPLE_HOTKEYS = {
moveLineBackward: 'opt+up',
moveLineForward: 'opt+down',
+ moveWordBackward: 'opt+left',
+ moveWordForward: 'opt+right',
deleteBackward: ['ctrl+backspace', 'ctrl+h'],
deleteForward: ['ctrl+delete', 'ctrl+d'],
deleteLineBackward: 'cmd+shift?+backspace',
diff --git a/packages/slate-react/src/plugins/after.js b/packages/slate-react/src/plugins/after.js
index 64f8ff423..fe9bc1e66 100644
--- a/packages/slate-react/src/plugins/after.js
+++ b/packages/slate-react/src/plugins/after.js
@@ -530,25 +530,33 @@ function AfterPlugin(options = {}) {
// an inline is selected, we need to handle these hotkeys manually because
// browsers won't know what to do.
if (Hotkeys.isMoveBackward(event)) {
- const { previousText, startText } = value
- const isPreviousInVoid =
- previousText && document.hasVoidParent(previousText.key, editor)
+ event.preventDefault()
- if (hasVoidParent || isPreviousInVoid || startText.text == '') {
- event.preventDefault()
- return change.moveBackward()
+ if (!selection.isCollapsed) {
+ return change.moveToStart()
}
+
+ return change.moveBackward()
}
if (Hotkeys.isMoveForward(event)) {
- const { nextText, startText } = value
- const isNextInVoid =
- nextText && document.hasVoidParent(nextText.key, editor)
+ event.preventDefault()
- if (hasVoidParent || isNextInVoid || startText.text == '') {
- event.preventDefault()
- return change.moveForward()
+ if (!selection.isCollapsed) {
+ return change.moveToEnd()
}
+
+ return change.moveForward()
+ }
+
+ if (Hotkeys.isMoveWordBackward(event)) {
+ event.preventDefault()
+ return change.moveWordBackward()
+ }
+
+ if (Hotkeys.isMoveWordForward(event)) {
+ event.preventDefault()
+ return change.moveWordForward()
}
if (Hotkeys.isExtendBackward(event)) {
diff --git a/packages/slate/src/commands/on-selection.js b/packages/slate/src/commands/on-selection.js
index c92e586d6..13336b006 100644
--- a/packages/slate/src/commands/on-selection.js
+++ b/packages/slate/src/commands/on-selection.js
@@ -2,6 +2,7 @@ import { is } from 'immutable'
import pick from 'lodash/pick'
import Selection from '../models/selection'
+import TextUtils from '../utils/text-utils'
const Commands = {}
@@ -26,10 +27,18 @@ Commands.moveAnchorBackward = (change, ...args) => {
change.call(pointBackward, 'anchor', ...args)
}
+Commands.moveAnchorWordBackward = (change, ...args) => {
+ change.call(pointWordBackward, 'anchor', ...args)
+}
+
Commands.moveAnchorForward = (change, ...args) => {
change.call(pointForward, 'anchor', ...args)
}
+Commands.moveAnchorWordForward = (change, ...args) => {
+ change.call(pointWordForward, 'anchor', ...args)
+}
+
Commands.moveAnchorTo = (change, ...args) => {
change.call(proxy, 'moveAnchorTo', ...args)
}
@@ -126,14 +135,26 @@ Commands.moveBackward = (change, ...args) => {
change.moveAnchorBackward(...args).moveFocusBackward(...args)
}
+Commands.moveWordBackward = (change, ...args) => {
+ change.moveFocusWordBackward(...args).moveToFocus()
+}
+
Commands.moveEndBackward = (change, ...args) => {
change.call(pointBackward, 'end', ...args)
}
+Commands.moveEndWordBackward = (change, ...args) => {
+ change.call(pointWordBackward, 'end', ...args)
+}
+
Commands.moveEndForward = (change, ...args) => {
change.call(pointForward, 'end', ...args)
}
+Commands.moveEndWordForward = (change, ...args) => {
+ change.call(pointWordForward, 'end', ...args)
+}
+
Commands.moveEndTo = (change, ...args) => {
change.call(proxy, 'moveEndTo', ...args)
}
@@ -230,10 +251,18 @@ Commands.moveFocusBackward = (change, ...args) => {
change.call(pointBackward, 'focus', ...args)
}
+Commands.moveFocusWordBackward = (change, ...args) => {
+ change.call(pointWordBackward, 'focus', ...args)
+}
+
Commands.moveFocusForward = (change, ...args) => {
change.call(pointForward, 'focus', ...args)
}
+Commands.moveFocusWordForward = (change, ...args) => {
+ change.call(pointWordForward, 'focus', ...args)
+}
+
Commands.moveFocusTo = (change, ...args) => {
change.call(proxy, 'moveFocusTo', ...args)
}
@@ -330,14 +359,26 @@ Commands.moveForward = (change, ...args) => {
change.moveAnchorForward(...args).moveFocusForward(...args)
}
+Commands.moveWordForward = (change, ...args) => {
+ change.moveFocusWordForward(...args).moveToFocus(...args)
+}
+
Commands.moveStartBackward = (change, ...args) => {
change.call(pointBackward, 'start', ...args)
}
+Commands.moveStartWordBackward = (change, ...args) => {
+ change.call(pointWordBackward, 'start', ...args)
+}
+
Commands.moveStartForward = (change, ...args) => {
change.call(pointForward, 'start', ...args)
}
+Commands.moveStartWordForward = (change, ...args) => {
+ change.call(pointWordForward, 'start', ...args)
+}
+
Commands.moveStartTo = (change, ...args) => {
change.call(proxy, 'moveStartTo', ...args)
}
@@ -718,4 +759,28 @@ function pointForward(change, point, n = 1) {
}
}
+function pointWordBackward(change, pointName) {
+ const { value } = change
+ const { document, selection } = value
+ const point = selection[pointName]
+ const block = document.getClosestBlock(point.key)
+ const offset = block.getOffset(point.key)
+ const o = offset + point.offset
+ const { text } = block
+ const n = TextUtils.getWordOffsetBackward(text, o)
+ change.call(pointBackward, pointName, n > 0 ? n : 1)
+}
+
+function pointWordForward(change, pointName) {
+ const { value } = change
+ const { document, selection } = value
+ const point = selection[pointName]
+ const block = document.getClosestBlock(point.key)
+ const offset = block.getOffset(point.key)
+ const o = offset + point.offset
+ const { text } = block
+ const n = TextUtils.getWordOffsetForward(text, o)
+ change.call(pointForward, pointName, n > 0 ? n : 1)
+}
+
export default Commands
diff --git a/packages/slate/test/commands/on-selection/move-anchor-backward/default.js b/packages/slate/test/commands/on-selection/move-anchor-backward/default.js
new file mode 100644
index 000000000..72301aa65
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-anchor-backward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveAnchorBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-anchor-backward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-anchor-backward/from-collapsed.js
new file mode 100644
index 000000000..36d2638d1
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-anchor-backward/from-collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveAnchorBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-anchor-backward/out-of-reverse.js b/packages/slate/test/commands/on-selection/move-anchor-backward/out-of-reverse.js
new file mode 100644
index 000000000..6c0aca315
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-anchor-backward/out-of-reverse.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveAnchorBackward(8)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-anchor-backward/param.js b/packages/slate/test/commands/on-selection/move-anchor-backward/param.js
new file mode 100644
index 000000000..efb6eeefa
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-anchor-backward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveAnchorBackward(3)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-anchor-forward/default.js b/packages/slate/test/commands/on-selection/move-anchor-forward/default.js
new file mode 100644
index 000000000..238d85153
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-anchor-forward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveAnchorForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-anchor-forward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-anchor-forward/from-collapsed.js
new file mode 100644
index 000000000..2a905b8a5
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-anchor-forward/from-collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveAnchorForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-anchor-forward/into-reverse.js b/packages/slate/test/commands/on-selection/move-anchor-forward/into-reverse.js
new file mode 100644
index 000000000..b17088d95
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-anchor-forward/into-reverse.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveAnchorForward(8)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-anchor-forward/param.js b/packages/slate/test/commands/on-selection/move-anchor-forward/param.js
new file mode 100644
index 000000000..78ca98dd8
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-anchor-forward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveAnchorForward(3)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-backward/default.js b/packages/slate/test/commands/on-selection/move-backward/default.js
new file mode 100644
index 000000000..e8a18e6e2
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-backward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-backward/expanded.js b/packages/slate/test/commands/on-selection/move-backward/expanded.js
new file mode 100644
index 000000000..24a76f4d1
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-backward/expanded.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-backward/param.js b/packages/slate/test/commands/on-selection/move-backward/param.js
new file mode 100644
index 000000000..5300f5fff
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-backward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveBackward(6)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-backward/reversed.js b/packages/slate/test/commands/on-selection/move-backward/reversed.js
new file mode 100644
index 000000000..a1488d56c
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-backward/reversed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-backward/default.js b/packages/slate/test/commands/on-selection/move-end-backward/default.js
new file mode 100644
index 000000000..d07b1d982
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-backward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-backward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-end-backward/from-collapsed.js
new file mode 100644
index 000000000..60833f6c5
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-backward/from-collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-backward/into-reverse.js b/packages/slate/test/commands/on-selection/move-end-backward/into-reverse.js
new file mode 100644
index 000000000..d6942db78
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-backward/into-reverse.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndBackward(6)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-backward/out-of-reverse.js b/packages/slate/test/commands/on-selection/move-end-backward/out-of-reverse.js
new file mode 100644
index 000000000..63dc248a2
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-backward/out-of-reverse.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndBackward(7)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-backward/param.js b/packages/slate/test/commands/on-selection/move-end-backward/param.js
new file mode 100644
index 000000000..6105a6293
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-backward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndBackward(3)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-backward/reversed.js b/packages/slate/test/commands/on-selection/move-end-backward/reversed.js
new file mode 100644
index 000000000..ad96af0f5
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-backward/reversed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-forward/default.js b/packages/slate/test/commands/on-selection/move-end-forward/default.js
new file mode 100644
index 000000000..603514047
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-forward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-forward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-end-forward/from-collapsed.js
new file mode 100644
index 000000000..e1138a4f7
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-forward/from-collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-forward/param.js b/packages/slate/test/commands/on-selection/move-end-forward/param.js
new file mode 100644
index 000000000..57ea918d2
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-forward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndForward(3)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-end-forward/reversed.js b/packages/slate/test/commands/on-selection/move-end-forward/reversed.js
new file mode 100644
index 000000000..68b74ad6c
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-end-forward/reversed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveEndForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-focus-backward/default.js b/packages/slate/test/commands/on-selection/move-focus-backward/default.js
new file mode 100644
index 000000000..e87b12d25
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-focus-backward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveFocusBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-focus-backward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-focus-backward/from-collapsed.js
new file mode 100644
index 000000000..1ff052be3
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-focus-backward/from-collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveFocusBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-focus-backward/into-reverse.js b/packages/slate/test/commands/on-selection/move-focus-backward/into-reverse.js
new file mode 100644
index 000000000..fcfc2c1a8
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-focus-backward/into-reverse.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveFocusBackward(10)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-focus-backward/param.js b/packages/slate/test/commands/on-selection/move-focus-backward/param.js
new file mode 100644
index 000000000..57f37ab64
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-focus-backward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveFocusBackward(6)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-focus-forward/default.js b/packages/slate/test/commands/on-selection/move-focus-forward/default.js
new file mode 100644
index 000000000..9174f6f20
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-focus-forward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveFocusForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-focus-forward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-focus-forward/from-collapsed.js
new file mode 100644
index 000000000..51e555784
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-focus-forward/from-collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveFocusForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-focus-forward/out-of-reverse.js b/packages/slate/test/commands/on-selection/move-focus-forward/out-of-reverse.js
new file mode 100644
index 000000000..487fda569
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-focus-forward/out-of-reverse.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveFocusForward(7)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-focus-forward/param.js b/packages/slate/test/commands/on-selection/move-focus-forward/param.js
new file mode 100644
index 000000000..413dcea1a
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-focus-forward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveFocusForward(4)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-forward/default.js b/packages/slate/test/commands/on-selection/move-forward/default.js
new file mode 100644
index 000000000..857b1e478
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-forward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-forward/expanded.js b/packages/slate/test/commands/on-selection/move-forward/expanded.js
new file mode 100644
index 000000000..9f760af00
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-forward/expanded.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-forward/param.js b/packages/slate/test/commands/on-selection/move-forward/param.js
new file mode 100644
index 000000000..73dd38d98
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-forward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveForward(6)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-forward/reversed.js b/packages/slate/test/commands/on-selection/move-forward/reversed.js
new file mode 100644
index 000000000..b00f6cd29
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-forward/reversed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-backward/default.js b/packages/slate/test/commands/on-selection/move-start-backward/default.js
new file mode 100644
index 000000000..20a44992d
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-backward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-backward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-start-backward/from-collapsed.js
new file mode 100644
index 000000000..a94dcaeeb
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-backward/from-collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-backward/param.js b/packages/slate/test/commands/on-selection/move-start-backward/param.js
new file mode 100644
index 000000000..bdaf7833c
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-backward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartBackward(3)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-backward/reversed.js b/packages/slate/test/commands/on-selection/move-start-backward/reversed.js
new file mode 100644
index 000000000..03287292f
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-backward/reversed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-forward/default.js b/packages/slate/test/commands/on-selection/move-start-forward/default.js
new file mode 100644
index 000000000..9dc1c57ff
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-forward/default.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-forward/from-collapsed.js b/packages/slate/test/commands/on-selection/move-start-forward/from-collapsed.js
new file mode 100644
index 000000000..797e444ce
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-forward/from-collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-forward/into-reverse.js b/packages/slate/test/commands/on-selection/move-start-forward/into-reverse.js
new file mode 100644
index 000000000..649321b9d
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-forward/into-reverse.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartForward(8)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-forward/out-of-reverse.js b/packages/slate/test/commands/on-selection/move-start-forward/out-of-reverse.js
new file mode 100644
index 000000000..b70fa04e6
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-forward/out-of-reverse.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartForward(7)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-forward/param.js b/packages/slate/test/commands/on-selection/move-start-forward/param.js
new file mode 100644
index 000000000..b8d78d86d
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-forward/param.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartForward(3)
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-start-forward/reversed.js b/packages/slate/test/commands/on-selection/move-start-forward/reversed.js
new file mode 100644
index 000000000..7f6691bb7
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-start-forward/reversed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveStartForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-word-backward/collapsed.js b/packages/slate/test/commands/on-selection/move-word-backward/collapsed.js
new file mode 100644
index 000000000..051397248
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-word-backward/collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveWordBackward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-word-backward/expanded.js b/packages/slate/test/commands/on-selection/move-word-backward/expanded.js
new file mode 100644
index 000000000..4e2064415
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-word-backward/expanded.js
@@ -0,0 +1,28 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveWordBackward()
+}
+
+export const input = (
+
+
+
+ one two three four five six
+
+
+
+)
+
+// Should move to next word after focus and collapse
+export const output = (
+
+
+
+ one two three four five six
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-word-backward/reversed.js b/packages/slate/test/commands/on-selection/move-word-backward/reversed.js
new file mode 100644
index 000000000..4b97448dc
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-word-backward/reversed.js
@@ -0,0 +1,28 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveWordBackward()
+}
+
+export const input = (
+
+
+
+ one two three four five six
+
+
+
+)
+
+// Should move to next word after focus and collapse
+export const output = (
+
+
+
+ one two three four five six
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-word-forward/collapsed.js b/packages/slate/test/commands/on-selection/move-word-forward/collapsed.js
new file mode 100644
index 000000000..80ea11801
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-word-forward/collapsed.js
@@ -0,0 +1,27 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveWordForward()
+}
+
+export const input = (
+
+
+
+ one two three
+
+
+
+)
+
+export const output = (
+
+
+
+ one two three
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-word-forward/expanded.js b/packages/slate/test/commands/on-selection/move-word-forward/expanded.js
new file mode 100644
index 000000000..486c7a09e
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-word-forward/expanded.js
@@ -0,0 +1,28 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveWordForward()
+}
+
+export const input = (
+
+
+
+ one two three four five six
+
+
+
+)
+
+// Should move to next word after focus and collapse
+export const output = (
+
+
+
+ one two three four five six
+
+
+
+)
diff --git a/packages/slate/test/commands/on-selection/move-word-forward/reversed.js b/packages/slate/test/commands/on-selection/move-word-forward/reversed.js
new file mode 100644
index 000000000..c5f1bdc85
--- /dev/null
+++ b/packages/slate/test/commands/on-selection/move-word-forward/reversed.js
@@ -0,0 +1,28 @@
+/** @jsx h */
+
+import h from '../../../helpers/h'
+
+export default function(change) {
+ change.moveWordForward()
+}
+
+export const input = (
+
+
+
+ one two three four five six
+
+
+
+)
+
+// Should move to next word after focus and collapse
+export const output = (
+
+
+
+ one two three four five six
+
+
+
+)