windows のユーザーディレクトリにdotfiles があふれる。。
cygwinとかmsys 使ってたり、UNIXのコマンドを使うとドットファイルがあふれる。
これが美しくないのよ。ていうか邪魔
シンプルな解決策
attrib -h .bashrc
attribコマンドでファイルの属性を、「非表示」にしてあげれば、解決する。
でも、なんども非表示するのもめんどくさい。
ドットファイルをまとめて非表示にするプログラムがあればいいと思うの。
さらに、そのプログラムを定期的にattrib を実行すればいいと思うの。
フォルダ監視して、attrib を実行しておけば、ずっと見えないと思うんだよね。
非表示にするソースをぱぱっと書いた
#!/usr/bin/env ruby #ドットから始まるファイルに隠しファイル属性を付加する require 'rubygems' require 'win32/file' home = ENV["HOME"] home = `cygpath -w #{home}`.strip if RUBY_PLATFORM =~ /cygwin/ dotfiles = Dir.open(home).grep /^\.[^\.]+/ dotfiles + ["Downloads","Contacts","Searches"] + %w/Favorites Downloads Videos Music Contacts/ dotfiles.map!{|e| File.expand_path e, home } #puts dotfiles dotfiles.select{|e| true unless File.hidden? e }.each{|e| File.open(e){|f|f.hidden=true}}
でもrubyだとインストール面倒
ruby の win32-fileを使えば解決するんだけどさ、コマンド登録面倒じゃないか。
スタートアップに登録したり、フォルダ監視に登録したり、サービスに登録するのも面倒じゃないか。
Win32 api で書けばいいよね。
windowだし、C/C++で書いておけば、ずっと使えると思うの。ruby のバージョンアップとか文字コードだとか、rubyのgemだとかそういうものに左右されない.
やっぱりwindows使うなら win32で書いておくのが鉄板だとおもうの。
dotfileをけす。
# include <windows.h> //# include <stdio.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WIN32_FIND_DATA FindFileData; HANDLE hFind; DWORD attrs; char* target_name = ".*"; char* target_dir; char* target; char* full_path; char buff[1024]; GetEnvironmentVariable("USERPROFILE", buff, 1024); target_dir = (char *) malloc( sizeof(char) * lstrlen(buff) ); lstrcpy(target_dir,buff); //文字列コピー sprintfのほうが楽かも・・・ lstrcpy(buff, target_dir); lstrcat(buff, "\\"); lstrcat(buff, target_name); target = (char *) malloc( sizeof(char) * lstrlen(buff) ); lstrcpy(target,buff); //printf("target file is \"%s\".\n", target ); hFind = FindFirstFile( target,&FindFileData); if ( hFind == INVALID_HANDLE_VALUE) { //printf("Invalid file handle: %d\n", GetLastError() ); return 1; } do{ if (lstrcmp(FindFileData.cFileName,".") == 0){ continue; } if (lstrcmp(FindFileData.cFileName,"..") == 0){ continue; } lstrcpy(buff, target_dir); lstrcat(buff, "\\"); lstrcat(buff,FindFileData.cFileName ); full_path = (char *) malloc( sizeof(char) * lstrlen(buff)+1024); lstrcpy(full_path,buff); SetFileAttributes(full_path, FILE_ATTRIBUTE_HIDDEN); attrs = GetFileAttributes(full_path); //printf("%s => 0x%04x\n",full_path, attrs); }while( FindNextFile( hFind,&FindFileData)); FindClose(hFind); free(target_dir); free(target); free(full_path); return 0; }
cygwinとかのgccでコンパイル
i686-pc-mingw32-gcc hide-dots.c -o hide-dot-files -mwindows
これですっきりするよね。あとはスタートアップとかに仕込んでおけば結構楽になるわ
参考資料
Windows7:attribコマンドの使い方(属性を表示/設定/解除する)- 教えて!HELPDESK
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365535(v=vs.85).aspx