クマーなひとときv2

雑多なメモ。twitterで書ききれないもの等。

Ank-Pixiv-Toolの履歴を、Pixiv Downloader EXにコピーした時の話

Ank-Pixiv-Toolの履歴を、 Pixiv Downloader EXにコピーしようとした時の話。

要約

  • json.toolは便利。
  • 検索結果は問題ないのに、それを:globalでレジスタに突っ込もうとすると、意図した値と別のものが入ってきた。
  • 仕方ないので、検索結果をQuickFixウィンドウに出力して事なきを得た。

Ank-Pixiv-Toolの履歴を整形する

設定画面から履歴をエクスポートした直後のデータは人間が見るには辛いため、
:%!python -m json.toolを実行して整形します。

こんな感じになります。

        [
            "NCS",
            "im9033024",
            "9356419",
            1551778748544,
            1
        ],
        [
            "PXV",
            "10575257",
            "46052",
            1546180090118,
            1
        ],
        [
            "PXV",
            "10628862",
            "46052",
            1546180094427,
            1
        ],

ここから、"PXV"の下にある数字だけ抽出したい。
上の例だと1057525710628862の2つ。

vimの\zs, \zeを使う

vimの\zs, \zeを使って、目的の値を検索します。

/"PXV",\n\s\+\"\zs\(\d\+\)"\ze

後は検索結果をレジスタに突っ込めばいいので、:globalでyankします。

:g//yank B

しかし、何故か"PXV"の部分がレジスタに登録されます。

            "PXV",
            "PXV",

仕方ないのでQuickFixを使う

検索条件を変えても駄目だったので、検索結果をQuickFixに出力して、そこからyankしました。
以下はQuickFixに出力された値の例。

C:/Users/ton/Documents/qfixapp-data/hatena/vim-grey.md|29 col 14| "10575257",
C:/Users/ton/Documents/qfixapp-data/hatena/vim-grey.md|36 col 14| "10628862",

これをyankして別バッファにpaste、数字とカンマだけに編集して取り込みました。

参考gif

f:id:tonkuma:20190308220114g:plain

雑感

多分 jq 使ったほうが楽だと思います。

Tridactylのnative messengerを入れた

Tridactylのnative messengerを入れた

以前から気になっていたけど入れるのが面倒で放置していた、TridactylのNative Messengerを追加した。
随分入れるのが楽になってて助かる。

環境

  • Windows10 64bit 1809
  • Firefox 64bit 63.0.3

Native Messenger?

https://developer.mozilla.org/ja/docs/Mozilla/Add-ons/WebExtensions/Native_messaging

WebExtensionsから出来ないことを、Native Messenger App を経由して実行する。

WebExtensionsからは直接ローカルのファイル(~/.config/tridactyl/tridactylrc)を
参照、書き込みできないので、これを経由して処理したりする。

install

:installnativeを実行すると、クリップボードスクリプトがコピーされる。
Powershellを管理者権限で開き、スクリプトを実行すればインストールされる。

  • HKCU配下のレジストリに書き込みも行うみたいなので、管理者権限で実行するのが無難っぽい。

    でもHKCUなら一般ユーザ権限でも書き込めたっけ…覚えてない

最後にFirefox上で:nativeを実行し、正常終了のメッセージが表示されればOK。

f:id:tonkuma:20181123153508j:plain

実際にインストールされるファイル

~/.tridactyl/にあった。

c:\>ls ~/.tridactyl
native_main.bat  native_main.exe  tridactyl.json

トラブルシューティング

たまに失敗する事があるらしい。
githubのissueに解決策が乗ってるかもしれない。

https://github.com/tridactyl/tridactyl/issues?utf8=%E2%9C%93&q=label%3Anativemessenger+

出来たこと

  • :source <tridactylrcのパス>を実行すると、ローカルの設定ファイルを読み込める。
  • ~/.config/tridactyl/tridactylrcを起動時に読み込んでくれる。
  • テキストエリアで<C-i>を押すと、gvimで入力、反映できる。
    • PATHにgvim.exeを追加して確認。
    • set editorcmdで任意のエディタに変更できるらしい。

最後に

FirefoxがShadowDOMに対応した*1 事もあって、自分に取って大分使いやすくなってきた感ある。

