Открытие документов из Windows с помощью программ Cygwin напрямую

Я думаю, вы можете комбинировать git blameи git merge-base, чтобы получить нужную информацию:

git blame -n $(git merge-base A B).. -- file | grep -v "^^" | grep "$PATTERN"

Это находит общего предка между A и B, затем запускает git blameна file, игнорируя все, что старше общего предка (нотация ..указывает git blameпросматривать ревизии, начинающиеся с предка и заканчивая текущей головкой ). -nдобавляет номера строк в вывод. Затем grep -v "^^"удаляет все строки, которые не изменились со времени общего предка, и, наконец, grep "$PATTERN"ищет шаблон только среди строк, которые изменились. Поскольку git blameв обратном режиме без -показывает только те строки, которые в данный момент находятся в файле, результаты будут включать только добавленные или измененные строки, что точно эквивалентно вашему фильтру ^\+.

1
02.05.2020, 19:29
2 ответа

Создайте пакетный файл, например:

@echo off
D:
chdir D:\cygwin64\bin
set A=%1
bash --login  -c "/usr/bin/echo $(cygpath  $A)"
pause

В корневом каталоге Cygwinдолжен присутствовать Cygwin.bat, который будет использоваться как основание.
Поместите ссылку на батник в папку SendTo

Теперь, когда я отправляю изображение из папки «Изображения», У меня в новом окне CMD:

/cygdrive/c/Users/Marco/Pictures/img250.jpg
Drücken Sie eine beliebige Taste...

Последнее — Press any keyна немецком языке.
Отсюда вы можете изменить пакет для запуска любой программы cygwin, которую вы хотите.

Если вы планируете использовать X-сервер, вероятно, лучше иметь уже запущенный Xwin-сервер из-за возможных проблем с синхронизацией при выполнении.

1
28.04.2021, 23:16

Проблема с решением Мацери заключается в том, что оно работает только для самых разумных имен файлов. Пробел в имени файла уже нарушает его.

Помните, что если C:\book 1.pdf— документ, который нужно открыть, мы хотим получить строку, в которой на стороне bash экранирование правильное -вот так:

"/usr/bin/zathura \"$(cygpath 'C:\book 1.pdf')\""

Но Windows передает путь к документу в качестве аргумента пакетному -сценарию двумя разными способами:

  • "открыть с помощью":всегда двойные -кавычки.
  • "перетаскивание":только иногда двойные -кавычки (при наличии пробелов ).

Из-за очень сложных правил перехода в пакетном языке, возможно, лучше использовать множество промежуточных переменных для построения строки; иначе сойдешь с ума.

Мы можем использовать:

  • ^экранирует ". Но только в строках без кавычек, см. здесь !

  • set x=%x:"=%— это замена "ничем в строке переменной x.

  • Одинарная кавычка 'является обычным символом, и ее не нужно экранировать.

Итак, следующий пакетный файл выполняет эту работу:

@echo off
C:
cd C:\cygwin64\bin
set pdfpath=%1
set pdfpath=%pdfpath:"=%
set cygpart=$(cygpath '%pdfpath%')
set fullcmd=/usr/bin/zathura \^"%cygpart%\^"
bash -l -c "%fullcmd%"
pause

Там может быть какое-то странное имя файла, которое все еще ломает его. Но, по крайней мере, это работает для всех нормальных имен файлов, включая те, которые содержат пробелы, круглые скобки и квадратные скобки.

1
28.04.2021, 23:16

Теги

Похожие вопросы