Access Finder «Открыть с» меню из командной строки (для завершения вкладки)

В Mac OS X я знаю, что можно открыть файл из командной строки с приложением по умолчанию с open и с другими приложениями с open -a <application name> . Таким образом,

 open movie.avi open -a VLC movie.avi open movie.avi -a VLC 

Все работа. Моя единственная жалоба заключается в том, что когда я печатаю

 open movie.avi -a <TAB> 

Он завершается по всем приложениям, которые существуют на компьютере – например, в zsh я получаю

 zsh: do you wish to see all 793 possibilities (200 lines)? 

– хотя я бы хотел, чтобы он заполнил только несколько приложений, которые отобразилось в меню Finder «Open With».

Итак, есть ли способ получить доступ к этому списку, который знает Finder, и заставить мою оболочку (zsh, но я могу переключиться на bash, если она помогает) узнать о списке, таким образом, что в завершении табуляции будут отображаться только те приложения?

2 Solutions collect form web for “Access Finder «Открыть с» меню из командной строки (для завершения вкладки)”

AllApplications

 $ AllApplications -h Created 03 March 2011 by Hank McShane version 0.1 requires Mac OS X 10.4 or higher Use this command line tool to get the path to all applications that can open a file from Launch Services. Usage: AllApplications -path path/to/file $ ext=png; f=/tmp/allapps.$ext; touch $f; AllApplications -path $f; rm $f /Applications/Preview.app /2/copies/Safari.app /Applications/TeX/LaTeXiT.app /Applications/WebKit.app /Applications/Sequential.app /Applications/ImageOptim.app /Applications/Acorn.app /Developer/Applications/Graphics Tools/Core Image Fun House.app /2/copies/Preview.app /Developer/Applications/Dashcode.app /Applications/GraphicConverter.app /Applications/Google Chrome.app /Applications/Adobe Photoshop CS5/Adobe Photoshop CS5.app /Applications/Utilities/QuickTime Player 7.app /Applications/Utilities/ColorSync Utility.app /Applications/Safari.app /Applications/Adobe Device Central CS5/Adobe Device Central CS5.app /Applications/Firefox.app . $ AllApplications -h Created 03 March 2011 by Hank McShane version 0.1 requires Mac OS X 10.4 or higher Use this command line tool to get the path to all applications that can open a file from Launch Services. Usage: AllApplications -path path/to/file $ ext=png; f=/tmp/allapps.$ext; touch $f; AllApplications -path $f; rm $f /Applications/Preview.app /2/copies/Safari.app /Applications/TeX/LaTeXiT.app /Applications/WebKit.app /Applications/Sequential.app /Applications/ImageOptim.app /Applications/Acorn.app /Developer/Applications/Graphics Tools/Core Image Fun House.app /2/copies/Preview.app /Developer/Applications/Dashcode.app /Applications/GraphicConverter.app /Applications/Google Chrome.app /Applications/Adobe Photoshop CS5/Adobe Photoshop CS5.app /Applications/Utilities/QuickTime Player 7.app /Applications/Utilities/ColorSync Utility.app /Applications/Safari.app /Applications/Adobe Device Central CS5/Adobe Device Central CS5.app /Applications/Firefox.app 

duti

 $ duti -d public.png com.apple.Preview $ duti -l public.png com.SequentialX.Sequential com.flyingmeat.Acorn net.pornel.ImageOptim com.apple.system-library com.apple.ColorSyncUtility com.apple.Preview 

(В нем отсутствуют некоторые приложения, которые отображаются в открывшемся меню.)

Мне кажется, что

Он завершается по всем приложениям, которые существуют на компьютере – например, в zsh я получаю

неправда. Кажется, что нет никакой информации о команде open в bash или zsh. Поэтому нажатие просто использует резервную копию и завершает работу над всеми файлами в текущем рабочем каталоге.

Если вы хотите, чтобы bash знал о ожидаемых аргументах после ключа -a команды open , вам нужно будет написать шаблон завершения bash.

Для этого вам необходимо ознакомиться с complete оболочкой

 $ help complete complete: complete [-abcdefgjksuv] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...] For each NAME, specify how arguments are to be completed. If the -p option is supplied, or if no options are supplied, existing completion specifications are printed in a way that allows them to be reused as input. The -r option removes a completion specification for each NAME, or, if no NAMEs are supplied, all completion specifications. 

OS X Lion просто указывает пользователю диалоговое окно с папкой /Applications . Чтобы получить список приложений, вы можете просто использовать

 basename -a -s.app /Applications/*.app 

Таким образом, очень рудиментарное завершение для open которое не проверяет ключ -a не обрабатывает пробелы правильно, будет выглядеть так

 _openComp() { local WLIST cur COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" WLIST=`basename -a -s.app /Applications/*.app` COMPREPLY=( $(compgen -W "${WLIST}" -- ${cur}) ) return 0 } complete -F _openComp open 

Это относится к bash, я не знаком с поведением Zsh.

Interesting Posts

Отображение стека соединений ssh ​​в терминале

Как открыть меню с «Open Terminal Here» в Ubuntu 10.04, щелкнув левой кнопкой мыши на рабочем столе или внутри папки?

Startd, похоже, игнорирует StartCalendarInterval на Yosemite

Будет ли перезапуск Windows 10 удалять разделы Linux?

Как восстановить или «восстановить» файлы, которые я случайно удалил?

Что не так с использованием goto?

Есть ли исчерпывающий список того, что Windows регистрирует или может регистрироваться?

Rsync: не удалось установить время на "<dir path>"

Как настроить кеш статического содержимого для каждой папки и расширения в IIS7?

Как добавить Google Диск на боковую панель Windows Explorer

Что такое файл .bashrc?

Lean Winamp-y плеер для OSX

Могу ли я обновить процессор без переустановки системы Xen / Ubuntu?

Сетевая карта (индикатор состояния соединения) по-прежнему активна после выключения из Windows 7 (но не из XP)

Изменение цвета ячейки на основе другого значения ячейки

Давайте будем гением компьютера.