*1:MylistPocketで必要

Neovimを更新した

Neovimを更新した

久し振りにNeovim周りを更新したのでメモ。
更新した内容とか、思った事とか。

導入記事は これ

パッケージの更新

公式からビルド済みのパッケージを取得して、
そのまま上書きした。

これが正しい更新方法なのかは知らない。

設定ファイルの共有

vimと同じ設定ファイルを使うようにしたので、シンボリックリンクを貼った。

  • %USERPROFILE%/dotfiles/vim/_vimrc > %USERPROFILE%/AppData/Local/nvim/init.vim
  • %USERPROFILE%/dotfiles/vim/_gvimrc > %USERPROFILE%/AppData/Local/nvim/ginit.vim

insertから抜ける時にIMEをoffにする

上記のパッケージではiminsert=2が使えない。1
そのため、 ここ を参考に、AutoHotkeyを使った設定を追加した。

#IfWinActive ahk_exe nvim-qt.exe
  Esc::
  ^[::
    GoSub, sub_ResetIME
    Send {Esc}
    return

    sub_ResetIME:
      getImeMode := IME_GET()
      if (getImeMode == 1) {
        IME_SET(0)
      }
      return
#IfWinActive

これでnvim-qtを使用している時にESCC-[でinsert modeを抜けると、IMEがoffになる。

  • 本当はInsertLeaveイベント発生時にIMEをoffにする処理いれた方がいいと思う。

他、幾つか気になる点。

win32yankが失敗する事がある

クリップボードにコピーした内容が反映されない。結構頻繁に起きる。

vim内部だけで完結する間はどうでもいいけど、外部にテキストをコピーしたくなった時に困る。

SKK日本語入力FEPの補完候補が、ディスプレイの右下に出る

本来は入力中文字列の下に出てくるはずのものが、ディスプレイ右下にしか出ない。

f:id:tonkuma:20180913225041j:plain

ちなみにnvimだと発生しない。nvim-qtとSKK日本語入力FEPの相性が悪いのかな。

  • 正直、慣れてくると補完候補を出す事自体が減ってくるため、そこまで困らない。

タブページにフラグが表示されない

更新がある場合、タブページの左側に出る+マークとかが出ない。 以前のバージョンでは出ていた気がする。

これもnvimなら問題ない。

一部記号が正しく表示されない

等の表示がおかしくなったりする。
フォントの問題もあるかもしれないけど、同じフォントでもgvimでは問題無かったりするので、やっぱり気になる。

あと、これの影響か、カーソルがたまにバグる。<C-l>で再描画すればすぐ直る。

最後に

vimを使う上で「insertから抜ける時にIMEをoffにする」機能は、今の自分にとってほぼ必須なため、
これを擬似的とはいえ実現出来た事は大きい。

お試しとして、vim起動ホットキーを、nvim起動ホットキーに入れ替えてみてる位には。

ただまぁ、正直な所、vim8で困ってないなら、完全に乗り換える必要はないな、とも思ってる。
Neovim固有の機能が使いたい、Neovimでしか動かないプラグインを使いたい等、
明確な理由があるなら使えばいいと思う。


  1. +multi_byte_imeを有効にすれば使えるかもしれない。

ZenzaWatchのショートカットキーを変更する

ZenzaWatchのショートカットキーを変更する

ZenzaWatchのショートカットや各種設定を変更できる。
更新しても設定が保持されるし、もし消えてもすぐに再設定できるため、便利かもしれない。

設定方法

ZenzaWatchが動作するURL*1に移動した状態で、
開発者ツールからコンソールを開き、次のコマンドを実行して設定する。

ZenzaWatch.config.setValue('設定名', 設定値)

現在の値を取得する事もできる。

ZenzaWatch.config.getValue('設定名')

設定名の一覧

ソースの281行目辺り、defaultConfigに一覧がある。

      var defaultConfig = {
        debug: false,
        volume:       0.3,
        forceEnable:  false,
        showComment:  true,
        autoPlay:     true,
        'autoPlay:ginza':  true,

個人的に使いそうな設定は以下。 enablePushStateKEY_*は、現状コンソールからしか変更できない(はず)。

項目名 設定値 説明
autoCloseFullScreen true 再生終了時にフルスクリーンを解除する
autoZenTube true youtubeリンクがある時、自動的に開く
enablePushState true ブラウザの履歴に残す
KEY_* 任意の仮想キーコード ショートカットの設定

設定例

最初に書いた通りコンソールから1行ずつ実行してもいいし、
Chrome系なら Snippets に保存して実行、
Firefoxなら Scratchpad から実行、としてもいい。

ZenzaWatch.config.setValue('autoZenTube', true);
ZenzaWatch.config.setValue('KEY_CLOSE', 27); // ESC default
ZenzaWatch.config.setValue('KEY_RE_OPEN', 82 + 0x1000); // Shift+R
ZenzaWatch.config.setValue('KEY_HOME', 54); // 6

ZenzaWatch.config.setValue('KEY_SEEK_LEFT', 37 + 0x1000); // Shift+LEFT default
ZenzaWatch.config.setValue('KEY_SEEK_RIGHT', 39 + 0x1000); // Shift+RIGHT default
ZenzaWatch.config.setValue('KEY_SEEK_LEFT2', 81); // Q
ZenzaWatch.config.setValue('KEY_SEEK_RIGHT2', 87); // W

ZenzaWatch.config.setValue('KEY_VOL_UP', 69); // E
ZenzaWatch.config.setValue('KEY_VOL_DOWN', 68); // default

ZenzaWatch.config.setValue('KEY_INPUT_COMMENT', 67); // C default
ZenzaWatch.config.setValue('KEY_FULLSCREEN', 88); // X
ZenzaWatch.config.setValue('KEY_MUTE', 77); // M default
ZenzaWatch.config.setValue('KEY_TOGGLE_COMMENT', 86); // V default

ZenzaWatch.config.setValue('KEY_DEFLIST_ADD', 90); // Z
ZenzaWatch.config.setValue('KEY_DEFLIST_REMOVE', 90 + 0x1000); // Shift+Z

ZenzaWatch.config.setValue('KEY_TOGGLE_PLAY', 32); // SPACE default
ZenzaWatch.config.setValue('KEY_TOGGLE_PLAYLIST', 80); // P default

ZenzaWatch.config.setValue('KEY_SCREEN_MODE_1', 112 + 0x1000); // Shift+F1
ZenzaWatch.config.setValue('KEY_SCREEN_MODE_2', 113 + 0x1000); // Shift+F2
ZenzaWatch.config.setValue('KEY_SCREEN_MODE_3', 114 + 0x1000); // Shift+F3
ZenzaWatch.config.setValue('KEY_SCREEN_MODE_4', 115 + 0x1000); // Shift+F4
ZenzaWatch.config.setValue('KEY_SCREEN_MODE_5', 116 + 0x1000); // Shift+F5
ZenzaWatch.config.setValue('KEY_SCREEN_MODE_6', 117 + 0x1000); // Shift+F6

ZenzaWatch.config.setValue('KEY_SHIFT_RESET', 49); // 1 default
ZenzaWatch.config.setValue('KEY_SHIFT_DOWN', 52); // 4
ZenzaWatch.config.setValue('KEY_SHIFT_UP', 53); // 5

ZenzaWatch.config.setValue('KEY_NEXT_VIDEO', 51); // 3
ZenzaWatch.config.setValue('KEY_PREV_VIDEO', 50); // 2

ZenzaWatch.config.setValue('KEY_SCREEN_SHOT', 83); // S default
ZenzaWatch.config.setValue('KEY_SCREEN_SHOT_WITH_COMMENT', 83 + 0x1000); // Shift+S default

*1:nicovideo.jp配下ならどこでもいい

Firefox(Nightly)の環境を整えた話

Firefox(Nightly)の環境を整えた話

Firefoxはサブブラウザになったけど、色々環境を整えた結果いい感じになったので、まとめる。
現在使っているのは Firefox59.0a1(Nightly)。

Vim操作

Vim vixenを使っている。
見た目がVimperatorっぽくて懐かしさを感じる…

twitter.com

ツリー型タブの導入

タブバーは削除予定のため、ツリー型タブを追加した。
ついでにマルチプルタブハンドラも追加した。主にURLのコピー用。

Stylusの導入

vixenのヒント文字を大きくするために追加。userChrome.cssでは設定出来なかった。WEとFirefox本体で分かれてるからかな。

.vimvixen-hint {
    font-size: 16px;
}

.vimvixen-console-frame {
    ime-mode: inactive !important;
}

.vimvixen-console-frame は、何故か反映されず。とりあえず残してる。

UIの変更

本題。過去にもcssを弄ってURLバーを非表示とかしてたけど、Firefox57からはWEになったため、拡張側からUIを弄れなくなった。
そのため、userChrome.cssを使って設定。

色々試行錯誤したけど、 tridactylのREADMEから参照できるuserChrome.cssのおかげで、全てが解決した。

そのままだとまだ少し物足りなかったので少し弄り、現在は以下の感じに落ち着いた。

  • 普段はタブバー/URLバーを非表示。
  • 非表示中は、元々表示されていた箇所にあるリンク等をクリック出来る。
    • 試行錯誤中は、見えない何かが存在してクリック出来なかった。
  • Alt+DAlt+F等の、標準のショートカットでURLバーやメニューにフォーカスしたら、表示される。
  • 画面を全体化した時、画面最上部にカーソルを持っていけば、タブバー等が表示される。
    • 試行錯誤中は、見えない何かのせいか、最上部より手前で表示されてしまった。

Vimperator使っていた時のように、とてもスッキリとしたUI。ノートPCだとほんと助かるんだよなぁ。

twitter.com

css

環境によっては、色々数値を変えないと駄目かもしれない。

@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");

/* References.
 * https://github.com/cmcaine/tridactyl/blob/master/src/static/userChrome-minimal.css
 * https://support.mozilla.org/ja/questions/1185426
 * https://github.com/piroor/treestyletab/wiki/Code-snippets-for-custom-style-rules#for-only-tree-style-tab-sidebar-1397
 * chrome://browser/skin/browser.css
 */

.urlbar {
  ime-mode: inactive;
}

/* User config */
#navigator-toolbox {
    /* The height of the area at the top of the screen that causes the nav-bar to be shown
    If zero, you can still focus with <C-l> or F6.
     */
    --tridactyl-auto-show-zone: 0;
}

/* Hide grey container box */
:root:not([customizing]) #navigator-toolbox:not(:hover):not(:focus-within) { 
    max-height: 0;
    min-height: calc(0px); /* I have no idea why just using 0 or 0px does not work... */
}

/* Auto hide tab bar */
:root:not([customizing]) #navigator-toolbox:not(:hover):not(:focus-within) #TabsToolbar { 
    visibility: collapse;
}

