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.
This commit is contained in:
Scott Kostyshak 2015-04-07 23:18:21 -04:00
parent 34eadf5d49
commit 6cf81782dd
10 changed files with 55 additions and 15 deletions

View File

@ -29,6 +29,12 @@ The following new LyX functions have been introduced in 2.2:
- buffer-view-cache - buffer-view-cache
Opens the last previewed output of the buffer, if it exists. 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: 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: 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: The following LyX documents have been moved in 2.2:

View File

@ -187,8 +187,8 @@ Format 2
\bind "S-KP_Next" "screen-down-select" \bind "S-KP_Next" "screen-down-select"
\bind "S-C-KP_Home" "buffer-begin-select" \bind "S-C-KP_Home" "buffer-begin-select"
\bind "S-C-KP_End" "buffer-end-select" \bind "S-C-KP_End" "buffer-end-select"
\bind "S-C-KP_Prior" "buffer-begin-select" \bind "S-C-KP_Prior" "buffer-move-previous"
\bind "S-C-KP_Next" "buffer-end-select" \bind "S-C-KP_Next" "buffer-move-next"
\bind "C-KP_Insert" "copy" \bind "C-KP_Insert" "copy"
\bind "S-KP_Insert" "paste" \bind "S-KP_Insert" "paste"
\bind "S-KP_Delete" "cut" \bind "S-KP_Delete" "cut"

View File

@ -252,8 +252,8 @@ Format 2
\bind "S-KP_Next" "screen-down-select" \bind "S-KP_Next" "screen-down-select"
\bind "S-C-KP_Home" "buffer-begin-select" \bind "S-C-KP_Home" "buffer-begin-select"
\bind "S-C-KP_End" "buffer-end-select" \bind "S-C-KP_End" "buffer-end-select"
\bind "S-C-KP_Prior" "buffer-begin-select" \bind "S-C-KP_Prior" "buffer-move-previous"
\bind "S-C-KP_Next" "buffer-end-select" \bind "S-C-KP_Next" "buffer-move-next"
\bind "M-h" "inset-select-all" \bind "M-h" "inset-select-all"
\bind "C-KP_Insert" "copy" \bind "C-KP_Insert" "copy"
\bind "S-KP_Insert" "paste" \bind "S-KP_Insert" "paste"

View File

@ -314,8 +314,8 @@ Format 2
\bind "S-KP_Next" "screen-down-select" \bind "S-KP_Next" "screen-down-select"
\bind "S-C-KP_Home" "buffer-begin-select" \bind "S-C-KP_Home" "buffer-begin-select"
\bind "S-C-KP_End" "buffer-end-select" \bind "S-C-KP_End" "buffer-end-select"
\bind "S-C-KP_Prior" "buffer-begin-select" \bind "S-C-KP_Prior" "buffer-move-previous"
\bind "S-C-KP_Next" "buffer-end-select" \bind "S-C-KP_Next" "buffer-move-next"
\bind "C-KP_Insert" "copy" \bind "C-KP_Insert" "copy"
\bind "S-KP_Insert" "paste" \bind "S-KP_Insert" "paste"
\bind "S-KP_Delete" "cut" \bind "S-KP_Delete" "cut"

View File

@ -249,8 +249,8 @@ Format 2
\bind "S-C-KP_Down" "paragraph-down-select" \bind "S-C-KP_Down" "paragraph-down-select"
\bind "S-KP_Home" "line-begin-select" \bind "S-KP_Home" "line-begin-select"
\bind "S-KP_End" "line-end-select" \bind "S-KP_End" "line-end-select"
\bind "S-KP_Prior" "screen-up-select" \bind "S-KP_Prior" "buffer-move-previous"
\bind "S-KP_Next" "screen-down-select" \bind "S-KP_Next" "buffer-move-next"
\bind "S-C-KP_Home" "buffer-begin-select" \bind "S-C-KP_Home" "buffer-begin-select"
\bind "S-C-KP_End" "buffer-end-select" \bind "S-C-KP_End" "buffer-end-select"
\bind "S-C-KP_Prior" "buffer-begin-select" \bind "S-C-KP_Prior" "buffer-begin-select"

View File

