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.61 by aloha, Wed Nov 29 14:58:27 2006 UTC revision 1.62 by aloha, Thu Nov 30 14:45:49 2006 UTC
# Line 62  static void save_file_as(); Line 62  static void save_file_as();
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 式操作やインデント・キーワードハイライティング関連 */
# Line 291  static void switch_tabpage_handler(GtkNo Line 290  static void switch_tabpage_handler(GtkNo
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;
# Line 400  static gboolean signal_key_press_handler Line 374  static gboolean signal_key_press_handler
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 : タブを開く */
# Line 789  static gboolean signal_key_release_handl Line 763  static gboolean signal_key_release_handl
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 */
# Line 979  static void Shiki_editor_window_init(int Line 953  static void Shiki_editor_window_init(int
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    

Legend:
Removed from v.1.61  
changed lines
  Added in v.1.62

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