/* Auto hide nav bar */
:root:not([customizing]) #navigator-toolbox:not(:hover):not(:focus-within) #nav-bar {
    max-height: 0 !important;
    min-height: 0 !important;
    /* Use margin-bottom to allow trigger zones that are larger than the nav-bar */
    margin-bottom: calc(-1 * var(--tridactyl-auto-show-zone));
    /* margin-bottom: 0; */
    opacity: 0;
    transform: translateY(-7px);
} 

/* Avoid transparent background for menubar if nav-toolbox not focussed */
#navigator-toolbox:not(:hover):not(:focus-within) #toolbar-menubar > * {
    /* Colour matches the grey background of the default firefox theme. Can't see what variable it uses */
    background-color: rgb(232, 232, 231);
}

/* Make top bar more compact */

/* Make nav-bar thinner */
#nav-bar, #TabsToolbar {
    padding-top: 0px !important;
    padding-bottom: 0px !important;
}

/* We need more padding when maximised (maybe just on Windows?) */
#main-window[sizemode="maximized"] #nav-bar {
    padding-top: 0px !important;
}
#main-window[sizemode="maximized"] #mainPopupSet {
    padding-top: 7px !important;
}

/* Partial removal of black bottom 1px line shown in fullscreen mode */
#navigator-toolbox::after { display: none !important; }

