| 449 |
gtk_text_buffer_get_end_iter(buffer, &end); |
gtk_text_buffer_get_end_iter(buffer, &end); |
| 450 |
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); |
| 451 |
|
|
| 452 |
/* Ctrl + f : forward */ |
/* コントロールキーが押されている */ |
| 453 |
if(event->keyval == GDK_f && event->state & GDK_CONTROL_MASK) { |
if(event->state & GDK_CONTROL_MASK) { |
| 454 |
forward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook)); |
switch(event->keyval) { |
| 455 |
|
case GDK_f : /* Ctrl + f : forward */ |
| 456 |
|
forward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook)); |
| 457 |
|
break; |
| 458 |
|
case GDK_b : /* Ctrl + b : backward */ |
| 459 |
|
backward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook)); |
| 460 |
|
break; |
| 461 |
|
case GDK_n : /* Ctrl + n : next line */ |
| 462 |
|
line_forward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook)); |
| 463 |
|
break; |
| 464 |
|
case GDK_p : /* Ctrl + p : previous line */ |
| 465 |
|
line_backward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook)); |
| 466 |
|
break; |
| 467 |
|
|
| 468 |
|
case GDK_j : /* Ctrl + j : カーソル手前の S 式の評価 */ |
| 469 |
|
{ |
| 470 |
|
gchar *code; |
| 471 |
|
GtkTextIter start, end; |
| 472 |
|
|
| 473 |
|
/* カーソルの位置を取得 */ |
| 474 |
|
gtk_text_buffer_get_iter_at_mark(buffer, &end, gtk_text_buffer_get_insert(buffer)); |
| 475 |
|
|
| 476 |
|
gtk_text_iter_backward_find_char(&end, is_kokka, NULL, NULL); |
| 477 |
|
start = end; |
| 478 |
|
gtk_text_iter_forward_char(&end); |
| 479 |
|
|
| 480 |
|
/* カーソル位置の前にある S 式を切り出す */ |
| 481 |
|
if(!search_sexp_string(&start)) return FALSE; |
| 482 |
|
|
| 483 |
|
code = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); |
| 484 |
|
gtk_text_buffer_insert(buffer, &end, "\n\n", -1); |
| 485 |
|
gtk_text_buffer_insert(buffer, &end, eval_cstring_by_gauche(code), -1); |
| 486 |
|
g_free(code); |
| 487 |
|
} |
| 488 |
|
break; |
| 489 |
|
|
| 490 |
|
case GDK_O : /* Ctrl + O : ファイル開く */ |
| 491 |
|
open_file_from_notebook(GTK_NOTEBOOK(notebook)); |
| 492 |
|
break; |
| 493 |
|
|
| 494 |
|
case GDK_s : /* Ctrl + s : ファイル保存 */ |
| 495 |
|
save_file_from_notebook(GTK_NOTEBOOK(notebook)); |
| 496 |
|
break; |
| 497 |
|
|
| 498 |
|
case GDK_w : /* Ctrl + w : ファイル別名保存 */ |
| 499 |
|
save_file_as_from_notebook(GTK_NOTEBOOK(notebook)); |
| 500 |
|
break; |
| 501 |
|
|
| 502 |
|
case GDK_t : /* Ctrl + t : タブを開く */ |
| 503 |
|
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), new_scrolled_text_buffer(), gtk_label_new("*scratch*")); |
| 504 |
|
gtk_widget_show_all(GTK_WIDGET(notebook)); |
| 505 |
|
break; |
| 506 |
|
|
| 507 |
|
case GDK_C : /* Ctrl + c : タブを閉じる */ |
| 508 |
|
remove_tabpage(GTK_NOTEBOOK(notebook)); |
| 509 |
|
break; |
| 510 |
|
|
| 511 |
|
case GDK_q :/* Ctrl + q : 終了 */ |
| 512 |
|
{ |
| 513 |
|
/* "delete-event" を発生させる.ウィンドウの × ボタンが押されたのと同じ */ |
| 514 |
|
GdkEvent ev; |
| 515 |
|
|
| 516 |
|
ev.any.type = GDK_DELETE; |
| 517 |
|
ev.any.window = editor_window->window; |
| 518 |
|
ev.any.send_event = FALSE; |
| 519 |
|
gdk_event_put (&ev); |
| 520 |
|
} |
| 521 |
|
break; |
| 522 |
|
} |
| 523 |
} |
} |
|
/* Ctrl + b : backward */ |
|
|
if(event->keyval == GDK_b && event->state & GDK_CONTROL_MASK) { |
|
|
backward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook)); |
|
|
} |
|
|
/* Ctrl + n : next line */ |
|
|
if(event->keyval == GDK_n && event->state & GDK_CONTROL_MASK) { |
|
|
line_forward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook)); |
|
|
} |
|
|
/* Ctrl + p : previous line */ |
|
|
if(event->keyval == GDK_p && event->state & GDK_CONTROL_MASK) { |
|
|
line_backward_buffer_from_current_tabpage(GTK_NOTEBOOK(notebook)); |
|
|
} |
|
|
|
|
|
/* Ctrl + j : カーソル手前の S 式の評価 */ |
|
|
if(event->keyval == GDK_j && event->state & GDK_CONTROL_MASK) { |
|
|
gchar *code; |
|
|
GtkTextIter start, end; |
|
|
|
|
|
/* カーソルの位置を取得 */ |
|
|
gtk_text_buffer_get_iter_at_mark(buffer, &end, gtk_text_buffer_get_insert(buffer)); |
|
|
|
|
|
gtk_text_iter_backward_find_char(&end, is_kokka, NULL, NULL); |
|
|
start = end; |
|
|
gtk_text_iter_forward_char(&end); |
|
|
|
|
|
/* カーソル位置の前にある S 式を切り出す */ |
|
|
if(!search_sexp_string(&start)) return FALSE; |
|
|
|
|
|
code = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); |
|
|
gtk_text_buffer_insert(buffer, &end, "\n\n", -1); |
|
|
gtk_text_buffer_insert(buffer, &end, eval_cstring_by_gauche(code), -1); |
|
|
g_free(code); |
|
|
} |
|
|
|
|
|
/* Ctrl + O : ファイル開く */ |
|
|
if(event->keyval == GDK_O && event->state & GDK_CONTROL_MASK) { |
|
|
open_file_from_notebook(GTK_NOTEBOOK(notebook)); |
|
|
} |
|
|
|
|
|
/* Ctrl + s : ファイル保存 */ |
|
|
if(event->keyval == GDK_s && event->state & GDK_CONTROL_MASK) { |
|
|
save_file_from_notebook(GTK_NOTEBOOK(notebook)); |
|
|
} |
|
|
|
|
|
/* Ctrl + w : ファイル別名保存 */ |
|
|
if(event->keyval == GDK_w && event->state & GDK_CONTROL_MASK) { |
|
|
save_file_as_from_notebook(GTK_NOTEBOOK(notebook)); |
|
|
} |
|
|
|
|
|
/* Ctrl + t : タブを開く */ |
|
|
if(event->keyval == GDK_t && event->state & GDK_CONTROL_MASK) { |
|
|
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), new_scrolled_text_buffer(), gtk_label_new("*scratch*")); |
|
|
gtk_widget_show_all(GTK_WIDGET(notebook)); |
|
|
} |
|
|
|
|
|
/* Ctrl + c : タブを閉じる */ |
|
|
if(event->keyval == GDK_C && event->state & GDK_CONTROL_MASK) { |
|
|
remove_tabpage(GTK_NOTEBOOK(notebook)); |
|
|
} |
|
|
|
|
|
/* Ctrl + q : 終了 */ |
|
|
if(event->keyval == GDK_q && event->state & GDK_CONTROL_MASK) { |
|
|
/* "delete-event" を発生させる.ウィンドウの × ボタンが押されたのと同じ */ |
|
|
GdkEvent ev; |
|
|
|
|
|
ev.any.type = GDK_DELETE; |
|
|
ev.any.window = editor_window->window; |
|
|
ev.any.send_event = FALSE; |
|
|
gdk_event_put (&ev); |
|
|
} |
|
|
|
|
| 524 |
return FALSE; |
return FALSE; |
| 525 |
} |
} |
| 526 |
|
|