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.64 by aloha, Sun Dec 3 15:21:04 2006 UTC revision 1.65 by aloha, Thu Dec 28 05:04:45 2006 UTC
# Line 63  static gchar* get_all_buffer_contents(Gt Line 63  static gchar* get_all_buffer_contents(Gt
63  static gboolean save_text_buffer(const gchar *filename, GtkTextBuffer *buffer);  static gboolean save_text_buffer(const gchar *filename, GtkTextBuffer *buffer);
64  static void clear_current_buffer_handler();  static void clear_current_buffer_handler();
65    
66    
67    /* FIXME !!!!!! : なぜかロードすると SEGV で落ちる !!!!!!!!!!!!!!!!!!!!!! */
68    
69    
70  /* Gauche と S 式操作やインデント・キーワードハイライティング関連 */  /* Gauche と S 式操作やインデント・キーワードハイライティング関連 */
71  static gchar *load_cstring_by_gauche(gchar *s);  static gchar *load_cstring_by_gauche(gchar *s);
72  static void load_buffer_by_gauche();  static void load_buffer_by_gauche();
# Line 366  static void load_buffer_by_gauche() { Line 370  static void load_buffer_by_gauche() {
370    gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, load_cstring_by_gauche(get_all_buffer_contents(Shiki_CURRENT_TEXT_BUFFER)), -1);    gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, load_cstring_by_gauche(get_all_buffer_contents(Shiki_CURRENT_TEXT_BUFFER)), -1);
371  }  }
372    
373    
374    
375  /* ファイルをロード */  /* ファイルをロード */
376  static void load_scheme_file_by_gauche() {  static void load_scheme_file_by_gauche() {
   gchar *contents, *text = NULL;  
   gsize br, bw, len;  
   GError *err = NULL;  
377    const gchar *filename = Shiki_file_name_dialog("File Selection");    const gchar *filename = Shiki_file_name_dialog("File Selection");
   GtkTextIter p;  
378    
379    if(!filename) return;    if(!filename) return;
380      Shiki_load_file(filename);
381    }
382    
383    gtk_text_buffer_get_end_iter(Shiki_CURRENT_TEXT_BUFFER, &p);  static gint compBuffer(gconstpointer a, gconstpointer b) {
384    gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, "\n\n", -1);    return ((ShikiBuffer *)a)->text_buffer == b ? 0 : b - a;
385    }
386    
387    if(g_file_get_contents(filename, &contents, &len, NULL)) {  /* バッファに関連付けられたファイルをリロード.環境はクリアされる */
388      if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))  static void reload_buffer() {
389        gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, load_cstring_by_gauche(text), -1);  #if 0
390      else    Shiki_CURRENT_BUFFER_ENV = Scm_MakeModule(NULL, FALSE);
391        gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, load_cstring_by_gauche(contents), -1);  
392    }    /* xyzzy lisp 関数を登録 */
393    g_free(text); g_free(contents);    Scm_Init_xyzzylisp(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV));
394      Scm_EvalCString("(set! *mode-line-format* (lambda () (format #f \"--~A- ~A (Gauche Interaction) [GtkDefault (utf8)]     L~S:~S             \" (if (buffer-modified-p) \"--\" \"**\") (buffer-name (selected-buffer)) (current-line-number) (current-column))))", Shiki_CURRENT_BUFFER_ENV);
395    #endif
396    
397      Shiki_load_file(Shiki_CURRENT_FILENAME);
398  }  }
399    
400    
401  /* gauche を起動して文字列をロード */  /* gauche を起動して文字列をロード */
402  static gchar *load_cstring_by_gauche(gchar *s) {  static gchar *load_cstring_by_gauche(gchar *s) {
403    gchar *msg;    gchar *msg;
404    
405      g_print("%s\n", s);
406    ScmObj result, error;    ScmObj result, error;
407    /* 入力文字列ポートを開く */    /* 入力文字列ポートを開く */
408    ScmObj is = Scm_MakeInputStringPort(SCM_STRING(SCM_MAKE_STR_COPYING(s)), TRUE);    ScmObj is = Scm_MakeInputStringPort(SCM_STRING(SCM_MAKE_STR_COPYING(s)), TRUE);
# Line 456  static void about_this_application() { Line 467  static void about_this_application() {
467    gtk_widget_destroy(GTK_WIDGET(about));    gtk_widget_destroy(GTK_WIDGET(about));
468  }  }
469    
470  /* ダミー */  #if 0
471    /* 開発途中に使用したダミーイベントハンドラー */
472  static void dummy_handler() {  static void dummy_handler() {
473    GtkWidget *dummy = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW),    GtkWidget *dummy = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW),
474        GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE,        GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE,
# Line 464  static void dummy_handler() { Line 476  static void dummy_handler() {
476    gtk_dialog_run(GTK_DIALOG(dummy));    gtk_dialog_run(GTK_DIALOG(dummy));
477    gtk_widget_destroy(dummy);    gtk_widget_destroy(dummy);
478  }  }
479    #endif
480    
481  /* テキストバッファから全ての文字列を取り出す */  /* テキストバッファから全ての文字列を取り出す */
482  static gchar* get_all_buffer_contents(GtkTextBuffer *buffer) {  static gchar* get_all_buffer_contents(GtkTextBuffer *buffer) {
# Line 665  static void open_online_help() { Line 678  static void open_online_help() {
678        "[フロッピーディスクのアイコン]   バッファを保存 (C-x C-s)\n"        "[フロッピーディスクのアイコン]   バッファを保存 (C-x C-s)\n"
679        "[フロッピーとえんぴつのアイコン] バッファを別名保存 (C-x C-w)\n"        "[フロッピーとえんぴつのアイコン] バッファを別名保存 (C-x C-w)\n"
680        "[ギアのアイコン]                 選択領域を gauche にロード\n"        "[ギアのアイコン]                 選択領域を gauche にロード\n"
       "[マーキング (ちょん) のアイコン] タブの on/off\n"  
       "[工具 (スパナ) のアイコン]       タブの位置の調整\n"  
681        "[新規アイコン]                   新規バッファを開く (C-t)\n"        "[新規アイコン]                   新規バッファを開く (C-t)\n"
682        "[左向き矢印アイコン]             やり直し (C-_)\n"        "[左向き矢印アイコン]             やり直し (Undo) (C-\\)\n"
683          "[右向き矢印アイコン]             再試行   (Redo) (C-_)\n"
684          "[ルーペ]                         検索\n"
685          "[ルーペとペン]                   置換\n"
686        "[ゴミ箱アイコン]                 バッファをクリア\n"        "[ゴミ箱アイコン]                 バッファをクリア\n"
687        "\n"        "\n"
688        "(注 : 通常,バッファの内容が失われる恐れがあるときには警告しますが,クリアだけは警告をしません.もし間違って消してしまった場合には慌てずに Undo してください)\n"        "(注 : 通常,バッファの内容が失われる恐れがあるときには警告しますが,クリアだけは警告をしません.もし間違って消してしまった場合には慌てずに Undo してください)\n"
# Line 677  static void open_online_help() { Line 691  static void open_online_help() {
691        "[A アイコン]                     フォントの選択\n"        "[A アイコン]                     フォントの選択\n"
692        "[顔みたいなアイコン]             Scheme ファイルのロード\n"        "[顔みたいなアイコン]             Scheme ファイルのロード\n"
693        "[緑っぽい,変換アイコン]         バッファの内容を全てロード\n"        "[緑っぽい,変換アイコン]         バッファの内容を全てロード\n"
694          "[Abc]                            シンタックスハイライティング\n"
695        "[ヘルプ (?) アイコン]            このヘルプ画面を表示します\n"        "[ヘルプ (?) アイコン]            このヘルプ画面を表示します\n"
696          "[A]                              フォントの選択\n"
697          "[マーキング (ちょん) のアイコン] タブの on/off\n"
698          "[工具 (スパナ) のアイコン]       タブの位置の調整\n"
699        "[info アイコン]                  このアプリケーションについての情報\n"        "[info アイコン]                  このアプリケーションについての情報\n"
700        "\n"        "\n"
701        "C-f : → に移動 (forward)\n"        "C-f : → に移動 (forward)\n"
# Line 809  static void Shiki_editor_window_init(int Line 827  static void Shiki_editor_window_init(int
827    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
828    gtk_tool_item_set_tooltip(icon, toolbar_tips, "置換", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "置換", "");
829    
   /* XXX : TODO */  
830    icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_REFRESH, iconsize), "");    icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_REFRESH, iconsize), "");
831    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(dummy_handler), NULL);    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(reload_buffer), NULL);
832    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
833    gtk_tool_item_set_tooltip(icon, toolbar_tips, "リロード", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "リロード", "環境はクリアされます");
   
   /* TODO ここまで */  
834    
835    icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_DELETE, iconsize), "");    icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_DELETE, iconsize), "");
836    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(clear_current_buffer_handler), NULL);    g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(clear_current_buffer_handler), NULL);
# Line 903  static void Shiki_editor_window_init(int Line 918  static void Shiki_editor_window_init(int
918    gtk_widget_show_all(Shiki_EDITOR_WINDOW);    gtk_widget_show_all(Shiki_EDITOR_WINDOW);
919  }  }
920    
921    ScmClass *ShikiBufferClass = NULL;
922    
923    static void buffer_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx) {
924      GtkTextBuffer *b = SHIKI_BUFFER_UNBOX(obj);
925      GList *l  = g_list_find_custom(Shiki_EDITOR_BUFFER_LIST, b, compBuffer);
926      if(l)
927        Scm_Printf(out, "#<buffer: %s>", ((ShikiBuffer *)(l->data))->name);
928      else
929        Scm_Printf(out, "#<deleted buffer: %p>", b);
930    }
931    
932    static void buffer_cleanup(ScmObj obj)
933    {
934      g_object_unref(SHIKI_BUFFER_UNBOX(obj));
935    }
936    
937  int main(int argc, char *argv[]) {  int main(int argc, char *argv[]) {
938    /* 初期化してメインループへ */    /* 初期化してメインループへ */
939    Shiki_EDITOR_DEFAULT_LOCALE = g_locale_to_utf8(gtk_set_locale(), -1, NULL, NULL, NULL);    Shiki_EDITOR_DEFAULT_LOCALE = g_locale_to_utf8(gtk_set_locale(), -1, NULL, NULL, NULL);
940    gtk_init(&argc, &argv);    gtk_init(&argc, &argv);
941    GC_INIT(); Scm_Init(GAUCHE_SIGNATURE);    GC_INIT(); Scm_Init(GAUCHE_SIGNATURE);
942    Scm_Load("gauche-init.scm", 0);    Scm_Load("gauche-init.scm", 0);
943      ShikiBufferClass = Scm_MakeForeignPointerClass(SCM_CURRENT_MODULE(),
944          "<buffer>", buffer_print, buffer_cleanup,
945          SCM_FOREIGN_POINTER_KEEP_IDENTITY
946          |
947          SCM_FOREIGN_POINTER_MAP_NULL);
948    Shiki_editor_window_init(argc, argv);    Shiki_editor_window_init(argc, argv);
949    gtk_main();    gtk_main();
950    Scm_Exit(0);    Scm_Exit(0);

Legend:
Removed from v.1.64  
changed lines
  Added in v.1.65

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