/* Kill tab bar */
/* #TabsToolbar { visibility: collapse; } */

/* Compact tab bar */
/* Remove window decorations (Close, Minimize, Fullscreen) */
#titlebar {
  display: none !important;
}

#TabsToolbar .titlebar-placeholder { display: none !important; }

/* Delete header of Tree Style Tab */
#sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header {
  display: none;
}

/* Move tab bar to bottom */
#TabsToolbar {
  -moz-box-ordinal-group: 2;
}

AnkPixivToolの復活

つい先日気付いたけれど、 AnkPixivToolがWEに対応していた。開発者の皆様、本当にお疲れ様です。

WE対応の恩恵なのかChromeでも動き、Chromeではbrowser_action(ツールバーボタンのクリック)にショートカットを設定できるため、片手でポンポン画像が保存出来てとても捗る。

どちらかというと、Chromeを使う上でより便利になった感じ。
Firefoxも早くbrowser_actionにショートカット設定できるようになって。なる…よね?

総評

UIがスッキリしたおかげで、調べものは良くFirefoxを使うようになった。 拡張はまだまだ過渡期といった感じだけれど、少しずつ良くなってきた感もある。

引き続き、今後に期待したい。

現在のブラウザ環境メモ

現在のブラウザ環境

Firefox + VimFxから移動してそれなりに経つので、今の状況をまとめてみる。

