Terminal

使用 shift-Insert 粘貼到 WSL

  • January 21, 2022
# When I do just Shift-Insert, I get
~$ 2~
# When I do Ctrl-V, then Shift-Insert, I get
~$ ^[[2;2~

Shift-insert 在其他情況下效果很好,例如 Windows CMD 或 Git-Bash

在wsl中,我可以使用Ctrl-Shift-V進行粘貼,但更喜歡shift-insert。

有什麼解決方法嗎?

根據微軟/WSL

請注意,WSL 發行版在 Windows 控制台中啟動(除非您已採取步驟啟動第 3 方控制台/終端)。因此,請在Windows 控制台問題跟踪器中歸檔 UI/UX 相關問題。

但是Windows Console的給定連結指向Windows Terminal

新的 Windows 終端和原來的 Windows 控制台主機,都在同一個地方!

沒有(可用的)文件,因此必須通過指向其原始碼來回答您的問題。

相關的塊(你想練習)在這裡,在windowio.cpp

   // handle shift-ins paste
   if (inputKeyInfo.IsShiftOnly() && ShouldTakeOverKeyboardShortcuts())
   {
       if (!bKeyDown)
       {
           return;
       }
       else if (VirtualKeyCode == VK_INSERT && !(pSelection->IsInSelectingState() && pSelection->IsKeyboardMarkSelection()))
       {
           Clipboard::Instance().Paste();
           return;
       }
   }

一半的條件(達到那個Paste())似乎很可能被滿足(除非這個程序中的一些錯誤)。那些不明顯的:

  • ShouldTakeOverKeyboardShortcuts()— 但這在ctrl+shift+plus/minus程式碼中使用
  • pSelection->IsKeyboardMarkSelection()— 我們假設滑鼠用於選擇。

但這是假設這種HandleKeyEvent方法平等地對待兩個不同的鍵序列。^[[2;2~來自程序的另一部分,在 中,terminalInput.cpp使用內置表

// Sequences to send when a modifier is pressed with any of these keys
// Basically, the 'm' will be replaced with a character indicating which
//      modifier keys are pressed.
static constexpr std::array<TermKeyMap, 22> s_modifierKeyMapping{

在這裡應用

// If a modifier key was pressed, then we need to try and send the modified sequence.
if (keyEvent.IsModifierPressed() && _searchWithModifier(keyEvent, senderFunc))
{
   return true;
}

從閱讀程式碼來看,這似乎都是邏輯的上游windowio.cpp因此永遠無法達到這種組合。開發人員沒有提供覆蓋或修改此行為的方法。

正如@Rody-Oldenhuis 在評論中所建議的那樣:

您可以使用wsltty;這支持 Ctrl+Ins/Shift-Ins 開箱即用

(源自薄荷)。

引用自:https://unix.stackexchange.com/questions/573597