프로그래밍 방식 / 스크립트 방식으로 기본 Open-With 설정 변경


8

프로그래밍 방식으로 / 스크립트로 파일 형식을 여는 앱을 변경하는 방법이 있습니까?

기본적으로 때로는 웹 사이트에서 작업하고 있으며 모든 웹 파일을 텍스트 편집기 (* .php, * .html, * .htm 등)로 열도록 설정하려고합니다.

그러나 다른 경우에는 파일을보고 싶으므로 브라우저에서 열 수 있기를 원합니다.

지금은 도크 아이콘으로 항목을 드래그하고 있지만 작동하지만 특히 키보드로 많은 수의 파일을 처리 할 때 속도가 느립니다.

기본적으로, 내가 원하는 것은 작은 applescript / 모든 open-with 설정을 변경하는 것입니다.
이렇게하면 각 open-with 프로그램에 대해 하나의 스크립트를 가질 수 있으며 앞뒤로 변경할 수 있습니다.

감사.

답변:


10

이것은 가능하지만 생각만큼 간단하지는 않습니다. Uniform Type Identifiers에 익숙해 져야합니다. Wikipedia의 Uniform Type Identifier 페이지를보십시오.

OS X은 기본 설정 파일에 대한 정보를 이름이있는 기본 설정 파일에 저장합니다 com.apple.LaunchServices.plist. 해당 파일을 찾아 수정하기 전에 기본값 ( "설정")에 대한 OS X의 도메인 계층 구조에 익숙해지는 것이 좋습니다. 이것에 대한 적절한 기사는 여기 에서 찾을 수 있습니다 . (면책 조항 : 그들은 그 사이트에서 무언가를 팔고있는 것 같습니다. 나는 그것이 무엇인지 알지 못하고 그들과 관련이 없습니다. 설명은 단지 좋은 것입니다.)

이제 기본 및 UTI (의료 종류가 아닌)에 대한 모든 정보를 알았으므로 이제 스크립트 / 명령 줄에서 파일 연결 설정에 대해 이야기 할 수 있습니다.

먼저, 연결하려는 파일을 식별하는 올바른 방법을 알아야합니다.

UTI가 중요하다고 어떻게 말했는지 기억하십니까? 파일을 식별하는 방법에는 여러 가지가 있습니다. 형식이 시스템에서 공식적으로 선언되었는지 여부에 따라 다릅니다. 예를 들어 TextMate 또는 TextWrangler와 같은 괜찮은 텍스트 편집기는 시스템에서 사용할 때 유형 계층 구조에 유형 선언을 상당히 추가합니다. 그러나 해당 응용 프로그램이없는 경우 해당 유형을 선언하지 않았을 수 있습니다.

알겠습니다 예 :

파일의 UTI를 가져옵니다.

