본문 바로가기

Applications

[Alfred] 워크플로우 - 단축키로 파일 옮기기

Alfred를 2020년 5월 12일에 구입했다. 주 목적은 snippet이었지만 다른 기능이 많이 있었다.

그중 돋보이는 것은 여러 일련의 작업을 쉽게 하도록 해주는 워크플로우(workflow)인 것 같다.

어제부터 사용해서 아직 많이 있지는 않지만 처음 써보면 어느정도 시행착오가 있기 때문에 기록해두었다.

나중에는 나도 까먹을지 몰라.

 

현제 Alfred 4버전 기준으로 설명을 한다.

Workflows 메뉴를 선택하면 현재 목록을 1단계에서 보여주고, 선택하면 해당 워크플로우가 어떻게 구성이 되었는지 알 수 있다.

 

회사에서 이모지를 많이 만들고 있는데 만들고 나면 휴지통에 버리지 않고 이모지를 모아두는 디렉토리에 이동을 한다.

액션은 크게 세 가지이다.

1. Finder를 연다.

2. 단축메뉴에서 slack을 선택한다.

3. 바탕화면에서 만든 이모지를 드래그앤드랍으로 slack 디렉토리에 옮긴다.

 

GUI방식의 전형적인 동작이다.

물론 이런식으로 구성을 해도 될 수 있지만 더 좋은 방법은 컴퓨터의 관점으로 생각해보는 것이 좋다. (결국은 이것도 코딩의 일종이다.)

 

언어를 배우다 보면 다른 나라의 언어에 1:1로 매칭되지 않는 경우가 있는데 위의 위크플로우가 그런 형태였다.

사람은 Finder라는 그래픽 기반의 UI바탕에서 동작을 하지만 컴퓨터는 단순히 특정 위치의 파일의 정보를 바꾸는 것이다.

그렇다고 기계적 수준으로 내려가면 코딩을 하는 것은 어려울 것이다.

 

좀 더 저 수준인 명령어 관점을 생각해보면 좋다. 보통 CUI 또는 쉘 스크립트, 명령 프롬프트 등으로 불린다.

결국 파일을 이동하는 것은 UNIX명령으로 mv이다. (DOS나 Windows에서는 move라는 명령에 대응한다.)

$ mv [대상] [옮길곳]

Workflows의 4가지 카테고리

워크플로우에는 기능에 따라 크게 4가지로 나눈다.

  1. Triggers: 영어로 번역하면 방아쇠 정도가 되는데 무엇인가 촉발을 하는 시작을 구성할 수 있다.
  2. Inputs: 입력
  3. Actions: 실제적으로 할 동작을 지정한다. 이 글에서는 mv 명령을 실행하는 'Run Script'를 쓸 것이다.
  4. Outputs: 결과

Triggers

이 글에서는 단축키(Hotkey)를 사용한다.

작업 공간에서 control 혹은 우측 마우스를 누르면 단축 메뉴가 나오는데 Triggers > Hotkey를 선택한다.

Finder가 기본적으로 사용하는 단축키가 많아서 매핑이 되어 있지 않은 command-B로 지정했다.

Argument는 해당 이벤트가 발생할 때 인자를 지정할 수 있는데, Selection in macOS를 선택하였다.

Actions

동작은 mv 명령을 사용할 것이므로 Run Script를 생성한다.

기본적으로 쉘스크립트는 /bin/bash 가 선택되어 있는데 bash에는 mv명령이 되므로 이것을 사용한다.

아래와 같이 작성하면 현재 선택한 파일을 나의 다운로드 디렉토리로 옮긴다.

mv -n "$@" "/Users/namo/Downloads"

Trigger와 Action의 연결

Hotkey Trigger와 Run Script Action이 생겼을텐데 연결을 위해서는 연결을 시작할 아이템위에 마우스를 올리면 오른쪽 옆면에 점이 생긴다.

이 점을 끌어다 다른 박스에 드랍하면 된다.

디버깅

동작이 잘되는지 확인을 위해 디버깅 패널이 있다.

오른쪽 상단에 거미 모양의 아이콘이 있는데 누르면 아래 패널이 생긴다.

 

Finder에서 파일을 선택하고 command-B를 눌러보자.

작업에 대한 로그가 쌓인다.

만약 문제가 발생하면 스크립트 실행시 에러 메시지가 보인다.

혹시 올바르지 않은 경로일 경우 에러를 보고 문제 해결에 도움을 받을 수 있다.

환경변수 추가

혹시 프로그래밍을 해보았다면 매직넘버라는 말을 들어보았을 수 있다. Run Script 에는 옮겨질 위치를 바로 기술했다.

지금은 문제가 없지만 해당 옮겨질 경로가 바뀌게 되면 해당 내용을 각 요소마다 바꾸어주어야 한다.

해당 워크플로우는 고유한 환경변수를 선택할 수 있고 우측상단의 [x] 같은 기호를 누르면 설정이 가능하다.

TARGET_FOLDER 라는 값을 추가하고 Value 에는 아까 mv 명령에서 옮길 곳으로 지정한 곳을 설정한다.

이번에는 icloud가 연동되는 다른 경로로 바꾸었다.

해당 변수를 사용하기 위해 Run Script 를 아래와 같이 수정해준다.

mv -n "$@" "$TARGET_FOLDER"

실행, 그리고 디버깅...

파일이 제대로 옮겨지지 않아서 디버깅 팬을 열어보니 경로가 잘못되었다고 나온다.

~ 에 대한 alias가 제대로 동작을 안해서 그런 것 같아서 절대경로로 value를 바꾸었다.

바꾸고 나니 성공. 디버깅 팬은 이럴 때 유용한도구 이다.

Output 추가

스크립트로 실행이 되므로 뭔가 사용자가 파일이 옮겨졌다는 피드백을 받고 싶을 수 있다.

이럴 때는 Post Notification을 이용하면 알림 피드백을 줄 수 있다.

Title과 Text가 있는데 아래와 같이 사용이 가능하다. {query}라는 것으로 파라미터를 사용할 수 있고, 환경 변수의 경우 {var:[환경변수명]}을 쓰면 참조가 가능하다.

Title: Move to {var:TARGET_FOLDER}
Text: File: {query}

그리고 연결해주면 된다.

알려주고 옮기는 게 좋을 것 같아서 아래와 같이 구성했다. (글을 쓰다가 바꾸어서 제일 위에랑 flow가 다른데 이것은 자기마음대로 하면 된다.)

동작 테스트를 해보면 잘 동작한다.

Export

혹시 몰라 해당 워크플로우를 아래 붙여놓는다.

emoji collector.alfredworkflow
1.11MB

References

도움을 받은 사이트들을 적는다.

- 파일 선택에 대한 답변이 있던 Stack Exchange

- 복사 명령에 대한 설명과 환경변수에 대한 설명이 있던 alfredforum

- bash 명령 인자에 대한 설명이 있는 lessif

- 만약 특정 파일에 필터를 걸고 싶다면 참고할 File Filter Input : command - option - / 로 실행에 추가가 가능하다. (General > File Search 와 관련이 있다.)

'Applications' 카테고리의 다른 글

[디자인] Affinity Photo - 가이드라인 설정하기  (0) 2020.08.13
[Sibelius First] step by step  (0) 2020.07.29
Migration to Alfred 4 from TextExpander 5.1.5  (0) 2020.05.12
[app] audio editor  (0) 2020.02.20
Evernote Web Clipper  (0) 2020.02.15