« ^ »

Emacsのdiredでストリーミング設定のGoogle Driveのファイルを開くとエラーするのはダウンロードを待てていないから

所要時間: 約 2分

Google Drive等で、ミラーリングではなくストリーミングにすると、diredなどでファイルを開こうとする時にエラーが発生する。

find-file-noselect-1: Wrong type argument: arrayp, nil

diredでファイルを開くと dired-find-file が呼び出される1dired-find-file は最初にファイル名を特定し、次にファイルを開こうとする。Google Drive等でストリーミングの設定にしている場合、同期した状態ではファイルはまだローカルには存在しない。ファイルへアクセスされた後にクラウドからファイルのデータをダウンロードする。通常のソフトウェアでは、データがダウンロードされるまで待ってから表示される。Emacsの find-file 関数は、ダウンロードされるのを待つことなく処理を進める。そのため、エラーが発生する。

これを回避するには、データのダウンロードを待つように書き換えることが良さそうだ。この修正は今は時間がなくて対応できない。時間を取って改善したい。

もう一つの回避方法としてエラーしても諦めずもう一度開くという方法だ。エラーはするものの、最初のアクセスでダウンロードはドライバによって行なわれている。そのため、ちょっと待ってもう一度開こうとすると、2度目は上手く行くだろう。


1

通常dired-modeではRETにdired-find-fileがバインドされている。