Xournal 단축키 변경May 14, 2008

타블렛 노트북(후지쯔 P1610)을 쓰고 있는 터라, 필기장 프로그램인 Xournal 을 애용하고 있다.
윈도우의 OneNote 정도의 기능까지는 아니더라도, 타블렛XP 내장 필기장보다는 훨씬 강력하다.
무엇보다도 PDF에 끄적일 수 있는 게 강점이랄까. 윈도우에서는 Acrobat Pro나 PDF annotator 같은 상용 툴로 해야 하니까.

하나 불만인 점은, 단축키 바인딩이 컨트롤+쉬프트 조합으로 되어 있어서 누르기 불편하다는 거다.
텍스트 툴과 펜 툴을 자주 오가면서 쓰는 터라 좀 오래 쓰다 보면 새끼손가락에 쥐가 난다.
그래서 수업은 안듣고 소스를 열어봤다. -_-;

단순히 단축키만 바꿔놨더만(P, E, H, T 로) 텍스트 입력시에도 단축키를 인식해 버리는 바람에
좀 무식하게 accel_group 을 전역으로 빼버린 다음, 텍스트 입력을 시작할 때 단축키를 전부 꺼버리고
입력을 종료할 때(ESC키를 눌러도 입력이 종료되도록 변경함) 단축키를 켜게 해버렸다. -_-;;

CODE:
  1. diff -urN xournal-0.4.1.orig/src/main.c xournal-0.4.1/src/main.c
  2. --- xournal-0.4.1.orig/src/main.c   2007-09-16 10:17:27.000000000 +0900
  3. +++ xournal-0.4.1/src/main.c    2008-05-15 13:16:08.000000000 +0900
  4. @@ -14,6 +14,7 @@
  5.  #include "xo-file.h"
  6.  
  7.  GtkWidget *winMain;
  8. +GtkAccelGroup *accel_group;
  9.  GnomeCanvas *canvas;
  10.  
  11.  struct Journal journal; // the journal
  12. diff -urN xournal-0.4.1.orig/src/xo-callbacks.c xournal-0.4.1/src/xo-callbacks.c
  13. --- xournal-0.4.1.orig/src/xo-callbacks.c   2007-09-16 10:17:27.000000000 +0900
  14. +++ xournal-0.4.1/src/xo-callbacks.c    2008-05-15 13:16:08.000000000 +0900
  15. @@ -2505,6 +2505,9 @@
  16.                                          GdkEventKey     *event,
  17.                                          gpointer         user_data)
  18.  {
  19. +  if (event->keyval == 65307) {
  20. +    end_text();
  21. }
  22.    return FALSE;
  23.  }
  24.  
  25. diff -urN xournal-0.4.1.orig/src/xo-interface.c xournal-0.4.1/src/xo-interface.c
  26. --- xournal-0.4.1.orig/src/xo-interface.c   2007-09-16 10:17:27.000000000 +0900
  27. +++ xournal-0.4.1/src/xo-interface.c    2008-05-15 13:16:43.000000000 +0900
  28. @@ -334,7 +334,7 @@
  29.    GtkWidget *labelLayer;
  30.    GtkWidget *comboLayer;
  31.    GtkWidget *statusbar;
  32. -  GtkAccelGroup *accel_group;
  33. +  extern GtkAccelGroup *accel_group;
  34.    GtkTooltips *tooltips;
  35.  
  36.    tooltips = gtk_tooltips_new ();
  37. @@ -555,7 +555,7 @@
  38.    gtk_widget_show (viewZoomIn);
  39.    gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewZoomIn);
  40.    gtk_widget_add_accelerator (viewZoomIn, "activate", accel_group,
  41. -                              GDK_plus, (GdkModifierType) GDK_CONTROL_MASK,
  42. +                              GDK_equal, (GdkModifierType) GDK_CONTROL_MASK,
  43.                                GTK_ACCEL_VISIBLE);
  44.  
  45.    viewZoomOut = gtk_image_menu_item_new_from_stock ("gtk-zoom-out", accel_group);
  46. @@ -576,7 +576,7 @@
  47.    gtk_widget_show (viewPageWidth);
  48.    gtk_container_add (GTK_CONTAINER (menuViewZoom_menu), viewPageWidth);
  49.    gtk_widget_add_accelerator (viewPageWidth, "activate", accel_group,
  50. -                              GDK_equal, (GdkModifierType) GDK_CONTROL_MASK,
  51. +                              GDK_plus, (GdkModifierType) GDK_CONTROL_MASK,
  52.                                GTK_ACCEL_VISIBLE);
  53.  
  54.    image625 = gtk_image_new_from_stock ("gtk-zoom-fit", GTK_ICON_SIZE_MENU);
  55. @@ -842,7 +842,7 @@
  56.    gtk_widget_show (toolsPen);
  57.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsPen);
  58.    gtk_widget_add_accelerator (toolsPen, "activate", accel_group,
  59. -                              GDK_P, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  60. +                              GDK_P, (GdkModifierType) NULL,
  61.                                GTK_ACCEL_VISIBLE);
  62.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsPen), TRUE);
  63.  
  64. @@ -851,7 +851,7 @@
  65.    gtk_widget_show (toolsEraser);
  66.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsEraser);
  67.    gtk_widget_add_accelerator (toolsEraser, "activate", accel_group,
  68. -                              GDK_E, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  69. +                              GDK_E, (GdkModifierType) NULL,
  70.                                GTK_ACCEL_VISIBLE);
  71.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsEraser), TRUE);
  72.  
  73. @@ -860,7 +860,7 @@
  74.    gtk_widget_show (toolsHighlighter);
  75.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHighlighter);
  76.    gtk_widget_add_accelerator (toolsHighlighter, "activate", accel_group,
  77. -                              GDK_H, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  78. +                              GDK_H, (GdkModifierType) NULL,
  79.                                GTK_ACCEL_VISIBLE);
  80.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsHighlighter), TRUE);
  81.  
  82. @@ -869,7 +869,7 @@
  83.    gtk_widget_show (toolsText);
  84.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsText);
  85.    gtk_widget_add_accelerator (toolsText, "activate", accel_group,
  86. -                              GDK_T, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  87. +                              GDK_T, (GdkModifierType) NULL,
  88.                                GTK_ACCEL_VISIBLE);
  89.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsText), TRUE);
  90.  
  91. @@ -892,7 +892,7 @@
  92.    gtk_widget_show (toolsSelectRectangle);
  93.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsSelectRectangle);
  94.    gtk_widget_add_accelerator (toolsSelectRectangle, "activate", accel_group,
  95. -                              GDK_R, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  96. +                              GDK_R, (GdkModifierType) NULL,
  97.                                GTK_ACCEL_VISIBLE);
  98.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsSelectRectangle), TRUE);
  99.  
  100. @@ -901,7 +901,7 @@
  101.    gtk_widget_show (toolsVerticalSpace);
  102.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsVerticalSpace);
  103.    gtk_widget_add_accelerator (toolsVerticalSpace, "activate", accel_group,
  104. -                              GDK_V, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  105. +                              GDK_V, (GdkModifierType) NULL,
  106.                                GTK_ACCEL_VISIBLE);
  107.    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (toolsVerticalSpace), TRUE);
  108.  
  109. @@ -910,7 +910,7 @@
  110.    gtk_widget_show (toolsHand);
  111.    gtk_container_add (GTK_CONTAINER (menuTools_menu), toolsHand);
  112.    gtk_widget_add_accelerator (toolsHand, "activate", accel_group,
  113. -                              GDK_A, (GdkModifierType) GDK_CONTROL_MASK | GDK_SHIFT_MASK,
  114. +                              GDK_A, (GdkModifierType) NULL,
  115.                                GTK_ACCEL_VISIBLE);
  116.  
  117.    separator16 = gtk_separator_menu_item_new ();
  118. diff -urN xournal-0.4.1.orig/src/xo-paint.c xournal-0.4.1/src/xo-paint.c
  119. --- xournal-0.4.1.orig/src/xo-paint.c   2007-09-16 10:17:27.000000000 +0900
  120. +++ xournal-0.4.1/src/xo-paint.c    2008-05-15 13:16:08.000000000 +0900
  121. @@ -989,6 +989,9 @@
  122.    GnomeCanvasItem *canvas_item;
  123.    PangoFontDescription *font_desc;
  124.    GdkColor color;
  125. +  extern GtkWidget *winMain;
  126. +  extern GtkAccelGroup *accel_group;
  127. +  gtk_window_remove_accel_group (GTK_WINDOW (winMain), accel_group);
  128.    
  129.    get_pointer_coords(event, pt);
  130.    ui.cur_item_type = ITEM_TEXT;
  131. @@ -1053,6 +1056,9 @@
  132.    gchar *new_text;
  133.    struct UndoErasureData *erasure;
  134.    GnomeCanvasItem *tmpitem;
  135. +  extern GtkWidget *winMain;
  136. +  extern GtkAccelGroup *accel_group;
  137. +  gtk_window_add_accel_group (GTK_WINDOW (winMain), accel_group);
  138.  
  139.    if (ui.cur_item_type!=ITEM_TEXT) return; // nothing for us to do!

덤으로 확대 단축키도 변경. 이제 좀 편하구먼.
패키지는 xournal_041-0ubuntu1_i386.deb.

덧붙임.
패키지 버전을 hold 할 때는 echo "packagename hold" | dpkg --set-selections

Ubuntu Edgy 로 업그레이드Dec 11, 2006

심심해서 잘 쓰던 Kubuntu Dapper를 Ubuntu Edgy로 갈아치우고(Edgy 나온지가 언제인데 집의 컴퓨터는 아직도 Dapper였다), Linux+Windows 듀얼부팅 체제에서 윈도우를 날려버렸다. 그리고 덤으로 AIGLX+Beryl 도.. 이제 슬슬 Linux only 로만 사용해도 될 정도로 리눅스 데스크탑의 완성도가 높아진 것 같다. Canon Digital Photo Professional(DPP)가 안도는게 흠이긴 하지만(wine으로 설치 자체가 안된다. 나중에 다른 컴퓨터에서 설치하고 째로 옮겨와봐야 할 듯), DPP는 픽쳐스타일 변경할때만 노트북에서 돌리고 일반적인 작업은 BibblePro 에서 하면 되니 일단 큰 불편은 없다.

아직 문제점을 꼽아보자면, 카메라 사면 번들로 나오는 DPP에 비해 BibblePro는 유료 어플리케이션이다 보니 정품을 구해야 한다. 아니면 과자-_-를 구하거나. 문제는 리눅스용 어플리케이션의 과자가 흔한게 아니란 거. 14일 제한 끝나면 풀 방법을 연구해보고, 정 안되면 사던가(USD 130$) 해야겠다.

그리고 Edgy 로 올리면서 갑자기 생긴 문제인데, Shift+space 키를 누를 때 가끔 X가 갑자기 튕겨버린다. 그냥 아무런 메시지도 없이 싹다 종료되고 GDM화면으로 돌아가버리는데 뭐가 문제인지 모르겠다. 로그에도 안찍히고.. 입력기 문제인가 싶어서 scim에서 nabi로 바꿔봤는데도 마찬가지인 듯. 일단 한영전환을 한글키로 바꿔두고 사용해보고 있다.

굳이 또 사소한 점을 찾자면 wine에서의 한글입력이 잘 안되는 터라 네이트온을 돌릴 때 살짝 불편하다는 것이나, (맥에서의 문제지만) iTunes의 ID3태그 인코딩이 오락가락하는 터라 Amarok에서 읽었을 때 일부분이 깨진다는 거..

뭐 어쨌건 우분투는 버전업할때마다 정말 쿨해지는듯. dist-upgrade 를 하려다가 그냥 새로 설치했는데, language-selector 에 몇몇 설정이 추가되면서 굴림체 등에 대한 폰트 설정이 자동으로 들어가고(굳이 fonts.conf 를 편집하지 않아도 된다), universe/multiverse 저장소를 알아서 추가해 줘서 코덱이나 MS폰트 등을 설치하기 좀더 쉬워졌다.

우분투로 대동단결 :twisted: