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.15 by aloha, Thu Dec 28 05:04:45 2006 UTC revision 1.16 by aloha, Sat Feb 3 09:48:01 2007 UTC
# Line 230  void Shiki_redo() { Line 230  void Shiki_redo() {
230    
231  /* バッファの状態に合わせてモードラインを変更 */  /* バッファの状態に合わせてモードラインを変更 */
232  void Shiki_update_modeline() {  void Shiki_update_modeline() {
233    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))));    gchar *mlf;
234      ScmEvalPacket packet;
235      gint result = Scm_EvalCString("(if *mode-line-format* (*mode-line-format*) \"\")", Shiki_CURRENT_BUFFER_ENV, &packet);
236    
237      if(result == -1) {
238        ScmObj os = Scm_MakeOutputStringPort(TRUE);
239        Scm_Write(packet.exception, os, SCM_WRITE_DISPLAY);
240        mlf = Scm_GetString(SCM_STRING(Scm_GetOutputString(SCM_PORT(os))));
241      } else
242        mlf = Scm_GetString(SCM_STRING(packet.results[0]));
243    
244      gtk_label_set_text(GTK_LABEL(Shiki_EDITOR_MODELINE_LABEL), mlf);
245  }  }
246    
247  static void cursor_moved_handler() {  static void cursor_moved_handler() {
# Line 296  GtkTextBuffer *Shiki_new_buffer_create(g Line 307  GtkTextBuffer *Shiki_new_buffer_create(g
307    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);
308    //Shiki_CURRENT_TAB_INFO = tabinfo;    //Shiki_CURRENT_TAB_INFO = tabinfo;
309    
310    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);    if(-1 == 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, NULL))
311        fprintf(stderr, "Fatal error : mode-line-format initialize in Shiki_new_buffer_create()");
312    return tabinfo->text_buffer;    return tabinfo->text_buffer;
313  }  }
314    
315  void Shiki_create_file_buffer(const gchar *filename) {  void Shiki_create_file_buffer(const gchar *filename) {
316    gchar *text;    gchar *text, *utf8filename = g_locale_to_utf8(filename, -1, NULL, NULL, NULL);
   gchar *utf8filename = g_locale_to_utf8(filename, -1, NULL, NULL, NULL);  
317    GtkTextIter p;    GtkTextIter p;
318    ScmObj s;    ScmEvalPacket packet;
319      gint result;
320    
321    /* g_file_get_contents(filename, &contents, &len, NULL); */    /* g_file_get_contents(filename, &contents, &len, NULL); */
322    
# Line 315  void Shiki_create_file_buffer(const gcha Line 327  void Shiki_create_file_buffer(const gcha
327    Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*filename*")), SCM_MAKE_STR_COPYING(utf8filename));    Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*filename*")), SCM_MAKE_STR_COPYING(utf8filename));
328    g_free(utf8filename);    g_free(utf8filename);
329    
330    Scm_EvalCString("(use gauche.charconv)", Shiki_CURRENT_BUFFER_ENV);    if(-1 == Scm_EvalCString("(use gauche.charconv)", Shiki_CURRENT_BUFFER_ENV, NULL))
331        fprintf(stderr, "Fatal error : can't use gauche.charconv module in Shiki_create_file_buffer()");
332    
333    /* ファイルから文字列を取り出し,変換後にバッファに格納 */    /* ファイルから文字列を取り出し,変換後にバッファに格納 */
334    s = Scm_EvalCString("(port->string (open-input-conversion-port (open-input-file *filename*) \"*jp\" :owner? #t))", Shiki_CURRENT_BUFFER_ENV);    result = Scm_EvalCString("(port->string (open-input-conversion-port (open-input-file *filename*) \"*jp\" :owner? #t))", Shiki_CURRENT_BUFFER_ENV, &packet);
335    text = Scm_GetString(SCM_STRING(s));    if(result != -1) {
336    if(text)      text = Scm_GetString(SCM_STRING(packet.results[0]));
337      gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, -1);      gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, -1);
338    else {    } else {
339      /* open-input-conversion-port が失敗したならば,とりあえずシステム      /* open-input-conversion-port が失敗したならば,とりあえずシステム
340       * ロケールに変換してみる.駄目だったら諦めて駄目元で UTF8       * ロケールに変換してみる.駄目だったら諦めて駄目元で UTF8
341       */       */
# Line 676  static gboolean search_last_sexp(GtkText Line 689  static gboolean search_last_sexp(GtkText
689  /* gauche を起動して文字列を評価 */  /* gauche を起動して文字列を評価 */
690  static gchar *eval_cstring_by_gauche(gchar *s) {  static gchar *eval_cstring_by_gauche(gchar *s) {
691    gchar *msg;    gchar *msg;
692      ScmEvalPacket packet;
   ScmObj result, error;  
693    /* 出力文字列ポート開く */    /* 出力文字列ポート開く */
694    ScmObj os = Scm_MakeOutputStringPort(TRUE);    ScmObj os = Scm_MakeOutputStringPort(TRUE);
695      gint i, result = Scm_EvalCString(s, SCM_OBJ(Shiki_CURRENT_BUFFER_ENV), &packet);
696    /* Scheme レベルでエラーハンドリング */    
697    /* http://alohakun.blog7.fc2.com/blog-entry-517.html */    if(result == -1)
698    Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*input*")), SCM_MAKE_STR_COPYING(s));      Scm_Write(packet.exception, os, SCM_WRITE_DISPLAY);
   Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*error*")), SCM_FALSE);  
   
   result = Scm_EvalCString("(guard (e (else (set! *error* e) #f)) (eval (read-from-string *input*) (current-module)))", SCM_OBJ(Shiki_CURRENT_BUFFER_ENV));  
   
   error = Scm_GlobalVariableRef(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*error*")), 0);  
   
   /* 文字列を評価した結果をポートに書き込む */  
   if (!SCM_FALSEP(error))  
     Scm_Write(error, os, SCM_WRITE_DISPLAY);  
699    else    else
700      Scm_Write(result, os, SCM_WRITE_DISPLAY);      for(i = 0; i < packet.numResults; i++)
701          Scm_Printf(SCM_PORT(os), "%S\n", packet.results[i]);
702    
703    msg = Scm_GetString(SCM_STRING(Scm_GetOutputString(SCM_PORT(os))));    msg = Scm_GetString(SCM_STRING(Scm_GetOutputString(SCM_PORT(os))));
704    /* ポート閉じる */    /* ポート閉じる */
# Line 702  static gchar *eval_cstring_by_gauche(gch Line 706  static gchar *eval_cstring_by_gauche(gch
706    
707    return msg;    return msg;
708  }  }
709    
710  void Shiki_load_file(const gchar *filename) {  void Shiki_load_file(const gchar *filename) {
711    gchar *result, *utf8filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);    gchar *result, *utf8filename = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
712    GtkTextIter p;    GtkTextIter p;

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16

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