Develop and Download Open Source Software

Browse CVS Repository

Diff of /shiki/shiki/buffer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.9 by aloha, Wed Nov 29 04:37:23 2006 UTC revision 1.10 by aloha, Wed Nov 29 05:08:46 2006 UTC
# Line 110  GtkTextBuffer *Shiki_new_buffer_create(g Line 110  GtkTextBuffer *Shiki_new_buffer_create(g
110    tabinfo->undoInfoList  = NULL;    tabinfo->undoInfoList  = NULL;
111    tabinfo->filename      = filename;    tabinfo->filename      = filename;
112    tabinfo->name      = g_path_get_basename(filename);    tabinfo->name      = g_path_get_basename(filename);
113    tabinfo->tabpage_label = g_strndup(tabinfo->name, 7);    tabinfo->tabpage_label = g_strndup(tabinfo->name, 10);
114    tabinfo->env           = Scm_MakeModule(NULL, FALSE);    tabinfo->env           = Scm_MakeModule(NULL, FALSE);
115        
116    ShikiBufferClass = Scm_MakeForeignPointerClass(SCM_MODULE(tabinfo->env),    ShikiBufferClass = Scm_MakeForeignPointerClass(SCM_MODULE(tabinfo->env),
# Line 165  GtkTextBuffer *Shiki_new_buffer_create(g Line 165  GtkTextBuffer *Shiki_new_buffer_create(g
165    return tabinfo->text_buffer;    return tabinfo->text_buffer;
166  }  }
167    
168    void Shiki_create_file_buffer(const gchar *filename) {
169      gchar *text;
170      gchar *utf8filename = g_locale_to_utf8(filename, -1, NULL, NULL, NULL);
171      GtkTextIter p;
172      ScmObj s;
173    
174      /* g_file_get_contents(filename, &contents, &len, NULL); */
175    
176      /* 新しいバッファを開く */
177      Shiki_new_buffer_create(g_strdup(filename));
178      gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename);
179    
180      Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*filename*")), SCM_MAKE_STR_COPYING(utf8filename));
181      g_free(utf8filename);
182    
183      Scm_EvalCString("(use gauche.charconv)", Shiki_CURRENT_BUFFER_ENV);
184    
185      /* ファイルから文字列を取り出し,変換後にバッファに格納 */
186      s = Scm_EvalCString("(port->string (open-input-conversion-port (open-input-file *filename*) \"*jp\" :owner? #t))", Shiki_CURRENT_BUFFER_ENV);
187      text = Scm_GetString(SCM_STRING(s));
188      if(text)
189        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, -1);
190      else {
191        /* open-input-conversion-port が失敗したならば,とりあえずシステム
192         * ロケールに変換してみる.駄目だったら諦めて駄目元で UTF8
193         */
194        gchar *contents;
195        gsize br, bw, len;
196        GError *err = NULL;
197    
198        if(g_file_get_contents(filename, &contents, &len, NULL)) {
199          if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))
200            gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, text, -1);
201          else
202            gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, contents, -1);
203          g_free(contents);
204        }
205      }
206    
207      /* バッファ未変更に */
208      gtk_text_buffer_set_modified(Shiki_CURRENT_TEXT_BUFFER, FALSE);
209      /* カーソル位置を先頭に */
210      gtk_text_buffer_get_start_iter(Shiki_CURRENT_TEXT_BUFFER, &p);
211      gtk_text_buffer_place_cursor(Shiki_CURRENT_TEXT_BUFFER, &p);
212      update_modeline_label();
213      gtk_widget_show_all(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK));
214    }
215    
216    void Shiki_open_file_dialog() {
217      const gchar *filename = Shiki_file_name_dialog("ファイルを開く");
218    
219      if(!filename) return;
220      Shiki_create_file_buffer(filename);
221    }
222    
223  void Shiki_delete_buffer(GtkTextBuffer *buffer) {  void Shiki_delete_buffer(GtkTextBuffer *buffer) {
224    /* バッファリストから,リストの要素,バッファ,バッファの番号を逆引き */    /* バッファリストから,リストの要素,バッファ,バッファの番号を逆引き */
225    /* 効率が悪いが,Scheme の世界になるべく Gtk のオブジェクトを持ち込まないため */    /* 効率が悪いが,Scheme の世界になるべく Gtk のオブジェクトを持ち込まないため */

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

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