Vim에서 트윗을 니코 동의 코멘트 스타일로 흘립니다.

7058 단어 트위터Vim
안녕하세요
고릴라입니다.

평소 브라우저에서 Twitter를 하고 있습니다만, 최근 Vim과 브라우저를 전환하는 것이 귀찮다고 느끼고 있습니다.
거기서, Vim에서 작업하면서 트윗을 니코동의 코멘트풍에 흘리면 편리한 것은? 라고 생각했기 때문에 했습니다.

검증 결과





화면이 묻혀서 일할 수 없는 것 같았습니다.
죄송합니다...

검증에 사용되는 것


  • twty
  • Vim v8.1.1364 ~

  • 검증 방법



    전체 흐름은 대략 다음과 같습니다.
  • twty에서 정기적으로 타임 라인 JSON 얻기
  • JSON에서 트윗 텍스트 추출
  • 창을 생성하고 오른쪽에서 왼쪽으로 이동

  • twty로 정기적으로 타임 라인 JSON을 얻습니다.


    twty에는 timeline을 지정한 간격으로 polling하는 기능이 있습니다.
    다음 명령을 실행하면 20s 간격으로 timeline json이 반환됩니다.
    twty -S 20s -json
    

    Vim에는 외부 명령을 비동기적으로 실행하는 job_start 함수가 있으므로,
    이것을 사용하여 명령을 호출하면 트윗 JSON을 얻을 수 있습니다.
    call job_start(["twty", "-S", "20s", "-json"], #{
          \ out_cb: function('s:tweet'),
          \ err_cb: function('s:onerr')
          \ })
    

    JSON에서 트윗 텍스트 추출


    out_cb 에서 지정한 함수에 JSON이 들어오므로 그것을 decode하여 트윗 텍스트를 꺼냅니다.timer_start에서 무작위로 지연하여 창을 생성하는 타이밍을 어긋나고 있습니다.
    function! s:tweet(ch, msg) abort
      let obj = json_decode(a:msg)
      if obj.text is# ""
        return
      endif
      let wait = rand(srand()) % 12
      call timer_start(wait*800, function('s:comment', [obj]))
    endfunction
    

    창을 생성하여 오른쪽에서 왼쪽으로 이동


    popup_create에서 창을 만듭니다.
    그 때, 윈도우의 상하의 위치를 ​​랜덤으로 배치하기 (위해)때문에, line 옵션에 난수를 사용하고 있습니다.
    function! s:comment(obj, timer) abort
      let winid = popup_create(a:obj.text, #{
            \ col: &columns - 40,
            \ line: rand(srand()) % &lines,
            \ minwidth: strlen(a:obj.text),
            \ maxwidth: 40,
            \ tabpage: -1,
            \ zindex: 300,
            \ })
    
      call timer_start(100, function("s:move", [winid]), #{
            \ repeat: -1,
            \ })
    endfunction
    

    창을 만든 후에는 timer_start로 이동합니다.
    가장 왼쪽으로 이동하면 타이머를 멈추고 창을 끕니다.
    function! s:move(winid, timer) abort
      let opt = popup_getpos(a:winid)
    
      if opt.col is# 1
        call timer_stop(a:timer)
        call popup_close(a:winid)
        return
      endif
    
      let opt.col -= 1
      call popup_move(a:winid, opt)
      redraw
    endfunction
    

    검증 코드



    여기에 올려 두었으므로, 시험해보고 싶은 분은 부디.
    skanehira/tweet-comment.vim

    좋은 웹페이지 즐겨찾기