Advertisement
Guest User

patch for fcitx developer handbook

a guest
Aug 28th, 2011
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 27.82 KB | None | 0 0
  1. diff -c fcitx.developer-handbook//addon.docbook modi-fcitx-developer-handbook//addon.docbook
  2. *** fcitx.developer-handbook//addon.docbook 2011-08-27 22:50:53.215077899 -0700
  3. --- modi-fcitx-developer-handbook//addon.docbook    2011-08-27 23:32:12.434980146 -0700
  4. ***************
  5. *** 6,13 ****
  6.       <article>
  7.           <title>Register a addon in Fcitx</title>
  8.           <para>
  9. !             You need a configure file for your own addon. A common configure
  10. !             file is like this one, fcitx-pinyin.conf.in.
  11.           </para>
  12.           <programlisting>
  13.   [Addon]
  14. --- 6,13 ----
  15.       <article>
  16.           <title>Register a addon in Fcitx</title>
  17.           <para>
  18. !             You need a configuration file for your own addon. A common configuration
  19. !             file is like this one, fcitx-pinyin.conf.ini.
  20.           </para>
  21.           <programlisting>
  22.   [Addon]
  23. ***************
  24. *** 23,29 ****
  25.           <para>
  26.               All Fcitx config file are using ini style format, GeneralName and
  27.               Comment are I18NString that can be translated into other languages.
  28. !             Here is fcitx-pinyin.conf that is merged with translation.
  29.           </para>
  30.           <programlisting>
  31.   [Addon]
  32. --- 23,29 ----
  33.           <para>
  34.               All Fcitx config file are using ini style format, GeneralName and
  35.               Comment are I18NString that can be translated into other languages.
  36. !             Here is a fcitx-pinyin.conf that is merged with translation.
  37.           </para>
  38.           <programlisting>
  39.   [Addon]
  40. diff -c fcitx.developer-handbook//architecture.docbook modi-fcitx-developer-handbook//architecture.docbook
  41. *** fcitx.developer-handbook//architecture.docbook  2011-08-27 22:50:53.215077899 -0700
  42. --- modi-fcitx-developer-handbook//architecture.docbook 2011-08-27 22:58:16.402676946 -0700
  43. ***************
  44. *** 6,34 ****
  45.       <article>
  46.           <title>Input Method Architecture</title>
  47.           <para>
  48. !             All Input Method has a very simple architecture, basically it receives
  49.               Keyboard Event from Application, then try to do some work with this
  50. !             Keyboard Event, like simply let it pass, or block it and commit a
  51.               string to the application.
  52.           </para>
  53.           <para>
  54. !             The way that Fcitx handle the keyboard event can be separated into 4
  55. !             stage, Pre-Input, Input Method, Post-Input, and Hotkey. All the input
  56. !             method engine, such as "Chinese Pinyin", will be called at the second
  57.               stage.
  58.           </para>
  59.           <para>
  60. !             Fcitx has a temporarily disabled mode, which can switched with Left Ctrl
  61.               by default, when this mode is on, Pre-Input, Input-Method, Post-Input
  62.               will be skipped and only Hotkey takes effect.
  63.           </para>
  64.           <para>
  65. !             Fcitx Addon (which you can also think as a module) can be separated into
  66.               3 categories. First is Backend, which receives key event and pass it to
  67.               Fcitx; Second is Input Method Engine, which help you input your Language
  68. !             with keyboard; Third is Misc Module, it simply can do anything you want,
  69.               like registering hook for pre-input or post-input, receiving event from other
  70. !             process, or so on.
  71.           </para>
  72.       </article>
  73.   </part>
  74. --- 6,34 ----
  75.       <article>
  76.           <title>Input Method Architecture</title>
  77.           <para>
  78. !             All Input Methods have a very simple architecture, basically they receive
  79.               Keyboard Event from Application, then try to do some work with this
  80. !             Keyboard Event, like simply letting it pass, or to block it and commit a
  81.               string to the application.
  82.           </para>
  83.           <para>
  84. !             The way that Fcitx handles the keyboard events can be separated into 4
  85. !             stages, Pre-Input, Input Method, Post-Input, and Hotkey. All the input
  86. !             method engines, such as "Chinese Pinyin", will be called at the second
  87.               stage.
  88.           </para>
  89.           <para>
  90. !             Fcitx has a temporarily disabled mode, which can be switched on with Left Ctrl
  91.               by default, when this mode is on, Pre-Input, Input-Method, Post-Input
  92.               will be skipped and only Hotkey takes effect.
  93.           </para>
  94.           <para>
  95. !             Fcitx Addons (which you can also think of as modules) can be separated into
  96.               3 categories. First is Backend, which receives key event and pass it to
  97.               Fcitx; Second is Input Method Engine, which help you input your Language
  98. !             with keyboard; Third is Misc Module, which simply can do anything you want,
  99.               like registering hook for pre-input or post-input, receiving event from other
  100. !             process, and so on.
  101.           </para>
  102.       </article>
  103.   </part>
  104. diff -c fcitx.developer-handbook//convention.docbook modi-fcitx-developer-handbook//convention.docbook
  105. *** fcitx.developer-handbook//convention.docbook    2011-08-27 22:50:53.218411214 -0700
  106. --- modi-fcitx-developer-handbook//convention.docbook   2011-08-27 23:34:31.610892831 -0700
  107. ***************
  108. *** 6,35 ****
  109.       <article>
  110.           <title>File and Directory Convention</title>
  111.           <para>
  112. !             Fcitx have two prefix for directory, one is named "PREFIX", which is configured
  113. !             while being built, the other is "USERPREFIX", which is based on XDG environment
  114.               variable. Normally, PREFIX is /usr/share/fcitx, and USERPREFIX is ~/.config/fcitx
  115.           </para>
  116.           <para>
  117. !             In order to make Fcitx Configuration Tool find your config file automatically,
  118. !             and let Fcitx load your addon correctly, you need to put your config file under
  119.               correct path with correct name.
  120.           </para>
  121.           <para>
  122.               Each addon has a config file, and it should be installed under PREFIX/addon/.
  123. !             This config file defines the name, category, library name, type, and priority.
  124.               Filename need to be addon-name.conf.
  125.           </para>
  126.           <para>
  127.               If your addon can be configured, you need a confguration description file,
  128.               which should be installed under PREFIX/configdesc/, with name addon-name.desc.
  129. !             The corresponding config file should be placed under USERPREFIX/conf/, with name
  130.               addon-name.config.
  131.           </para>
  132.           <para>
  133. !             If your addon has some data file to load/save, there is two case. If you only has
  134. !             one file to be processed, you can place it under PREFIX/data. If you have more than
  135. !             one file, you'd better create a directory (with the name you like) to place them.
  136.           </para>
  137.       </article>
  138.       <article>
  139. --- 6,35 ----
  140.       <article>
  141.           <title>File and Directory Convention</title>
  142.           <para>
  143. !             Fcitx has two prefixes for directory, one is named "PREFIX", which is configured
  144. !             during building, the other is "USERPREFIX", which is based on XDG environment
  145.               variable. Normally, PREFIX is /usr/share/fcitx, and USERPREFIX is ~/.config/fcitx
  146.           </para>
  147.           <para>
  148. !             In order to let Fcitx Configuration Tool find your config files automatically,
  149. !             and to let Fcitx load your addon correctly, you need to put your config files under
  150.               correct path with correct name.
  151.           </para>
  152.           <para>
  153.               Each addon has a config file, and it should be installed under PREFIX/addon/.
  154. !             This config file defines its name, category, library name, type, and priority.
  155.               Filename need to be addon-name.conf.
  156.           </para>
  157.           <para>
  158.               If your addon can be configured, you need a confguration description file,
  159.               which should be installed under PREFIX/configdesc/, with name addon-name.desc.
  160. !             The corresponding config file should be placed under USERPREFIX/conf/, with the name
  161.               addon-name.config.
  162.           </para>
  163.           <para>
  164. !             If your addon has some data file to load/save, there are two cases. If you only have
  165. !             one file to process, you can place it under PREFIX/data. If you have more than
  166. !             one file, you'd better create a directory (with a name you like) to place them.
  167.           </para>
  168.       </article>
  169.       <article>
  170. diff -c fcitx.developer-handbook//frontend.docbook modi-fcitx-developer-handbook//frontend.docbook
  171. *** fcitx.developer-handbook//frontend.docbook  2011-08-27 22:50:53.218411214 -0700
  172. --- modi-fcitx-developer-handbook//frontend.docbook 2011-08-27 23:11:47.664948627 -0700
  173. ***************
  174. *** 6,16 ****
  175.       <article>
  176.           <title>Frontend</title>
  177.           <para>
  178. !             Frontend is a library that communicate with the client, and process
  179. !             the key input from client, send string to client for input.
  180.           </para>
  181.           <para>
  182. !             Currently, there are 13 functions need to be implement for a frontend.
  183.               (Defined in fcitx/frontend.h)
  184.           </para>
  185.           <programlisting>
  186. --- 6,16 ----
  187.       <article>
  188.           <title>Frontend</title>
  189.           <para>
  190. !             Frontend is a library that communicates with the client, processes
  191. !             the key input from client, and send string to client for input.
  192.           </para>
  193.           <para>
  194. !             Currently, there are 13 functions need to be implemented for a frontend.
  195.               (Defined in fcitx/frontend.h)
  196.           </para>
  197.           <programlisting>
  198. ***************
  199. *** 30,63 ****
  200.           </programlisting>
  201.           <para>
  202.               Basically, frontend is to manage input contexts. A client at least
  203. !             have one input context, which hold some private data, which
  204.               can identify the specific input context. The CreateIC and
  205.               DestroyIC are functions that create and destroy private
  206. !             input context data. A input context usually have a private id,
  207.               which will be used in CheckIC to find the specific ic.
  208.           </para>
  209.           <para>
  210. !             Some input context hold a state at the client side, which indicates
  211.               whether this input context is active or not. EnableIM and
  212. !             CloseIM are callbacks if fcitx want to enable or disable
  213.               input context from fcitx side.
  214.           </para>
  215.           <para>
  216.               CommitString, ForwardKey, are callbacks that will be called  when
  217. !             fcitx want to commit string to client window, or forward a key event
  218.               to client window.
  219.           </para>
  220.           <para>
  221.               SetWindowOffset, and GetWindowOffset, are callbacks when fcitx
  222. !             want to know the current window position to the screen.
  223.           </para>
  224.           <para>
  225.               UpdatePreedit, and UpdateClientSideUI, are callbacks that will be called
  226.               when UI elements, like preedit string, or any ui element get updated.
  227. !             These two function are especially for input context, which capacities
  228. !             has CAPACITY_PREEDIT and CAPACITY_CLIENT_SIDE_UI. Only if input context
  229. !             claims to support opposite capacity, these two function will be
  230.               called.
  231.           </para>
  232.       </article>
  233. ! </part>
  234. \ 文件尾没有 newline 字符
  235. --- 30,63 ----
  236.           </programlisting>
  237.           <para>
  238.               Basically, frontend is to manage input contexts. A client at least
  239. !             have one input context, which hold some private data that
  240.               can identify the specific input context. The CreateIC and
  241.               DestroyIC are functions that create and destroy private
  242. !             input context data. A input context usually has a private id,
  243.               which will be used in CheckIC to find the specific ic.
  244.           </para>
  245.           <para>
  246. !             Some input context holds a state at the client side, which indicates
  247.               whether this input context is active or not. EnableIM and
  248. !             CloseIM are callbacks when fcitx wants to enable or disable
  249.               input context from fcitx side.
  250.           </para>
  251.           <para>
  252.               CommitString, ForwardKey, are callbacks that will be called  when
  253. !             fcitx wants to commit string to client window, or to forward a key event
  254.               to client window.
  255.           </para>
  256.           <para>
  257.               SetWindowOffset, and GetWindowOffset, are callbacks when fcitx
  258. !             wants to know the current window position to the screen.
  259.           </para>
  260.           <para>
  261.               UpdatePreedit, and UpdateClientSideUI, are callbacks that will be called
  262.               when UI elements, like preedit string, or any ui element get updated.
  263. !             These two function are specially for input context, whose capacities
  264. !             have CAPACITY_PREEDIT and CAPACITY_CLIENT_SIDE_UI. Only when input context
  265. !             claims to support opposite capacity, will these two function be
  266.               called.
  267.           </para>
  268.       </article>
  269. ! </part>
  270. 只在 fcitx.developer-handbook/ 存在:.hg
  271. diff -c fcitx.developer-handbook//inputmethod.docbook modi-fcitx-developer-handbook//inputmethod.docbook
  272. *** fcitx.developer-handbook//inputmethod.docbook   2011-08-27 22:50:53.221744529 -0700
  273. --- modi-fcitx-developer-handbook//inputmethod.docbook  2011-08-27 23:18:05.646234261 -0700
  274. ***************
  275. *** 6,48 ****
  276.       <article>
  277.           <title>Input Method Engine</title>
  278.           <para>
  279. !             Input Method Engine are main component of Fcitx. It will process
  280. !             key event, and decide whether the preedit should be updated, or
  281.               add candidate words.
  282.           </para>
  283.           <para>
  284.               Every single input method addon can add more than one input method
  285. !             to Fcitx. Like fcitx-table, it will load table configure file first,
  286.               then add opposite table input method.
  287.           </para>
  288.           <para>
  289.               Input methods are registered via FcitxRegisterIM. It will provide
  290. !             two strings, one is name which will be displayed directly to user,
  291. !             so if you want it to be translated, you should do it before pass to
  292.               FcitxRegisterIM. Icon Name is a property that will be used in UI
  293.               display, the actual usage for Icon Name depends on the UI Module
  294.               implementation. For fcitx-classic-ui, it will be used as the original
  295.               png file name; for fcitx-kimpanel-ui, it will be used with a "fcitx-"
  296. !             prefix and find icon in system icon themes.
  297.           </para>
  298.           <para>
  299. !             Init is function will be called when a input method being switched to. ResetIM is
  300. !             usually being called in ResetInput. DoInput is the key function, which
  301.               process the key event. And if the return state is IRV_DISPLAY_CANDWORDS,
  302. !             the GetCandWords will be called. Save will be called when fcitx want to
  303. !             save the data, usually when logout.
  304.           </para>
  305.           <para>
  306.               Priority control the order of input methods, each IM should take care of
  307. !             it's own priority value. If a priority value less equal than zero, this
  308.               input method will not be registered to fcitx.
  309.           </para>
  310.       </article>
  311.       <article>
  312. !         <title>The things that a input method should do and should not do.</title>
  313.           <para>
  314. !             Fcitx changes the behavior of Candidate Word handling in 4.1.0. Input method
  315. !             should provides all candidate word, instead of a single page.
  316.           </para>
  317.           <para>
  318.               Fcitx will provide the paging function, if you correctly use the candidate
  319. --- 6,48 ----
  320.       <article>
  321.           <title>Input Method Engine</title>
  322.           <para>
  323. !             Input Method Engine is a main component of Fcitx. It will process
  324. !             key event, and decide whether the preedit should be updated, or to
  325.               add candidate words.
  326.           </para>
  327.           <para>
  328.               Every single input method addon can add more than one input method
  329. !             to Fcitx. Like fcitx-table, it will load table configuration file first,
  330.               then add opposite table input method.
  331.           </para>
  332.           <para>
  333.               Input methods are registered via FcitxRegisterIM. It will provide
  334. !             two strings, one is name, which will be displayed directly to user.
  335. !             So if you want it to be translated, you should do it before pass to
  336.               FcitxRegisterIM. Icon Name is a property that will be used in UI
  337.               display, the actual usage for Icon Name depends on the UI Module
  338.               implementation. For fcitx-classic-ui, it will be used as the original
  339.               png file name; for fcitx-kimpanel-ui, it will be used with a "fcitx-"
  340. !             prefix and look for icon in system icon themes.
  341.           </para>
  342.           <para>
  343. !             Init is the function called when an input method is being switched to. ResetIM is
  344. !             usually called in ResetInput. DoInput is the key function, which
  345.               process the key event. And if the return state is IRV_DISPLAY_CANDWORDS,
  346. !             the GetCandWords will be called. Save will be called when fcitx wants to
  347. !             save the data, usually at logout.
  348.           </para>
  349.           <para>
  350.               Priority control the order of input methods, each IM should take care of
  351. !             it's own priority value. If a priority value is less than or equal to zero, this
  352.               input method will not be registered to fcitx.
  353.           </para>
  354.       </article>
  355.       <article>
  356. !         <title>The things that a input method should and should not do.</title>
  357.           <para>
  358. !             Fcitx changes the behavior of Candidate Words handling in 4.1.0. Input method
  359. !             should provides all candidate words, instead of a single page.
  360.           </para>
  361.           <para>
  362.               Fcitx will provide the paging function, if you correctly use the candidate
  363. ***************
  364. *** 55,61 ****
  365.               input method, but in a separate module.
  366.           </para>
  367.           <para>
  368. !             Currently fcitx only supports shared library input method, which you might think it's
  369.               better to implement input method in a separate process, you might want to
  370.               use DBus as a protocol. There is no easy way to do this currently, but still you
  371.               should check the inter-module function call in order to use the shared DBus connection.
  372. --- 55,61 ----
  373.               input method, but in a separate module.
  374.           </para>
  375.           <para>
  376. !             Currently fcitx only supports shared library input method. In case you think it's
  377.               better to implement input method in a separate process, you might want to
  378.               use DBus as a protocol. There is no easy way to do this currently, but still you
  379.               should check the inter-module function call in order to use the shared DBus connection.
  380. diff -c fcitx.developer-handbook//module.docbook modi-fcitx-developer-handbook//module.docbook
  381. *** fcitx.developer-handbook//module.docbook    2011-08-27 22:50:53.225077844 -0700
  382. --- modi-fcitx-developer-handbook//module.docbook   2011-08-27 23:26:49.483396391 -0700
  383. ***************
  384. *** 6,12 ****
  385.       <article>
  386.           <title>Event Module</title>
  387.           <para>
  388. !             Event based Module in Fcitx are using fd to notify the mainloop whether
  389.               there is new event or not. Following definition is defined in fcitx/module.h.
  390.           </para>
  391.           <programlisting>
  392. --- 6,12 ----
  393.       <article>
  394.           <title>Event Module</title>
  395.           <para>
  396. !             Event based Modules in Fcitx are using fd to notify the mainloop whether
  397.               there is new event or not. Following definition is defined in fcitx/module.h.
  398.           </para>
  399.           <programlisting>
  400. ***************
  401. *** 35,45 ****
  402.   } FcitxModule;
  403.           </programlisting>
  404.           <para>
  405. !             After select, the ProcessEvent will be called and module have time to process there
  406. !             own event.
  407.           </para>
  408.           <para>
  409. !             Module neet to update rfds, wfds, efds in FcitxInstance and set the maxfd property,
  410.               Everytime all the event get processed, all three fd_set will be set by FD_ZERO
  411.               and SetFD will be called to reset them.
  412.           </para>
  413. --- 35,45 ----
  414.   } FcitxModule;
  415.           </programlisting>
  416.           <para>
  417. !             After selection, the ProcessEvent will be called and modules will have time to process their
  418. !             own events.
  419.           </para>
  420.           <para>
  421. !             Modules need to update rfds, wfds, efds in FcitxInstance and set the maxfd properly,
  422.               Everytime all the event get processed, all three fd_set will be set by FD_ZERO
  423.               and SetFD will be called to reset them.
  424.           </para>
  425. ***************
  426. *** 47,57 ****
  427.       <article>
  428.           <title>Other Module</title>
  429.           <para>
  430. !             In spite of Event based module, all other misc module will use built-in
  431. !             hook to interference the key event processing.
  432.           </para>
  433.           <para>
  434. !             Currently, there are following usable hook to interference with key event
  435.               processing.
  436.           </para>
  437.           <programlisting>      
  438. --- 47,57 ----
  439.       <article>
  440.           <title>Other Module</title>
  441.           <para>
  442. !             Except Event based modules, all other misc module will use built-in
  443. !             hook to interfere with the key event processing.
  444.           </para>
  445.           <para>
  446. !             Currently, there are following usable hook to interfere with key event
  447.               processing.
  448.           </para>
  449.           <programlisting>      
  450. ***************
  451. *** 68,79 ****
  452.           </programlisting>
  453.           <para>
  454.               As mentioned in Architecture before, the key event processing is separated into
  455. !             4 phases. PreInput are called before Input Method's DoInput function, usually there is
  456. !             something that similar to input method get processed. PostInput will be called after
  457.               Input Method's DoInput function, if the key event doesn't get processed.
  458.           </para>
  459.           <para>
  460. !             Hotkey will be processed at last, but it will not be blocked even if input context
  461.               state is ENG. That's the main difference to Pre and Post filter. If you only have
  462.               a state need to be toggled, you'd better use hotkey instead of Input Filter.
  463.           </para>
  464. --- 68,79 ----
  465.           </programlisting>
  466.           <para>
  467.               As mentioned in Architecture before, the key event processing is separated into
  468. !             4 phases. PreInput is called before Input Method's DoInput function, usually there is
  469. !             something similar to input method get processed. PostInput will be called after
  470.               Input Method's DoInput function, if the key event doesn't get processed.
  471.           </para>
  472.           <para>
  473. !             Hotkey will be processed last, but it will not be blocked even if input context
  474.               state is ENG. That's the main difference to Pre and Post filter. If you only have
  475.               a state need to be toggled, you'd better use hotkey instead of Input Filter.
  476.           </para>
  477. ***************
  478. *** 85,96 ****
  479.       <article>
  480.           <title>Inter Module function call</title>
  481.           <para>
  482. !             In order to reusing some common code, there is mechanism to do inter module function
  483. !             call. Although it's call inter module, but all kinds of addon can provides such functions.
  484.           </para>
  485.           <para>
  486. !             If a module want to provide some function, first it need a header defines correct
  487. !             macro. Here is something that defined in fcitx/module/x11stuff.h
  488.           </para>
  489.           <programlisting>
  490.   #define FCITX_X11_NAME "fcitx-x11"
  491. --- 85,96 ----
  492.       <article>
  493.           <title>Inter Module function call</title>
  494.           <para>
  495. !             In order to reuse some common code, there is a mechanism to do inter module function
  496. !             call. Although it's called inter module, but all kinds of addon can provide such functions.
  497.           </para>
  498.           <para>
  499. !             If a module wants to provide some functions, first it need a header defineing the correct
  500. !             macro. Here is something defined in fcitx/module/x11stuff.h
  501.           </para>
  502.           <programlisting>
  503.   #define FCITX_X11_NAME "fcitx-x11"
  504. ***************
  505. *** 115,135 ****
  506.           </programlisting>
  507.           <para>
  508.               fcitx_add_addon_header is provided by FcitxMacro.cmake to get this header installed to
  509. !             correct place.
  510.           </para>
  511.           <para>
  512. !             All function has the same interface, like this:
  513.           </para>
  514.           <programlisting>
  515.   void* X11GetDisplay(void* arg, FcitxModuleFunctionArg args);
  516.           </programlisting>
  517.           <para>
  518. !             For any other addon need to call a function, if this is a must for your addon,
  519. !             you should add that module as dependency in your addon configure file.
  520. !             You can also check the module is loaded or not at runtime via GetAddonByName.
  521.           </para>
  522.           <para>
  523. !             If you want to call a function in other module, you should use InvokeFunction macro
  524.               defined in fcitx/module.h.
  525.           </para>
  526.           <programlisting>
  527. --- 115,135 ----
  528.           </programlisting>
  529.           <para>
  530.               fcitx_add_addon_header is provided by FcitxMacro.cmake to get this header installed to
  531. !             the correct place.
  532.           </para>
  533.           <para>
  534. !             All functions have the same interface, like this:
  535.           </para>
  536.           <programlisting>
  537.   void* X11GetDisplay(void* arg, FcitxModuleFunctionArg args);
  538.           </programlisting>
  539.           <para>
  540. !             For any other addon that need to call a function, if this is a must for your addon,
  541. !             you should add that module as a dependency in your addon configure file.
  542. !             You can also check whether the module is loaded or not at runtime via GetAddonByName.
  543.           </para>
  544.           <para>
  545. !             If you want to call a function in other module, you should use the InvokeFunction macro
  546.               defined in fcitx/module.h.
  547.           </para>
  548.           <programlisting>
  549. ***************
  550. *** 137,143 ****
  551.           </programlisting>
  552.           <para>
  553.               FcitxModuleFunctionArg provides ten void* slot for passing argument, which is
  554. !             enough to passing arguments.
  555.           </para>
  556.       </article>
  557.       <article>
  558. --- 137,143 ----
  559.           </programlisting>
  560.           <para>
  561.               FcitxModuleFunctionArg provides ten void* slot for passing argument, which is
  562. !             enough for passing arguments.
  563.           </para>
  564.       </article>
  565.       <article>
  566. diff -c fcitx.developer-handbook//userinterface.docbook modi-fcitx-developer-handbook//userinterface.docbook
  567. *** fcitx.developer-handbook//userinterface.docbook 2011-08-27 22:50:53.225077844 -0700
  568. --- modi-fcitx-developer-handbook//userinterface.docbook    2011-08-27 23:27:12.193273362 -0700
  569. ***************
  570. *** 9,15 ****
  571.           </para>
  572.       </article>
  573.       <article>
  574. !         <title>Using user interface element in module</title>
  575.           <para>
  576.           </para>
  577.       </article>
  578. --- 9,15 ----
  579.           </para>
  580.       </article>
  581.       <article>
  582. !         <title>Using user interface elements in module</title>
  583.           <para>
  584.           </para>
  585.       </article>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement