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.4 by aloha, Fri Nov 3 06:47:02 2006 UTC revision 1.5 by aloha, Fri Nov 3 08:02:51 2006 UTC
# Line 162  gboolean not_yet_save_changes_really_qui Line 162  gboolean not_yet_save_changes_really_qui
162      /* 本当に終了してもよろしいですか ? ダイアログの初期化 */      /* 本当に終了してもよろしいですか ? ダイアログの初期化 */
163      g_signal_connect(G_OBJECT(dialog_window), "delete_event", G_CALLBACK(gtk_false), NULL);      g_signal_connect(G_OBJECT(dialog_window), "delete_event", G_CALLBACK(gtk_false), NULL);
164      g_signal_connect(G_OBJECT(dialog_window), "destroy", G_CALLBACK(gtk_main_quit), NULL);      g_signal_connect(G_OBJECT(dialog_window), "destroy", G_CALLBACK(gtk_main_quit), NULL);
165        gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog_window)->vbox),
166            gtk_label_new("バッファが変更されています.\nセーブしないで終了しますか ?"), TRUE, TRUE, 0);
167      gtk_window_set_title(GTK_WINDOW (dialog_window), "Really Quit ?");      gtk_window_set_title(GTK_WINDOW (dialog_window), "Really Quit ?");
168      /* YES のボタン */      /* YES のボタン */
169      yes_button = gtk_button_new_with_label("YES");      yes_button = gtk_button_new_with_label("はい (Y)");
170      g_signal_connect(GTK_OBJECT(yes_button), "clicked", G_CALLBACK(really_quit_dialog_yes), &flag);      g_signal_connect(GTK_OBJECT(yes_button), "clicked", G_CALLBACK(really_quit_dialog_yes), &flag);
171      g_signal_connect_swapped(GTK_OBJECT(yes_button), "clicked", G_CALLBACK(gtk_widget_destroy), G_OBJECT(dialog_window));      g_signal_connect_swapped(GTK_OBJECT(yes_button), "clicked", G_CALLBACK(gtk_widget_destroy), G_OBJECT(dialog_window));
172      gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area),  yes_button, TRUE, TRUE, 0);      gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area),  yes_button, TRUE, TRUE, 0);
173    
174      /* NO のボタン */      /* NO のボタン */
175      no_button = gtk_button_new_with_label("NO");      no_button = gtk_button_new_with_label("いいえ (N)");
176      g_signal_connect(GTK_OBJECT(no_button), "clicked", G_CALLBACK(really_quit_dialog_no), &flag);      g_signal_connect(GTK_OBJECT(no_button), "clicked", G_CALLBACK(really_quit_dialog_no), &flag);
177      g_signal_connect_swapped(GTK_OBJECT(no_button), "clicked", G_CALLBACK(gtk_widget_destroy), G_OBJECT(dialog_window));      g_signal_connect_swapped(GTK_OBJECT(no_button), "clicked", G_CALLBACK(gtk_widget_destroy), G_OBJECT(dialog_window));
178      gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area),  no_button, TRUE, TRUE, 0);      gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_window)->action_area),  no_button, TRUE, TRUE, 0);
# Line 212  static GtkWidget *new_scrolled_text_buff Line 213  static GtkWidget *new_scrolled_text_buff
213    gtk_widget_set_size_request(GTK_WIDGET(view), 500, 500);    gtk_widget_set_size_request(GTK_WIDGET(view), 500, 500);
214    
215    /* 様々な初期化処理 */    /* 様々な初期化処理 */
   
