Cygwin 上の vim で :browse
OpenFile.vbs
「ファイルを開くダイアログ」を出して、選択したファイル名を WScript.Echo。
(cscript で実行すると標準出力へ出力)
Dim ComDlg, WshShell Set ComDlg = WScript.CreateObject("MSComDlg.CommonDialog") Set WshShell = WScript.CreateObject ("WScript.Shell") ComDlg.MaxFileSize = 256 'ファイル名を格納する場所のサイズ ComDlg.DialogTitle = "ファイルを開く" 'ウインドウタイトル ComDlg.Filter = "*.*|*.*" 'ファイルの拡張子を.vbsに限定する ComDlg.CancelError = True 'キャンセルボタンが押されたときにエラーを発生させる On Error Resume Next 'エラーが発生しても処理を続ける ComDlg.ShowOpen '「ファイルを開く」ダイアログを開く If Err.Number <> 32755 Then 'エラーナンバー32755(キャンセルボタンが押された)以外なら実行する path = ComDlg.FileName WScript.Echo path End If Set WshShell = Nothing Set ComDlg = Nothing
browse.vim
OpenFile.vbs で選択したファイルを開く。
function! Browse() let a = system("cscript //nologo 'c:\\ao\\src\\vbs\\OpenFile.vbs'") let path = strpart(a, 0, strlen(a)-2) if path != "" exe "e " . escape(path, ' \') endif endfunction
[追記]
qt は以下でできた。
#include <qapplication.h> #include <qfiledialog.h> int main( int argc, char **argv ) { QApplication a( argc, argv ); QString s( QFileDialog::getOpenFileName( QString::null, "All Files (*)", 0, "OpenFile", "Open File" ) ); if ( ! s.isEmpty() ) { printf("%s", (const char*)s); } return 0; }
[追記:2006-08-20]
gtk 1.2 は以下でできた。
/* *File name: filedialog.c */ #include <gtk/gtk.h> #include <glib.h> GtkWidget *file_selection_box; gint destroyapp (GtkWidget *widget, gpointer gdata) { gtk_main_quit(); return (FALSE); } void store_filename(GtkFileSelection *file_selection, gpointer data) { gchar *filename; filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_selection_box)); g_print(filename); gtk_main_quit(); } void create_file_selection(void) { file_selection_box = gtk_file_selection_new("Please select a file for editing."); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(file_selection_box)->ok_button), "clicked", GTK_SIGNAL_FUNC(store_filename), NULL); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(file_selection_box)->cancel_button), "clicked", GTK_SIGNAL_FUNC(destroyapp), NULL); gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(file_selection_box)->ok_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) file_selection_box); gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(file_selection_box)->cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) file_selection_box); gtk_widget_show(file_selection_box); } int main(int argc, char *argv[]) { gtk_init(&argc, &argv); create_file_selection(); gtk_signal_connect(GTK_OBJECT(file_selection_box), "delete_event", GTK_SIGNAL_FUNC(destroyapp), NULL); gtk_main(); return 0; }
filedialog: filedialog.c gcc -Wall filedialog.c -o filedialog `gtk-config --cflags` `gtk-config --libs`
ここから拾ってきた物を適当に削っただけなので、正しいかどうか自信なし。
http://www.linuxheadquarters.com/howto/programming/gtk_examples/filedialog/filedialog.shtml