| 128 |
static gboolean save_text_buffer(const gchar *filename, GtkTextBuffer *buffer); |
static gboolean save_text_buffer(const gchar *filename, GtkTextBuffer *buffer); |
| 129 |
static void clear_current_buffer(); |
static void clear_current_buffer(); |
| 130 |
static void undo(); |
static void undo(); |
| 131 |
|
static void search_current_buffer(); |
| 132 |
static void insert_text_handler(GtkTextBuffer *buffer, GtkTextIter *p, gchar *str, gint len); |
static void insert_text_handler(GtkTextBuffer *buffer, GtkTextIter *p, gchar *str, gint len); |
| 133 |
static void delete_range_handler(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end); |
static void delete_range_handler(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end); |
| 134 |
|
|
| 140 |
static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer); |
static gboolean not_yet_save_changes_really_quit(GtkTextBuffer *buffer); |
| 141 |
static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer); |
static gboolean delete_event_handler(GtkWidget *widget, GdkEvent *event, GtkTextBuffer *buffer); |
| 142 |
|
|
| 143 |
/* Gauche と S 式操作やインデント関連 */ |
/* Gauche と S 式操作やインデント・キーワードハイライティング関連 */ |
| 144 |
static gchar *eval_cstring_by_gauche(gchar *s); |
static gchar *eval_cstring_by_gauche(gchar *s); |
| 145 |
static gchar *load_cstring_by_gauche(gchar *s); |
static gchar *load_cstring_by_gauche(gchar *s); |
| 146 |
static void load_buffer_by_gauche(); |
static void load_buffer_by_gauche(); |
| 154 |
static gboolean search_last_sexp(GtkTextIter *start, GtkTextIter *end); |
static gboolean search_last_sexp(GtkTextIter *start, GtkTextIter *end); |
| 155 |
static gboolean search_last_sexp_kakko(GtkTextIter *start); |
static gboolean search_last_sexp_kakko(GtkTextIter *start); |
| 156 |
static gint get_parent_nest_level_at_cursor(GtkTextBuffer *buffer); |
static gint get_parent_nest_level_at_cursor(GtkTextBuffer *buffer); |
| 157 |
|
static gboolean is_not_scheme_delimita_p(gunichar ch, gpointer user_data); |
| 158 |
|
static gboolean is_double_quote(gunichar ch, gpointer user_data); |
| 159 |
|
static gboolean is_scheme_delimita_p(gunichar ch, gpointer user_data); |
| 160 |
|
static void scheme_keyword_highlighting_current_buffer(); |
| 161 |
|
|
| 162 |
/* 設定 */ |
/* 設定 */ |
| 163 |
static void select_font(); |
static void select_font(); |
| 183 |
/* エディタの初期化 */ |
/* エディタの初期化 */ |
| 184 |
static void shiki_editor_window_init(int argc, char **argv); |
static void shiki_editor_window_init(int argc, char **argv); |
| 185 |
|
|
| 186 |
|
static void destroy_handler(GtkWidget *button, GtkWidget *widget) {gtk_widget_destroy(widget);} |
| 187 |
|
|
| 188 |
|
static void search_current_buffer() { |
| 189 |
|
GtkWidget *dialog = gtk_dialog_new_with_buttons ("文字列の検索", GTK_WINDOW(Shiki_EDITOR_WINDOW), GTK_DIALOG_DESTROY_WITH_PARENT, NULL); |
| 190 |
|
GtkWidget *table = gtk_table_new(6, 3, FALSE); |
| 191 |
|
GtkWidget *label = gtk_label_new("検索 : "); |
| 192 |
|
GtkWidget *input = gtk_entry_new(); |
| 193 |
|
GtkWidget *check1 = gtk_check_button_new_with_label("大文字小文字を区別する"); |
| 194 |
|
GtkWidget *check2 = gtk_check_button_new_with_label("単語単位で検索する"); |
| 195 |
|
GtkWidget *check3 = gtk_check_button_new_with_label("正規表現"); |
| 196 |
|
GtkWidget *check4 = gtk_check_button_new_with_label("エスケープシーケンスを理解する"); |
| 197 |
|
GtkWidget *check5 = gtk_check_button_new_with_label("見つからなければ戻って"); |
| 198 |
|
GtkWidget *prev = gtk_button_new_with_label ("上検索"); |
| 199 |
|
GtkWidget *next = gtk_button_new_with_label ("下検索"); |
| 200 |
|
GtkWidget *cancel = gtk_button_new_with_label ("キャンセル"); |
| 201 |
|
|
| 202 |
|
g_signal_connect (G_OBJECT(dialog), "delete_event", G_CALLBACK(gtk_widget_destroy), NULL); |
| 203 |
|
g_signal_connect (G_OBJECT(cancel), "clicked", G_CALLBACK(destroy_handler), dialog); |
| 204 |
|
gtk_table_set_row_spacings(GTK_TABLE(table), 10); |
| 205 |
|
gtk_table_set_col_spacings(GTK_TABLE(table), 10); |
| 206 |
|
gtk_container_border_width (GTK_CONTAINER (dialog), 10); |
| 207 |
|
gtk_table_attach_defaults (GTK_TABLE(table), label, 0, 1, 0, 1); |
| 208 |
|
gtk_table_attach_defaults (GTK_TABLE(table), input, 1, 2, 0, 1); |
| 209 |
|
gtk_table_attach_defaults (GTK_TABLE(table), prev, 2, 3, 0, 1); |
| 210 |
|
gtk_table_attach_defaults (GTK_TABLE(table), check1, 1, 2, 1, 2); |
| 211 |
|
gtk_table_attach_defaults (GTK_TABLE(table), check2, 1, 2, 2, 3); |
| 212 |
|
gtk_table_attach_defaults (GTK_TABLE(table), check3, 1, 2, 3, 4); |
| 213 |
|
gtk_table_attach_defaults (GTK_TABLE(table), check4, 1, 2, 4, 5); |
| 214 |
|
gtk_table_attach_defaults (GTK_TABLE(table), check5, 1, 2, 5, 6); |
| 215 |
|
gtk_table_attach_defaults (GTK_TABLE(table), next, 2, 3, 1, 2); |
| 216 |
|
gtk_table_attach_defaults (GTK_TABLE(table), cancel, 2, 3, 2, 3); |
| 217 |
|
gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table); |
| 218 |
|
gtk_widget_show_all(table); |
| 219 |
|
gtk_dialog_run(GTK_DIALOG(dialog)); |
| 220 |
|
} |
| 221 |
|
|
| 222 |
static gboolean is_not_scheme_delimita_p(gunichar ch, gpointer user_data) { |
static gboolean is_not_scheme_delimita_p(gunichar ch, gpointer user_data) { |
| 223 |
return ch != '(' && ch != ')' && !g_unichar_isspace(ch); |
return ch != '(' && ch != ')' && !g_unichar_isspace(ch); |
| 224 |
} |
} |
| 760 |
|
|
| 761 |
dialog = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW), |
dialog = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW), |
| 762 |
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, |
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, |
| 763 |
GTK_BUTTONS_YES_NO, "バッファが変更されています.\nセーブしないで終了しますか ?");; |
GTK_BUTTONS_YES_NO, "バッファが変更されています.\nセーブしないで終了しますか ?"); |
| 764 |
|
|
| 765 |
resp = gtk_dialog_run(GTK_DIALOG(dialog)); |
resp = gtk_dialog_run(GTK_DIALOG(dialog)); |
| 766 |
gtk_widget_destroy(dialog); |
gtk_widget_destroy(dialog); |
| 1237 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "Redo", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "Redo", ""); |
| 1238 |
|
|
| 1239 |
icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_FIND, iconsize), ""); |
icon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_FIND, iconsize), ""); |
| 1240 |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(dummy_handler), NULL); |
g_signal_connect(G_OBJECT(icon), "clicked", G_CALLBACK(search_current_buffer), NULL); |
| 1241 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon)); |
| 1242 |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "検索", ""); |
gtk_tool_item_set_tooltip(icon, toolbar_tips, "検索", ""); |
| 1243 |
|
|