216    /* 括弧の強調表示のためのタグを作る */    /* 括弧の強調表示のためのタグを作る */
217    gtk_text_buffer_create_tag (buffer, "parent_emphasis_background", "background", "green", NULL);    gtk_text_buffer_create_tag (buffer, "parent_emphasis_background", "background", "green", NULL);
218    
# Line 441  static void line_backward_buffer_from_cu Line 441  static void line_backward_buffer_from_cu
441  /* キーが押された */  /* キーが押された */
442  static gboolean signal_key_press_handler (GtkWidget *notebook, GdkEventKey *event, gpointer p) {  static gboolean signal_key_press_handler (GtkWidget *notebook, GdkEventKey *event, gpointer p) {
443    GtkTextBuffer *buffer = get_text_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));    GtkTextBuffer *buffer = get_text_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));
444      //static gint metakey_pressed = 0;
445      static gint controlx_pressed = 0;
446    GtkTextIter start, end;    GtkTextIter start, end;
447    
448    /* 括弧の対応の強調を無効に */    /* 括弧の対応の強調を無効に */
# Line 449  static gboolean signal_key_press_handler Line 450  static gboolean signal_key_press_handler
450    gtk_text_buffer_get_end_iter(buffer, &end);    gtk_text_buffer_get_end_iter(buffer, &end);
451    gtk_text_buffer_remove_tag_by_name(buffer, "parent_emphasis_background", &start, &end);    gtk_text_buffer_remove_tag_by_name(buffer, "parent_emphasis_background", &start, &end);
452    
453    /* コントロールキーが押されている */    /* C-x */
454    if(event->state & GDK_CONTROL_MASK) {    if(event->keyval == GDK_x && event->state & GDK_CONTROL_MASK) {
455      switch(event->keyval) {      controlx_pressed++;
456        case GDK_f :  /* Ctrl + f : forward */      g_print("C-x ");
457          forward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));    } else if(event->state & GDK_CONTROL_MASK) {
458          break;      if(controlx_pressed > 0) {
459        case GDK_b : /* Ctrl + b : backward */        g_print("C-%s\n", event->string);
460          backward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));        switch(event->keyval) {
461          break;          case GDK_c :/* C-x C-c : 終了 */
462        case GDK_n : /* Ctrl + n : next line */            {/* "delete-event" を発生させる.ウィンドウの × ボタンが押されたのと同じ */
463          line_forward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));              GdkEvent ev;
464          break;  
465        case GDK_p :  /* Ctrl + p : previous line */              ev.any.type = GDK_DELETE;
466          line_backward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));              ev.any.window = editor_window->window;
467          break;              ev.any.send_event = FALSE;
468                gdk_event_put (&ev);
469        case GDK_j :  /* Ctrl + j : カーソル手前の S 式の評価 */            }
470          {            break;
471            gchar *code;  
472            GtkTextIter start, end;          case GDK_f : /* C-x C-f : ファイル開く */
473              open_file_from_notebook(GTK_NOTEBOOK(notebook));
474            /* カーソルの位置を取得 */            g_print("C-f\n");
475            gtk_text_buffer_get_iter_at_mark(buffer, &end, gtk_text_buffer_get_insert(buffer));            break;
476    
477            gtk_text_iter_backward_find_char(&end, is_kokka, NULL, NULL);          case GDK_s : /* C-x C-s : ファイル保存 */
478            start = end;            save_file_from_notebook(GTK_NOTEBOOK(notebook));    
479            gtk_text_iter_forward_char(&end);            break;
480    
481            /* カーソル位置の前にある S 式を切り出す */          case GDK_w : /* C-x C-w : ファイル別名保存 */
482            if(!search_sexp_string(&start)) return FALSE;            save_file_as_from_notebook(GTK_NOTEBOOK(notebook));    
483              break;
484            code = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);        }
485            gtk_text_buffer_insert(buffer, &end, "\n\n", -1);        controlx_pressed = 0;
486            gtk_text_buffer_insert(buffer, &end, eval_cstring_by_gauche(code), -1);      } else {
487            g_free(code);        switch(event->keyval) {
488          }          case GDK_f :  /* Ctrl + f : forward */
489          break;            forward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));
490              break;
491        case GDK_O : /* Ctrl + O : ファイル開く */          case GDK_b : /* Ctrl + b : backward */
492          open_file_from_notebook(GTK_NOTEBOOK(notebook));                backward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));
493          break;            break;
494            case GDK_n : /* Ctrl + n : next line */
495        case GDK_s : /* Ctrl + s : ファイル保存 */            line_forward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));
496          save_file_from_notebook(GTK_NOTEBOOK(notebook));                break;
497          break;          case GDK_p :  /* Ctrl + p : previous line */
498              line_backward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook));
499        case GDK_w : /* Ctrl + w : ファイル別名保存 */            break;
500          save_file_as_from_notebook(GTK_NOTEBOOK(notebook));      
501          break;          case GDK_j :  /* Ctrl + j : カーソル手前の S 式の評価 */
502              {
503        case GDK_t : /* Ctrl + t : タブを開く */              gchar *code;
504          gtk_notebook_append_page(GTK_NOTEBOOK(notebook), new_scrolled_text_buffer(), gtk_label_new("*scratch*"));              GtkTextIter start, end;
505          gtk_widget_show_all(GTK_WIDGET(notebook));  
506          break;              /* カーソルの位置を取得 */
507                gtk_text_buffer_get_iter_at_mark(buffer, &end, gtk_text_buffer_get_insert(buffer));
508        case GDK_C : /* Ctrl + c : タブを閉じる */  
509          remove_tabpage(GTK_NOTEBOOK(notebook));              gtk_text_iter_backward_find_char(&end, is_kokka, NULL, NULL);
510          break;              start = end;
511                gtk_text_iter_forward_char(&end);
512        case GDK_q :/* Ctrl + q : 終了 */  
513          {              /* カーソル位置の前にある S 式を切り出す */
514            /* "delete-event" を発生させる.ウィンドウの × ボタンが押されたのと同じ */              if(!search_sexp_string(&start)) return FALSE;
515            GdkEvent ev;  
516                code = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
517            ev.any.type = GDK_DELETE;              gtk_text_buffer_insert(buffer, &end, "\n\n", -1);
518            ev.any.window = editor_window->window;              gtk_text_buffer_insert(buffer, &end, eval_cstring_by_gauche(code), -1);
519            ev.any.send_event = FALSE;              g_free(code);
520            gdk_event_put (&ev);            }
521          }            break;
522          break;  
523            case GDK_t : /* Ctrl + t : タブを開く */
524              gtk_notebook_append_page(GTK_NOTEBOOK(notebook), new_scrolled_text_buffer(), gtk_label_new("*scratch*"));
525              gtk_widget_show_all(GTK_WIDGET(notebook));
526              break;
527    
528            case GDK_k : /* Ctrl + k : タブを閉じる */
529              remove_tabpage(GTK_NOTEBOOK(notebook));
530              break;
531          }
532      }      }
533    }    }
534    return FALSE;    return FALSE;
# Line 651  static void editor_window_init() { Line 661  static void editor_window_init() {
661    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファを閉じます",    gtk_tool_item_set_tooltip(icon, toolbar_tips, "バッファを閉じます",
662        "まだ内容が保存されていない場合は警告します");        "まだ内容が保存されていない場合は警告します");
663    
664      gtk_widget_grab_focus(notebook);
665    gtk_widget_show_all(editor_window);    gtk_widget_show_all(editor_window);
666  }  }
667    

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

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