| 70 |
undoInfo->strlen = len; |
undoInfo->strlen = len; |
| 71 |
undoInfo->start = gtk_text_iter_get_offset(iter); |
undoInfo->start = gtk_text_iter_get_offset(iter); |
| 72 |
undoInfo->end = undoInfo->start + undoInfo->strlen; |
undoInfo->end = undoInfo->start + undoInfo->strlen; |
| 73 |
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, undoInfo); |
|
| 74 |
|
if(Shiki_CURRENT_UNDO_INFO_LIST) { |
| 75 |
|
GList *p = Shiki_CURRENT_UNDO_INFO_LIST->prev; |
| 76 |
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, undoInfo); |
| 77 |
|
Shiki_CURRENT_UNDO_INFO_LIST->prev = p; |
| 78 |
|
} else |
| 79 |
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, undoInfo); |
| 80 |
} |
} |
| 81 |
|
|
| 82 |
|
/* バッファからテキストが消去された */ |
| 83 |
|
static void delete_range_handler(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end) { |
| 84 |
|
/* Undo のための情報を記録 */ |
| 85 |
|
ShikiUndoInfo *undoInfo = g_malloc(sizeof(ShikiUndoInfo)); |
| 86 |
|
g_return_if_fail(undoInfo != NULL); |
| 87 |
|
undoInfo->action = SHIKI_UNDO_DELETE; |
| 88 |
|
undoInfo->str = gtk_text_buffer_get_text(buffer, start, end, FALSE); |
| 89 |
|
undoInfo->start = gtk_text_iter_get_offset(start); |
| 90 |
|
undoInfo->end = gtk_text_iter_get_offset(end); |
| 91 |
|
undoInfo->strlen = end - start; |
| 92 |
|
|
| 93 |
|
if(Shiki_CURRENT_UNDO_INFO_LIST) { |
| 94 |
|
GList *p = Shiki_CURRENT_UNDO_INFO_LIST->prev; |
| 95 |
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, undoInfo); |
| 96 |
|
Shiki_CURRENT_UNDO_INFO_LIST->prev = p; |
| 97 |
|
} else |
| 98 |
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, undoInfo); |
| 99 |
|
} |
| 100 |
|
|
| 101 |
void Shiki_undo() { |
void Shiki_undo() { |
| 102 |
GtkTextIter start, end; |
GtkTextIter start, end; |
| 103 |
ShikiUndoInfo *undoInfo = g_list_nth_data(Shiki_CURRENT_UNDO_INFO_LIST, 0); |
ShikiUndoInfo *undoInfo; |
| 104 |
if(!undoInfo) { |
GList *p; |
| 105 |
|
if(!Shiki_CURRENT_UNDO_INFO_LIST) { |
| 106 |
Shiki_msgbox("これ以上 Undo できません"); |
Shiki_msgbox("これ以上 Undo できません"); |
| 107 |
return; |
return; |
| 108 |
} |
} |
| 109 |
|
undoInfo = Shiki_CURRENT_UNDO_INFO_LIST->data; |
| 110 |
if(undoInfo->action == SHIKI_UNDO_UNDO) { |
if(undoInfo->action == SHIKI_UNDO_UNDO) { |
| 111 |
Shiki_CURRENT_UNDO_INFO_LIST = g_list_delete_link(Shiki_CURRENT_UNDO_INFO_LIST, g_list_first(Shiki_CURRENT_UNDO_INFO_LIST)); |
GList *l = g_list_nth(Shiki_CURRENT_UNDO_INFO_LIST, 2); |
| 112 |
g_free(undoInfo); |
if(l) |
| 113 |
undoInfo = g_list_nth_data(Shiki_CURRENT_UNDO_INFO_LIST, 0); |
Shiki_CURRENT_UNDO_INFO_LIST = l; |
| 114 |
g_return_if_fail(undoInfo != NULL); |
else { |
| 115 |
Shiki_CURRENT_UNDO_INFO_LIST = g_list_delete_link(Shiki_CURRENT_UNDO_INFO_LIST, g_list_first(Shiki_CURRENT_UNDO_INFO_LIST)); |
Shiki_msgbox("これ以上 Undo できません"); |
| 116 |
g_free(undoInfo->str); |
return; |
| 117 |
g_free(undoInfo); |
} |
| 118 |
undoInfo = g_list_nth_data(Shiki_CURRENT_UNDO_INFO_LIST, 0); |
} else if(undoInfo->action == SHIKI_UNDO_REDO) { |
| 119 |
|
GList *l = g_list_next(Shiki_CURRENT_UNDO_INFO_LIST); |
| 120 |
|
if(l) |
| 121 |
|
Shiki_CURRENT_UNDO_INFO_LIST = l; |
| 122 |
|
else { |
| 123 |
|
Shiki_msgbox("これ以上 Undo できません"); |
| 124 |
|
return; |
| 125 |
|
} |
| 126 |
} |
} |
| 127 |
if(!undoInfo) { |
|
| 128 |
Shiki_msgbox("これ以上 Undo できません"); |
undoInfo = Shiki_CURRENT_UNDO_INFO_LIST->data; |
| 129 |
return; |
|
|
} |
|
| 130 |
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, &start, undoInfo->start); |
| 131 |
gtk_text_buffer_get_iter_at_offset(Shiki_CURRENT_TEXT_BUFFER, &end, undoInfo->end); |
gtk_text_buffer_get_iter_at_offset(Shiki_CURRENT_TEXT_BUFFER, &end, undoInfo->end); |
| 132 |
|
|
| 133 |
|
if(!Shiki_CURRENT_UNDO_INFO_LIST->next) { |
| 134 |
|
p = Shiki_CURRENT_UNDO_INFO_LIST; |
| 135 |
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_next(Shiki_CURRENT_UNDO_INFO_LIST); |
| 136 |
|
} else { |
| 137 |
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_next(Shiki_CURRENT_UNDO_INFO_LIST); |
| 138 |
|
p = Shiki_CURRENT_UNDO_INFO_LIST->prev; |
| 139 |
|
} |
| 140 |
|
|
| 141 |
if(undoInfo->action == SHIKI_UNDO_INSERT) { |
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)); |
|
| 142 |
gtk_text_buffer_delete(Shiki_CURRENT_TEXT_BUFFER, &start, &end); |
gtk_text_buffer_delete(Shiki_CURRENT_TEXT_BUFFER, &start, &end); |
| 143 |
g_free(undoInfo->str); |
else if(undoInfo->action == SHIKI_UNDO_DELETE) |
| 144 |
g_free(undoInfo); |
gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &start, undoInfo->str, -1); |
|
undoInfo = g_malloc(sizeof(ShikiUndoInfo)); |
|
|
g_return_if_fail(undoInfo != NULL); |
|
|
undoInfo->action = SHIKI_UNDO_UNDO; |
|
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, 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); |
|
|
} |
|
|
} |
|
| 145 |
|
|
| 146 |
|
Shiki_CURRENT_UNDO_INFO_LIST->prev = p; |
| 147 |
|
|
| 148 |
/* バッファの状態に合わせてモードラインを変更 */ |
undoInfo = g_malloc(sizeof(ShikiUndoInfo)); |
| 149 |
void Shiki_update_modeline(GtkTextBuffer *buffer) { |
g_return_if_fail(undoInfo != NULL); |
| 150 |
gtk_label_set_text(GTK_LABEL(Shiki_EDITOR_MODELINE_LABEL), Scm_GetString(SCM_STRING(Scm_EvalCString("(if *mode-line-format* (*mode-line-format*) \"\")", Shiki_CURRENT_BUFFER_ENV)))); |
undoInfo->action = SHIKI_UNDO_UNDO; |
| 151 |
|
|
| 152 |
|
p = Shiki_CURRENT_UNDO_INFO_LIST->prev; |
| 153 |
|
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, undoInfo); |
| 154 |
|
Shiki_CURRENT_UNDO_INFO_LIST->prev = p; |
| 155 |
|
|
| 156 |
|
{ /* Debug print */ |
| 157 |
|
GList *l = Shiki_CURRENT_UNDO_INFO_LIST; |
| 158 |
|
while(l->prev) l = l->prev; |
| 159 |
|
g_print("Undo : NULL -> "); |
| 160 |
|
for(; l != NULL; l = l->next) { |
| 161 |
|
if(l == Shiki_CURRENT_UNDO_INFO_LIST) |
| 162 |
|
g_print(" | "); |
| 163 |
|
switch(((ShikiUndoInfo *)l->data)->action) { |
| 164 |
|
case SHIKI_UNDO_UNDO : |
| 165 |
|
g_print("[U] -> "); |
| 166 |
|
break; |
| 167 |
|
case SHIKI_UNDO_REDO : |
| 168 |
|
g_print("[R] -> "); |
| 169 |
|
break; |
| 170 |
|
case SHIKI_UNDO_INSERT : |
| 171 |
|
g_print("[+] -> "); |
| 172 |
|
break; |
| 173 |
|
case SHIKI_UNDO_DELETE : |
| 174 |
|
g_print("[-] -> "); |
| 175 |
|
break; |
| 176 |
|
} |
| 177 |
|
} |
| 178 |
|
g_print("NIL\n"); |
| 179 |
|
} |
| 180 |
} |
} |
| 181 |
|
|
| 182 |
/* バッファからテキストが消去された */ |
void Shiki_redo() { |
| 183 |
static void delete_range_handler(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end) { |
GtkTextIter start, end; |
| 184 |
/* Undo のための情報を記録 */ |
ShikiUndoInfo *undoInfo; |
| 185 |
ShikiUndoInfo *undoInfo = g_malloc(sizeof(ShikiUndoInfo)); |
GList *p; |
| 186 |
|
if(!Shiki_CURRENT_UNDO_INFO_LIST) { |
| 187 |
|
Shiki_msgbox("これ以上 Redo できません"); |
| 188 |
|
return; |
| 189 |
|
} |
| 190 |
|
undoInfo = Shiki_CURRENT_UNDO_INFO_LIST->data; |
| 191 |
|
if(undoInfo->action == SHIKI_UNDO_UNDO) |
| 192 |
|
undoInfo = g_list_nth_data(Shiki_CURRENT_UNDO_INFO_LIST, 1); |
| 193 |
|
else if(undoInfo->action == SHIKI_UNDO_REDO) { |
| 194 |
|
GList *l = g_list_nth_prev(Shiki_CURRENT_UNDO_INFO_LIST, 3); |
| 195 |
|
if(l) { |
| 196 |
|
Shiki_CURRENT_UNDO_INFO_LIST = l; |
| 197 |
|
undoInfo = g_list_nth_data(Shiki_CURRENT_UNDO_INFO_LIST, 1); |
| 198 |
|
} else { |
| 199 |
|
Shiki_msgbox("これ以上 Redo できません"); |
| 200 |
|
return; |
| 201 |
|
} |
| 202 |
|
} |
| 203 |
|
|
| 204 |
|
gtk_text_buffer_get_iter_at_offset(Shiki_CURRENT_TEXT_BUFFER, &start, undoInfo->start); |
| 205 |
|
gtk_text_buffer_get_iter_at_offset(Shiki_CURRENT_TEXT_BUFFER, &end, undoInfo->end); |
| 206 |
|
|
| 207 |
|
p = Shiki_CURRENT_UNDO_INFO_LIST->prev; |
| 208 |
|
|
| 209 |
|
if(undoInfo->action == SHIKI_UNDO_INSERT) |
| 210 |
|
gtk_text_buffer_delete(Shiki_CURRENT_TEXT_BUFFER, &start, &end); |
| 211 |
|
else if(undoInfo->action == SHIKI_UNDO_DELETE) |
| 212 |
|
gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &start, undoInfo->str, -1); |
| 213 |
|
|
| 214 |
|
undoInfo = g_malloc(sizeof(ShikiUndoInfo)); |
| 215 |
g_return_if_fail(undoInfo != NULL); |
g_return_if_fail(undoInfo != NULL); |
| 216 |
undoInfo->action = SHIKI_UNDO_DELETE; |
undoInfo->action = SHIKI_UNDO_REDO; |
| 217 |
undoInfo->str = gtk_text_buffer_get_text(buffer, start, end, FALSE); |
|
|
undoInfo->start = gtk_text_iter_get_offset(start); |
|
|
undoInfo->end = gtk_text_iter_get_offset(end); |
|
|
undoInfo->strlen = end - start; |
|
| 218 |
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, undoInfo); |
Shiki_CURRENT_UNDO_INFO_LIST = g_list_prepend(Shiki_CURRENT_UNDO_INFO_LIST, undoInfo); |
| 219 |
|
|
| 220 |
|
Shiki_CURRENT_UNDO_INFO_LIST->prev = p; |
| 221 |
|
|
| 222 |
|
{ /* Debug ptirt */ |
| 223 |
|
GList *l = Shiki_CURRENT_UNDO_INFO_LIST; |
| 224 |
|
while(l->prev) l = l->prev; |
| 225 |
|
g_print("Redo : NULL -> "); |
| 226 |
|
for(; l != NULL; l = l->next) { |
| 227 |
|
if(l == Shiki_CURRENT_UNDO_INFO_LIST) |
| 228 |
|
g_print(" | "); |
| 229 |
|
switch(((ShikiUndoInfo *)l->data)->action) { |
| 230 |
|
case SHIKI_UNDO_UNDO : |
| 231 |
|
g_print("[U] -> "); |
| 232 |
|
break; |
| 233 |
|
case SHIKI_UNDO_REDO : |
| 234 |
|
g_print("[R] -> "); |
| 235 |
|
break; |
| 236 |
|
case SHIKI_UNDO_INSERT : |
| 237 |
|
g_print("[+] -> "); |
| 238 |
|
break; |
| 239 |
|
case SHIKI_UNDO_DELETE : |
| 240 |
|
g_print("[-] -> "); |
| 241 |
|
break; |
| 242 |
|
} |
| 243 |
|
} |
| 244 |
|
g_print("NIL\n"); |
| 245 |
|
} |
| 246 |
|
} |
| 247 |
|
|
| 248 |
|
/* バッファの状態に合わせてモードラインを変更 */ |
| 249 |
|
void Shiki_update_modeline(GtkTextBuffer *buffer) { |
| 250 |
|
gtk_label_set_text(GTK_LABEL(Shiki_EDITOR_MODELINE_LABEL), Scm_GetString(SCM_STRING(Scm_EvalCString("(if *mode-line-format* (*mode-line-format*) \"\")", Shiki_CURRENT_BUFFER_ENV)))); |
| 251 |
} |
} |
| 252 |
|
|
| 253 |
static void cursor_moved_handler() { |
static void cursor_moved_handler() { |
| 265 |
tabinfo->name = g_path_get_basename(filename); |
tabinfo->name = g_path_get_basename(filename); |
| 266 |
tabinfo->tabpage_label = g_strndup(tabinfo->name, 10); |
tabinfo->tabpage_label = g_strndup(tabinfo->name, 10); |
| 267 |
tabinfo->env = Scm_MakeModule(NULL, FALSE); |
tabinfo->env = Scm_MakeModule(NULL, FALSE); |
| 268 |
|
|
| 269 |
ShikiBufferClass = Scm_MakeForeignPointerClass(SCM_MODULE(tabinfo->env), |
ShikiBufferClass = Scm_MakeForeignPointerClass(SCM_MODULE(tabinfo->env), |
| 270 |
"<buffer>", buffer_print, buffer_cleanup, |
"<buffer>", buffer_print, buffer_cleanup, |
| 271 |
SCM_FOREIGN_POINTER_KEEP_IDENTITY |
SCM_FOREIGN_POINTER_KEEP_IDENTITY |
| 272 |
| |
| |
| 273 |
SCM_FOREIGN_POINTER_MAP_NULL); |
SCM_FOREIGN_POINTER_MAP_NULL); |
| 274 |
|
|
| 275 |
/* xyzzy lisp 関数を登録 */ |
/* xyzzy lisp 関数を登録 */ |
| 276 |
Scm_Init_xyzzylisp(SCM_MODULE(tabinfo->env)); |
Scm_Init_xyzzylisp(SCM_MODULE(tabinfo->env)); |
| 318 |
/* 開いたページに移動する */ |
/* 開いたページに移動する */ |
| 319 |
gtk_notebook_set_current_page(Shiki_EDITOR_NOTEBOOK, g_list_length(Shiki_EDITOR_BUFFER_LIST) - 1); |
gtk_notebook_set_current_page(Shiki_EDITOR_NOTEBOOK, g_list_length(Shiki_EDITOR_BUFFER_LIST) - 1); |
| 320 |
//Shiki_CURRENT_TAB_INFO = tabinfo; |
//Shiki_CURRENT_TAB_INFO = tabinfo; |
| 321 |
|
|
| 322 |
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))))", tabinfo->env); |
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))))", tabinfo->env); |
| 323 |
return tabinfo->text_buffer; |
return tabinfo->text_buffer; |
| 324 |
} |
} |
| 494 |
GtkTextIter p; |
GtkTextIter p; |
| 495 |
gint i; |
gint i; |
| 496 |
gtk_text_buffer_get_iter_at_mark(Shiki_CURRENT_TEXT_BUFFER,&p, gtk_text_buffer_get_insert(Shiki_CURRENT_TEXT_BUFFER)); |
gtk_text_buffer_get_iter_at_mark(Shiki_CURRENT_TEXT_BUFFER,&p, gtk_text_buffer_get_insert(Shiki_CURRENT_TEXT_BUFFER)); |
| 497 |
|
|
| 498 |
if(count >= 0) { |
if(count >= 0) { |
| 499 |
for(i = count; i != 0; i--) |
for(i = count; i != 0; i--) |
| 500 |
gtk_text_view_forward_display_line(Shiki_CURRENT_TEXT_VIEW, &p); |
gtk_text_view_forward_display_line(Shiki_CURRENT_TEXT_VIEW, &p); |
| 571 |
|
|
| 572 |
gboolean Shiki_yes_or_no_p(const gchar *msg) { |
gboolean Shiki_yes_or_no_p(const gchar *msg) { |
| 573 |
GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW), |
GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW), |
| 574 |
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, |
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, |
| 575 |
GTK_BUTTONS_YES_NO, msg); |
GTK_BUTTONS_YES_NO, msg); |
| 576 |
gint resp; |
gint resp; |
| 577 |
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES); |
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_YES); |
| 578 |
resp = gtk_dialog_run(GTK_DIALOG(dialog)); |
resp = gtk_dialog_run(GTK_DIALOG(dialog)); |
| 584 |
|
|
| 585 |
gboolean Shiki_no_or_yes_p(const gchar *msg) { |
gboolean Shiki_no_or_yes_p(const gchar *msg) { |
| 586 |
GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW), |
GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(Shiki_EDITOR_WINDOW), |
| 587 |
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, |
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, |
| 588 |
GTK_BUTTONS_YES_NO, msg); |
GTK_BUTTONS_YES_NO, msg); |
| 589 |
gint resp; |
gint resp; |
| 590 |
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_NO); |
gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_NO); |
| 591 |
resp = gtk_dialog_run(GTK_DIALOG(dialog)); |
resp = gtk_dialog_run(GTK_DIALOG(dialog)); |
| 794 |
} else { |
} else { |
| 795 |
if(no_dup) |
if(no_dup) |
| 796 |
gtk_text_iter_backward_char(&p); |
gtk_text_iter_backward_char(&p); |
| 797 |
|
|
| 798 |
result = gtk_text_iter_backward_search(&p, pattern, |
result = gtk_text_iter_backward_search(&p, pattern, |
| 799 |
GTK_TEXT_SEARCH_TEXT_ONLY, &match_start, &match_end, &start); |
GTK_TEXT_SEARCH_TEXT_ONLY, &match_start, &match_end, &start); |
| 800 |
} |
} |
| 804 |
gtk_text_buffer_apply_tag_by_name(Shiki_CURRENT_TEXT_BUFFER, "match_highlighting", &match_start, &match_end); |
gtk_text_buffer_apply_tag_by_name(Shiki_CURRENT_TEXT_BUFFER, "match_highlighting", &match_start, &match_end); |
| 805 |
gtk_text_buffer_place_cursor(Shiki_CURRENT_TEXT_BUFFER, &match_start); |
gtk_text_buffer_place_cursor(Shiki_CURRENT_TEXT_BUFFER, &match_start); |
| 806 |
gtk_text_view_scroll_to_iter(Shiki_CURRENT_TEXT_VIEW, &match_start, |
gtk_text_view_scroll_to_iter(Shiki_CURRENT_TEXT_VIEW, &match_start, |
| 807 |
0.0, FALSE, FALSE, FALSE); |
0.0, FALSE, FALSE, FALSE); |
| 808 |
} |
} |
| 809 |
return result; |
return result; |
| 810 |
} |
} |
| 838 |
GtkWidget *next = gtk_button_new_with_label ("下検索"); |
GtkWidget *next = gtk_button_new_with_label ("下検索"); |
| 839 |
g_signal_connect (next, "clicked", G_CALLBACK(search_forward_handler), NULL); |
g_signal_connect (next, "clicked", G_CALLBACK(search_forward_handler), NULL); |
| 840 |
GtkWidget *cancel = gtk_button_new_with_label ("キャンセル"); |
GtkWidget *cancel = gtk_button_new_with_label ("キャンセル"); |
| 841 |
|
|
| 842 |
if(!input) |
if(!input) |
| 843 |
ShikiSearchBufferInfo.input = input = g_object_ref(gtk_entry_new()); |
ShikiSearchBufferInfo.input = input = g_object_ref(gtk_entry_new()); |
| 844 |
ShikiSearchBufferInfo.ci = |
ShikiSearchBufferInfo.ci = |
| 845 |
ShikiSearchBufferInfo.word = |
ShikiSearchBufferInfo.word = |
| 846 |
ShikiSearchBufferInfo.regexp = |
ShikiSearchBufferInfo.regexp = |
| 847 |
ShikiSearchBufferInfo.escape = |
ShikiSearchBufferInfo.escape = |
| 848 |
ShikiSearchBufferInfo.loop = FALSE; |
ShikiSearchBufferInfo.loop = FALSE; |
| 849 |
|
|
| 850 |
g_signal_connect (check1, "toggled", G_CALLBACK (toggled_handler), &(ShikiSearchBufferInfo.ci)); |
g_signal_connect (check1, "toggled", G_CALLBACK (toggled_handler), &(ShikiSearchBufferInfo.ci)); |
| 851 |
g_signal_connect (check2, "toggled", G_CALLBACK (toggled_handler), &(ShikiSearchBufferInfo.word)); |
g_signal_connect (check2, "toggled", G_CALLBACK (toggled_handler), &(ShikiSearchBufferInfo.word)); |
| 895 |
gtk_text_buffer_get_end_iter(Shiki_CURRENT_TEXT_BUFFER, &end); |
gtk_text_buffer_get_end_iter(Shiki_CURRENT_TEXT_BUFFER, &end); |
| 896 |
|
|
| 897 |
while((result = gtk_text_iter_forward_search(&start, find, |
while((result = gtk_text_iter_forward_search(&start, find, |
| 898 |
GTK_TEXT_SEARCH_TEXT_ONLY, &match_start, &match_end, &end))) { |
GTK_TEXT_SEARCH_TEXT_ONLY, &match_start, &match_end, &end))) { |
| 899 |
|
|
| 900 |
gtk_text_buffer_remove_tag_by_name(Shiki_CURRENT_TEXT_BUFFER, "match_highlighting", &start, &end); |
gtk_text_buffer_remove_tag_by_name(Shiki_CURRENT_TEXT_BUFFER, "match_highlighting", &start, &end); |
| 901 |
gtk_text_buffer_apply_tag_by_name(Shiki_CURRENT_TEXT_BUFFER, "match_highlighting", &match_start, &match_end); |
gtk_text_buffer_apply_tag_by_name(Shiki_CURRENT_TEXT_BUFFER, "match_highlighting", &match_start, &match_end); |
| 947 |
ShikiReplaceBufferInfo.find = find = g_object_ref(gtk_entry_new()); |
ShikiReplaceBufferInfo.find = find = g_object_ref(gtk_entry_new()); |
| 948 |
ShikiReplaceBufferInfo.replace = replace = g_object_ref(gtk_entry_new()); |
ShikiReplaceBufferInfo.replace = replace = g_object_ref(gtk_entry_new()); |
| 949 |
} |
} |
| 950 |
|
|
| 951 |
ShikiReplaceBufferInfo.ci = |
ShikiReplaceBufferInfo.ci = |
| 952 |
ShikiReplaceBufferInfo.word = |
ShikiReplaceBufferInfo.word = |
| 953 |
ShikiReplaceBufferInfo.regexp = |
ShikiReplaceBufferInfo.regexp = |
| 954 |
ShikiReplaceBufferInfo.escape = FALSE; |
ShikiReplaceBufferInfo.escape = FALSE; |
| 955 |
ShikiReplaceBufferInfo.from_first = TRUE; |
ShikiReplaceBufferInfo.from_first = TRUE; |
| 956 |
|
|
| 957 |
g_signal_connect (check1, "toggled", G_CALLBACK (toggled_handler), &(ShikiReplaceBufferInfo.ci)); |
g_signal_connect (check1, "toggled", G_CALLBACK (toggled_handler), &(ShikiReplaceBufferInfo.ci)); |