ブラウザ

以前からサブで使用していた CentBrowser をメインにした。

WebExtensionsの仕様上、ページ読込が完了しないと拡張機能が動作しないので、マウスジェスチャがブラウザ標準であるやつを選択。
最近だと Kinza もいいな、と思ってる。RSSリーダーが更新を画面上に通知してくれたら使うんだけど。

Vivaldiで頑張ってショートカット設定するのもありかな、と思ったんけど。
面倒すぎて挫折したのと、Altキーと同時押しするとメニューが毎回反応して邪魔なのでやめた。

57 以降のFirefox

Nightlyは入れておくけど、今の所はサブ止まり。
私の環境だとCentBrowserより使用メモリが多かったり、欲しいアドオンが無い/発展途上だったりで、常用はまだ厳しい。

Vim Vixenには期待してる。

拡張機能(Vim系)

cVim を使用。

以前の記事で書いたので詳細はそっち。
機能が豊富だったり、VimperatorやVimFxのように、JavaScriptで機能拡張出来るので便利。

不満点

  • VimFxのvが凄く欲しい…欲しくない?(hit-a-hintで要素を選択し、visualモードに入れるやつ)

  • Visualモードのmappingが無い。そのままだとVisualモードで選択して翻訳に渡す、といった事が出来ない。

  • ドキュメントが少なすぎる。もっとカスタムスクリプトの説明下さい。

  • ブラックリストに指定したURLは、cVimが常に無効化される。これたまに困る。

  • ツールバーも操作したいなぁ…WebExtensionsでは仕様上無理なのが残念。幸い、拡張のmanifest.jsoncommandsが設定できるので、feedlyとかはそっち設定してる。

拡張機能(その他)

以下は、同等の物がChromeにもあるので問題なし。

TabGroupも欲しいけど、同様な物がChromeにないため、変わりに OneTab を使用。マウス必須だけど仕方ない。

他、よく使ってたのが Ank Pixiv Tool

Ank Pixiv Toolみたいに、1つの拡張機能で全てをカバーしてくれるのは流石に無かったけど、
個別でならあったので、それを使ってる。

ただ、Twitterに関しては、見付けた拡張がいずれも <画像ID>しかファイル名に設定してくれず、
Ank Pixiv Toolみたいに<ユーザー名>-<Tweet>(<画像ID>)をファイル名にしてくれるのが無かった。

毎回手で直してたけど面倒なので、他拡張を参考に、WebExtensionsの勉強しながら自作した。

GitHub - typetonk2/getTwitterImage: Twitterの画像を保存するやつ。

まだ幾つか問題はあるけど、一応実用に耐えてるのでそのまま使ってる。 今後も少しずつ弄る予定。

総評

Vimperatorに続き、VimFxも死亡確定した時は絶望感あったけど、いざ移行してみれば、それなりにやっていけてる。

一旦Firefoxからは離れたけど、WE対応の Saka Keyや、 Vim Vixenも出てきたし、成熟次第では戻るかも。
他、qutebrowserとかも興味ある。

環境は刻一刻と変わるので、定期的な見直しをして、その時々でもっとも自分にあった環境を選択していきたい。