좌충우돌 Alfred Workflow 제작 경험담

파워팩 사놓고 기본 사용자 정도로만 사용하다가, 최근에 간단한 Alfred Workflow 2개를 만들어 봤다.

뭐 경험 후기라고 해봐야 사실 별건 없지만…

라고 할 수 있다.

JavaScript를 좋아하는 관계로 JXA(Javascript For Automation)를 사용하게 된 점을 제외하고는..

흔한 경험담 정도일 듯 하다.

API 호출해서 JSON Output 가져오기

CURL로 손쉽게 가져오면 되겠거니 싶었는데.. app.doShellScript() 를 사용해서 만들때 당황했던 점은…

Shell Command의 Output을 Capture 할 수 없다는 점이다. -_-;;

(뭐 사실, Output을 파일로 남기고 파일을 읽어와도 되긴 하지만…)

하지만 Pipe to subprocess stdin for JXA 에 달린 Comment 중 하나를 사용해 손 쉽게 Output을 얻을 수 있었다.

여튼, Output을 얻었으니 JSON.parse()로 손쉽게 사용할 수 있게 되었다.

Alfred에서 사용하는 Item List로 바꿔주기

이건 Alfred에서 제공하는 가이드 문서를 살펴보면 된다.

앞에서 받은 Data를 아래와 같이 XML로 만들어 주면 되겠다.

<items>
    <item valid="YES" autocomplete="Desktop">
        <title>항목1</title>
        <subtitle>설명1</subtitle>
        <icon>아이콘1Path</icon>
    </item>
    <item valid="YES" autocomplete="Desktop">
        <title>항목2</title>
        <subtitle>설명2</subtitle>
        <icon>아이콘2Path</icon>
    </item>
</items>

아, Alfred 3이 나오면서 기존에 사용하던 XML 방식이 Legacy가 되버렸다. 이제는 JSON으로!

어쩌지! 한글이 분해가 되버렸어!

한글을 입력하면 query 값에 한글이 분해되어 들어가 있었다.

(╯°□°)╯︵ ┻━┻

어쩌지 하고 있었는데 이미 누군가 원인을 파악 했더라!

Mac에서 alfred workflow를 만들다보면 한글 argument 비교 처리가 안 되는 현상이 있습니다. Mac에서 unicode를 NFD(Normalization Form Decomposition)으로 처리를 해서 생기는 문제입니다. Windows나 python 등에서는 NFC로 처리가 됩니다. (from http://jmjeong.com/unicode-in-alfred-workflow/)

JavaScript용을 찾다보니 unorm 라이브러리를 알게 되었고, 이걸 사용해 다시 변환해서 해결했다.

// Alfred에서 넘겨주는 문자열 q를 NFC로 처리한 다음 Encoding 함
encodeURIComponent(q.normalize('NFC'))

그 밖에…

단순한 API 호출 결과를 Workflow에 보여주는 건 이제 단순한(?) 작업이 되어 버렸다.(아니면 내가 단순한건가…)

p.s. @fallroot의 JXA 사용 경험담이 무척 큰 도움이 되었다(사실 그 전에는 JXA 존재 자체를 몰랐음). 감사요~

Back