$ mdls myFile.xml
...
kMDItemContentType             = "public.xml"
kMDItemContentTypeTree         = (
    "public.xml",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
...

그래요 좋아요. 사용할 수있는 명시적인 컨텐츠 유형입니다. 어딘가에 적어 둡니다.

$ mdls myFile.myExtn
...
kMDItemContentType             = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree         = (
    "public.data",
    "public.item"
)
...

죄송합니다. OS X은 ".myExtn"파일에 대해 모른다. 그래서 우리는 아무것도 사용할 수없는 역동적 인 UTI를 만들었습니다. 그리고 부모 유형은 너무 일반적이기 때문에 유용하지 않습니다.

파일이 무엇인지 알았으므로 LaunchServices.plist 파일을보고 수행 할 수있는 작업을 살펴 ​​보겠습니다.

$defaults read com.apple.LaunchServices
{
    ...
    LSHandlers =     (
                {
            LSHandlerContentType = "public.html";
            LSHandlerRoleAll = "com.apple.safari";
            LSHandlerRoleViewer = "com.google.chrome";
        },
    ...
                {
            LSHandlerContentTag = myExtn;
            LSHandlerContentTagClass = "public.filename-extension";
            LSHandlerRoleAll = "com.macromates.textmate";
        },
    ...
    );
    ...
}

따라서 사용할 "좋은"컨텐츠 유형이 있으면 첫 번째 구성이 더 좋습니다. 그렇지 않으면 다른 구조. 해당 파일에는 다른 구성이 있지만 요청한 내용과 관련이 없습니다. 출력을 볼 때 그것들이 있다는 것을 알면됩니다.

보시다시피 사용하려는 응용 프로그램의 UTI를 찾아야합니다. Safar 및 TextMate의 UTI는 위의 예에 있지만 일반적으로 응용 프로그램의 UTI를 찾으려면 다음과 같습니다.

$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
        <key>CFBundleIdentifier</key>
        <string>com.apple.Safari</string>
...

참고 : 나는이 없다 LSHandlerRoleAll와 LSHandlerRoleViewer의 차이를 구성하는 것에 아이디어를. 어디에서나 문서를 찾을 수 없습니다. 내가 참조입니다 LSHandlerRoleAll는 시간의 99 % 만 한 세트 (즉,이 더 LSHandlerRoleViewer이 전혀 없음) 그리고 그것은 당신이 가진 유형을 연결하고자하는 응용 프로그램에 대한 UTI로 설정되어 있는지.

지금까지 당신을 데려왔으므로 독자에게 연습으로 원하는 값을 설정하는 방법을 남겨 두겠습니다. 이러한 것들에 대한 혼란은 다소 위험 할 수 있습니다. 파일을 망쳐 놓고 파일 연결이 작동하지 않는 것은 전적으로 가능합니다. 그런 다음 파일을 버리고 다시 시작해야합니다.

몇 가지 힌트 :

  • 읽기 defaults write및 구문
  • 살펴보십시오 PlistBuddy. man PlistBuddy/usr/libexec/PlistBuddy -h
  • 이 넌센스를 모두 건너 뛰고 RCDefaultApp을 사용 하십시오.

RCDefault는 스크립트 가능합니까? 나는 그들의 사이트를 살펴 보았지만 보이지 않습니다.
가짜 이름

내가 관심이있는 모든 파일 형식에 대한 형식 선언이 있습니다.
가짜 이름

훌륭한 글쓰기. 까지는 LSHandlerRoleViewer편집이 아닌 기본보기와 관련이 있는지 궁금합니다 ( apple.stackexchange.com/a/49998/206073 ). 그러나 어떤 맥락에서 볼 것인지 편집 할 수 있는지 여부를 알 수는 없지만 ... (주제에서 CFBundleTypeRole유사한 값을 받아들이는 것처럼 보입니다)
Brett Zamir

또한, 그것은 com.apple.LaunchServices/com.apple.launchservices.secure이후의 MacOS 시스템에서 도메인이 될 것 같습니다 ...
Brett Zamir

2

한 가지 옵션은 편집하는 것입니다 ~/Library/Preferences/.GlobalPreferences.plist.

defaults write com.apple.LaunchServices LSHandlers -array-add '{LSHandlerContentType=com.adobe.pdf;LSHandlerRoleAll=net.sourceforge.skim-app.skim;}'

PlistBuddy를 사용하여 항목이 이미 있는지 확인할 수 있지만 Launch Services 데이터베이스를 다시 시작하거나 다시 작성하지 않고 변경 사항을 적용 할 방법을 찾지 못했습니다.

duti 사용하면 duti ~/.duti다음과 같이 저장 한 후 실행할 수 있습니다 ~/.duti.

net.sourceforge.skim-app.skim .pdf all

1

실제로 귀하의 질문에 대답하지는 않지만 해결책이 될 수 있습니다.

Finder 의 Inspector현재 선택된 파일에 대한 정보를 제공 합니다.

+ +I

Finder 의 요약 정보 창은 여러 파일 을 선택할 때 유용합니다 .

^+ +I

동일한 유형의 파일을 여러 개 선택한 경우 위의 방법 중 하나를 사용하면 해당 파일 의 Open with : 속성 을 쉽게 전환 할 수 있습니다 .


0

정확한 질문에 대한 답변이 아니라 가능한 다른 해결책입니다. 명령 행에서 -a 인수를 사용하여 특정 응용 프로그램으로 문서를 열 수 있습니다.

예를 들어, 현재 디렉토리에서 모든 html 파일을여십시오.

> open -a 'Google Chrome' *.html

Atom 텍스트 편집기에서 index.html 및 javascript 컨트롤러 파일을여십시오.

> open -a 'atom' index.html js/controllers/*.js

필요에 따라 선택한 파일 경로를 인수로 사용하여 바로 가기 키를 할당 할 수있는 Automator 서비스로이를 수정할 수 있습니다.

다음은 파일을 입력으로 받아 Chrome에서 선택한 파일을 여는 Automator AppleScript의 예입니다.

on run {input, parameters}
set openFiles to "open -a 'Google Chrome' " --note the trailing space
set filePaths to {}

--covert the filePaths to posix style
repeat with i from 1 to count of input
    set aFile to input's item i as alias
    set aFile to quoted form of POSIX path of aFile
    set filePaths's end to aFile
end repeat

--convert filePaths list to a string delimited by spaces
set tid to text item delimiters
set text item delimiters to " "
set filePaths to filePaths as text
set text item delimiters to tid

--Open files via commandline
do shell script openFiles & filePaths
return input

최종 실행

분명히 앱 이름 "Sublime"텍스트 편집기를 변경하여 다른 서비스로 저장 한 다음 두 단축키를 모두 지정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.