@ -460,6 +460,9 @@ enum FuncCode
LFUN_SEPARATOR_INSERT, // ef 20140502 LFUN_SEPARATOR_INSERT, // ef 20140502
LFUN_SERVER_GET_STATISTICS, // brokenclock 20141010 LFUN_SERVER_GET_STATISTICS, // brokenclock 20141010
LFUN_BUFFER_VIEW_CACHE, // skostysh 20150401 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 LFUN_LASTACTION // end of the table
}; };

View File

@ -3289,6 +3289,13 @@ void LyXAction::init()
* \endvar * \endvar
*/ */
{ LFUN_BUFFER_NEXT, "buffer-next", ReadOnly, Buffer }, { 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 * \var lyx::FuncCode lyx::LFUN_BUFFER_PREVIOUS
* \li Action: Switch to the previous opened document. * \li Action: Switch to the previous opened document.
@ -3296,6 +3303,13 @@ void LyXAction::init()
* \endvar * \endvar
*/ */
{ LFUN_BUFFER_PREVIOUS, "buffer-previous", ReadOnly, Buffer }, { 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 * \var lyx::FuncCode lyx::LFUN_MASTER_BUFFER_UPDATE
* \li Action: Update (export) the document built from the master buffer, * \li Action: Update (export) the document built from the master buffer,

View File

@ -1921,6 +1921,9 @@ bool GuiView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
enable = doc_buffer; enable = doc_buffer;
break; break;
case LFUN_BUFFER_MOVE_NEXT:
case LFUN_BUFFER_MOVE_PREVIOUS:
// we do not cycle when moving
case LFUN_BUFFER_NEXT: case LFUN_BUFFER_NEXT:
case LFUN_BUFFER_PREVIOUS: case LFUN_BUFFER_PREVIOUS:
// because we cycle, it doesn't matter whether on first or last // 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()) if (!documentBufferView())
return; return;
@ -2932,7 +2935,10 @@ void GuiView::gotoNextOrPreviousBuffer(NextOrPrevious np)
next_index = (i == nwa - 1 ? 0 : i + 1); next_index = (i == nwa - 1 ? 0 : i + 1);
else else
next_index = (i == 0 ? nwa - 1 : i - 1); 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; break;
} }
} }
@ -3546,11 +3552,19 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
} }
case LFUN_BUFFER_NEXT: case LFUN_BUFFER_NEXT:
gotoNextOrPreviousBuffer(NEXTBUFFER); gotoNextOrPreviousBuffer(NEXTBUFFER, false);
break;
case LFUN_BUFFER_MOVE_NEXT:
gotoNextOrPreviousBuffer(NEXTBUFFER, true);
break; break;
case LFUN_BUFFER_PREVIOUS: case LFUN_BUFFER_PREVIOUS:
gotoNextOrPreviousBuffer(PREVBUFFER); gotoNextOrPreviousBuffer(PREVBUFFER, false);
break;
case LFUN_BUFFER_MOVE_PREVIOUS:
gotoNextOrPreviousBuffer(PREVBUFFER, true);
break; break;
case LFUN_COMMAND_EXECUTE: { case LFUN_COMMAND_EXECUTE: {

View File

@ -421,7 +421,7 @@ private:
PREVBUFFER PREVBUFFER
}; };
/// ///
void gotoNextOrPreviousBuffer(NextOrPrevious np); void gotoNextOrPreviousBuffer(NextOrPrevious np, bool const move);
/// Is the dialog currently visible? /// Is the dialog currently visible?
bool isDialogVisible(std::string const & name) const; bool isDialogVisible(std::string const & name) const;

View File

@ -218,6 +218,8 @@ public Q_SLOTS:
/// close the tab given by \c index /// close the tab given by \c index
void closeTab(int index); void closeTab(int index);
/// ///
void moveTab(int fromIndex, int toIndex);
///
void updateTabTexts(); void updateTabTexts();
private Q_SLOTS: private Q_SLOTS:
@ -226,8 +228,6 @@ private Q_SLOTS:
/// ///
void showContextMenu(const QPoint & pos); void showContextMenu(const QPoint & pos);
/// ///
void moveTab(int fromIndex, int toIndex);
///
void mouseDoubleClickEvent(QMouseEvent * event); void mouseDoubleClickEvent(QMouseEvent * event);
private: private: