· 톺아보기

맥당이야기

[alfred 3] bookmark workflow

jmjeong ·

조회 5,045 · 공감 2 · 댓글 12

 

단축키를 이용하여 URL을 북마킹, 태그 부여, 검색, 실행할 수 있습니다.

pinboard.in 검색하고 관리하는 alfred-pinboard를 만들어 사용하다, 버전업을 하면서 pinboard.in 계정이 없더라도 사용할 수 있도록 확장했습니다.

pinboard.in 계정 연동 후에는 pinboard.in에서 수정한 내용을 pbreload 명령을 통해 읽어올 수 있습니다.

다음 기능을 제공합니다.

  • 북마크 등록 - safari, chrome에서 보고 있는 페이지를 hotkey로 등록
    • 등록 시 북마크에 여러 태그를 부여할 수 있습니다
  • 북마크 검색 - 부분검색 지원
  • 북마크 삭제
  • 북마크마다 [private], [star] 속성을 지정할 수 있습니다
    • 검색 시 [private], [star]로 조건을 부여할 수 있습니다.
  • 태그 별 북마크 검색
  • 다양한 정렬 옵션
    • 최근 사용
    • 자주 사용
    • 등록 순서 별
  • pinboard 연동
    • 첫 연동 시에 pinboard 데이타로 교체되며 local 저장된 북마크는 지워집니다
    • 연동 후에는 등록, 삭제가 pinboard와 연동하여 동작합니다.
    • pbreload 명령으로 pinboard에서 내용을 local db에 반영합니다.

인스톨

Workflow를 인스톨하고 난 후, 초기화된 키 설정을 다시 합니다.

  • Cmd-Shift-Ctrl-P : Workflow launch (검색 조건은 설정에 따릅니다)
  • Cmd-Shift-Ctrl-K : 모든 북마크를 검색에 포함(private, mark 설정 무시)
  • Cmd-Shift-Ctrl-L : Mark 설정된 북마크만 검색
  • Cmd-Shift-Ctrl-; : 북마크 추가 (브라우저가 활성화된 상태에서만 동작합니다)

북마크 속성 별 검색

북마크는 private, mark 속성을 지정할 수 있습니다. 기본 검색은 private 지정되지 않는 북마크만 검색합니다. 검색 조건은 설정 메뉴에서 변경 가능합니다.

  • private : [shift] modifier로 변경할 수 있습니다.
  • star : [ctrl] modifier로 변경할 수 있습니다.
  • [태그 검색] 메뉴에서 해당 태그 속성을 가진 모든 북마크를 private, mark on/off 가능합니다.
    • ctrl: set mark, shift: unset mark, alt: set private, cmd: unset private

설정

  • mark[filter] - mark 속성을 지닌 북마크를 검색에 포함시킬 것인지 지정. all - 모두 검색, on - mark 만 검색, off - mark 지정되지 않는 것만 검색
  • private[filter] - private 속성을 지닌 북마크를 검색에 포함시킬 것이지 지정. all - 모두 검색, on - private 만 검색, off - private 지정되지 않는 것만 검색
  • sort - 정렬 옵션
    • accessed, launch_count, time - 최근 호출 booker 별 정렬 (default)
    • launch_count, accessed, time - 북마크 호출 횟수 별 정렬
    • time, accessed - 북마크 등록 순서별 정렬

명령어

  • bm (ctrl-shift-cmd-p) - 메인 검색. 설정에 지정된 값을 기반으로 검색합니다.

  • bm으로 구동된 후 명령어

    • ! (ctrl-shift-cmd-k) - private 지정된 북마크 도 검색에 포함
    • * (ctrl-shift-cmd-l) - start 지정된 북마크 만 검색
    • + (ctrl-shift-cmd-;) - 웹 브라우저가 활성화 되었을 경우에만 동작합니다. 북마크 추가 단축키.
    • # - 태그 검색. tab이나 enter 누르면 해당 태그에 속한 북마크만 검색

alfred-bookmark의 각 북마크에는 다음과 같은 명령을 내릴 수 있습니다.

  • Enter : 북마크를 구동합니다
  • Ctrl : mark 설정을 on/off 바꿉니다
  • Shift : private 설정을 on/off 바꿉니다
  • Alt : 북마크를 지웁니다
  • Cmd : URL을 복사합니다

Mark, Private 설정은 tag 검색 메뉴에서 소속된 모든 북마크에 적용 가능합니다. 예를 들어 #mac tag에 포함된 북마크 모두를 private로 변경이 가능합니다.

댓글 12

  1. 니니바바 ·
    jmjeong님의 깃허브에서 몇몇 워크플로우들을 유용히 잘 사용중이라 일단 감사의 말씀부터 전합니다.

    Alfred 3 사용중이고 jmjeong님의 기존 alfred-pinboard 워크플로우를 사용중,
    이 게시글에서 bookmark 워크플로우를 받아 설치했는데 전혀 작동을 하지 않습니다.
    본문과 같이 hotkey를 설정하고 hotkey로 동작을 했습니다.
    pbreload 역시 아무런 반응이 없는데 혹시 왜그런지 알 수 있을까요?
    ps. 기존 alfred-pinboard 워크플로우를 지우고 재부팅하고 캐쉬며 인덱싱도 다시 해봤지만 여전히 아무런 반응이 없습니다
  2. jmjeong ·
    alfred debug 창에 어떤 메시지가 나오나요?
  3. 니니바바 ·
    Ctrl+Shift+Cmd+P 로 구동, 그리고 Ctrl+Shift+Cmd+J로 호출시 뜬 debug창입니다.

    Starting debug for 'bookmark'

    [2016-07-11 11:13:22][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.20CB3210-12D6-4140-B86B-C6F4F44BD92A/util.py", line 102, in opendb
    conn = sqlite3.connect(os.path.expanduser(dbname))
    sqlite3.OperationalError: unable to open database file
    [2016-07-11 11:13:45][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.20CB3210-12D6-4140-B86B-C6F4F44BD92A/util.py", line 102, in opendb
    conn = sqlite3.connect(os.path.expanduser(dbname))
    sqlite3.OperationalError: unable to open database file

    그리고 pbreload 작동시 뜬 내용입니다.
    [2016-07-11 11:15:47][ERROR: action.script] Traceback (most recent call last):
    File "reload.py", line 96, in
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.20CB3210-12D6-4140-B86B-C6F4F44BD92A/util.py", line 102, in opendb
    conn = sqlite3.connect(os.path.expanduser(dbname))
    sqlite3.OperationalError: unable to open database file

    혹시나해서 화면녹화해봤습니다만, 모든 키 입력후에는 엔터를 쳤습니다(제겐 이걸 보여드리는 기능이 없네요 ;;)



    기존의 핀보드 워크플로우는 모든기능이 정상작동합니다만, bookmark 워크플로우만 아무런 반응이 없습니다.
  4. jmjeong ·
    네. 어떤 상황인지 파악했습니다. workflow를 import할 때 alfred가 data dir를 만든다고 생각했는데, 만들지 않았나 보네요. guard code를 넣은 버전을 다시 release 하도록 하겠습니다.
  5. 니니바바 ·
    jmjeong님// 감사합니다 :)
  6. jmjeong ·
    github에 release된 버전으로 다시 한번 테스트해 보시겠어요?
  7. 니니바바 ·
    방금 새로 받아 테스트해봤는데 여전히 안되는군요.

    Debug창 메세지입니다.

    Starting debug for 'bookmark'

    [2016-07-11 11:42:29][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
    [2016-07-11 11:42:38][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
    [2016-07-11 11:42:44][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
    [2016-07-11 11:42:46][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
    [2016-07-11 11:42:46][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
    [2016-07-11 11:42:47][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
    [2016-07-11 11:42:47][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
    [2016-07-11 11:42:48][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
    [2016-07-11 11:42:48][ERROR: input.scriptfilter] Code 1: Traceback (most recent call last):
    File "main.py", line 416, in
    main()
    File "main.py", line 390, in main
    conn = util.opendb()
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 100, in opendb
    dbpath = get_dbpath();
    File "/Users/seed/Dropbox/Backup/OS X-Mac/BackUp for Mac/Alfred Workflow/Alfred.alfredpreferences/workflows/user.workflow.91F29479-2441-45B0-A773-B87CED66C80F/util.py", line 97, in get_dbpath
    return os.path.exppanduser(workflow_dir)
    AttributeError: 'module' object has no attribute 'exppanduser'
  8. jmjeong ·
    오타가 났네요. 다시 한번 테스트 해 주세요.
  9. 니니바바 ·
    감사합니다. 방금 테스트해봤는데 이제 모두 잘 작동하네요. 신경써주셔서 감사합니다. :)

    핀보드 계정 토큰 넣는 방법을 몰라 한참을 찾다가 혹시 저와 같을 다른분들을 위해 덧글 남깁니다.
    bm(또는 핫키)으로 호출 후, _ (언더바)를 입력하니 세팅 메뉴들이 뜨는군요.
  10. jmjeong ·
    첫번째 라인에서 Enter를 치면 설정 메뉴로 들어갑니다(그냥 _ 입력하는 것과 같습니다). 4번째 메뉴가 Pinboard 계정 설정 메뉴입니다. 아니면 명령창에 _pbauth 를 입력하셔도 되고요.
  11. 니니바바 ·
    기존엔 핀보드 추가시 핀보드 웹에서 제공하는 책갈피를 통한 자바스크립으로 사용하여왔는데,
    이게 다중태그 입력시 키보드만으로 만지기엔 좀 불편했습니다.
    그런데 이 워크플로우에서는 다중태그 입력시 정말 편하네요. ^^
  12. jmjeong ·
    safari 쓰다가 chrome으로 넘어오고는 hotkey가 먹지 않아서 pinboard 입력 용 extension을 받아서 썼습니다. 아무래도 사용하다보니 불편해서 alfred workflow로 만들었습니다. 편하죠? ^^

    매뉴얼에는 따로 명시를 하지 않았는데, Dropbox를 통해 db를 공유해서 사용할 수 있습니다.

    ~/Library/Application Support/Alfred 3/Workflow Data/com.jmjeong.bookmark directory 내에
    config.json 파일을 하나 만들고, 아래와 같이 지정하면 Dropbox folder로 사용하는 DB를 옮길 수 있습니다.

    {
    "DBPATH": "~/Dropbox/bin"
    }

MaClien 최근 글

MaClien 목록 더 보기