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.57 by aloha, Mon Nov 27 12:01:50 2006 UTC revision 1.58 by aloha, Tue Nov 28 16:29:22 2006 UTC
# Line 54  GdkColor COLOR_GREEN; Line 54  GdkColor COLOR_GREEN;
54    
55  /* タブの生成と削除 : 基本的に,ShikiBuffer の中身に格納する情報を増やしたかったら,この 2 つの関数だけを変更すれば良い (ようにする…) */  /* タブの生成と削除 : 基本的に,ShikiBuffer の中身に格納する情報を増やしたかったら,この 2 つの関数だけを変更すれば良い (ようにする…) */
56  extern void Scm_Init_xyzzylisp(ScmModule *module);  extern void Scm_Init_xyzzylisp(ScmModule *module);
 static void remove_tabpage();  
57    
58  /* foo_bar_handler() は,イベントハンドラのためのラッパー */  /* foo_bar_handler() は,イベントハンドラのためのラッパー */
59    static void kill_buffer_handler();
60  static void append_default_tabpage_handler();  static void append_default_tabpage_handler();
61    
62  /* ファイル関係 */  /* ファイル関係 */
# Line 79  static void update_modeline_label(); Line 79  static void update_modeline_label();
79  static void text_buffer_cursor_moved_handler();  static void text_buffer_cursor_moved_handler();
80    
81  /* 確認 */  /* 確認 */
 static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer);  
82  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer);  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer);
83    
84  /* Gauche と S 式操作やインデント・キーワードハイライティング関連 */  /* Gauche と S 式操作やインデント・キーワードハイライティング関連 */
# Line 453  static gboolean signal_key_press_handler Line 452  static gboolean signal_key_press_handler
452          break;          break;
453    
454        case GDK_k : /* Ctrl + k : タブを閉じる */        case GDK_k : /* Ctrl + k : タブを閉じる */
455          remove_tabpage();          kill_buffer_handler();
456          break;          break;
457    
458        case GDK_w : /* Ctrl + w : カット */        case GDK_w : /* Ctrl + w : カット */
# Line 551  GtkTextBuffer *Shiki_new_buffer_create(g Line 550  GtkTextBuffer *Shiki_new_buffer_create(g
550    gtk_widget_show_all(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));      gtk_widget_show_all(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));  
551    /* 開いたページに移動する */    /* 開いたページに移動する */
552    gtk_notebook_set_current_page(Shiki_EDITOR_NOTEBOOK, g_list_length(Shiki_EDITOR_BUFFER_LIST) - 1);    gtk_notebook_set_current_page(Shiki_EDITOR_NOTEBOOK, g_list_length(Shiki_EDITOR_BUFFER_LIST) - 1);
553      //Shiki_CURRENT_TAB_INFO = tabinfo;
554    return tabinfo->text_buffer;    return tabinfo->text_buffer;
555  }  }
556    
# Line 560  static void append_default_tabpage_handl Line 559  static void append_default_tabpage_handl
559  }  }
560    
561  /* ノートブックからタブとページ (バッファ) を削除 */  /* ノートブックからタブとページ (バッファ) を削除 */
562  static void remove_tabpage() {  static void kill_buffer_handler() {
563    /* タブが 1 つしか残っていなかったら消させない */    Shiki_kill_buffer(Shiki_CURRENT_TEXT_BUFFER);
   if(g_list_length(Shiki_EDITOR_BUFFER_LIST) == 1)  
     return;  
   if(!not_yet_save_changes_really_quit(Shiki_CURRENT_TEXT_BUFFER)) {  
     /* デリートハンドラをエディタトップレベルのウィジットから取り除く */  
     g_signal_handler_disconnect(Shiki_EDITOR_WINDOW, (Shiki_CURRENT_TAB_INFO)->delete_handler_id);  
     /* タブの中身を削除 */  
     gtk_widget_destroy(GTK_WIDGET(Shiki_CURRENT_TEXT_VIEW));  
     /* タブに対応するタブ情報を削除 */  
     g_free(Shiki_CURRENT_TAB_TITLE);  
     g_free(Shiki_CURRENT_BASENAME);  
     g_free(Shiki_CURRENT_FILENAME);  
     Shiki_EDITOR_BUFFER_LIST = g_list_delete_link(Shiki_EDITOR_BUFFER_LIST, g_list_nth(Shiki_EDITOR_BUFFER_LIST, Shiki_CURRENT_TAB_NUM));  
     g_free(Shiki_CURRENT_TAB_INFO);  
   
     /* カレントのタブ情報を更新 */  
     Shiki_CURRENT_TAB_INFO = g_list_nth_data(Shiki_EDITOR_BUFFER_LIST, Shiki_CURRENT_TAB_NUM);  
     gtk_notebook_remove_page(Shiki_EDITOR_NOTEBOOK, Shiki_CURRENT_TAB_NUM);  
     /* ウィジットを強制的に再描画 */  
     gtk_widget_queue_draw(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));  
   }  
564  }  }
565    
566  /* バッファをまるごとロード */  /* バッファをまるごとロード */
# Line 594  static void load_buffer_by_gauche() { Line 573  static void load_buffer_by_gauche() {
573    
574  /* ファイルをロード */  /* ファイルをロード */
575  static void load_scheme_file_by_gauche() {  static void load_scheme_file_by_gauche() {
576    gchar *contents, *text;    gchar *contents, *text = NULL;
577    gsize br, bw, len;    gsize br, bw, len;
578    GError *err = NULL;    GError *err = NULL;
579    const gchar *filename = Shiki_file_name_dialog("File Selection");    const gchar *filename = Shiki_file_name_dialog("File Selection");
# Line 766  static void save_file_as() { Line 745  static void save_file_as() {
745    gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename);    gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename);
746  }  }
747    
 /* 本当に終了してもよろしいですか ? */  
 static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer) {  
   /* 変更が無ければそのまま終了 */  
   if(!gtk_text_buffer_get_modified(buffer)) return FALSE;  
   
   return !Shiki_yes_or_no_p("バッファが変更されています.\nセーブしないで終了しますか ?");  
 }  
     
748  /* バッファがまだ保存されていないのに本当に終了するのかを尋ねる */  /* バッファがまだ保存されていないのに本当に終了するのかを尋ねる */
749  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer){  static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer){
750    return not_yet_save_changes_really_quit(buffer);    /* delete-event が発行された際,FALSE を返したらバッファは破棄される */
751      return Shiki_need_buffer_save_p(buffer) && !Shiki_yes_or_no_p("バッファは変更されています.変更内容を破棄しますか ?");
752  }  }
753    
754  /* ファイルを開く */  /* ファイルを開く */
# Line 796  static void open_file(const gchar *filen Line 768  static void open_file(const gchar *filen
768    g_free(utf8filename);    g_free(utf8filename);
769    
770    Scm_EvalCString("(use gauche.charconv)", Shiki_CURRENT_BUFFER_ENV);    Scm_EvalCString("(use gauche.charconv)", Shiki_CURRENT_BUFFER_ENV);
771    /*  
   Scm_EvalCString("(define contents (call-with-input-file *filename* port->string))", Shiki_CURRENT_BUFFER_ENV);  
   Scm_EvalCString("(define ces (ces-guess-from-string contents \"*JP\"))", Shiki_CURRENT_BUFFER_ENV);  
   ces = Scm_EvalCString("ces", Shiki_CURRENT_BUFFER_ENV);  
   Shiki_CURRENT_CES = Scm_GetString(SCM_STRING(ces));  
   //s = Scm_EvalCString("(ces-convert contents ces)", Shiki_CURRENT_BUFFER_ENV);  
   s = Scm_EvalCString("(ces-convert contents `utf8)", Shiki_CURRENT_BUFFER_ENV);  
   */  
     
772    /* ファイルから文字列を取り出し,変換後にバッファに格納 */    /* ファイルから文字列を取り出し,変換後にバッファに格納 */
773    s = Scm_EvalCString("(port->string (open-input-conversion-port (open-input-file *filename*) \"*jp\" :owner? #t))", Shiki_CURRENT_BUFFER_ENV);    s = Scm_EvalCString("(port->string (open-input-conversion-port (open-input-file *filename*) \"*jp\" :owner? #t))", Shiki_CURRENT_BUFFER_ENV);
774    text = Scm_GetString(SCM_STRING(s));    text = Scm_GetString(SCM_STRING(s));
775    gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, -1);    if(text)
776        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, -1);
777      else {
778        /* open-input-conversion-port が失敗したならば,とりあえずシステム
779         * ロケールに変換してみる.駄目だったら諦めて駄目元で UTF8
780         */
781        gchar *contents;
782        gsize br, bw, len;
783        GError *err = NULL;
784    
785        if(g_file_get_contents(filename, &contents, &len, NULL)) {
786          if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))
787            gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, text, -1);
788          else
789            gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, contents, -1);
790          g_free(contents);
791        }
792      }
793    
794    /* バッファ未変更に */    /* バッファ未変更に */
795    gtk_text_buffer_set_modified(Shiki_CURRENT_TEXT_BUFFER, FALSE);    gtk_text_buffer_set_modified(Shiki_CURRENT_TEXT_BUFFER, FALSE);
# Line 1245  static void Shiki_editor_window_init(int Line 1226  static void Shiki_editor_window_init(int
1226        "まだ内容が保存されていない場合でも警告しません");        "まだ内容が保存されていない場合でも警告しません");
1227    
1228    icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_CLOSE, iconsize), "");    icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_CLOSE, iconsize), "");
1229    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(remove_tabpage), NULL);    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(kill_buffer_handler), NULL);
1230    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
1231    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファを閉じます",    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファを閉じます",
1232        "まだ内容が保存されていない場合は警告します");        "まだ内容が保存されていない場合は警告します");

Legend:
Removed from v.1.57  
changed lines
  Added in v.1.58

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