Google Drive等で、ミラーリングではなくストリーミングにすると、diredなどでファイルを開こうとする時にエラーが発生する。
find-file-noselect-1: Wrong type argument: arrayp, nil
diredでファイルを開くと dired-find-file
が呼び出される1。 dired-find-file
は最初にファイル名を特定し、次にファイルを開こうとする。Google Drive等でストリーミングの設定にしている場合、同期した状態ではファイルはまだローカルには存在しない。ファイルへアクセスされた後にクラウドからファイルのデータをダウンロードする。通常のソフトウェアでは、データがダウンロードされるまで待ってから表示される。Emacsの find-file
関数は、ダウンロードされるのを待つことなく処理を進める。そのため、エラーが発生する。
これを回避するには、データのダウンロードを待つように書き換えることが良さそうだ。この修正は今は時間がなくて対応できない。時間を取って改善したい。
もう一つの回避方法としてエラーしても諦めずもう一度開くという方法だ。エラーはするものの、最初のアクセスでダウンロードはドライバによって行なわれている。そのため、ちょっと待ってもう一度開こうとすると、2度目は上手く行くだろう。
1
通常dired-modeではRETにdired-find-fileがバインドされている。