| 62 |
static gchar* get_all_buffer_contents(GtkTextBuffer *buffer); |
static gchar* get_all_buffer_contents(GtkTextBuffer *buffer); |
| 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(); |
|
static void undo(); |
|
| 65 |
static void search_current_buffer(); |
static void search_current_buffer(); |
| 66 |
|
|
| 67 |
/* Gauche と S 式操作やインデント・キーワードハイライティング関連 */ |
/* Gauche と S 式操作やインデント・キーワードハイライティング関連 */ |
| 290 |
Shiki_update_modeline(Shiki_CURRENT_TEXT_BUFFER); |
Shiki_update_modeline(Shiki_CURRENT_TEXT_BUFFER); |
| 291 |
} |
} |
| 292 |
|
|
|
static void undo() { |
|
|
g_print("Undo\n"); |
|
|
GtkTextIter start, end; |
|
|
ShikiUndoInfo *undoInfo = g_list_nth_data(Shiki_CURRENT_UNDO_INFO_LIST, 0); |
|
|
if(!undoInfo) { |
|
|
g_print("これ以上 Undo できません\n"); |
|
|
return; |
|
|
} |
|
|
gtk_text_buffer_get_iter_at_offset(Shiki_CURRENT_TEXT_BUFFER, &start, undoInfo->start); |
|
|
gtk_text_buffer_get_iter_at_offset(Shiki_CURRENT_TEXT_BUFFER, &end, undoInfo->end); |
|
|
|
|
|
if(undoInfo->action == SHIKI_UNDO_INSERT) { |
|
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_delete_link(Shiki_CURRENT_UNDO_INFO_LIST, g_list_first(Shiki_CURRENT_UNDO_INFO_LIST)); |
|
|
gtk_text_buffer_delete(Shiki_CURRENT_TEXT_BUFFER, &start, &end); |
|
|
g_free(undoInfo->str); |
|
|
g_free(undoInfo); |
|
|
} else if(undoInfo->action == SHIKI_UNDO_DELETE) { |
|
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_delete_link(Shiki_CURRENT_UNDO_INFO_LIST, g_list_first(Shiki_CURRENT_UNDO_INFO_LIST)); |
|
|
gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &start, undoInfo->str, -1); |
|
|
g_free(undoInfo->str); |
|
|
g_free(undoInfo); |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
| 293 |
/* キーが押された */ |
/* キーが押された */ |
| 294 |
static gboolean signal_key_press_handler (GtkWidget *notebook, GdkEventKey *event, gpointer contextid) { |
static gboolean signal_key_press_handler (GtkWidget *notebook, GdkEventKey *event, gpointer contextid) { |
| 295 |
GtkTextIter start, end; |
GtkTextIter start, end; |
| 374 |
break; |
break; |
| 375 |
|
|
| 376 |
case GDK_underscore : /* Ctrl + _ : Undo */ |
case GDK_underscore : /* Ctrl + _ : Undo */ |
| 377 |
undo(); |
Shiki_undo(); |
| 378 |
break; |
break; |
| 379 |
|
|
| 380 |
case GDK_t : /* Ctrl + t : タブを開く */ |
case GDK_t : /* Ctrl + t : タブを開く */ |
| 763 |
|
|
| 764 |
/* 改行されるたびに,自動的に括弧のネストの深さに応じた数のスペース (インデント) が行頭に入る */ |
/* 改行されるたびに,自動的に括弧のネストの深さに応じた数のスペース (インデント) が行頭に入る */ |
| 765 |
if(event->keyval == GDK_Return) { |
if(event->keyval == GDK_Return) { |
| 766 |
gint indentWidth = get_parent_nest_level_at_cursor(Shiki_CURRENT_TEXT_BUFFER) * SCM_INT_VALUE(Scm_EvalCString("*indent-width*", Shiki_CURRENT_BUFFER_ENV)); |
gint indentWidth = get_parent_nest_level_at_cursor(Shiki_CURRENT_TEXT_BUFFER) * SCM_INT_VALUE(Scm_GlobalVariableRef(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*indent-width*")), 0)), i; |
| 767 |
gchar *indent = g_strnfill(indentWidth, ' '); |
static gchar *indent = " "; |
| 768 |
gtk_text_buffer_insert_at_cursor(Shiki_CURRENT_TEXT_BUFFER, indent, -1); |
for(i = 0; i < indentWidth; i++) |
| 769 |
g_free(indent); |
gtk_text_buffer_insert_at_cursor(Shiki_CURRENT_TEXT_BUFFER, indent, -1); |
| 770 |
} |
} |
| 771 |
|
|
| 772 |
/* C-x */ |
/* C-x */ |
| 953 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "新規バッファを開きます", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "新規バッファを開きます", ""); |
| 954 |
|
|
| 955 |
icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_UNDO, iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_UNDO, iconsize), ""); |
| 956 |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(undo), G_OBJECT(Shiki_EDITOR_NOTEBOOK)); |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(Shiki_undo), NULL); |
| 957 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 958 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "Undo",""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "Undo",""); |
| 959 |
|
|