Изменить вывод из буфера обмена при вставке - PullRequest
1 голос
/ 24 октября 2019

Мне часто приходится копировать пути к файлам из программ или диалоговых окон Windows 10 в мой код R. Поскольку R избегает обратной косой черты, мне всегда приходится изменять обратную косую черту для прямой или двойной обратной косой черты, поэтому я пытаюсь запрограммировать эту проблему так, чтобы в любое время я копировал текст, а затем использовал некоторую специальную комбинацию сочетаний клавиш для вставки, которая заменяла бымои обратные косые черты с двойными обратными косыми чертами. Так, например, если я скопировал «C: \ windows \ system32 \ drivers \ etc», а затем нажал некоторую комбинацию клавиш, например Ctrl + Alt + P (или даже используя контекстное меню правой кнопкой мыши), я бы хотел изменить вставленныйвывод на "C: \\ windows \\ system32 \\ drivers \\ etc" вместо того, что было скопировано. Я думал, что смогу сделать это в PowerShell с помощью чего-то вроде этого:

$copiedtext = Get-Clipboard;
$copiedtext = -join(-join('"', $copiedtext -replace "\\", '\\'), '"');
Set-Clipboard $copiedtext;
Write-Output $copiedtext | clip

Но это только выводит мой буфер обмена на консоль (и не работает, если я назначаю ярлык для моей программы PowerShell иназначить ему клавиши быстрого доступа). Кто-нибудь может порекомендовать, как изменить это, чтобы добиться того, чего я хочу, или порекомендовать какой-нибудь другой язык, который позволил бы Windows всегда распознавать некоторую комбинацию сочетаний клавиш в качестве моей специальной операции вставки? Я хотел бы сделать это, не запуская программу, если я тоже хочу ее использовать, если это возможно.

1 Ответ

1 голос
/ 24 октября 2019

Примечание. Хотя работает следующий подход:

  • медленно
  • не полностью надежен

В конечном счете, вам лучше выглядетьдля решения на основе специализированного инструмента, такого как AutHotkey .


  • Создайте сценарий, скажем $HOME\pasteEscaped.ps1, со следующим содержимым:
# Get text from the clipboard and escape '\' chars. as '\\'
$escapedText = (Get-Clipboard -Format Text) -replace '\\', '\\' 

# Helper COM object for sending keystrokes.
$sh = New-Object -ComObject WScript.Shell

# Switch back to the previously active application...
$sh.SendKeys("%{tab}")
Start-Sleep -Milliseconds 100
# ... and send the escaped text. additionally escaped for .SendKeys()
$sh.SendKeys(($escapedText -replace '[{}()+^%]', '{$&}'))
  • Создайте файл ярлыка, например, на рабочем столе, со следующими свойствами:

    • Цель:

      powershell.exe -executionpolicy bypass -noprofile -file %USERPROFILE%\pasteEscaped.ps1
      
    • Прогон: Minimized

    • Клавиша быстрого доступа: (комбинация клавиш на ваш выбор)


После этого, когда вы нажимаете клавишу быстрого доступа, текст извлекается из буфера обмена, экземпляры \ в нем удваиваются, а результирующий текст вставляется в окно переднего плана, используя имитированный ввод с клавиатуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...