vim-jp / issues

有志で既知のバグや要望を検討・管理し、オフィシャルへの還元をしていきます。
https://vim-jp.org/
341 stars 11 forks source link

Windowsにて、`sound_playfile()` で再生した音声ファイルがvimを終了するまで開放されない #1413

Open Bakudankun opened 1 year ago

Bakudankun commented 1 year ago

不具合の内容

Windowsにて、sound_playfile() で音声ファイルを再生すると、再生終了後もvimを終了するまでファイルハンドルが開放されず、削除などを行うことができません。 (言い回しが正確ではないかもしれません)

再現手順

  1. vim --clean
  2. :call sound_playfile('C:\fullpath-to-sound.wav') して再生が終わるまで待つ
  3. :echo delete('C:\fullpath-to-sound.wav') => -1が返り、ファイルが削除されない
  4. エクスプローラから削除しようとしても「Vi Improved……によってファイルは開かれているため、操作を完了できません。」とメッセージが出て削除されない

期待動作

ファイルハンドルが開放され、Vim内外を問わず削除できるようになることを期待します。

Vimのバージョン

9.0.1553 64bit(wingetでインストール)

:version ``` VIM - Vi IMproved 9.0 (2022 Jun 28, compiled May 13 2023 22:47:57) MS-Windows 64 ビット GUI 版 with OLE サポート 適用済パッチ: 1-1553 Compiled by appveyor@APPVEYOR-VM Huge 版 with GUI. 機能の一覧 有効(+)/無効(-) +acl +ex_extra +mzscheme/dyn -tcl +arabic +extra_search +netbeans_intg -termguicolors +autocmd -farsi +num64 +terminal +autochdir +file_in_path +ole -termresponse +autoservername +find_in_path +packages +textobjects +balloon_eval +float +path_extra +textprop -balloon_eval_term +folding +perl/dyn -tgetent +browse -footer +persistent_undo +timers ++builtin_terms +gettext/dyn +popupwin +title +byte_offset -hangul_input -postscript +toolbar +channel +iconv/dyn +printer +user_commands +cindent +insert_expand +profile +vartabs +clientserver +ipv6 +python/dyn +vertsplit +clipboard +job +python3/dyn +vim9script +cmdline_compl +jumplist +quickfix +viminfo +cmdline_hist +keymap +reltime +virtualedit +cmdline_info +lambda +rightleft +visual +comments +langmap +ruby/dyn +visualextra +conceal +libcall +scrollbind +vreplace +cryptv +linebreak +signs -vtp +cscope +lispindent +smartindent +wildignore +cursorbind +listcmds +sodium/dyn +wildmenu +cursorshape +localmap +sound +windows +dialog_con_gui +lua/dyn +spell +writebackup +diff +menu +startuptime -xfontset +digraphs +mksession +statusline -xim +directx +modify_fname -sun_workshop +xpm_w32 -dnd +mouse +syntax -xterm_save -ebcdic +mouseshape +tag_binary +emacs_tags +multi_byte_ime/dyn -tag_old_static +eval +multi_lang -tag_any_white システム vimrc: "$VIM\vimrc" ユーザー vimrc: "$HOME\_vimrc" 第2ユーザー vimrc: "$HOME\vimfiles\vimrc" 第3ユーザー vimrc: "$VIM\_vimrc" ユーザー exrc: "$HOME\_exrc" 第2ユーザー exrc: "$VIM\_exrc" システム gvimrc: "$VIM\gvimrc" ユーザー gvimrc: "$HOME\_gvimrc" 第2ユーザー gvimrc: "$HOME\vimfiles\gvimrc" 第3ユーザー gvimrc: "$VIM\_gvimrc" デフォルトファイル: "$VIMRUNTIME\defaults.vim" システムメニュー: "$VIMRUNTIME\menu.vim" コンパイル: cl -c /W3 /GF /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DHAVE_STDINT_H -DFEAT_CSCOPE -DFEAT_TERMINAL -DFEAT_SOUND -DFEAT_NETBEANS_INTG -DFEAT_JOB_CHANNEL -DFEAT_IPV6 -DHAVE_INET_NTOP -DFEAT_XPM_W32 -DHAVE_SODIUM -DDYNAMIC_SODIUM -DDYNAMIC_SODIUM_DLL=\"libsodium.dll\" /I "C:\projects\vim-win32-installer\dependencies\libsodium\include" -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 /source-charset:utf-8 /MP /Ox /GL -DNDEBUG /Zl /MT /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE -DFEAT_OLE -DFEAT_MBYTE_IME -DDYNAMIC_IME -DFEAT_GUI_MSWIN -DFEAT_DIRECTX -DDYNAMIC_DIRECTX -DFEAT_DIRECTX_COLOR_EMOJI -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_LUA -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua54.dll\" -DFEAT_PYTHON -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python27.dll\" -DFEAT_PYTHON3 -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python311.dll\" -DFEAT_MZSCHEME -I "C:\projects\vim-win32-installer\dependencies\racket\include" -DMZ_PRECISE_GC -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libracket3m_dcgt6o.dll\" -DDYNAMIC_MZGC_DLL=\"libracket3m_dcgt6o.dll\" -DFEAT_PERL -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl532.dll\" -DFEAT_RUBY -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"x64-msvcrt-ruby300.dll\" -DRUBY_VERSION=30 -DFEAT_HUGE /Fd.\ObjGXOULYHRZAMD64/ /Zi リンク: link /nologo /opt:ref /LTCG /HIGHENTROPYVA:NO oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib comdlg32.lib ole32.lib netapi32.lib uuid.lib user32.lib /machine:AMD64 version.lib winspool.lib comctl32.lib libcmt.lib oleaut32.lib /nodefaultlib:lua54.lib /STACK:8388608 /nodefaultlib:python27.lib /nodefaultlib:python311.lib winmm.lib WSock32.lib Ws2_32.lib xpm\x64\lib-vc14\libXpm.lib /PDB:gvim.pdb -debug ```

OSの種類/ディストリ/バージョン

その他

:call sound_clear() するとファイルが削除できるようになるようです。 ただし再生中の音声が止まってしまうため、迂回策としては使いにくいです。

Bakudankun commented 1 year ago

関連スレッド: vim/vim#4522