mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 05:25:26 +00:00
Smarter Ctrl+{Left,Right} in math.
Consider mathbin, mathrel and mathpunct as word separators. This makes Ctrl+{Left,Right} more intuitive, quicker, and more different from {Left,Right}. This takes into account all the feedback from the discussion on the general list. Further feedback welcome.
This commit is contained in:
parent
18bdb38f30
commit
f3594cb3eb
@ -1738,11 +1738,23 @@ bool Cursor::mathForward(bool word)
|
|||||||
LASSERT(inMathed(), return false);
|
LASSERT(inMathed(), return false);
|
||||||
if (pos() < lastpos()) {
|
if (pos() < lastpos()) {
|
||||||
if (word) {
|
if (word) {
|
||||||
// word: skip a group of insets with same math class
|
// word: skip a group of insets of the form X*(B*|R*|P*) (greedy
|
||||||
|
// match) where X is any math class, B is mathbin, R is mathrel, and
|
||||||
|
// P is mathpunct. Make sure that the following remains true:
|
||||||
|
// mathForward(true); mathBackward(true); mathForward(true)
|
||||||
|
// is the same as mathForward(true) and
|
||||||
|
// mathBackward(true); mathForward(true); mathBackward(true)
|
||||||
|
// is the same as mathBackward(true).
|
||||||
MathClass mc = nextMath().mathClass();
|
MathClass mc = nextMath().mathClass();
|
||||||
do
|
do
|
||||||
posForward();
|
posForward();
|
||||||
while (pos() < lastpos() && mc == nextMath().mathClass());
|
while (pos() < lastpos() && mc == nextMath().mathClass());
|
||||||
|
if (pos() < lastpos() &&
|
||||||
|
((mc = nextMath().mathClass()) == MC_BIN ||
|
||||||
|
mc == MC_REL || mc == MC_PUNCT))
|
||||||
|
do
|
||||||
|
posForward();
|
||||||
|
while (pos() < lastpos() && mc == nextMath().mathClass());
|
||||||
} else if (openable(nextAtom())) {
|
} else if (openable(nextAtom())) {
|
||||||
// single step: try to enter the next inset
|
// single step: try to enter the next inset
|
||||||
pushBackward(nextMath());
|
pushBackward(nextMath());
|
||||||
@ -1767,11 +1779,17 @@ bool Cursor::mathBackward(bool word)
|
|||||||
LASSERT(inMathed(), return false);
|
LASSERT(inMathed(), return false);
|
||||||
if (pos() > 0) {
|
if (pos() > 0) {
|
||||||
if (word) {
|
if (word) {
|
||||||
// word: skip a group of insets with same math class
|
// word: skip a group of insets. See the comment in mathForward.
|
||||||
MathClass mc = prevMath().mathClass();
|
MathClass mc = prevMath().mathClass();
|
||||||
do
|
do
|
||||||
posBackward();
|
posBackward();
|
||||||
while (pos() > 0 && mc == prevMath().mathClass());
|
while (pos() > 0 && mc == prevMath().mathClass());
|
||||||
|
if (pos() > 0 && (mc == MC_BIN || mc == MC_REL || mc == MC_PUNCT)) {
|
||||||
|
mc = prevMath().mathClass();
|
||||||
|
do
|
||||||
|
posBackward();
|
||||||
|
while (pos() > 0 && mc == prevMath().mathClass());
|
||||||
|
}
|
||||||
} else if (openable(prevAtom())) {
|
} else if (openable(prevAtom())) {
|
||||||
// single step: try to enter the preceding inset
|
// single step: try to enter the preceding inset
|
||||||
posBackward();
|
posBackward();
|
||||||
|
Loading…
Reference in New Issue
Block a user