commit 6cf81782dd68acb1e565e00470f78926e4206be7
Author: Scott Kostyshak <[email protected]>
Date: Tue Apr 7 23:18:21 2015 -0400
Implement and bind buffer-move-{next,previous}
Control + Shift + PgDn now moves a tab to the right.
Control + Shift + PgUp now moves a tab to the left.
These keybindings are consistent with Chromium, Firefox,
Nautilus, and gnome-terminal.
Note that I allow for wrapping. This is consistent with
allowing wrapping for buffer-{next,previous}, but there
might be reasons to disable it in the future.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index f859e48..f1999c2 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -29,6 +29,12 @@ The following new LyX functions have been introduced in 2.2:
- buffer-view-cache
Opens the last previewed output of the buffer, if it exists.
+- buffer-move-next
+ Moves the current tab one spot to the right.
+
+- buffer-move-previous
+ Moves the current tab one spot to the left.
+
The following LyX functions have been changed in 2.2:
@@ -36,6 +42,9 @@ The following LyX functions have been changed in 2.2:
The following LyX key bindings have been changed in 2.2:
+- For bindings where Control + {PgDn, PgUp} switches to the
+ {next, previous} tab, Control + Shift + {PgDn, PgUp} moves the current
+ tab to the {next, previous} tab.
The following LyX documents have been moved in 2.2:
diff --git a/lib/bind/cua.bind b/lib/bind/cua.bind
index 359e1d4..71b919c 100644
--- a/lib/bind/cua.bind
+++ b/lib/bind/cua.bind
@@ -187,8 +187,8 @@ Format 2
\bind "S-KP_Next" "screen-down-select"
\bind "S-C-KP_Home" "buffer-begin-select"
\bind "S-C-KP_End" "buffer-end-select"
-\bind "S-C-KP_Prior" "buffer-begin-select"
-\bind "S-C-KP_Next" "buffer-end-select"
+\bind "S-C-KP_Prior" "buffer-move-previous"
+\bind "S-C-KP_Next" "buffer-move-next"
\bind "C-KP_Insert" "copy"
\bind "S-KP_Insert" "paste"
\bind "S-KP_Delete" "cut"
diff --git a/lib/bind/emacs.bind b/lib/bind/emacs.bind
index f0cb33e..30a587c 100644
--- a/lib/bind/emacs.bind
+++ b/lib/bind/emacs.bind
@@ -252,8 +252,8 @@ Format 2
\bind "S-KP_Next" "screen-down-select"
\bind "S-C-KP_Home" "buffer-begin-select"
\bind "S-C-KP_End" "buffer-end-select"
-\bind "S-C-KP_Prior" "buffer-begin-select"
-\bind "S-C-KP_Next" "buffer-end-select"
+\bind "S-C-KP_Prior" "buffer-move-previous"
+\bind "S-C-KP_Next" "buffer-move-next"
\bind "M-h" "inset-select-all"
\bind "C-KP_Insert" "copy"
\bind "S-KP_Insert" "paste"
diff --git a/lib/bind/mac.bind b/lib/bind/mac.bind
index ecdd3ad..6fcd406 100644
--- a/lib/bind/mac.bind
+++ b/lib/bind/mac.bind
@@ -314,8 +314,8 @@ Format 2
\bind "S-KP_Next" "screen-down-select"
\bind "S-C-KP_Home" "buffer-begin-select"
\bind "S-C-KP_End" "buffer-end-select"
-\bind "S-C-KP_Prior" "buffer-begin-select"
-\bind "S-C-KP_Next" "buffer-end-select"
+\bind "S-C-KP_Prior" "buffer-move-previous"
+\bind "S-C-KP_Next" "buffer-move-next"
\bind "C-KP_Insert" "copy"
\bind "S-KP_Insert" "paste"
\bind "S-KP_Delete" "cut"
diff --git a/lib/bind/xemacs.bind b/lib/bind/xemacs.bind
index e3d69af..32c67b1 100644
--- a/lib/bind/xemacs.bind
+++ b/lib/bind/xemacs.bind
@@ -249,8 +249,8 @@ Format 2
\bind "S-C-KP_Down" "paragraph-down-select"
\bind "S-KP_Home" "line-begin-select"
\bind "S-KP_End" "line-end-select"
-\bind "S-KP_Prior" "screen-up-select"
-\bind "S-KP_Next" "screen-down-select"
+\bind "S-KP_Prior" "buffer-move-previous"
+\bind "S-KP_Next" "buffer-move-next"
\bind "S-C-KP_Home" "buffer-begin-select"
\bind "S-C-KP_End" "buffer-end-select"
\bind "S-C-KP_Prior" "buffer-begin-select"
diff --git a/src/FuncCode.h b/src/FuncCode.h
index b590b38..91526b9 100644
--- a/src/FuncCode.h
+++ b/src/FuncCode.h
@@ -460,6 +460,9 @@ enum FuncCode
LFUN_SEPARATOR_INSERT, // ef 20140502
LFUN_SERVER_GET_STATISTICS, // brokenclock 20141010
LFUN_BUFFER_VIEW_CACHE, // skostysh 20150401
+ LFUN_BUFFER_MOVE_NEXT, // skostysh 20150408
+ // 340
+ LFUN_BUFFER_MOVE_PREVIOUS, // skostysh 20150408
LFUN_LASTACTION // end of the table
};
diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp
index 1ba2ef8..10d43f5 100644
--- a/src/LyXAction.cpp
+++ b/src/LyXAction.cpp
@@ -3290,6 +3290,13 @@ void LyXAction::init()
*/
{ LFUN_BUFFER_NEXT, "buffer-next", ReadOnly, Buffer },
/*!
+ * \var lyx::FuncCode lyx::LFUN_BUFFER_MOVE_NEXT
+ * \li Action: Moves the current tab one spot to the right.
+ * \li Syntax: buffer-move-next
+ * \endvar
+ */
+ { LFUN_BUFFER_MOVE_NEXT, "buffer-move-next", ReadOnly, Buffer },
+/*!
* \var lyx::FuncCode lyx::LFUN_BUFFER_PREVIOUS
* \li Action: Switch to the previous opened document.
* \li Syntax: buffer-previous
@@ -3297,6 +3304,13 @@ void LyXAction::init()
*/
{ LFUN_BUFFER_PREVIOUS, "buffer-previous", ReadOnly, Buffer },
/*!
+ * \var lyx::FuncCode lyx::LFUN_BUFFER_MOVE_PREVIOUS
+ * \li Action: Moves the current tab one spot to the left.
+ * \li Syntax: buffer-move-previous
+ * \endvar
+ */
+ { LFUN_BUFFER_MOVE_PREVIOUS, "buffer-move-previous", ReadOnly,
Buffer },
+/*!
* \var lyx::FuncCode lyx::LFUN_MASTER_BUFFER_UPDATE
* \li Action: Update (export) the document built from the master buffer,
if the current buffer is part of a master/child document.
diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp
index 5e8893b..a520b4e 100644
--- a/src/frontends/qt4/GuiView.cpp
+++ b/src/frontends/qt4/GuiView.cpp
@@ -1921,6 +1921,9 @@ bool GuiView::getStatus(FuncRequest const & cmd,
FuncStatus & flag)
enable = doc_buffer;
break;
+ case LFUN_BUFFER_MOVE_NEXT:
+ case LFUN_BUFFER_MOVE_PREVIOUS:
+ // we do not cycle when moving
case LFUN_BUFFER_NEXT:
case LFUN_BUFFER_PREVIOUS:
// because we cycle, it doesn't matter whether on first or last
@@ -2917,7 +2920,7 @@ bool GuiView::inOtherView(Buffer & buf)
}
-void GuiView::gotoNextOrPreviousBuffer(NextOrPrevious np)
+void GuiView::gotoNextOrPreviousBuffer(NextOrPrevious np, bool const move)
{
if (!documentBufferView())
return;
@@ -2932,7 +2935,10 @@ void GuiView::gotoNextOrPreviousBuffer(NextOrPrevious np)
next_index = (i == nwa - 1 ? 0 : i + 1);
else
next_index = (i == 0 ? nwa - 1 : i - 1);
-
setBuffer(&workArea(next_index)->bufferView().buffer());
+ if (move)
+ twa->moveTab(i, next_index);
+ else
+
setBuffer(&workArea(next_index)->bufferView().buffer());
break;
}
}
@@ -3546,11 +3552,19 @@ void GuiView::dispatch(FuncRequest const & cmd,
DispatchResult & dr)
}
case LFUN_BUFFER_NEXT:
- gotoNextOrPreviousBuffer(NEXTBUFFER);
+ gotoNextOrPreviousBuffer(NEXTBUFFER, false);
+ break;
+
+ case LFUN_BUFFER_MOVE_NEXT:
+ gotoNextOrPreviousBuffer(NEXTBUFFER, true);
break;
case LFUN_BUFFER_PREVIOUS:
- gotoNextOrPreviousBuffer(PREVBUFFER);
+ gotoNextOrPreviousBuffer(PREVBUFFER, false);
+ break;
+
+ case LFUN_BUFFER_MOVE_PREVIOUS:
+ gotoNextOrPreviousBuffer(PREVBUFFER, true);
break;
case LFUN_COMMAND_EXECUTE: {
diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h
index f7b488b..478e3a1 100644
--- a/src/frontends/qt4/GuiView.h
+++ b/src/frontends/qt4/GuiView.h
@@ -421,7 +421,7 @@ private:
PREVBUFFER
};
///
- void gotoNextOrPreviousBuffer(NextOrPrevious np);
+ void gotoNextOrPreviousBuffer(NextOrPrevious np, bool const move);
/// Is the dialog currently visible?
bool isDialogVisible(std::string const & name) const;
diff --git a/src/frontends/qt4/GuiWorkArea.h b/src/frontends/qt4/GuiWorkArea.h
index fb6341b..5039e45 100644
--- a/src/frontends/qt4/GuiWorkArea.h
+++ b/src/frontends/qt4/GuiWorkArea.h
@@ -218,6 +218,8 @@ public Q_SLOTS:
/// close the tab given by \c index
void closeTab(int index);
///
+ void moveTab(int fromIndex, int toIndex);
+ ///
void updateTabTexts();
private Q_SLOTS:
@@ -226,8 +228,6 @@ private Q_SLOTS:
///
void showContextMenu(const QPoint & pos);
///
- void moveTab(int fromIndex, int toIndex);
- ///
void mouseDoubleClickEvent(QMouseEvent * event);
private: