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.38 by aloha, Sat Nov 18 19:28:55 2006 UTC revision 1.39 by aloha, Sun Nov 19 10:18:37 2006 UTC
# Line 44  typedef struct { Line 44  typedef struct {
44    
45  /* タブごとの情報を管理する構造体 */  /* タブごとの情報を管理する構造体 */
46  typedef struct {  typedef struct {
47      const gchar       *locale;           /* バッファ内容のロケール */
48    GtkScrolledWindow *tabpage;          /* タブ */    GtkScrolledWindow *tabpage;          /* タブ */
49    gchar             *tabpage_label;    /* ベース (ファイル名) のみ */    gchar             *tabpage_label;    /* ベース (ファイル名) のみ */
50    GtkTextView       *text_view;        /* タブの表示 */    GtkTextView       *text_view;        /* タブの表示 */
# Line 56  typedef struct { Line 57  typedef struct {
57    
58  /* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */  /* エディタ全体に関する情報と,現在表示されているタブ情報へのキャッシュを管理する構造体 */
59  static struct {  static struct {
60      const gchar   *default_locale;
61    GtkWidget     *editor_window;    GtkWidget     *editor_window;
62    GtkClipboard  *clipboard;    GtkClipboard  *clipboard;
63    GtkNotebook   *notebook;    GtkNotebook   *notebook;
# Line 67  static struct { Line 69  static struct {
69  } shiki_editor;  } shiki_editor;
70    
71  /* シングルトンオブジェクトの定義 */  /* シングルトンオブジェクトの定義 */
72    #define Shiki_EDITOR_DEFAULT_LOCALE  shiki_editor.default_locale
73  #define Shiki_EDITOR_WINDOW          shiki_editor.editor_window  #define Shiki_EDITOR_WINDOW          shiki_editor.editor_window
74  #define Shiki_EDITOR_CLIPBOARD       shiki_editor.clipboard  #define Shiki_EDITOR_CLIPBOARD       shiki_editor.clipboard
75  #define Shiki_EDITOR_NOTEBOOK        shiki_editor.notebook  #define Shiki_EDITOR_NOTEBOOK        shiki_editor.notebook
# Line 77  static struct { Line 80  static struct {
80  /* 現在表示されているタブに対するアクセス用各種キャッシュ情報 */  /* 現在表示されているタブに対するアクセス用各種キャッシュ情報 */
81  #define Shiki_CURRENT_TAB_NUM        shiki_editor.current_tabpage_num  #define Shiki_CURRENT_TAB_NUM        shiki_editor.current_tabpage_num
82  #define Shiki_CURRENT_TAB_INFO       shiki_editor.current_tabpage_info  #define Shiki_CURRENT_TAB_INFO       shiki_editor.current_tabpage_info
83    #define Shiki_CURRENT_LOCALE         (shiki_editor.current_tabpage_info)->locale
84  #define Shiki_CURRENT_UNDO_INFO_LIST (shiki_editor.current_tabpage_info)->undoInfoList  #define Shiki_CURRENT_UNDO_INFO_LIST (shiki_editor.current_tabpage_info)->undoInfoList
85  #define Shiki_CURRENT_TAB            (shiki_editor.current_tabpage_info)->tabpage  #define Shiki_CURRENT_TAB            (shiki_editor.current_tabpage_info)->tabpage
86  #define Shiki_CURRENT_TAB_TITLE      (shiki_editor.current_tabpage_info)->tabpage_label  #define Shiki_CURRENT_TAB_TITLE      (shiki_editor.current_tabpage_info)->tabpage_label
# Line 98  typedef enum { Line 102  typedef enum {
102    GAUCHE_FUNCTION_COLOR    GAUCHE_FUNCTION_COLOR
103  } HIGHILIGHT_COLOR;  } HIGHILIGHT_COLOR;
104    
105    GdkColor COLOR_BLACK;
106    GdkColor COLOR_GREEN;
107    
108  /* プロトタイプ */  /* プロトタイプ */
109    
110  /* タブの生成と削除 : 基本的に,ShikiTabInfo の中身に格納する情報を増やしたかったら,この 2 つの関数だけを変更すれば良い (ようにする…) */  /* タブの生成と削除 : 基本的に,ShikiTabInfo の中身に格納する情報を増やしたかったら,この 2 つの関数だけを変更すれば良い (ようにする…) */
# Line 124  static void insert_text_handler(GtkTextB Line 131  static void insert_text_handler(GtkTextB
131  static void delete_range_handler(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end);  static void delete_range_handler(GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end);
132    
133  /* モードライン */  /* モードライン */
 static gint get_current_line_number(GtkTextBuffer *buffer);  
134  static void update_modeline_label();  static void update_modeline_label();
135  static void text_buffer_cursor_moved_handler();  static void text_buffer_cursor_moved_handler();
136    
# Line 417  static void append_tabpage(gchar *filena Line 423  static void append_tabpage(gchar *filena
423    /*-------------------- 新しいタブを作る ----------------------------------*/    /*-------------------- 新しいタブを作る ----------------------------------*/
424    /* ShikiTabInfo には,タブに関連する情報が全て保持されている */    /* ShikiTabInfo には,タブに関連する情報が全て保持されている */
425    ShikiTabInfo *tabinfo  = g_malloc(sizeof(ShikiTabInfo));    ShikiTabInfo *tabinfo  = g_malloc(sizeof(ShikiTabInfo));
426      tabinfo->locale        = "Gtk Default (utf8)";
427    tabinfo->undoInfoList  = NULL;    tabinfo->undoInfoList  = NULL;
428    tabinfo->filename      = filename;    tabinfo->filename      = filename;
429    tabinfo->tabpage_label = g_path_get_basename(filename);    tabinfo->tabpage_label = g_path_get_basename(filename);
# Line 444  static void append_tabpage(gchar *filena Line 451  static void append_tabpage(gchar *filena
451    /* 様々な初期化処理 */    /* 様々な初期化処理 */
452    
453    /* 括弧の強調表示のためのタグを作る */    /* 括弧の強調表示のためのタグを作る */
454    gtk_text_buffer_create_tag(tabinfo->text_buffer, "parent_emphasis_background", "background", "pink", NULL);    gtk_text_buffer_create_tag(tabinfo->text_buffer, "parent_emphasis_background", "background", "green", NULL);
455    
456    /* キーワードハイライティング */    /* キーワードハイライティング */
457    gtk_text_buffer_create_tag(tabinfo->text_buffer, "keyword_highlighting", "foreground", "blue", NULL);    gtk_text_buffer_create_tag(tabinfo->text_buffer, "keyword_highlighting", "foreground", "blue", NULL);
# Line 605  static void dummy_handler() { Line 612  static void dummy_handler() {
612    gtk_widget_destroy(GTK_WIDGET(about));    gtk_widget_destroy(GTK_WIDGET(about));
613  }  }
614    
 /* 現在のバッファのカーソル位置の行番号を取得 */  
 static gint get_current_line_number(GtkTextBuffer *b) {  
   GtkTextIter p;  
   gtk_text_buffer_get_iter_at_mark(b, &p, gtk_text_buffer_get_insert(b));  
   return gtk_text_iter_get_line(&p) + 1;  
 }  
   
615  /* バッファの状態に合わせてモードラインを変更 */  /* バッファの状態に合わせてモードラインを変更 */
616  static void update_modeline_label() {  static void update_modeline_label() {
617    gchar* basename = g_path_get_basename(Shiki_CURRENT_TAB_TITLE);    static gchar label[1024];
618    gchar* l = g_strdup_printf("-E:%s  %-10s (Gauche Interaction)--L%d--------------------------------------",    GtkTextIter p;
619      gtk_text_buffer_get_iter_at_mark(Shiki_CURRENT_TEXT_BUFFER, &p, gtk_text_buffer_get_insert(Shiki_CURRENT_TEXT_BUFFER));
620    
621      g_snprintf(label, 1024, "--%s- %-10s (Gauche Interaction) [%s]     L%d:%d    ",
622        gtk_text_buffer_get_modified(Shiki_CURRENT_TEXT_BUFFER) ? "**" : "--",        gtk_text_buffer_get_modified(Shiki_CURRENT_TEXT_BUFFER) ? "**" : "--",
623        basename, get_current_line_number(Shiki_CURRENT_TEXT_BUFFER));        Shiki_CURRENT_TAB_TITLE,
624    gtk_label_set_text(GTK_LABEL(Shiki_EDITOR_MODELINE_LABEL), l);        Shiki_CURRENT_LOCALE,
625    g_free(l); g_free(basename);          gtk_text_iter_get_line(&p) + 1,
626          gtk_text_iter_get_line_offset (&p) + 1);
627      gtk_label_set_text(GTK_LABEL(Shiki_EDITOR_MODELINE_LABEL), label);
628  }  }
629    
630  static void text_buffer_cursor_moved_handler(){  static void text_buffer_cursor_moved_handler(){
# Line 754  static gboolean delete_event_handler(Gtk Line 759  static gboolean delete_event_handler(Gtk
759    
760  /* ファイルを開く */  /* ファイルを開く */
761  static void open_file(gchar *filename) {  static void open_file(gchar *filename) {
762    gchar *contents, *text;    gchar *contents, *text = NULL;
763    gsize br, bw, len;    gsize br, bw, len;
764    GError *err = NULL;    GError *err = NULL;
765    
# Line 768  static void open_file(gchar *filename) { Line 773  static void open_file(gchar *filename) {
773    
774      if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))      if(!(text = g_locale_to_utf8(contents, -1, &br, &bw, &err)))
775        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, contents, len);        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, contents, len);
776      else      else {
777        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, len);        gtk_text_buffer_set_text(Shiki_CURRENT_TEXT_BUFFER, text, len);
778          Shiki_CURRENT_LOCALE = Shiki_EDITOR_DEFAULT_LOCALE;
779        }
780    
781      /* バッファ未変更に */      /* バッファ未変更に */
782      gtk_text_buffer_set_modified(Shiki_CURRENT_TEXT_BUFFER, FALSE);      gtk_text_buffer_set_modified(Shiki_CURRENT_TEXT_BUFFER, FALSE);
# Line 1118  static void open_online_help() { Line 1125  static void open_online_help() {
1125    
1126  /* エディタの編集画面の初期化 */  /* エディタの編集画面の初期化 */
1127  static void shiki_editor_window_init(int argc, char **argv) {  static void shiki_editor_window_init(int argc, char **argv) {
1128    GtkWidget *vbox, *toolbar;    GtkWidget *vbox, *toolbar, *modeline_bg = gtk_event_box_new();
1129    GtkToolItem *icon;    GtkToolItem *icon;
1130    GtkIconSize iconsize;    GtkIconSize iconsize;
1131    GtkTooltips *toolbar_tips = gtk_tooltips_new();    GtkTooltips *toolbar_tips = gtk_tooltips_new();
# Line 1280  static void shiki_editor_window_init(int Line 1287  static void shiki_editor_window_init(int
1287    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));    gtk_container_add(GTK_CONTAINER (toolbar), GTK_WIDGET(icon));
1288    gtk_tool_item_set_tooltip(icon, toolbar_tips, "このアプリケーションについて", "");    gtk_tool_item_set_tooltip(icon, toolbar_tips, "このアプリケーションについて", "");
1289    
1290    gtk_box_pack_start(GTK_BOX(vbox), Shiki_EDITOR_MODELINE_LABEL = gtk_label_new("-E:**  *scratch*     (Gauche Interaction)--L1--All---------------------------------"), TRUE, TRUE, 0);    /* モードライン作る */
1291      Shiki_EDITOR_MODELINE_LABEL = gtk_label_new(NULL);
1292      gtk_container_add(GTK_CONTAINER (modeline_bg), Shiki_EDITOR_MODELINE_LABEL);
1293      
1294      gdk_color_parse("black", &COLOR_BLACK);
1295      gdk_color_parse("green", &COLOR_GREEN);
1296      
1297      gtk_widget_modify_fg(Shiki_EDITOR_MODELINE_LABEL, GTK_STATE_NORMAL, &COLOR_GREEN);
1298      gtk_widget_modify_bg(modeline_bg, GTK_STATE_NORMAL, &COLOR_BLACK);
1299    
1300      gtk_box_pack_start(GTK_BOX(vbox), modeline_bg, TRUE, TRUE, 0);
1301    
1302    /* C-x C-s などの状態を表示するステータスバーをウィンドウボトムに追加 */    /* C-x C-s などの状態を表示するステータスバーをウィンドウボトムに追加 */
1303    Shiki_EDITOR_STATUSBAR = gtk_statusbar_new();    Shiki_EDITOR_STATUSBAR = gtk_statusbar_new();
# Line 1305  static void shiki_editor_window_init(int Line 1322  static void shiki_editor_window_init(int
1322    
1323  int main(int argc, char *argv[]) {  int main(int argc, char *argv[]) {
1324    /* 初期化してメインループへ */    /* 初期化してメインループへ */
1325    gtk_set_locale();    Shiki_EDITOR_DEFAULT_LOCALE = g_locale_to_utf8(gtk_set_locale(), -1, NULL, NULL, NULL);
1326    gtk_init(&argc, &argv);    gtk_init(&argc, &argv);
1327    GC_INIT(); Scm_Init(GAUCHE_SIGNATURE);    GC_INIT(); Scm_Init(GAUCHE_SIGNATURE);
1328    shiki_editor_window_init(argc, argv);    shiki_editor_window_init(argc, argv);

Legend:
Removed from v.1.38  
changed lines
  Added in v.1.39

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