| 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() { |
| 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 |
|
|
| 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 |
*/ |
*/ |
| 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 |
/* ポート閉じる */ |
/* ポート閉じる */ |
| 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; |