| 57 |
static void append_default_tabpage_handler(); |
static void append_default_tabpage_handler(); |
| 58 |
|
|
| 59 |
/* ファイル関係 */ |
/* ファイル関係 */ |
|
static void open_file(const gchar *filename); |
|
|
static void open_file_handler(); |
|
| 60 |
static void save_file(); |
static void save_file(); |
| 61 |
static void save_file_as(); |
static void save_file_as(); |
| 62 |
|
|
| 588 |
static void save_file() { |
static void save_file() { |
| 589 |
|
|
| 590 |
/* ヘルプへの変更は保存しない */ |
/* ヘルプへの変更は保存しない */ |
| 591 |
if(g_ascii_strcasecmp("*help*", Shiki_CURRENT_TAB_TITLE) == 0) return; |
if(strcmp("*help*", Shiki_CURRENT_TAB_TITLE) == 0) return; |
| 592 |
|
|
| 593 |
/* 変更が無ければ何もしない */ |
/* 変更が無ければ何もしない */ |
| 594 |
if(!gtk_text_buffer_get_modified(Shiki_CURRENT_TEXT_BUFFER)) return; |
if(!gtk_text_buffer_get_modified(Shiki_CURRENT_TEXT_BUFFER)) return; |
| 595 |
|
|
| 596 |
/* まだファイル名が設定されていなかったら,ダイアログを開いて入力させる */ |
/* まだファイル名が設定されていなかったら,ダイアログを開いて入力させる */ |
| 597 |
if(g_ascii_strcasecmp("*scratch*", Shiki_CURRENT_FILENAME) == 0) { |
if(strcmp("*scratch*", Shiki_CURRENT_FILENAME) == 0) { |
| 598 |
const gchar *filename = Shiki_file_name_dialog("Save File As ..."); |
const gchar *filename = Shiki_file_name_dialog("Save File As ..."); |
| 599 |
if(!filename) return; |
if(!filename) return; |
| 600 |
if(!save_text_buffer(filename, Shiki_CURRENT_TEXT_BUFFER)) return; |
if(!save_text_buffer(filename, Shiki_CURRENT_TEXT_BUFFER)) return; |
| 615 |
gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename); |
gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename); |
| 616 |
} |
} |
| 617 |
|
|
|
/* ファイルを開く */ |
|
|
static void open_file(const gchar *filename) { |
|
|
gchar *text; |
|
|
gchar *utf8filename = g_locale_to_utf8(filename, -1, NULL, NULL, NULL); |
|
|
GtkTextIter p; |
|
|
ScmObj s; |
|
|
|
|
|
/* g_file_get_contents(filename, &contents, &len, NULL); */ |
|
|
|
|
|
/* 新しいバッファを開く */ |
|
|
Shiki_new_buffer_create(g_strdup(filename)); |
|
|
gtk_window_set_title (GTK_WINDOW (Shiki_EDITOR_WINDOW), filename); |
|
|
|
|
|
Scm_Define(SCM_MODULE(Shiki_CURRENT_BUFFER_ENV), SCM_SYMBOL(SCM_INTERN("*filename*")), SCM_MAKE_STR_COPYING(utf8filename)); |
|
|
g_free(utf8filename); |
|
|
|
|
|
Scm_EvalCString("(use gauche.charconv)", Shiki_CURRENT_BUFFER_ENV); |
|
|
|
|
|
/* ファイルから文字列を取り出し,変換後にバッファに格納 */ |
|
|
s = Scm_EvalCString("(port->string (open-input-conversion-port (open-input-file *filename*) \"*jp\" :owner? #t))", Shiki_CURRENT_BUFFER_ENV); |
|
|
text = Scm_GetString(SCM_STRING(s)); |
|
|
if(text) |
|
|
gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, -1); |
|
|
else { |
|
|
/* open-input-conversion-port が失敗したならば,とりあえずシステム |
|
|
* ロケールに変換してみる.駄目だったら諦めて駄目元で UTF8 |
|
|
*/ |
|
|
gchar *contents; |
|
|
gsize br, bw, len; |
|
|
GError *err = NULL; |
|
|
|
|
|
if(g_file_get_contents(filename, &contents, &len, NULL)) { |
|
|
if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err))) |
|
|
gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, text, -1); |
|
|
else |
|
|
gtk_text_buffer_insert(Shiki_CURRENT_TEXT_BUFFER, &p, contents, -1); |
|
|
g_free(contents); |
|
|
} |
|
|
} |
|
|
|
|
|
/* バッファ未変更に */ |
|
|
gtk_text_buffer_set_modified(Shiki_CURRENT_TEXT_BUFFER, FALSE); |
|
|
/* カーソル位置を先頭に */ |
|
|
gtk_text_buffer_get_start_iter(Shiki_CURRENT_TEXT_BUFFER, &p); |
|
|
gtk_text_buffer_place_cursor(Shiki_CURRENT_TEXT_BUFFER, &p); |
|
|
update_modeline_label(); |
|
|
/* キーワードを色分けする */ |
|
|
scheme_keyword_highlighting_current_buffer(); |
|
|
gtk_widget_show_all(GTK_WIDGET(Shiki_EDITOR_NOTEBOOK)); |
|
|
} |
|
|
|
|
|
/* ファイルをダイアログで指定して開く */ |
|
|
static void open_file_handler() { |
|
|
const gchar *filename = Shiki_file_name_dialog("File Selection"); |
|
|
|
|
|
if(!filename) return; |
|
|
open_file(filename); |
|
|
} |
|
|
|
|
| 618 |
/* gauche を起動して文字列を評価 */ |
/* gauche を起動して文字列を評価 */ |
| 619 |
static gchar *eval_cstring_by_gauche(gchar *s) { |
static gchar *eval_cstring_by_gauche(gchar *s) { |
| 620 |
gchar *msg; |
gchar *msg; |
| 834 |
|
|
| 835 |
case GDK_f : /* C-x C-f : ファイル開く */ |
case GDK_f : /* C-x C-f : ファイル開く */ |
| 836 |
gtk_statusbar_push(GTK_STATUSBAR(Shiki_EDITOR_STATUSBAR), GPOINTER_TO_INT(contextid), "C-f"); |
gtk_statusbar_push(GTK_STATUSBAR(Shiki_EDITOR_STATUSBAR), GPOINTER_TO_INT(contextid), "C-f"); |
| 837 |
open_file_handler(); |
Shiki_open_file_dialog(); |
| 838 |
break; |
break; |
| 839 |
|
|
| 840 |
case GDK_s : /* C-x C-s : ファイル保存 */ |
case GDK_s : /* C-x C-s : ファイル保存 */ |
| 958 |
/* ファイル開く */ |
/* ファイル開く */ |
| 959 |
oicon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_OPEN, iconsize), ""); |
oicon = gtk_tool_button_new(gtk_image_new_from_stock (GTK_STOCK_OPEN, iconsize), ""); |
| 960 |
/* 「開く」ボタンにファイルを読み込むアクションを関連付ける */ |
/* 「開く」ボタンにファイルを読み込むアクションを関連付ける */ |
| 961 |
g_signal_connect(G_OBJECT(oicon), "clicked", G_CALLBACK(open_file_handler), NULL); |
g_signal_connect(G_OBJECT(oicon), "clicked", G_CALLBACK(Shiki_open_file_dialog), NULL); |
| 962 |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(oicon)); |
gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(oicon)); |
| 963 |
gtk_tool_item_set_tooltip(oicon, toolbar_tips, "ファイルを開きます", |
gtk_tool_item_set_tooltip(oicon, toolbar_tips, "ファイルを開きます", |
| 964 |
"新しいバッファを開いて,そこにファイルの内容を展開します."); |
"新しいバッファを開いて,そこにファイルの内容を展開します."); |
| 1102 |
if(argc >= 2) { |
if(argc >= 2) { |
| 1103 |
int i; |
int i; |
| 1104 |
for(i = 1; i < argc; i++) |
for(i = 1; i < argc; i++) |
| 1105 |
open_file(g_strdup(argv[i])); |
Shiki_create_file_buffer(argv[i]); |
| 1106 |
} else /* 指定されてなければ,デフォルトのページを追加 */ |
} else /* 指定されてなければ,デフォルトのページを追加 */ |
| 1107 |
open_online_help(Shiki_EDITOR_NOTEBOOK); |
open_online_help(Shiki_EDITOR_NOTEBOOK); |
| 1108 |
|
|