Develop and Download Open Source Software

Browse CVS Repository

Diff of /shiki/shiki/shiki.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.59 by aloha, Wed Nov 29 04:37:23 2006 UTC revision 1.60 by aloha, Wed Nov 29 05:08:46 2006 UTC
# Line 57  static void kill_buffer_handler(); Line 57  static void kill_buffer_handler();
57  static void append_default_tabpage_handler();  static void append_default_tabpage_handler();
58    
59  /* ファイル関係 */  /* ファイル関係 */
 static void open_file(const gchar *filename);  
 static void open_file_handler();  
60  static void save_file();  static void save_file();
61  static void save_file_as();  static void save_file_as();
62    
# Line 590  static gboolean save_text_buffer(const g Line 588  static gboolean save_text_buffer(const g
588  static void save_file() {  static void save_file() {
589    
590    /* ヘルプへの変更は保存しない */    /* ヘルプへの変更は保存しない */
591    if(g_ascii_strcasecmp("*help*", Shiki_CURRENT_TAB_TITLE) == 0) return;    if(strcmp("*help*", Shiki_CURRENT_TAB_TITLE) == 0) return;
592    
593    /* 変更が無ければ何もしない */    /* 変更が無ければ何もしない */
594    if(!gtk_text_buffer_get_modified(Shiki_CURRENT_TEXT_BUFFER)) return;    if(!gtk_text_buffer_get_modified(Shiki_CURRENT_TEXT_BUFFER)) return;
595    
596    /* まだファイル名が設定されていなかったら,ダイアログを開いて入力させる */    /* まだファイル名が設定されていなかったら,ダイアログを開いて入力させる */
597    if(g_ascii_strcasecmp("*scratch*", Shiki_CURRENT_FILENAME) == 0) {    if(strcmp("*scratch*", Shiki_CURRENT_FILENAME) == 0) {
598      const gchar *filename = Shiki_file_name_dialog("Save File As ...");      const gchar *filename = Shiki_file_name_dialog("Save File As ...");
599      if(!filename) return;      if(!filename) return;
600      if(!save_text_buffer(filename, Shiki_CURRENT_TEXT_BUFFER)) return;      if(!save_text_buffer(filename, Shiki_CURRENT_TEXT_BUFFER)) return;
# Line 617  static void save_file_as() { Line 615  static void save_file_as() {
615    gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename);    gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename);
616  }  }
617    
 /* ファイルを開く */  
 static void open_file(const gchar *filename) {  
   gchar *text;  
   gchar *utf8filename = g_locale_to_utf8(filename, -1, NULL, NULL, NULL);  
   GtkTextIter p;  
   ScmObj s;  
   
   /* g_file_get_contents(filename, &contents, &len, NULL); */  
   
   /* 新しいバッファを開く */  
   Shiki_new_buffer_create(g_strdup(filename));  
   gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename);  
   
   Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*filename*")), SCM_MAKE_STR_COPYING(utf8filename));  
   g_free(utf8filename);  
   
   Scm_EvalCString("(use gauche.charconv)", Shiki_CURRENT_BUFFER_ENV);  
   
   /* ファイルから文字列を取り出し,変換後にバッファに格納 */  
   s = Scm_EvalCString("(port->string (open-input-conversion-port (open-input-file *filename*) \"*jp\" :owner? #t))", Shiki_CURRENT_BUFFER_ENV);  
   text = Scm_GetString(SCM_STRING(s));  
   if(text)  
     gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, -1);  
   else {  
     /* open-input-conversion-port が失敗したならば,とりあえずシステム  
      * ロケールに変換してみる.駄目だったら諦めて駄目元で UTF8  
      */  
     gchar *contents;  
     gsize br, bw, len;  
     GError *err = NULL;  
   
     if(g_file_get_contents(filename, &contents, &len, NULL)) {  
       if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))  
         gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, text, -1);  
       else  
         gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, contents, -1);  
       g_free(contents);  
     }  
   }  
   
   /* バッファ未変更に */  
   gtk_text_buffer_set_modified(Shiki_CURRENT_TEXT_BUFFER, FALSE);  
   /* カーソル位置を先頭に */  
   gtk_text_buffer_get_start_iter(Shiki_CURRENT_TEXT_BUFFER, &p);  
   gtk_text_buffer_place_cursor(Shiki_CURRENT_TEXT_BUFFER, &p);  
   update_modeline_label();  
   /* キーワードを色分けする */  
   scheme_keyword_highlighting_current_buffer();  
   gtk_widget_show_all(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));  
 }  
   
 /* ファイルをダイアログで指定して開く */  
 static void open_file_handler() {  
   const gchar *filename = Shiki_file_name_dialog("File Selection");  
   
   if(!filename) return;  
   open_file(filename);  
 }  
   
618  /* gauche を起動して文字列を評価 */  /* gauche を起動して文字列を評価 */
619  static gchar *eval_cstring_by_gauche(gchar *s) {  static gchar *eval_cstring_by_gauche(gchar *s) {
620    gchar *msg;    gchar *msg;
# Line 895  static gboolean signal_key_release_handl Line 834  static gboolean signal_key_release_handl
834    
835          case GDK_f : /* C-x C-f : ファイル開く */          case GDK_f : /* C-x C-f : ファイル開く */
836            gtk_statusbar_push(GTK_STATUSBAR(Shiki_EDITOR_STATUSBAR), GPOINTER_TO_INT(contextid), "C-f");            gtk_statusbar_push(GTK_STATUSBAR(Shiki_EDITOR_STATUSBAR), GPOINTER_TO_INT(contextid), "C-f");
837            open_file_handler();            Shiki_open_file_dialog();
838            break;            break;
839    
840          case GDK_s : /* C-x C-s : ファイル保存 */          case GDK_s : /* C-x C-s : ファイル保存 */
# Line 1019  static void Shiki_editor_window_init(int Line 958  static void Shiki_editor_window_init(int
958    /* ファイル開く */    /* ファイル開く */
959    oicon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_OPEN, iconsize), "");    oicon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_OPEN, iconsize), "");
960    /* 「開く」ボタンにファイルを読み込むアクションを関連付ける */    /* 「開く」ボタンにファイルを読み込むアクションを関連付ける */
961    g_signal_connect(G_OBJECT(oicon), "clicked", G_CALLBACK(open_file_handler), NULL);    g_signal_connect(G_OBJECT(oicon), "clicked", G_CALLBACK(Shiki_open_file_dialog), NULL);
962    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(oicon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(oicon));
963    gtk_tool_item_set_tooltip(oicon, toolbar_tips, "ファイルを開きます",    gtk_tool_item_set_tooltip(oicon, toolbar_tips, "ファイルを開きます",
964        "新しいバッファを開いて,そこにファイルの内容を展開します.");        "新しいバッファを開いて,そこにファイルの内容を展開します.");
# Line 1163  static void Shiki_editor_window_init(int Line 1102  static void Shiki_editor_window_init(int
1102    if(argc >= 2) {    if(argc >= 2) {
1103      int i;      int i;
1104      for(i = 1; i < argc; i++)      for(i = 1; i < argc; i++)
1105        open_file(g_strdup(argv[i]));        Shiki_create_file_buffer(argv[i]);
1106    } else /* 指定されてなければ,デフォルトのページを追加 */    } else /* 指定されてなければ,デフォルトのページを追加 */
1107      open_online_help(Shiki_EDITOR_NOTEBOOK);      open_online_help(Shiki_EDITOR_NOTEBOOK);
1108    

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.60

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26