summaryrefslogtreecommitdiff
path: root/res
diff options
context:
space:
mode:
authoriroul <iroul@iroul-VirtualBox.(none)>2014-04-04 07:35:14 -0700
committeriroul <iroul@iroul-VirtualBox.(none)>2014-04-04 07:35:14 -0700
commitafd34f2893a06a3aecf17e8e83b1df6ed2ae91a2 (patch)
tree851102abc55d91a1b76e63e9e89f9a7733da95b5 /res
parentc4b028ad53f7b362a864de24828d7cc39ff67b0a (diff)
downloadfqterm-afd34f2893a06a3aecf17e8e83b1df6ed2ae91a2.tar.xz
move to my github.
Diffstat (limited to 'res')
-rw-r--r--res/credits52
-rw-r--r--res/cursor/end.xpm38
-rw-r--r--res/cursor/enter.xpm38
-rw-r--r--res/cursor/exit.xpm38
-rw-r--r--res/cursor/hand.xpm38
-rw-r--r--res/cursor/home.xpm38
-rw-r--r--res/cursor/mac_16x16/end.xpm22
-rw-r--r--res/cursor/mac_16x16/enter.xpm22
-rw-r--r--res/cursor/mac_16x16/exit.xpm22
-rw-r--r--res/cursor/mac_16x16/hand.xpm22
-rw-r--r--res/cursor/mac_16x16/home.xpm22
-rw-r--r--res/cursor/mac_16x16/next.xpm22
-rw-r--r--res/cursor/mac_16x16/pagedown.xpm22
-rw-r--r--res/cursor/mac_16x16/pageup.xpm22
-rw-r--r--res/cursor/mac_16x16/prev.xpm22
-rw-r--r--res/cursor/next.xpm38
-rw-r--r--res/cursor/pagedown.xpm38
-rw-r--r--res/cursor/pageup.xpm38
-rw-r--r--res/cursor/prev.xpm38
-rw-r--r--res/default_font.conf24
-rw-r--r--res/dict/common_zh_CN.ts618
-rw-r--r--res/dict/fqterm_zh_CN.ts666
-rw-r--r--res/dict/protocol_zh_CN.ts157
-rw-r--r--res/dict/ui_zh_CN.ts1706
-rw-r--r--res/fqterm.desktop13
-rw-r--r--res/fqterm.icnsbin0 -> 54565 bytes
-rw-r--r--res/fqterm.sh30
-rw-r--r--res/pic/ViewerButtons/adjustsize.pngbin0 -> 1929 bytes
-rw-r--r--res/pic/ViewerButtons/button-cancel.pngbin0 -> 1767 bytes
-rw-r--r--res/pic/ViewerButtons/button-delete.pngbin0 -> 1492 bytes
-rw-r--r--res/pic/ViewerButtons/button-recover.pngbin0 -> 1938 bytes
-rw-r--r--res/pic/ViewerButtons/clear-state-gray.pngbin0 -> 1564 bytes
-rw-r--r--res/pic/ViewerButtons/clear-state.pngbin0 -> 1762 bytes
-rw-r--r--res/pic/ViewerButtons/document-save-as.pngbin0 -> 1205 bytes
-rw-r--r--res/pic/ViewerButtons/edit-clear.pngbin0 -> 1729 bytes
-rw-r--r--res/pic/ViewerButtons/edit-delete.pngbin0 -> 1224 bytes
-rw-r--r--res/pic/ViewerButtons/edit-shuffle.pngbin0 -> 1331 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-info.pngbin0 -> 2812 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-like-16x16.pngbin0 -> 940 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-like-gray.pngbin0 -> 1373 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-like.pngbin0 -> 1607 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-new-16x16.pngbin0 -> 1172 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-new-gray.pngbin0 -> 1942 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-new.pngbin0 -> 2239 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-recover-16x16.pngbin0 -> 887 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-recover-gray.pngbin0 -> 1909 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-recover.pngbin0 -> 2377 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-title-16x16.pngbin0 -> 988 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-title.pngbin0 -> 1644 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-trash-16x16.pngbin0 -> 1058 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-trash-gray.pngbin0 -> 1332 bytes
-rw-r--r--res/pic/ViewerButtons/emblem-trash.pngbin0 -> 1570 bytes
-rw-r--r--res/pic/ViewerButtons/next.pngbin0 -> 1310 bytes
-rw-r--r--res/pic/ViewerButtons/object-rotate-left.pngbin0 -> 924 bytes
-rw-r--r--res/pic/ViewerButtons/object-rotate-right.pngbin0 -> 943 bytes
-rw-r--r--res/pic/ViewerButtons/open.pngbin0 -> 2073 bytes
-rw-r--r--res/pic/ViewerButtons/play_gif.pngbin0 -> 900 bytes
-rw-r--r--res/pic/ViewerButtons/prev.pngbin0 -> 1080 bytes
-rw-r--r--res/pic/ViewerButtons/previous.pngbin0 -> 837 bytes
-rw-r--r--res/pic/ViewerButtons/save-state-gray.pngbin0 -> 1567 bytes
-rw-r--r--res/pic/ViewerButtons/save-state.pngbin0 -> 2053 bytes
-rw-r--r--res/pic/ViewerButtons/trash-empty.pngbin0 -> 1121 bytes
-rw-r--r--res/pic/ViewerButtons/trash-full.pngbin0 -> 1695 bytes
-rw-r--r--res/pic/ViewerButtons/trash-state-gray.pngbin0 -> 956 bytes
-rw-r--r--res/pic/ViewerButtons/trash-state.pngbin0 -> 1715 bytes
-rw-r--r--res/pic/ViewerButtons/view-fullscreen.pngbin0 -> 687 bytes
-rw-r--r--res/pic/ViewerButtons/window-close.pngbin0 -> 1045 bytes
-rw-r--r--res/pic/ViewerButtons/zoom-fit-best.pngbin0 -> 1356 bytes
-rw-r--r--res/pic/ViewerButtons/zoom-in.pngbin0 -> 1281 bytes
-rw-r--r--res/pic/ViewerButtons/zoom-original.pngbin0 -> 1264 bytes
-rw-r--r--res/pic/ViewerButtons/zoom-out.pngbin0 -> 1233 bytes
-rw-r--r--res/pic/ViewerButtons/zoomin.pngbin0 -> 1696 bytes
-rw-r--r--res/pic/ViewerButtons/zoomout.pngbin0 -> 1662 bytes
-rw-r--r--res/pic/address_book.pngbin0 -> 4087 bytes
-rw-r--r--res/pic/ansi_color.pngbin0 -> 1918 bytes
-rw-r--r--res/pic/anti_idle.pngbin0 -> 2076 bytes
-rw-r--r--res/pic/auto_reconnect.pngbin0 -> 1205 bytes
-rw-r--r--res/pic/auto_reply.pngbin0 -> 2666 bytes
-rw-r--r--res/pic/beep.pngbin0 -> 2262 bytes
-rw-r--r--res/pic/change_fonts.pngbin0 -> 1582 bytes
-rw-r--r--res/pic/connect.pngbin0 -> 1965 bytes
-rw-r--r--res/pic/copy.pngbin0 -> 1338 bytes
-rw-r--r--res/pic/copy_with_color.pngbin0 -> 2053 bytes
-rw-r--r--res/pic/disconnect.pngbin0 -> 1944 bytes
-rw-r--r--res/pic/english_font.pngbin0 -> 3124 bytes
-rw-r--r--res/pic/fqterm.pngbin0 -> 10178 bytes
-rw-r--r--res/pic/fqterm_128x128.icobin0 -> 67646 bytes
-rw-r--r--res/pic/fqterm_128x128.pngbin0 -> 14912 bytes
-rw-r--r--res/pic/fqterm_16x16.icobin0 -> 1150 bytes
-rw-r--r--res/pic/fqterm_16x16.pngbin0 -> 1713 bytes
-rw-r--r--res/pic/fqterm_256x256.icobin0 -> 270398 bytes
-rw-r--r--res/pic/fqterm_256x256.pngbin0 -> 42415 bytes
-rw-r--r--res/pic/fqterm_32x32.icobin0 -> 4286 bytes
-rw-r--r--res/pic/fqterm_32x32.pngbin0 -> 1975 bytes
-rw-r--r--res/pic/fqterm_48x48.icobin0 -> 9662 bytes
-rw-r--r--res/pic/fqterm_48x48.pngbin0 -> 10178 bytes
-rw-r--r--res/pic/fqterm_64x64.icobin0 -> 16958 bytes
-rw-r--r--res/pic/fqterm_64x64.pngbin0 -> 5283 bytes
-rw-r--r--res/pic/fqterm_tray.pngbin0 -> 1713 bytes
-rw-r--r--res/pic/get_article_fulltext.pngbin0 -> 1909 bytes
-rw-r--r--res/pic/image_viewer.pngbin0 -> 3350 bytes
-rw-r--r--res/pic/messagebox_critical.pngbin0 -> 1473 bytes
-rw-r--r--res/pic/messagebox_info.pngbin0 -> 1397 bytes
-rw-r--r--res/pic/messagebox_warning.pngbin0 -> 1356 bytes
-rw-r--r--res/pic/mouse.pngbin0 -> 2152 bytes
-rw-r--r--res/pic/other_font.pngbin0 -> 3231 bytes
-rw-r--r--res/pic/paste.pngbin0 -> 1647 bytes
-rw-r--r--res/pic/popwidget.pngbin0 -> 4633 bytes
-rw-r--r--res/pic/preferences.pngbin0 -> 1881 bytes
-rw-r--r--res/pic/quick_login.pngbin0 -> 1138 bytes
-rw-r--r--res/pic/rectangle_selection.pngbin0 -> 2306 bytes
-rw-r--r--res/pic/refresh.pngbin0 -> 1914 bytes
-rw-r--r--res/pic/save_setting.pngbin0 -> 1894 bytes
-rw-r--r--res/pic/setup_shortcuts.pngbin0 -> 1333 bytes
-rw-r--r--res/pic/shadow.pngbin0 -> 1818 bytes
-rw-r--r--res/pic/tabpad.pngbin0 -> 620 bytes
-rw-r--r--res/pic/toggle_ansi_color.pngbin0 -> 1475 bytes
-rw-r--r--res/pic/view_messages.pngbin0 -> 2374 bytes
-rw-r--r--res/schema/Linux.schema27
-rw-r--r--res/schema/Softness.schema27
-rw-r--r--res/schema/VIM.schema27
-rw-r--r--res/schema/XTerm.schema27
-rw-r--r--res/schema/default.schema27
-rw-r--r--res/script/README112
-rw-r--r--res/script/buildindex.js132
-rw-r--r--res/script/continuous.py19
-rw-r--r--res/script/download.js19
-rw-r--r--res/script/download.py253
-rw-r--r--res/script/downloadelite.js207
-rw-r--r--res/script/downloadelite_smth.js255
-rw-r--r--res/script/post.js17
-rw-r--r--res/script/post.py21
-rw-r--r--res/script/postfile.py48
-rw-r--r--res/script/search.js22
-rw-r--r--res/script/sendmsg.py33
-rw-r--r--res/script/system.js48
-rw-r--r--res/script/system.py103
-rw-r--r--res/script/test.js4
-rw-r--r--res/script/tools.py65
-rw-r--r--res/script/utils.js46
-rw-r--r--res/script/weiboshare.js51
-rw-r--r--res/skin/dpstyle/ReadMe.txt5
-rw-r--r--res/skin/dpstyle/dpstyle.qss203
-rw-r--r--res/skin/dpstyle/image/checkbox_checked.pngbin0 -> 263 bytes
-rw-r--r--res/skin/dpstyle/image/checkbox_checked_hover.pngbin0 -> 266 bytes
-rw-r--r--res/skin/dpstyle/image/checkbox_checked_pressed.pngbin0 -> 425 bytes
-rw-r--r--res/skin/dpstyle/image/checkbox_unchecked.pngbin0 -> 159 bytes
-rw-r--r--res/skin/dpstyle/image/checkbox_unchecked_hover.pngbin0 -> 159 bytes
-rw-r--r--res/skin/dpstyle/image/checkbox_unchecked_pressed.pngbin0 -> 320 bytes
-rw-r--r--res/skin/dpstyle/image/down_arrow.pngbin0 -> 175 bytes
-rw-r--r--res/skin/dpstyle/image/down_arrow_disabled.pngbin0 -> 174 bytes
-rw-r--r--res/skin/dpstyle/image/frame.pngbin0 -> 253 bytes
-rw-r--r--res/skin/dpstyle/image/pagefold.pngbin0 -> 1545 bytes
-rw-r--r--res/skin/dpstyle/image/pushbutton.pngbin0 -> 533 bytes
-rw-r--r--res/skin/dpstyle/image/pushbutton_hover.pngbin0 -> 525 bytes
-rw-r--r--res/skin/dpstyle/image/pushbutton_pressed.pngbin0 -> 513 bytes
-rw-r--r--res/skin/dpstyle/image/radiobutton_checked.pngbin0 -> 355 bytes
-rw-r--r--res/skin/dpstyle/image/radiobutton_checked_hover.pngbin0 -> 532 bytes
-rw-r--r--res/skin/dpstyle/image/radiobutton_checked_pressed.pngbin0 -> 599 bytes
-rw-r--r--res/skin/dpstyle/image/radiobutton_unchecked.pngbin0 -> 240 bytes
-rw-r--r--res/skin/dpstyle/image/radiobutton_unchecked_hover.pngbin0 -> 492 bytes
-rw-r--r--res/skin/dpstyle/image/radiobutton_unchecked_pressed.pngbin0 -> 556 bytes
-rw-r--r--res/skin/dpstyle/image/sizegrip.pngbin0 -> 129 bytes
-rw-r--r--res/skin/dpstyle/image/spindown.pngbin0 -> 276 bytes
-rw-r--r--res/skin/dpstyle/image/spindown_hover.pngbin0 -> 268 bytes
-rw-r--r--res/skin/dpstyle/image/spindown_off.pngbin0 -> 249 bytes
-rw-r--r--res/skin/dpstyle/image/spindown_pressed.pngbin0 -> 264 bytes
-rw-r--r--res/skin/dpstyle/image/spinup.pngbin0 -> 283 bytes
-rw-r--r--res/skin/dpstyle/image/spinup_hover.pngbin0 -> 277 bytes
-rw-r--r--res/skin/dpstyle/image/spinup_off.pngbin0 -> 274 bytes
-rw-r--r--res/skin/dpstyle/image/spinup_pressed.pngbin0 -> 277 bytes
-rw-r--r--res/skin/dpstyle/image/up_arrow.pngbin0 -> 197 bytes
-rw-r--r--res/skin/dpstyle/image/up_arrow_disabled.pngbin0 -> 172 bytes
-rw-r--r--res/unite/exit24
-rw-r--r--res/unite/help24
-rw-r--r--res/unite/script-doc199
-rw-r--r--res/unite/shortcut-doc10
-rw-r--r--res/unite/ssh-unix-doc17
-rw-r--r--res/unite/welcome24
-rw-r--r--res/userconf/README.txt5
-rw-r--r--res/userconf/address.cfg.orig156
-rw-r--r--res/userconf/fqterm.cfg.orig58
-rw-r--r--res/userconf/language.cfg.orig4
183 files changed, 6125 insertions, 0 deletions
diff --git a/res/credits b/res/credits
new file mode 100644
index 0000000..196d121
--- /dev/null
+++ b/res/credits
@@ -0,0 +1,52 @@
+Authors of fqterm:
+ curvelet@newsmth.net
+ devilphoenix@newsmth.net
+ edyfox
+ jokhva
+ ecore.cn
+ lidaobing
+ if you have any problems please contact fqterm@gmail.com.
+
+kingson xiaokiangwang@yahoo.com.cn
+fiasco yinshouyi@peoplemail.com.cn
+hooey hephooey@hotmail.com
+ authors of qterm
+
+smartfish
+ smartfish@263.net
+ coder for miniTerm
+
+kafa
+ kafa@263.net
+ coder for miniTerm
+
+Merlion
+ vonjian@yahoo.com
+ making cursor
+
+hwang
+ hwangxw@fm365.com
+ URL detection
+
+Nimrod
+ Nimrod.bbs@smth.org
+ copy article dialog
+
+Luba
+ Luba.bbs@bbs.cs.nthu.edu.tw
+ traditional chinese translation for 0.2.0
+
+cppgx
+ cppgx.bbs@smth.org
+ qtermconfig
+ maintainer of qterm-qst
+
+cyb
+ cyber@thuee.org
+ iplocation
+
+others(patch/suggestion/bug report)
+ Dominator, nukq, ihw, ghostdiy, gpliu,
+ acura, filix, MetalSlugX, hiei, fullow,
+ Chicyu, careless, qiyu, hrothgar, minux.ma,
+ boltomli, oahong, sly.thu, cnyegle, leimiaos, javaboy@newsmth
diff --git a/res/cursor/end.xpm b/res/cursor/end.xpm
new file mode 100644
index 0000000..5105ec7
--- /dev/null
+++ b/res/cursor/end.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *end[]={
+"32 32 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"........#############...........",
+"........#aaa#aaa#aa##...........",
+"........#a###a#a#a#a#...........",
+"........#aaa#a#a#a#a#...........",
+"........#a###a#a#a#a#...........",
+"........#aaa#a#a#aa##...........",
+"........#############...........",
+"................................",
+".....###################........",
+"......#aaaaaaaaaaaaaaa#.........",
+".......#aaaaaaaaaaaaa#..........",
+"........#aaaaaaaaaaa#...........",
+".........#aaaaaaaaa#............",
+"..........#aaaaaaa#.............",
+"...........#aaaaa#..............",
+"............#aaa#...............",
+".............#a#................",
+"......#################.........",
+"......#aaaaaaaaaaaaaaa#.........",
+"......#aaaaaaaaaaaaaaa#.........",
+"......#################.........",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................"};
diff --git a/res/cursor/enter.xpm b/res/cursor/enter.xpm
new file mode 100644
index 0000000..3df959b
--- /dev/null
+++ b/res/cursor/enter.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *enter[]={
+"32 32 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"...#####################........",
+"...#aaa#aaa#aaa#aaa#aaa#........",
+"...#a###a#a##a##a###a#a#........",
+"...#aaa#a#a##a##aaa#aa##........",
+"...#a###a#a##a##a###a#a#........",
+"...#aaa#a#a##a##aaa#a#a#........",
+"...#####################.####...",
+".........................#aa#...",
+".........................#aa#...",
+".......#.................#aa#...",
+"......##.................#aa#...",
+".....#a#.................#aa#...",
+"....#aa###################aa#...",
+"...#aaaaaaaaaaaaaaaaaaaaaaaa#...",
+"...#aaaaaaaaaaaaaaaaaaaaaaaa#...",
+"....#aa######################...",
+".....#a#........................",
+"......##........................",
+".......#........................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................"};
diff --git a/res/cursor/exit.xpm b/res/cursor/exit.xpm
new file mode 100644
index 0000000..674c248
--- /dev/null
+++ b/res/cursor/exit.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *exit[]={
+"32 32 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................................",
+"................................",
+".........##.....................",
+"........#a#.....................",
+".......#aa#.....................",
+"......#aaa##################....",
+".....#aaaaaaaaaaaaaaaaaaaaa#....",
+"....#aaaaaa###############a#....",
+"...#aaaaaaa#aaa#a#a#a#aaa#a#....",
+"..#aaaaaaaa#a###a#a#a##a##a#....",
+".#aaaaaaaaa#a####a##a##a##a#....",
+"#aaaaaaaaaa#aaa##a##a##a##a#....",
+".#aaaaaaaaa#a####a##a##a##a#....",
+"..#aaaaaaaa#a###a#a#a##a##a#....",
+"...#aaaaaaa#aaa#a#a#a##a##a#....",
+"....#aaaaaa###############a#....",
+".....#aaaaaaaaaaaaaaaaaaaaa#....",
+"......#aaa##################....",
+".......#aa#.....................",
+"........#a#.....................",
+".........##.....................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................"};
diff --git a/res/cursor/hand.xpm b/res/cursor/hand.xpm
new file mode 100644
index 0000000..2a13828
--- /dev/null
+++ b/res/cursor/hand.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *hand[]={
+"32 32 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".............##.................",
+"............#aa#................",
+"............#aa#................",
+"............#aa#................",
+"............#aa#................",
+"............#aa###..............",
+"............#aa#aa###...........",
+"............#aa#aa#aa##.........",
+"............#aa#aa#aa#a#........",
+"........###.#aa#aa#aa#aa#.......",
+"........#aa##aaaaaaaa#aa#.......",
+"........#aaa#aaaaaaaaaaa#.......",
+".........#aa#aaaaaaaaaaa#.......",
+"..........#a#aaaaaaaaaaa#.......",
+"..........#aaaaaaaaaaaaa#.......",
+"...........#aaaaaaaaaaaa#.......",
+"...........#aaaaaaaaaaa#........",
+"............#aaaaaaaaaa#........",
+"............#aaaaaaaaaa#........",
+".............#aaaaaaaa#.........",
+".............#aaaaaaaa#.........",
+".............##########.........",
+"................................",
+"................................",
+"................................",
+"................................"};
diff --git a/res/cursor/home.xpm b/res/cursor/home.xpm
new file mode 100644
index 0000000..5e74c99
--- /dev/null
+++ b/res/cursor/home.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *home[]={
+"32 32 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................................",
+"................................",
+"................................",
+"......#################.........",
+"......#aaaaaaaaaaaaaaa#.........",
+"......#aaaaaaaaaaaaaaa#.........",
+"......#################.........",
+".............#a#................",
+"............#aaa#...............",
+"...........#aaaaa#..............",
+"..........#aaaaaaa#.............",
+".........#aaaaaaaaa#............",
+"........#aaaaaaaaaaa#...........",
+".......#aaaaaaaaaaaaa#..........",
+"......#aaaaaaaaaaaaaaa#.........",
+"......#################.........",
+"................................",
+"......#################.........",
+"......#a#a##a##a#a#aaa#.........",
+"......#a#a#a#a#aaa#a###.........",
+"......#aaa#a#a#a#a#aaa#.........",
+"......#a#a#a#a#a#a#a###.........",
+"......#a#a##a##a#a#aaa#.........",
+"......#################.........",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................"};
diff --git a/res/cursor/mac_16x16/end.xpm b/res/cursor/mac_16x16/end.xpm
new file mode 100644
index 0000000..9f7e3d7
--- /dev/null
+++ b/res/cursor/mac_16x16/end.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *end[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................",
+"................",
+"................",
+"..############..",
+"..#aaaaaaaaaa#..",
+"...#aaaaaaaa#...",
+"....#aaaaaa#....",
+".....#aaaa#.....",
+"......#aa#......",
+".......##.......",
+"..############..",
+"..#aaaaaaaaaa#..",
+"..############..",
+"................",
+"................",
+"................"};
diff --git a/res/cursor/mac_16x16/enter.xpm b/res/cursor/mac_16x16/enter.xpm
new file mode 100644
index 0000000..9f33487
--- /dev/null
+++ b/res/cursor/mac_16x16/enter.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *enter[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................",
+"................",
+"................",
+"................",
+"............###.",
+"............#a#.",
+"....#.......#a#.",
+"...##.......#a#.",
+"..#a#########a#.",
+".#aaaaaaaaaaaa#.",
+"..#a###########.",
+"...##...........",
+"....#...........",
+"................",
+"................",
+"................"};
diff --git a/res/cursor/mac_16x16/exit.xpm b/res/cursor/mac_16x16/exit.xpm
new file mode 100644
index 0000000..f0e69e1
--- /dev/null
+++ b/res/cursor/mac_16x16/exit.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *exit[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................",
+"................",
+"................",
+"......#.........",
+".....##.........",
+"....#a#.........",
+"...#aa#########.",
+"..#aaa..aaaaaa#.",
+".#aaaaaaaaaaaa#.",
+"..#aaaaaaaaaaa#.",
+"...#aa#########.",
+"....#a#.........",
+".....##.........",
+"......#.........",
+"................",
+"................"};
diff --git a/res/cursor/mac_16x16/hand.xpm b/res/cursor/mac_16x16/hand.xpm
new file mode 100644
index 0000000..258795e
--- /dev/null
+++ b/res/cursor/mac_16x16/hand.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *hand[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"......#.........",
+".....#a#........",
+".....#a#........",
+".....#a###......",
+".....#a#a###....",
+".....#a#a#a###..",
+".##..#a#a#a#.###",
+".#a###aaaaaa.#a#",
+".#aaa#aaaaaa..a#",
+"..#aaaaaaaaaaa##",
+"...#a.aaaaaaaa#.",
+"...##aaaaaaaa##.",
+"....##aaaaaaa#..",
+".....#aaaaaaa#..",
+".....#########..",
+"................"};
diff --git a/res/cursor/mac_16x16/home.xpm b/res/cursor/mac_16x16/home.xpm
new file mode 100644
index 0000000..feae51c
--- /dev/null
+++ b/res/cursor/mac_16x16/home.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *home[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................",
+"................",
+"................",
+"..############..",
+"..#aaaaaaaaaa#..",
+"..############..",
+".......##.......",
+"......#aa#......",
+".....#aaa.#.....",
+"....#aaaaaa#....",
+"...#aaaaaaaa#...",
+"..#aaaaaaaaaa#..",
+"..############..",
+"................",
+"................",
+"................"};
diff --git a/res/cursor/mac_16x16/next.xpm b/res/cursor/mac_16x16/next.xpm
new file mode 100644
index 0000000..43f11dd
--- /dev/null
+++ b/res/cursor/mac_16x16/next.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *next[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................",
+"................",
+".....#####......",
+".....#aaa#......",
+".....#aaa#......",
+".....#aaa#......",
+".#####aaa#####..",
+".#aaaaaaaaaaa#..",
+"..#aaaaaaaaa#...",
+"...#aaaaaaa#....",
+"....#aaaaa#.....",
+".....#aaa#......",
+"......#a#.......",
+".......#........",
+"................",
+"................"};
diff --git a/res/cursor/mac_16x16/pagedown.xpm b/res/cursor/mac_16x16/pagedown.xpm
new file mode 100644
index 0000000..063b4bc
--- /dev/null
+++ b/res/cursor/mac_16x16/pagedown.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *pagedown[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................",
+"................",
+"..###########...",
+"...#aaaaaaa#....",
+"....#aaaaa#.....",
+".....#aaa#......",
+"......#a#.......",
+".......#........",
+"..###########...",
+"...#aaaaaaa#....",
+"....#aaaaa#.....",
+".....#aaa#......",
+"......#a#.......",
+".......#........",
+"................",
+"................"};
diff --git a/res/cursor/mac_16x16/pageup.xpm b/res/cursor/mac_16x16/pageup.xpm
new file mode 100644
index 0000000..ce0570c
--- /dev/null
+++ b/res/cursor/mac_16x16/pageup.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *pageup[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................",
+"................",
+".......#........",
+"......#a#.......",
+".....#aaa#......",
+"....#aaaaa#.....",
+"...#aaaaaaa#....",
+"..#aaaaaaaaa#...",
+".#############..",
+"......#a#.......",
+".....#aaa#......",
+"....#aaaaa#.....",
+"...#aaaaaaa#....",
+"..#aaaaaaaaa#...",
+".#############..",
+"................"};
diff --git a/res/cursor/mac_16x16/prev.xpm b/res/cursor/mac_16x16/prev.xpm
new file mode 100644
index 0000000..8524545
--- /dev/null
+++ b/res/cursor/mac_16x16/prev.xpm
@@ -0,0 +1,22 @@
+/* XPM */
+static char *prev[]={
+"16 16 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................",
+"................",
+".......#........",
+"......#a#.......",
+".....#aaa#......",
+"....#aaaaa#.....",
+"...#aaaaaaa#....",
+"..#aaaaaaaaa#...",
+".#.aaaaaaaaaa#..",
+".#####aaa#####..",
+".....#aaa#......",
+".....#aaa#......",
+".....#aaa#......",
+".....#####......",
+"................",
+"................"};
diff --git a/res/cursor/next.xpm b/res/cursor/next.xpm
new file mode 100644
index 0000000..1592168
--- /dev/null
+++ b/res/cursor/next.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *next[]={
+"32 32 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+".......#################........",
+".......#aaa#aaa#a#a#aaa#........",
+".......#a#a#a###a#a##a##........",
+".......#a#a#aaa##a###a##........",
+".......#a#a#a###a#a##a##........",
+".......#a#a#aaa#a#a##a##........",
+".......#################........",
+"................................",
+"............#######.............",
+"............#aaaaa#.............",
+"............#aaaaa#.............",
+"............#aaaaa#.............",
+"........#####aaaaa#####.........",
+"........#aaaaaaaaaaaaa#.........",
+".........#aaaaaaaaaaa#..........",
+"..........#aaaaaaaaa#...........",
+"...........#aaaaaaa#............",
+"............#aaaaa#.............",
+".............#aaa#..............",
+"..............#a#...............",
+"...............#................",
+"................................",
+"................................"};
diff --git a/res/cursor/pagedown.xpm b/res/cursor/pagedown.xpm
new file mode 100644
index 0000000..b2cee38
--- /dev/null
+++ b/res/cursor/pagedown.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *pagedown[]={
+"32 32 3 1",
+"a c None",
+". c #000000",
+"# c #ffffff",
+"................................",
+"##...#...##.###.##...#..#.#.###.",
+"#.#.#.#.#...#...#.#.#.#.#.#.#.#.",
+"##..###.#...###.#.#.#.#.#.#.#.#.",
+"#...#.#.#.#.#...#.#.#.#.###.#.#.",
+"#...#.#..##.###.##...#..#.#.#.#.",
+"................................",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaa.................aaaaaaaa",
+"aaaaaaa.###############.aaaaaaaa",
+"aaaaaaaa.#############.aaaaaaaaa",
+"aaaaaaaaa.###########.aaaaaaaaaa",
+"aaaaaaaaaa.#########.aaaaaaaaaaa",
+"aaaaaaaaaaa.#######.aaaaaaaaaaaa",
+"aaaaaaaaaaaa.#####.aaaaaaaaaaaaa",
+"aaaaaaaaaaaaa.###.aaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaa.#.aaaaaaaaaaaaaaa",
+"aaaaaaa.................aaaaaaaa",
+"aaaaaaa.###############.aaaaaaaa",
+"aaaaaaaa.#############.aaaaaaaaa",
+"aaaaaaaaa.###########.aaaaaaaaaa",
+"aaaaaaaaaa.#########.aaaaaaaaaaa",
+"aaaaaaaaaaa.#######.aaaaaaaaaaaa",
+"aaaaaaaaaaaa.#####.aaaaaaaaaaaaa",
+"aaaaaaaaaaaaa.###.aaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaa.#.aaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"};
diff --git a/res/cursor/pageup.xpm b/res/cursor/pageup.xpm
new file mode 100644
index 0000000..6b1e579
--- /dev/null
+++ b/res/cursor/pageup.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *pageup[]={
+"32 32 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................................",
+"................................",
+"................................",
+"................................",
+"...............#................",
+"..............#a#...............",
+".............#aaa#..............",
+"............#aaaaa#.............",
+"...........#aaaaaaa#............",
+"..........#aaaaaaaaa#...........",
+".........#aaaaaaaaaaa#..........",
+"........#aaaaaaaaaaaaa#.........",
+".......#aaaaaaaaaaaaaaa#........",
+".......#################........",
+"..............#a#...............",
+".............#aaa#..............",
+"............#aaaaa#.............",
+"...........#aaaaaaa#............",
+"..........#aaaaaaaaa#...........",
+".........#aaaaaaaaaaa#..........",
+"........#aaaaaaaaaaaaa#.........",
+".......#aaaaaaaaaaaaaaa#........",
+".......#################........",
+"................................",
+"...#########################....",
+"...#aa###a###aa#aaa#a#a#aa##....",
+"...#a#a#a#a#a###a###a#a#a#a#....",
+"...#aa##aaa#a###aaa#a#a#aa##....",
+"...#a###a#a#a#a#a###a#a#a###....",
+"...#a###a#a##aa#aaa##a##a###....",
+"...#########################....",
+"................................"};
diff --git a/res/cursor/prev.xpm b/res/cursor/prev.xpm
new file mode 100644
index 0000000..340afdf
--- /dev/null
+++ b/res/cursor/prev.xpm
@@ -0,0 +1,38 @@
+/* XPM */
+static char *prev[]={
+"32 32 3 1",
+". c None",
+"# c #000000",
+"a c #ffffff",
+"................................",
+"..............#.................",
+".............#a#................",
+"............#aaa#...............",
+"...........#aaaaa#..............",
+"..........#aaaaaaa#.............",
+".........#aaaaaaaaa#............",
+"........#aaaaaaaaaaa#...........",
+".......#aaaaaaaaaaaaa#..........",
+".......#####aaaaa#####..........",
+"...........#aaaaa#..............",
+"...........#aaaaa#..............",
+"...........#aaaaa#..............",
+"...........#######..............",
+"................................",
+"......#################.........",
+"......#aa##aa##aaa#a#a#.........",
+"......#a#a#a#a#a###a#a#.........",
+"......#aa##aa##aaa#a#a#.........",
+"......#a###a#a#a###aaa#.........",
+"......#a###a#a#aaa##a##.........",
+"......#################.........",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................",
+"................................"};
diff --git a/res/default_font.conf b/res/default_font.conf
new file mode 100644
index 0000000..c10d20b
--- /dev/null
+++ b/res/default_font.conf
@@ -0,0 +1,24 @@
+锘縖Apple]
+Default=en_US:Monaco, Andale Mono, Courier, Courier New, Lucida Sans Typewriter
+Monaco=zh_CN:鍗庢枃缁嗛粦, 鍗庢枃榛戜綋, Hei
+Andale Mono=zh_CN:鍗庢枃缁嗛粦, 鍗庢枃榛戜綋, Hei
+Courier=zh_CN:鍗庢枃瀹嬩綋, 瀹嬩綋, 鍗庢枃妤蜂綋, Kai, 鍗庢枃浠垮畫
+Courier New=zh_CN:鍗庢枃瀹嬩綋, 瀹嬩綋, 鍗庢枃妤蜂綋, Kai, 鍗庢枃浠垮畫
+Lucida Sans Typewriter=zh_CN:鍗庢枃缁嗛粦, 鍗庢枃榛戜綋, Hei
+
+[Linux]
+Default=en_US:Courier, Andale Mono, Bitstream Vera Sans Mono, Courier New, Cursor, Monospace
+Courier=zh_CN:鏂板畫浣, 鍗庢枃瀹嬩綋, 瀹嬩綋, 鍗庢枃妤蜂綋, AR PL ZenKai Uni, 鍗庢枃浠垮畫, AR PL ShanHeiSun Uni
+Andale Mono=zh_CN: 鍗庢枃缁嗛粦, 鍗庢枃榛戜綋, 榛戜綋, WenQuanYi Zen Hei, AR PL ShanHeiSun Uni
+Bitstream Vera Sans Mono=zh_CN: 鍗庢枃缁嗛粦, 鍗庢枃榛戜綋, 榛戜綋, WenQuanYi Zen Hei, AR PL ShanHeiSun Uni
+Courier New=zh_CN:鏂板畫浣, 鍗庢枃瀹嬩綋, 瀹嬩綋, 鍗庢枃妤蜂綋, AR PL ZenKai Uni, 鍗庢枃浠垮畫, AR PL ShanHeiSun Uni
+Cursor=zh_CN: 鍗庢枃缁嗛粦, 鍗庢枃榛戜綋, 榛戜綋, WenQuanYi Zen Hei, AR PL ShanHeiSun Uni
+Monospace=zh_CN:鍗庢枃缁嗛粦, 鍗庢枃榛戜綋, 榛戜綋, WenQuanYi Zen Hei, AR PL ShanHeiSun Uni
+
+[Windows]
+Default=en_US:鏂板畫浣, Bitstream Vera Sans Mono, 瀹嬩綋, 妤蜂綋, Courier, Courier New, Lucida Sans Typewriter
+Courier=zh_CN:鏂板畫浣, 瀹嬩綋, 鍗庢枃瀹嬩綋, 鍗庢枃妤蜂綋, Kai, 鍗庢枃浠垮畫
+Courier New=zh_CN:鏂板畫浣, 瀹嬩綋, 鍗庢枃瀹嬩綋, 鍗庢枃妤蜂綋, Kai, 鍗庢枃浠垮畫
+Bitstream Vera Sans Mono=zh_CN:寰蒋闆呴粦, 榛戜綋, 骞煎渾
+Lucida Sans Typewriter=zh_CN:寰蒋闆呴粦, 榛戜綋, 骞煎渾
+
diff --git a/res/dict/common_zh_CN.ts b/res/dict/common_zh_CN.ts
new file mode 100644
index 0000000..0f10a77
--- /dev/null
+++ b/res/dict/common_zh_CN.ts
@@ -0,0 +1,618 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_CN" sourcelanguage="en_US">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+ <name>FQTerm::FQTermFileDialog</name>
+ <message>
+ <source>Save As...</source>
+ <translation>鍙﹀瓨涓...</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermShortcutHelper</name>
+ <message>
+ <source>Connect Host</source>
+ <translation>杩炴帴涓绘満</translation>
+ </message>
+ <message>
+ <source>Disconnect Host</source>
+ <translation>鏂紑杩炴帴</translation>
+ </message>
+ <message>
+ <source>F2</source>
+ <translation>F2</translation>
+ </message>
+ <message>
+ <source>Address Book</source>
+ <translation>鍦板潃绨</translation>
+ </message>
+ <message>
+ <source>F3</source>
+ <translation>F3</translation>
+ </message>
+ <message>
+ <source>Quick Login</source>
+ <translation>蹇熻繛鎺</translation>
+ </message>
+ <message>
+ <source>Ctrl+C</source>
+ <translation>Ctrl+C</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>澶嶅埗</translation>
+ </message>
+ <message>
+ <source>Ctrl+V</source>
+ <translation>Ctrl+V</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>绮樿创</translation>
+ </message>
+ <message>
+ <source>Ctrl+Ins</source>
+ <translation>Ctrl+Ins</translation>
+ </message>
+ <message>
+ <source>Shift+Insert</source>
+ <translation>Shift+Insert</translation>
+ </message>
+ <message>
+ <source>Copy With Color</source>
+ <translation>褰╄壊澶嶅埗</translation>
+ </message>
+ <message>
+ <source>Rectangle Selection</source>
+ <translation>鐭╁舰閫夋嫨</translation>
+ </message>
+ <message>
+ <source>Paste With Word Wrap</source>
+ <translation>鑷姩鎶樿绮樿创</translation>
+ </message>
+ <message>
+ <source>Set English Font</source>
+ <translation>璁剧疆鑻辨枃瀛椾綋</translation>
+ </message>
+ <message>
+ <source>Color Setting</source>
+ <translation>棰滆壊璁剧疆</translation>
+ </message>
+ <message>
+ <source>Refresh Screen</source>
+ <translation>鍒锋柊灞忓箷</translation>
+ </message>
+ <message>
+ <source>Toggle Ansi Color</source>
+ <translation>寮鍏矨NSI鑹插僵</translation>
+ </message>
+ <message>
+ <source>Set UI Font</source>
+ <translation>璁剧疆UI瀛椾綋</translation>
+ </message>
+ <message>
+ <source>F6</source>
+ <translation>F6</translation>
+ </message>
+ <message>
+ <source>Toggle Full Screen</source>
+ <translation>鍏ㄥ睆/鎭㈠</translation>
+ </message>
+ <message>
+ <source>F12</source>
+ <translation>F12</translation>
+ </message>
+ <message>
+ <source>Toggle Boss Color</source>
+ <translation>鑰佹澘閿/鎭㈠</translation>
+ </message>
+ <message>
+ <source>Toggle Switch Bar</source>
+ <translation>寮鍏砈witch Bar</translation>
+ </message>
+ <message>
+ <source>Current Session Setting</source>
+ <translation>褰撳墠绔欑偣璁剧疆</translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+G</source>
+ <translation>Ctrl+Alt+G</translation>
+ </message>
+ <message>
+ <source>Google selected words</source>
+ <translation>Google閫変腑鏂囨湰</translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+E</source>
+ <translation>Ctrl+Alt+E</translation>
+ </message>
+ <message>
+ <source>Invoke external editor</source>
+ <translation>璋冪敤澶栭儴缂栬緫鍣 </translation>
+ </message>
+ <message>
+ <source>Default Setting</source>
+ <translation>缂虹渷璁剧疆</translation>
+ </message>
+ <message>
+ <source>Preference</source>
+ <translation>鍋忓ソ</translation>
+ </message>
+ <message>
+ <source>Edit Schema</source>
+ <translation>缂栬緫璋冭壊鏉</translation>
+ </message>
+ <message>
+ <source>Shorcut Setting</source>
+ <translation>蹇嵎閿缃</translation>
+ </message>
+ <message>
+ <source>F9</source>
+ <translation>F9</translation>
+ </message>
+ <message>
+ <source>Copy Article</source>
+ <translation>澶嶅埗鏂囩珷</translation>
+ </message>
+ <message>
+ <source>Toggle Anti Idle</source>
+ <translation>寮鍏抽槻鍙戝憜</translation>
+ </message>
+ <message>
+ <source>Toggle Auto Reply</source>
+ <translation>寮鍏宠嚜鍔ㄥ洖澶</translation>
+ </message>
+ <message>
+ <source>F10</source>
+ <translation>F10</translation>
+ </message>
+ <message>
+ <source>View Messages</source>
+ <translation>娴忚淇℃伅</translation>
+ </message>
+ <message>
+ <source>IP Lookup</source>
+ <translation>IP鏌ヨ</translation>
+ </message>
+ <message>
+ <source>Toggle Beep</source>
+ <translation>寮鍏宠渹楦</translation>
+ </message>
+ <message>
+ <source>Toggle Mouse Support</source>
+ <translation>寮鍏抽紶鏍囨敮鎸</translation>
+ </message>
+ <message>
+ <source>Image Viewer</source>
+ <translation>鍥惧儚娴忚鍣</translation>
+ </message>
+ <message>
+ <source>F7</source>
+ <translation>F7</translation>
+ </message>
+ <message>
+ <source>Run Script</source>
+ <translation>鎵ц鑴氭湰</translation>
+ </message>
+ <message>
+ <source>F8</source>
+ <translation>F8</translation>
+ </message>
+ <message>
+ <source>Stop Script</source>
+ <translation>鍋滄鑴氭湰</translation>
+ </message>
+ <message>
+ <source>Ctrl+F1</source>
+ <translation>Ctrl+F1</translation>
+ </message>
+ <message>
+ <source>Run Python Script</source>
+ <translation>鎵цPython鑴氭湰</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>鍏充簬</translation>
+ </message>
+ <message>
+ <source>Homepage</source>
+ <translation>涓婚〉</translation>
+ </message>
+ <message>
+ <source>&amp;Connect</source>
+ <translation>杩炴帴(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Disconnect</source>
+ <translation>鏂紑杩炴帴(&amp;D)</translation>
+ </message>
+ <message>
+ <source>&amp;Address book</source>
+ <translation>鍦板潃绨(&amp;A)</translation>
+ </message>
+ <message>
+ <source>&amp;Quick login</source>
+ <translation>蹇熻繛鎺(&amp;Q)</translation>
+ </message>
+ <message>
+ <source>&amp;Exit</source>
+ <translation>閫鍑(&amp;E)</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>澶嶅埗(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>绮樿创(&amp;P)</translation>
+ </message>
+ <message>
+ <source>C&amp;opy with color</source>
+ <translation>褰╄壊澶嶅埗(&amp;o)</translation>
+ </message>
+ <message>
+ <source>&amp;Rectangle select</source>
+ <translation>鐭╁舰閫夋嫨(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Auto copy &amp;select</source>
+ <translation>鑷姩澶嶅埗(&amp;s)</translation>
+ </message>
+ <message>
+ <source>P&amp;aste with wordwrap</source>
+ <translation>鑷姩鎹㈣绮樿创(&amp;a)</translation>
+ </message>
+ <message>
+ <source>&amp;Google It</source>
+ <translation type="obsolete">Google涓涓(&amp;G)</translation>
+ </message>
+ <message>
+ <source>E&amp;xternal Editor</source>
+ <translation>澶栭儴缂栬緫鍣(&amp;x)</translation>
+ </message>
+ <message>
+ <source>&amp;Fast Post</source>
+ <translation>蹇熷彂鏂(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;None</source>
+ <translation>&amp;None</translation>
+ </message>
+ <message>
+ <source>&amp;ESC ESC [</source>
+ <translation>&amp;ESC ESC [</translation>
+ </message>
+ <message>
+ <source>Ctrl+&amp;U [</source>
+ <translation type="obsolete">Ctrl+&amp;U [</translation>
+ </message>
+ <message>
+ <source>&amp;Custom...</source>
+ <translation>鑷畾涔(&amp;C)...</translation>
+ </message>
+ <message>
+ <source>&amp;Non-English Font</source>
+ <translation type="obsolete">闈炶嫳璇瓧浣(&amp;N)</translation>
+ </message>
+ <message>
+ <source>&amp;English Font</source>
+ <translation>鑻辫瀛椾綋(&amp;E)</translation>
+ </message>
+ <message>
+ <source>&amp;Color Setting</source>
+ <translation>棰滆壊璁剧疆(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Use ANSI Color</source>
+ <translation>浣跨敤ANSI棰滆壊(&amp;U)</translation>
+ </message>
+ <message>
+ <source>&amp;Refresh</source>
+ <translation>鍒锋柊(&amp;R)</translation>
+ </message>
+ <message>
+ <source>U&amp;I font</source>
+ <translation>鐣岄潰瀛椾綋(&amp;I)</translation>
+ </message>
+ <message>
+ <source>Fullscree&amp;n</source>
+ <translation>鍏ㄥ睆(&amp;n)</translation>
+ </message>
+ <message>
+ <source>B&amp;oss Color</source>
+ <translation>淇濇姢鑹(&amp;C)</translation>
+ </message>
+ <message>
+ <source>S&amp;witch Bar</source>
+ <translation>浠诲姟鏍(&amp;w)</translation>
+ </message>
+ <message>
+ <source>&amp;Hide</source>
+ <translation>闅愯棌(&amp;H)</translation>
+ </message>
+ <message>
+ <source>&amp;Left</source>
+ <translation>宸︿晶(&amp;L)</translation>
+ </message>
+ <message>
+ <source>&amp;Right</source>
+ <translation>鍙充晶(&amp;R)</translation>
+ </message>
+ <message>
+ <source>&amp;Setting for current session</source>
+ <translation>褰撳墠杩炴帴灞炴(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Default setting</source>
+ <translation>缂虹渷璁剧疆(&amp;D)</translation>
+ </message>
+ <message>
+ <source>&amp;Preferences...</source>
+ <translation>鍋忓ソ(&amp;P)...</translation>
+ </message>
+ <message>
+ <source>Short&amp;cut Setting</source>
+ <translation>蹇嵎閿缃(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Schema</source>
+ <translation>缂栬緫鍥炬爣(&amp;E)</translation>
+ </message>
+ <message>
+ <source>&amp;Copy article</source>
+ <translation>鍏ㄦ枃涓嬭浇(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Anti &amp;idle</source>
+ <translation>闃插彂鍛(&amp;i)</translation>
+ </message>
+ <message>
+ <source>Auto &amp;reply</source>
+ <translation>鑷姩鍥炲(&amp;r)</translation>
+ </message>
+ <message>
+ <source>&amp;View messages</source>
+ <translation>鏌ョ湅鍗虫椂娑堟伅(&amp;V)</translation>
+ </message>
+ <message>
+ <source>&amp;Beep</source>
+ <translation>铚傞福(&amp;B) </translation>
+ </message>
+ <message>
+ <source>&amp;Mouse support</source>
+ <translation>榧犳爣鏀寔(&amp;M)</translation>
+ </message>
+ <message>
+ <source>Ima&amp;ge viewer</source>
+ <translation>鍥惧儚棰勮鍣(&amp;g)</translation>
+ </message>
+ <message>
+ <source>I&amp;P Lookup</source>
+ <translation>鏌ヨIP(&amp;P)</translation>
+ </message>
+ <message>
+ <source>&amp;Run...</source>
+ <translation>杩愯(&amp;R)...</translation>
+ </message>
+ <message>
+ <source>&amp;Stop</source>
+ <translation>鍋滄(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Run &amp;Python...</source>
+ <translation>鎵цPython鑴氭湰(&amp;P)...</translation>
+ </message>
+ <message>
+ <source>&amp;Cascade</source>
+ <translation>灞傚彔(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Tile</source>
+ <translation>骞抽摵(&amp;T)</translation>
+ </message>
+ <message>
+ <source>About &amp;FQTerm</source>
+ <translation>鍏充簬 FQTerm(&amp;F)</translation>
+ </message>
+ <message>
+ <source>FQTerm&apos;s &amp;Homepage</source>
+ <translation>涓婚〉(&amp;H)</translation>
+ </message>
+ <message>
+ <source>Reconnect When Disconnected By Host</source>
+ <translation>褰撲富鏈烘柇寮鏃惰嚜鍔ㄩ噸杩</translation>
+ </message>
+ <message>
+ <source>Cascade Windows</source>
+ <translation>灞傚彔绐楀彛</translation>
+ </message>
+ <message>
+ <source>Tils Windows</source>
+ <translation>骞抽摵绐楀彛</translation>
+ </message>
+ <message>
+ <source>Auto Copy Selection</source>
+ <translation>鑷姩澶嶅埗閫夋嫨鍖哄煙</translation>
+ </message>
+ <message>
+ <source>Set Other Font</source>
+ <translation>璁剧疆涓枃瀛椾綋</translation>
+ </message>
+ <message>
+ <source>Alt+`</source>
+ <translation>Alt+`</translation>
+ </message>
+ <message>
+ <source>Share selected text and highlighted URL to weibo</source>
+ <translation>鍒嗕韩閫変腑鏂囨湰(鑷冲井鍗)</translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+F</source>
+ <translation>Ctrl+Alt+F</translation>
+ </message>
+ <message>
+ <source>Fast post from clipboard</source>
+ <translation>蹇熷彂甯(鑷壀璐存澘)</translation>
+ </message>
+ <message>
+ <source>Shift+F1</source>
+ <translation>Shift+F1</translation>
+ </message>
+ <message>
+ <source>Exit FQTerm</source>
+ <translation>閫鍑篎QTerm</translation>
+ </message>
+ <message>
+ <source>Set Color Ctrl to None</source>
+ <translation>灏嗛鑹叉帶鍒跺瓧绗︿覆璁句负绌</translation>
+ </message>
+ <message>
+ <source>Set Color Ctrl to **[</source>
+ <translation>灏嗛鑹叉帶鍒跺瓧绗︿覆璁句负 **[</translation>
+ </message>
+ <message>
+ <source>Set Color Ctrl to ^u[</source>
+ <translation>灏嗛鑹叉帶鍒跺瓧绗︿覆璁句负 ^u[</translation>
+ </message>
+ <message>
+ <source>Set Color Ctrl to old custom</source>
+ <translation>灏嗛鑹叉帶鍒跺瓧绗︿覆璁句负鑷畾涔夊瓧绗︿覆</translation>
+ </message>
+ <message>
+ <source>Set Color Ctrl to custom</source>
+ <translation>灏嗛鑹叉帶鍒跺瓧绗︿覆璁句负鑷畾涔夊瓧绗︿覆</translation>
+ </message>
+ <message>
+ <source>Toggle Auto Reconnect</source>
+ <translation>寮鍏宠嚜鍔ㄩ噸杩</translation>
+ </message>
+ <message>
+ <source>Set Scrollbar to Left</source>
+ <translation>婊氬姩鏉″乏渚ф樉绀</translation>
+ </message>
+ <message>
+ <source>Set Scrollbar to Right</source>
+ <translation>婊氬姩鏉″彸渚ф樉绀</translation>
+ </message>
+ <message>
+ <source>Set Scrollbar Hidden</source>
+ <translation>闅愯棌婊氬姩鏉</translation>
+ </message>
+ <message>
+ <source>Use Google</source>
+ <translation>浣跨敤Google</translation>
+ </message>
+ <message>
+ <source>Use Baidu</source>
+ <translation>浣跨敤Baidu</translation>
+ </message>
+ <message>
+ <source>Use Bing</source>
+ <translation>浣跨敤Bing</translation>
+ </message>
+ <message>
+ <source>Use Yahoo!</source>
+ <translation>浣跨敤Yahoo!</translation>
+ </message>
+ <message>
+ <source>Use Customized SE</source>
+ <translation>浣跨敤鑷畾涔夋悳绱㈠紩鎿</translation>
+ </message>
+ <message>
+ <source>Choose UI Language: English</source>
+ <translation>Choose UI Language: English</translation>
+ </message>
+ <message>
+ <source>Save Current Session Setting</source>
+ <translation>淇濆瓨褰撳墠绔欑偣璁剧疆</translation>
+ </message>
+ <message>
+ <source>Ctrl</source>
+ <translation>Ctrl</translation>
+ </message>
+ <message>
+ <source>Alt</source>
+ <translation>Alt</translation>
+ </message>
+ <message>
+ <source>+Right</source>
+ <translation>+Right</translation>
+ </message>
+ <message>
+ <source>Next Window</source>
+ <translation>涓嬩竴绐楀彛</translation>
+ </message>
+ <message>
+ <source>+Left</source>
+ <translation>+Left</translation>
+ </message>
+ <message>
+ <source>Prev Window</source>
+ <translation>鍓嶄竴绐楀彛</translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+Q</source>
+ <translation>Ctrl+Alt+Q</translation>
+ </message>
+ <message>
+ <source>Show FQTerm</source>
+ <translation>鏄剧ずFQTerm</translation>
+ </message>
+ <message>
+ <source>O&amp;ther Font</source>
+ <translation>涓枃瀛椾綋(&amp;t)</translation>
+ </message>
+ <message>
+ <source>&amp;Search It</source>
+ <translation>鎼滅储鏂囨湰(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Sha&amp;re It</source>
+ <translation>鍒嗕韩淇℃伅(&amp;r)</translation>
+ </message>
+ <message>
+ <source>Ctrl+&amp;U[</source>
+ <translation>Ctrl+&amp;U[</translation>
+ </message>
+ <message>
+ <source>&amp;English</source>
+ <translation>鑻辫(&amp;E)</translation>
+ </message>
+ <message>
+ <source>&amp;Google</source>
+ <translation>&amp;Google</translation>
+ </message>
+ <message>
+ <source>&amp;Baidu</source>
+ <translation>&amp;Baidu</translation>
+ </message>
+ <message>
+ <source>&amp;Bing</source>
+ <translation>&amp;Bing</translation>
+ </message>
+ <message>
+ <source>&amp;Yahoo!</source>
+ <translation>&amp;Yahoo!</translation>
+ </message>
+ <message>
+ <source>&amp;Custom</source>
+ <translation>鑷畾涔(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Save Settin&amp;g</source>
+ <translation>淇濆瓨璁剧疆(&amp;g)</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>&amp;English</source>
+ <translation>鑻辫(&amp;E)</translation>
+ </message>
+ <message>
+ <source>&amp;Non-English</source>
+ <translation>闈炶嫳璇(&amp;N)</translation>
+ </message>
+</context>
+</TS>
diff --git a/res/dict/fqterm_zh_CN.ts b/res/dict/fqterm_zh_CN.ts
new file mode 100644
index 0000000..8c1f614
--- /dev/null
+++ b/res/dict/fqterm_zh_CN.ts
@@ -0,0 +1,666 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+ <name>FQTerm::FQTermAutoUpdater</name>
+ <message>
+ <source>FQTerm Update Notifier</source>
+ <translation>FQTerm 鍗囩骇閫氱煡</translation>
+ </message>
+ <message>
+ <source>FQTerm update available.
+Press OK to visit our download list,
+Discard for a next-time-startup inform,
+Ignore for no more notification.</source>
+ <translation type="obsolete">FQTerm 鏂扮増鏈彲鐢
+&quot;纭&quot;璁块棶涓嬭浇鍒楄〃
+鈥滃彇娑&quot;绛夊緟涓嬫鍚姩鎻愮ず
+&quot;蹇界暐&quot;蹇界暐鏈鏇存柊.</translation>
+ </message>
+ <message>
+ <source>FQTerm update available.
+Press OK to visit our download list,
+Discard for a future prompt,
+Ignore for no more notification.</source>
+ <translation>FQTerm 鏂扮増鏈彲鐢
+&quot;纭&quot;璁块棶涓嬭浇鍒楄〃
+鈥滃彇娑&quot;灏嗘潵鎻愮ず
+&quot;蹇界暐&quot;蹇界暐鏈鏇存柊.</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermExternalEditor</name>
+ <message>
+ <source>OK</source>
+ <translation>纭</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>鍙栨秷</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermFrame</name>
+ <message>
+ <source>Cascade</source>
+ <translation type="obsolete">灞傚彔</translation>
+ </message>
+ <message>
+ <source>FQTerm will keep running in the system tray.
+To terminate the program, choose exit in the tray menu.</source>
+ <translation>FQTerm宸茬粡鏈灏忓寲鑷崇郴缁熸墭鐩.</translation>
+ </message>
+ <message>
+ <source>Tile</source>
+ <translation type="obsolete">骞抽摵</translation>
+ </message>
+ <message>
+ <source>Main Window</source>
+ <translation>涓荤獥鍙</translation>
+ </message>
+ <message>
+ <source>Quick Login</source>
+ <translation>蹇熻繛鎺</translation>
+ </message>
+ <message>
+ <source>This will take effect after restart,
+please close all windows and restart.</source>
+ <translation type="obsolete">鎮ㄧ殑璁剧疆灏嗗湪閲嶆柊鍚姩绋嬪簭鍚庣敓鏁,
+璇峰叧闂墍鏈夌獥鍙e悗閲嶅惎绋嬪簭.</translation>
+ </message>
+ <message>
+ <source>Disconnect</source>
+ <translation type="obsolete">鏂紑杩炴帴</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>鏂囦欢(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Edit</source>
+ <translation>缂栬緫(&amp;E)</translation>
+ </message>
+ <message>
+ <source>Control sequence in clipboar&amp;d</source>
+ <translation>鍓创鏉夸腑鐨勬帶鍒跺簭鍒(&amp;d)</translation>
+ </message>
+ <message>
+ <source>Clipboard &amp;encoding</source>
+ <translation type="obsolete">鍓创鏉跨紪鐮(&amp;e)</translation>
+ </message>
+ <message>
+ <source>&amp;GBK</source>
+ <translation type="obsolete">&amp;GBK</translation>
+ </message>
+ <message>
+ <source>&amp;Big5</source>
+ <translation type="obsolete">&amp;Big5</translation>
+ </message>
+ <message>
+ <source>&amp;View</source>
+ <translation>瑙嗗浘(&amp;V)</translation>
+ </message>
+ <message>
+ <source>&amp;Font</source>
+ <translation>瀛椾綋(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Color</source>
+ <translation type="obsolete">棰滆壊(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Language</source>
+ <translation>璇█(&amp;L)</translation>
+ </message>
+ <message>
+ <source>&amp;English</source>
+ <translation type="obsolete">&amp;English</translation>
+ </message>
+ <message>
+ <source>&amp;Simplified Chinese</source>
+ <translation type="obsolete">绠浣撲腑鏂(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Traditional Chinese</source>
+ <translation type="obsolete">绻侀珨涓枃(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;Themes</source>
+ <translation>涓婚(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;ScrollBar</source>
+ <translation>婊氬姩鏉(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Option</source>
+ <translation>閫夐」(&amp;O)</translation>
+ </message>
+ <message>
+ <source>&amp;Special</source>
+ <translation>鐗规畩(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Scrip&amp;t</source>
+ <translation>鑴氭湰(&amp;t)</translation>
+ </message>
+ <message>
+ <source>&amp;Windows</source>
+ <translation>绐楀彛(&amp;W)</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>甯姪(&amp;H)</translation>
+ </message>
+ <message>
+ <source>Key Setup</source>
+ <translation>鑷畾涔夋寜閿粍鍚</translation>
+ </message>
+ <message>
+ <source>Show</source>
+ <translation>鏄剧ず</translation>
+ </message>
+ <message>
+ <source>Hide</source>
+ <translation>闅愯棌</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>鍏充簬</translation>
+ </message>
+ <message>
+ <source>Exit</source>
+ <translation>閫鍑</translation>
+ </message>
+ <message>
+ <source>Sorry, image viewer is not supported currently.</source>
+ <translation type="obsolete">瀵逛笉璧,鍥惧儚棰勮鍣ㄤ粛澶勪簬寮鍙戜腑.</translation>
+ </message>
+ <message>
+ <source>FQTerm&apos;s &amp;Homepage</source>
+ <translation type="obsolete">涓婚〉(&amp;H)</translation>
+ </message>
+ <message>
+ <source>FQTerm</source>
+ <translation>FQTerm</translation>
+ </message>
+ <message>
+ <source>Alt</source>
+ <translation>Alt</translation>
+ </message>
+ <message>
+ <source>Alt+Right</source>
+ <translation type="obsolete">Alt+Right</translation>
+ </message>
+ <message>
+ <source>Alt+Left</source>
+ <translation type="obsolete">Alt+Left</translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt</source>
+ <translation>Ctrl+Alt</translation>
+ </message>
+ <message>
+ <source>F2</source>
+ <translation type="obsolete">F2</translation>
+ </message>
+ <message>
+ <source>F3</source>
+ <translation type="obsolete">F3</translation>
+ </message>
+ <message>
+ <source>Ctrl+Insert</source>
+ <translation type="obsolete">Ctrl+Insert</translation>
+ </message>
+ <message>
+ <source>Shift+Insert</source>
+ <translation type="obsolete">Shift+Insert</translation>
+ </message>
+ <message>
+ <source>F5</source>
+ <translation type="obsolete">F5</translation>
+ </message>
+ <message>
+ <source>F6</source>
+ <translation type="obsolete">F6</translation>
+ </message>
+ <message>
+ <source>F12</source>
+ <translation type="obsolete">F12</translation>
+ </message>
+ <message>
+ <source>F9</source>
+ <translation type="obsolete">F9</translation>
+ </message>
+ <message>
+ <source>F10</source>
+ <translation type="obsolete">F10</translation>
+ </message>
+ <message>
+ <source>F7</source>
+ <translation type="obsolete">F7</translation>
+ </message>
+ <message>
+ <source>F8</source>
+ <translation type="obsolete">F8</translation>
+ </message>
+ <message>
+ <source>F1</source>
+ <translation type="obsolete">F1</translation>
+ </message>
+ <message>
+ <source>Ctrl</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Ctrl+Meta</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Set Terminal Fonts</source>
+ <translation>璁剧疆缁堢瀛椾綋</translation>
+ </message>
+ <message>
+ <source> Font</source>
+ <translation type="obsolete">瀛椾綋</translation>
+ </message>
+ <message>
+ <source>Searc&amp;h Engine</source>
+ <translation>鎼滅储寮曟搸(&amp;h)</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermScreen</name>
+ <message>
+ <source>Shift+PageUp</source>
+ <translation>Shift+PageUp</translation>
+ </message>
+ <message>
+ <source>Shift+PageDown</source>
+ <translation>Shift+PageDown</translation>
+ </message>
+ <message>
+ <source>Shift+Up</source>
+ <translation>Shift+Up</translation>
+ </message>
+ <message>
+ <source>Shift+Down</source>
+ <translation>Shift+Down</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermScriptEngine</name>
+ <message>
+ <source>FQTerm</source>
+ <translation>FQTerm</translation>
+ </message>
+ <message>
+ <source>Unable to open the script file
+</source>
+ <translation>鏃犳硶鎵撳紑鑴氭湰鏂囦欢</translation>
+ </message>
+ <message>
+ <source>uncaught exception at line </source>
+ <translation>鏈崟鑾风殑寮傚父锛屾墍鍦ㄨ鏁帮細</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermWindow</name>
+ <message>
+ <source>Not Connected</source>
+ <translation type="obsolete">鏈繛鎺</translation>
+ </message>
+ <message>
+ <source>Preview image</source>
+ <translation>棰勮鍥剧墖</translation>
+ </message>
+ <message>
+ <source>Save As...</source>
+ <translation>淇濆瓨涓...</translation>
+ </message>
+ <message>
+ <source>Open link</source>
+ <translation>鎵撳紑閾炬帴</translation>
+ </message>
+ <message>
+ <source>Copy link address</source>
+ <translation>澶嶅埗閾炬帴鍦板潃</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>澶嶅埗</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>绮樿创</translation>
+ </message>
+ <message>
+ <source>Copy Article</source>
+ <translation>鍏ㄦ枃涓嬭浇</translation>
+ </message>
+ <message>
+ <source>Font</source>
+ <translation>瀛椾綋</translation>
+ </message>
+ <message>
+ <source>Setting</source>
+ <translation>璁剧疆</translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translation>棰滆壊</translation>
+ </message>
+ <message>
+ <source>Open URL</source>
+ <translation type="obsolete">鎵撳紑URL</translation>
+ </message>
+ <message>
+ <source>resolving host name</source>
+ <translation type="obsolete">瑙f瀽涓绘満鍚嶇О</translation>
+ </message>
+ <message>
+ <source>host found</source>
+ <translation type="obsolete">鎵惧埌涓绘満</translation>
+ </message>
+ <message>
+ <source>host not found</source>
+ <translation type="obsolete">涓绘満鏈壘鍒</translation>
+ </message>
+ <message>
+ <source>connecting...</source>
+ <translation type="obsolete">杩炴帴涓...</translation>
+ </message>
+ <message>
+ <source>connected</source>
+ <translation type="obsolete">宸茶繛鎺</translation>
+ </message>
+ <message>
+ <source>connected to proxy</source>
+ <translation type="obsolete">宸茶繛鎺ヨ嚦浠g悊</translation>
+ </message>
+ <message>
+ <source>proxy authentation</source>
+ <translation type="obsolete">浠g悊鏉冮檺</translation>
+ </message>
+ <message>
+ <source>proxy failed</source>
+ <translation type="obsolete">浠g悊澶辫触</translation>
+ </message>
+ <message>
+ <source>connection refused</source>
+ <translation type="obsolete">杩炴帴琚嫆缁</translation>
+ </message>
+ <message>
+ <source>error when reading from server</source>
+ <translation type="obsolete">璇诲彇鏈嶅姟鍣ㄦ暟鎹け璐</translation>
+ </message>
+ <message>
+ <source>connection closed</source>
+ <translation type="obsolete">杩炴帴宸插叧闂</translation>
+ </message>
+ <message>
+ <source>connection close finished</source>
+ <translation type="obsolete">瀹屾垚鍏抽棴杩炴帴</translation>
+ </message>
+ <message>
+ <source>connect to host via proxy</source>
+ <translation type="obsolete">閫氳繃浠g悊杩炴帴涓绘満</translation>
+ </message>
+ <message>
+ <source>error in gethostbyname</source>
+ <translation type="obsolete">gethostbyname閿欒</translation>
+ </message>
+ <message>
+ <source>error in startup winsock</source>
+ <translation type="obsolete">winsock鍚姩閿欒</translation>
+ </message>
+ <message>
+ <source>error in connection</source>
+ <translation type="obsolete">杩炴帴閿欒</translation>
+ </message>
+ <message>
+ <source>error in proxy</source>
+ <translation type="obsolete">浠g悊閿欒</translation>
+ </message>
+ <message>
+ <source>time out!</source>
+ <translation type="obsolete">瓒呮椂!</translation>
+ </message>
+ <message>
+ <source>time out after trying %1 times</source>
+ <translation type="obsolete">瓒呮椂,宸查噸璇:%1娆</translation>
+ </message>
+ <message>
+ <source>canceled by remote peer %1</source>
+ <translation type="obsolete">宸茶%1鍙栨秷</translation>
+ </message>
+ <message>
+ <source>unhandled header %1 at state %2</source>
+ <translation type="obsolete">鏈鐞嗙殑澶撮儴%1,鐘舵%2</translation>
+ </message>
+ <message>
+ <source>msg from remote peer: %1</source>
+ <translation type="obsolete">淇℃伅:%1</translation>
+ </message>
+ <message>
+ <source>data errors %1</source>
+ <translation type="obsolete">鏁版嵁閿欒%1</translation>
+ </message>
+ <message>
+ <source>falied to write file</source>
+ <translation type="obsolete">鍐欐枃浠跺け璐</translation>
+ </message>
+ <message>
+ <source>skipping file %1</source>
+ <translation type="obsolete">璺宠繃鏂囦欢%1</translation>
+ </message>
+ <message>
+ <source>Ctrl+Insert</source>
+ <translation>Ctrl+Insert</translation>
+ </message>
+ <message>
+ <source>Shift+Insert</source>
+ <translation>Shift+Insert</translation>
+ </message>
+ <message>
+ <source>F9</source>
+ <translation type="obsolete">F9</translation>
+ </message>
+ <message>
+ <source>FQTerm</source>
+ <translation>FQTerm</translation>
+ </message>
+ <message>
+ <source>Connected,Do you still want to exit?</source>
+ <translation type="obsolete">宸茶繛鎺, 纭閫鍑?</translation>
+ </message>
+ <message>
+ <source>UserCancel</source>
+ <translation type="obsolete">鐢ㄦ埛鍙栨秷</translation>
+ </message>
+ <message>
+ <source>Session error</source>
+ <translation>Session 閿欒</translation>
+ </message>
+ <message>
+ <source>Not connected</source>
+ <translation>鏈繛鎺</translation>
+ </message>
+ <message>
+ <source>Ctrl+C</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Ctrl+V</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source> Font</source>
+ <translation>瀛椾綋</translation>
+ </message>
+ <message>
+ <source>Still connected, do you really want to exit?</source>
+ <translation>宸茶繛鎺, 纭閫鍑?</translation>
+ </message>
+ <message>
+ <source>Time out!</source>
+ <translation>瓒呮椂!</translation>
+ </message>
+ <message>
+ <source>Time out after trying %1 times</source>
+ <translation>瓒呮椂,宸查噸璇:%1娆</translation>
+ </message>
+ <message>
+ <source>Canceled by remote peer %1</source>
+ <translation>宸茶%1鍙栨秷</translation>
+ </message>
+ <message>
+ <source>Unhandled header %1 at state %2</source>
+ <translation>鏈鐞嗙殑澶撮儴%1,鐘舵%2</translation>
+ </message>
+ <message>
+ <source>Msg from remote peer: %1</source>
+ <translation>淇℃伅:%1</translation>
+ </message>
+ <message>
+ <source>Data errors %1</source>
+ <translation>鏁版嵁閿欒%1</translation>
+ </message>
+ <message>
+ <source>Falied to write file</source>
+ <translation>鍐欐枃浠跺け璐</translation>
+ </message>
+ <message>
+ <source>Skipping file %1</source>
+ <translation>璺宠繃鏂囦欢%1</translation>
+ </message>
+ <message>
+ <source>Resolving host name</source>
+ <translation>瑙f瀽涓绘満鍚嶇О</translation>
+ </message>
+ <message>
+ <source>Host found</source>
+ <translation>鎵惧埌涓绘満</translation>
+ </message>
+ <message>
+ <source>Host not found</source>
+ <translation>涓绘満鏈壘鍒</translation>
+ </message>
+ <message>
+ <source>Connecting...</source>
+ <translation>杩炴帴涓...</translation>
+ </message>
+ <message>
+ <source>Connected</source>
+ <translation>宸茶繛鎺</translation>
+ </message>
+ <message>
+ <source>Connected to proxy</source>
+ <translation>宸茶繛鎺ヨ嚦浠g悊</translation>
+ </message>
+ <message>
+ <source>Proxy authentation</source>
+ <translation>浠g悊鏉冮檺</translation>
+ </message>
+ <message>
+ <source>Proxy failed</source>
+ <translation>浠g悊澶辫触</translation>
+ </message>
+ <message>
+ <source>Connection refused</source>
+ <translation>杩炴帴琚嫆缁</translation>
+ </message>
+ <message>
+ <source>Error when reading from server</source>
+ <translation>璇诲彇鏈嶅姟鍣ㄦ暟鎹け璐</translation>
+ </message>
+ <message>
+ <source>Connection closed</source>
+ <translation>杩炴帴宸插叧闂</translation>
+ </message>
+ <message>
+ <source>Connection close finished</source>
+ <translation>瀹屾垚鍏抽棴杩炴帴</translation>
+ </message>
+ <message>
+ <source>Connect to host via proxy</source>
+ <translation>閫氳繃浠g悊杩炴帴涓绘満</translation>
+ </message>
+ <message>
+ <source>Error in gethostbyname</source>
+ <translation>gethostbyname閿欒</translation>
+ </message>
+ <message>
+ <source>Error in startup winsock</source>
+ <translation>winsock鍚姩閿欒</translation>
+ </message>
+ <message>
+ <source>Error in connection</source>
+ <translation>杩炴帴閿欒</translation>
+ </message>
+ <message>
+ <source>Error in proxy</source>
+ <translation>浠g悊閿欒</translation>
+ </message>
+ <message>
+ <source>User Cancel</source>
+ <translation>鐢ㄦ埛鍙栨秷</translation>
+ </message>
+ <message>
+ <source>URL Dialog</source>
+ <translation>鎵撳紑URL</translation>
+ </message>
+ <message>
+ <source>&amp;Open URL</source>
+ <translation>鎵撳紑URL(&amp;O)</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>鍙栨秷(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Waiting header...</source>
+ <translation>鑾峰彇鏂囦欢澶...</translation>
+ </message>
+ <message>
+ <source>Open Selected As Url</source>
+ <translation>灏嗛変腑鏂囧瓧浣滀负URL鎵撳紑</translation>
+ </message>
+ <message>
+ <source>Google Selected Text!</source>
+ <translation type="obsolete">Google閫変腑鏂囧瓧!</translation>
+ </message>
+ <message>
+ <source>Font Selector</source>
+ <translation>瀛椾綋閫夋嫨</translation>
+ </message>
+ <message>
+ <source>IP database file does NOT exist</source>
+ <translation>IP鏁版嵁搴撴枃浠朵笉瀛樺湪</translation>
+ </message>
+ <message>
+ <source>Invalid IP</source>
+ <translation>闈炴硶IP</translation>
+ </message>
+ <message>
+ <source>Share Selected Text and URL!</source>
+ <translation>鍒嗕韩閫変腑鏂囨湰鍙婇摼鎺!</translation>
+ </message>
+ <message>
+ <source>Search Selected Text!</source>
+ <translation>鎼滅储閫変腑鏂囨湰!</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermWndMgr</name>
+ <message>
+ <source>FQTerm</source>
+ <translation>FQTerm</translation>
+ </message>
+ <message>
+ <source>Still connected, do you really want to exit?</source>
+ <translation>宸茶繛鎺, 纭閫鍑?</translation>
+ </message>
+</context>
+</TS>
diff --git a/res/dict/protocol_zh_CN.ts b/res/dict/protocol_zh_CN.ts
new file mode 100644
index 0000000..f205ada
--- /dev/null
+++ b/res/dict/protocol_zh_CN.ts
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+ <name>FQTerm::FQTermSSH1Channel</name>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_channel.cpp" line="88"/>
+ <source>Server refused pty allocation!</source>
+ <translation>鏈嶅姟鍣ㄦ嫆缁漰ty鍒嗛厤!</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermSSH1Kex</name>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_kex.cpp" line="72"/>
+ <source>Kex exchange failed!</source>
+ <translation>Kex浜ゆ崲澶辫触!</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_kex.cpp" line="91"/>
+ <source>startKex: First packet is not public key</source>
+ <translation>startKex: 绗竴涓寘闈炲叕閽</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermSSH1PacketReceiver</name>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh1_packet.cpp" line="95"/>
+ <source>parseData: The packet is too big</source>
+ <translation>瑙f瀽鏁版嵁: 鍖呰繃澶</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh1_packet.cpp" line="132"/>
+ <source>parseData: bad CRC32</source>
+ <translation>瑙f瀽鏁版嵁: bad CRC32</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermSSH1PasswdAuth</name>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_auth.cpp" line="62"/>
+ <source>UserCancel</source>
+ <translation>鐢ㄦ埛鍙栨秷</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_auth.cpp" line="85"/>
+ <source>Strange response from server</source>
+ <translation>鏈瘑鍒殑鏈嶅姟鍣ㄥ搷搴</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_auth.cpp" line="93"/>
+ <source>User canceled</source>
+ <translation>鐢ㄦ埛鍙栨秷</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermSSH2Channel</name>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_channel.cpp" line="240"/>
+ <source>Server refuces to open a channel.</source>
+ <translation>鏈嶅姟鍣ㄦ嫆缁濆紑鍚氶亾.</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_channel.cpp" line="245"/>
+ <source>Server error when opening a channel.</source>
+ <translation>寮鍚氶亾鏃舵湇鍔¢敊璇.</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_channel.cpp" line="288"/>
+ <source>Server refused pty allocation!</source>
+ <translation>鏈嶅姟鍣ㄦ嫆缁漰ty鍒嗛厤!</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_channel.cpp" line="363"/>
+ <source>Channel closed by the server.</source>
+ <translation>鏈嶅姟鍣ㄥ叧闂氶亾.</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_channel.cpp" line="424"/>
+ <source>Can&apos;t open a shell.</source>
+ <translation>鏃犳硶寮鍚痵hell.</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_channel.cpp" line="427"/>
+ <source>Unsupported packet.</source>
+ <translation>涓嶆敮鎸佺殑鍖呮牸寮.</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermSSH2Kex</name>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh2_kex.cpp" line="120"/>
+ <source>Key exchange failed!</source>
+ <translation>Key浜ゆ崲澶辫触!</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh2_kex.cpp" line="139"/>
+ <source>startKex: First packet is not SSH_MSG_KEXINIT</source>
+ <translation>startKex: 绗竴涓寘闈濻SH_MSG_KEXINIT</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh2_kex.cpp" line="210"/>
+ <source>Expect a SSH_MSG_KEXDH_REPLY packet</source>
+ <translation>鏈熸湜寰楀埌SSH_MSG_KEXDH_REPLY</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh2_kex.cpp" line="298"/>
+ <source>Expect a SSH_MSG_NEWKEYS packet</source>
+ <translation>鏈熸湜寰楀埌SSH_MSG_NEWKEYS</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermSSH2PacketReceiver</name>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh2_packet.cpp" line="188"/>
+ <source>parseData: packet too big</source>
+ <translation>瑙f瀽鏁版嵁: 鍖呰繃澶</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermSSH2PasswdAuth</name>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_auth.cpp" line="166"/>
+ <source>Authentication failed!</source>
+ <translation>韬唤楠岃瘉澶辫触!</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_auth.cpp" line="169"/>
+ <source>Unexpected packet</source>
+ <translation>鏈湡鏈涚殑鍖</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_auth.cpp" line="177"/>
+ <source>Expect a SSH2_MSG_SERVICE_ACCEPT packet</source>
+ <translation>鏈熸湜寰楀埌 SSH_2_MSG_SERVICE_ACCEPT</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_auth.cpp" line="184"/>
+ <source>Error when sending username and password.</source>
+ <translation>鍙戦佺敤鎴峰悕瀵嗙爜閿欒.</translation>
+ </message>
+ <message>
+ <location filename="../../src/protocol/internal/fqterm_ssh_auth.cpp" line="207"/>
+ <source>UserCancel</source>
+ <translation>鐢ㄦ埛鍙栨秷</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermSSHSocket</name>
+ <message>
+ <location filename="../../src/protocol/fqterm_ssh_socket.cpp" line="222"/>
+ <source>Unknown SSH version. Check if you set the right server and port.</source>
+ <translation>鏈煡鐨凷SH鐗堟湰. 妫鏌ユ湇鍔″櫒鍙婄鍙h缃.</translation>
+ </message>
+</context>
+</TS>
diff --git a/res/dict/ui_zh_CN.ts b/res/dict/ui_zh_CN.ts
new file mode 100644
index 0000000..d6ff29b
--- /dev/null
+++ b/res/dict/ui_zh_CN.ts
@@ -0,0 +1,1706 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh">
+<defaultcodec>UTF-8</defaultcodec>
+<context>
+ <name>@default</name>
+ <message>
+ <source>No sound file</source>
+ <translation type="obsolete">鏈彂鐜板0闊虫枃浠</translation>
+ </message>
+ <message>
+ <source>You have to select a file to test the sound</source>
+ <translation type="obsolete">蹇呴』閫夋嫨涓涓0闊虫枃浠</translation>
+ </message>
+ <message>
+ <source>&amp;Ok</source>
+ <translation type="obsolete">纭畾(&amp;O)</translation>
+ </message>
+ <message>
+ <source>No player</source>
+ <translation type="obsolete">鏈彂鐜版挱鏀惧櫒</translation>
+ </message>
+ <message>
+ <source>You have to specify an external player</source>
+ <translation type="obsolete">蹇呴』鎸囧畾涓涓閮ㄦ挱鏀惧櫒</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermCanvas</name>
+ <message>
+ <source>zoom 1:1</source>
+ <translation>缂╂斁涓 1:1</translation>
+ </message>
+ <message>
+ <source>fit window</source>
+ <translation type="obsolete">閫傚簲绐楀彛</translation>
+ </message>
+ <message>
+ <source>zoom in</source>
+ <translation>鏀惧ぇ</translation>
+ </message>
+ <message>
+ <source>zoom out</source>
+ <translation>缂╁皬</translation>
+ </message>
+ <message>
+ <source>fullscreen</source>
+ <translation>鍏ㄥ睆</translation>
+ </message>
+ <message>
+ <source>rotate CW 90</source>
+ <translation>椤烘椂閽堟棆杞90搴</translation>
+ </message>
+ <message>
+ <source>rotate CCW 90</source>
+ <translation>閫嗘椂閽堟棆杞90搴</translation>
+ </message>
+ <message>
+ <source>save as</source>
+ <translation>鍙﹀瓨涓</translation>
+ </message>
+ <message>
+ <source>copy to</source>
+ <translation>澶嶅埗鍒</translation>
+ </message>
+ <message>
+ <source>silent copy</source>
+ <translation>淇濆瓨</translation>
+ </message>
+ <message>
+ <source>delete</source>
+ <translation>鍒犻櫎</translation>
+ </message>
+ <message>
+ <source>exit</source>
+ <translation>閫鍑</translation>
+ </message>
+ <message>
+ <source>Ctrl+Z</source>
+ <translation>Ctrl+Z</translation>
+ </message>
+ <message>
+ <source>adjust size</source>
+ <translation>璋冩暣灏哄</translation>
+ </message>
+ <message>
+ <source>Ctrl+X</source>
+ <translation>Ctrl+X</translation>
+ </message>
+ <message>
+ <source>Ctrl+=</source>
+ <translation>Ctrl+=</translation>
+ </message>
+ <message>
+ <source>Ctrl+-</source>
+ <translation>Ctrl+-</translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translation>Ctrl+F</translation>
+ </message>
+ <message>
+ <source>Ctrl+]</source>
+ <translation>Ctrl+]</translation>
+ </message>
+ <message>
+ <source>Ctrl+[</source>
+ <translation>Ctrl+[</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>Ctrl+C</source>
+ <translation>Ctrl+C</translation>
+ </message>
+ <message>
+ <source>Shift+S</source>
+ <translation>Shift+S</translation>
+ </message>
+ <message>
+ <source>Ctrl+D</source>
+ <translation>Ctrl+D</translation>
+ </message>
+ <message>
+ <source>Ctrl+Q</source>
+ <translation>Ctrl+Q</translation>
+ </message>
+ <message>
+ <source>Open Dir</source>
+ <translation>鎵撳紑鏂囦欢澶</translation>
+ </message>
+ <message>
+ <source>show Fit</source>
+ <translation>閫傚悎绐楀彛</translation>
+ </message>
+ <message>
+ <source>show MaxFit</source>
+ <translation>閫傚悎绐楀彛(鎷変几)</translation>
+ </message>
+ <message>
+ <source>show Origin</source>
+ <translation>鍘熷澶у皬</translation>
+ </message>
+ <message>
+ <source>show Stretch</source>
+ <translation>鎷変几</translation>
+ </message>
+ <message>
+ <source>Adjust Mode</source>
+ <translation>璋冩暣妯″紡</translation>
+ </message>
+ <message>
+ <source>No Preview Available</source>
+ <translation>娌℃湁棰勮</translation>
+ </message>
+ <message>
+ <source>Failed to save file</source>
+ <translation>淇濆瓨鏂囦欢澶辫触</translation>
+ </message>
+ <message>
+ <source>Cant save file, maybe format not supported</source>
+ <translation>鏃犳硶淇濆瓨鏂囦欢锛屽彲鑳戒负涓嶆敮鎸佺殑绫诲瀷</translation>
+ </message>
+ <message>
+ <source>play gif</source>
+ <translation>鎾斁gif</translation>
+ </message>
+ <message>
+ <source>Ctrl+/</source>
+ <translation>Ctrl+/</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermImage</name>
+ <message>
+ <source>Hide &amp;Browser</source>
+ <translation type="obsolete">闅愯棌娴忚鍣(&amp;B)</translation>
+ </message>
+ <message>
+ <source>Show &amp;Browser</source>
+ <translation type="obsolete">鏄剧ず娴忚鍣(&amp;B)</translation>
+ </message>
+ <message>
+ <source>Hide &amp;List</source>
+ <translation type="obsolete">闅愯棌鍒楄〃(&amp;L)</translation>
+ </message>
+ <message>
+ <source>Show &amp;List</source>
+ <translation type="obsolete">鏄剧ず鍒楄〃(&amp;L)</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermImageFlow</name>
+ <message>
+ <source>Close</source>
+ <translation>鍏抽棴</translation>
+ </message>
+ <message>
+ <source>Trash All</source>
+ <translation>鍏ㄩ儴鍒犻櫎</translation>
+ </message>
+ <message>
+ <source>Like </source>
+ <translation>Like </translation>
+ </message>
+ <message>
+ <source>New </source>
+ <translation>鏂板缓</translation>
+ </message>
+ <message>
+ <source>Trash </source>
+ <translation>Trash </translation>
+ </message>
+ <message>
+ <source>Recover </source>
+ <translation>鎭㈠</translation>
+ </message>
+ <message>
+ <source>Title </source>
+ <translation>棰樼洰</translation>
+ </message>
+ <message>
+ <source>Save your likes under</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Recover</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>鍒犻櫎</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermImageOrigin</name>
+ <message>
+ <source>FQTerm Image Viewer</source>
+ <translation>FQTerm 鍥惧儚娴忚鍣</translation>
+ </message>
+ <message>
+ <source>Sort by name</source>
+ <translation>鏍规嵁鏂囦欢鍚嶆帓搴</translation>
+ </message>
+ <message>
+ <source>Sort by time</source>
+ <translation>鏍规嵁鍒涘缓鏃堕棿鎺掑簭</translation>
+ </message>
+ <message>
+ <source>Sort by size</source>
+ <translation>鏍规嵁鏂囦欢澶у皬鎺掑簭</translation>
+ </message>
+ <message>
+ <source>Sort by type</source>
+ <translation>鏍规嵁鏂囦欢绫诲瀷鎺掑簭</translation>
+ </message>
+ <message>
+ <source>Previous</source>
+ <translation>涓婁竴涓</translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translation>涓嬩竴涓</translation>
+ </message>
+ <message>
+ <source>Comment : </source>
+ <translation>璇勮:</translation>
+ </message>
+ <message>
+ <source>Model</source>
+ <translation>鍨嬪彿</translation>
+ </message>
+ <message>
+ <source>ExposureTime</source>
+ <translation>鏇濆厜鏃堕棿</translation>
+ </message>
+ <message>
+ <source>FNumber</source>
+ <translation>F鍊</translation>
+ </message>
+ <message>
+ <source>ISO</source>
+ <translation>ISO</translation>
+ </message>
+ <message>
+ <source>FocalLength</source>
+ <translation>鐒﹁窛</translation>
+ </message>
+ <message>
+ <source>MeteringMode</source>
+ <translation>娴嬭窛妯″紡</translation>
+ </message>
+ <message>
+ <source>ExposureBias</source>
+ <translation>鏇濆厜琛ュ伩</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::FQTermShortcutDialog</name>
+ <message>
+ <source>Shortcut Setting</source>
+ <translation>蹇嵎閿缃</translation>
+ </message>
+ <message>
+ <source>Description</source>
+ <translation>鎻忚堪</translation>
+ </message>
+ <message>
+ <source>Shortcut</source>
+ <translation>蹇嵎閿</translation>
+ </message>
+ <message>
+ <source>default</source>
+ <translation>缂虹渷</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>纭畾</translation>
+ </message>
+ <message>
+ <source>Apply</source>
+ <translation>搴旂敤</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>鍙栨秷</translation>
+ </message>
+ <message>
+ <source>Reset All</source>
+ <translation>閲嶇疆</translation>
+ </message>
+ <message>
+ <source>Press key/combines on Shortcut column.
+Note Del is reserved for clear shortcut setting.</source>
+ <translation>鍦ㄥ揩鎹烽敭鍒楁寜鐩稿簲鐨勮嚜瀹氫箟蹇嵎閿
+鎸塂el鍙互鍒犻櫎蹇嵎閿.</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::ImageFlow</name>
+ <message>
+ <source>Tagged as </source>
+ <translation>Tagged as </translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::ImageViewerDirModel</name>
+ <message>
+ <source>Image Preview</source>
+ <translation>鍥惧儚棰勮</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::ProgressBar</name>
+ <message>
+ <source>Done</source>
+ <translation>瀹屾垚</translation>
+ </message>
+ <message>
+ <source>Aborted</source>
+ <translation>涓柇</translation>
+ </message>
+ <message>
+ <source>Aborting...</source>
+ <translation>姝e湪涓柇...</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::StatusBar</name>
+ <message>
+ <source>Abort all background-operations</source>
+ <translation>鍙栨秷鎵鏈夊悗鍙版搷浣</translation>
+ </message>
+ <message>
+ <source>Show progress detail</source>
+ <translation>缁嗚妭</translation>
+ </message>
+ <message>
+ <source>Multiple background-tasks running</source>
+ <translation>澶氫换鍔″悗鍙拌繍琛屼腑</translation>
+ </message>
+ <message>
+ <source>Aborting all jobs...</source>
+ <translation>鍙栨秷鎵鏈変换鍔...</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::addrDialog</name>
+ <message>
+ <source>Cancel</source>
+ <translation type="obsolete">鍙栨秷</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation type="obsolete">纭畾</translation>
+ </message>
+ <message>
+ <source>Setting</source>
+ <translation type="obsolete">璁剧疆</translation>
+ </message>
+ <message>
+ <source>AddressBook</source>
+ <translation type="obsolete">鍦板潃绨</translation>
+ </message>
+ <message>
+ <source>Font Selector</source>
+ <translation>閫夋嫨鏂囧瓧</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::quickDialog</name>
+ <message>
+ <source>Add To AddressBook</source>
+ <translation>鍔犲叆鍦板潃绨</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::siteDialog</name>
+ <message>
+ <source>Warning</source>
+ <translation>璀﹀憡</translation>
+ </message>
+ <message>
+ <source>The site configuration has been changed.
+To save, press Yes.
+To discard, press No.
+To continue editing, press Cancel</source>
+ <translation>绔欑偣璁剧疆宸叉敼鍙.
+鐐瑰嚮Yes淇濆瓨璁剧疆
+鐐瑰嚮No淇濈暀鍘熻缃
+缁х画缂栬緫,鐐瑰嚮Cancel</translation>
+ </message>
+ <message>
+ <source>Are you sure to DELETE this site?</source>
+ <translation>纭鍒犻櫎鍚?</translation>
+ </message>
+</context>
+<context>
+ <name>FQTerm::soundConf</name>
+ <message>
+ <source>No such output driver</source>
+ <translation type="obsolete">娌℃湁椹卞姩</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation type="obsolete">纭(&amp;O)</translation>
+ </message>
+ <message>
+ <source>No sound file</source>
+ <translation>鏈彂鐜板0闊虫枃浠</translation>
+ </message>
+ <message>
+ <source>You have to select a file to test the sound</source>
+ <translation>蹇呴』閫夋嫨涓涓0闊虫枃浠</translation>
+ </message>
+ <message>
+ <source>&amp;Ok</source>
+ <translation>纭畾(&amp;O)</translation>
+ </message>
+ <message>
+ <source>No player</source>
+ <translation>鏈彂鐜版挱鏀惧櫒</translation>
+ </message>
+ <message>
+ <source>You have to specify an external player</source>
+ <translation>蹇呴』鎸囧畾涓涓閮ㄦ挱鏀惧櫒</translation>
+ </message>
+</context>
+<context>
+ <name>FQTermImage</name>
+ <message>
+ <source>Form1</source>
+ <translation type="obsolete">绐椾綋1</translation>
+ </message>
+ <message>
+ <source>&amp;Previous</source>
+ <translation type="obsolete">涓婁竴涓(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Alt+P</source>
+ <translation type="obsolete">Alt+P</translation>
+ </message>
+ <message>
+ <source>&amp;Browser</source>
+ <translation type="obsolete">娴忚鍣(&amp;B)</translation>
+ </message>
+ <message>
+ <source>Alt+B</source>
+ <translation type="obsolete">Alt+B</translation>
+ </message>
+ <message>
+ <source>&amp;Next</source>
+ <translation type="obsolete">涓嬩竴涓(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Alt+N</source>
+ <translation type="obsolete">Alt+N</translation>
+ </message>
+ <message>
+ <source>ImageViewer</source>
+ <translation type="obsolete">鍥惧儚棰勮鍣</translation>
+ </message>
+ <message>
+ <source>&amp;List</source>
+ <translation type="obsolete">鍒楄〃(&amp;L)</translation>
+ </message>
+</context>
+<context>
+ <name>IPLookupDialog</name>
+ <message>
+ <source>IP Lookup</source>
+ <translation>鏌ヨIP</translation>
+ </message>
+ <message>
+ <source>IP Address</source>
+ <translation>IP鍦板潃</translation>
+ </message>
+ <message>
+ <source>Physical Address</source>
+ <translation>瀹為檯鍦板潃</translation>
+ </message>
+ <message>
+ <source>Lookup</source>
+ <translation>鏌ヨ</translation>
+ </message>
+ <message>
+ <source>Finished</source>
+ <translation>瀹屾垚</translation>
+ </message>
+ <message>
+ <source>IP database file does NOT exist</source>
+ <translation>IP鏁版嵁搴撴枃浠朵笉瀛樺湪</translation>
+ </message>
+ <message>
+ <source>Invalid IP</source>
+ <translation>闈炴硶IP</translation>
+ </message>
+</context>
+<context>
+ <name>SSHLogin</name>
+ <message>
+ <source>Login</source>
+ <translation>鐧诲綍</translation>
+ </message>
+ <message>
+ <source>Please enter your username and password</source>
+ <translation>璇疯緭鍏ヤ綘鐨勭敤鎴峰悕鍜屽瘑鐮</translation>
+ </message>
+ <message>
+ <source>UserName:</source>
+ <translation>鐢ㄦ埛鍚:</translation>
+ </message>
+ <message>
+ <source>Password:</source>
+ <translation>瀵嗙爜:</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>纭</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>鍙栨秷</translation>
+ </message>
+</context>
+<context>
+ <name>aboutDialog</name>
+ <message>
+ <source>About FQTerm</source>
+ <translation>鍏充簬</translation>
+ </message>
+ <message>
+ <source>FQTerm 0.5.0 (QT 4.1 based)</source>
+ <translation type="obsolete">FQTerm (鍩轰簬QT4.1)</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>鍏充簬</translation>
+ </message>
+ <message>
+ <source>FQTerm 2007</source>
+ <translation type="obsolete">FQTerm 2007</translation>
+ </message>
+ <message>
+ <source>Authors</source>
+ <translation>浣滆</translation>
+ </message>
+ <message>
+ <source>Credits</source>
+ <translation>鑷磋阿</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>鍏抽棴</translation>
+ </message>
+ <message>
+ <source>FQTerm</source>
+ <translation>FQTerm</translation>
+ </message>
+ <message>
+ <source>FQTerm
+
+http://code.google.com/p/fqterm</source>
+ <translation type="obsolete">FQTerm
+
+http://code.google.com/p/fqterm</translation>
+ </message>
+ <message>
+ <source>fqterm@gmail.com
+
+devilphoenix@newsmth</source>
+ <translation>fqterm@gmail.com
+
+devilphoenix@newsmth</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;SimSun&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="obsolete">&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;p, li { white-space: pre-wrap; }&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;SimSun&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;FQTerm&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://code.google.com/p/fqterm&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://code.google.com/p/fqterm&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;p, li { white-space: pre-wrap; }&lt;/style&gt;&lt;/head&gt;&lt;body&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;FQTerm&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://code.google.com/p/fqterm&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://code.google.com/p/fqterm&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;SimSun&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;SimSun&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>addrDialog</name>
+ <message>
+ <source>AddressBook</source>
+ <translation type="obsolete">鍦板潃绨</translation>
+ </message>
+ <message>
+ <source>Apply</source>
+ <translation type="obsolete">搴旂敤</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation type="obsolete">娣诲姞</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation type="obsolete">鍏抽棴</translation>
+ </message>
+ <message>
+ <source>Connect</source>
+ <translation type="obsolete">杩炴帴</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation type="obsolete">鍒犻櫎</translation>
+ </message>
+ <message>
+ <source>General</source>
+ <translation>閫氱敤灞炴</translation>
+ </message>
+ <message>
+ <source>Address</source>
+ <translation>鍦板潃</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <translation>绫诲瀷</translation>
+ </message>
+ <message>
+ <source>Auto Login</source>
+ <translation type="obsolete">鑷姩鐧诲綍</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>鍚嶇О</translation>
+ </message>
+ <message>
+ <source>BBS</source>
+ <translation>BBS</translation>
+ </message>
+ <message>
+ <source>*NIX</source>
+ <translation>*NIX</translation>
+ </message>
+ <message>
+ <source>Port</source>
+ <translation>绔彛</translation>
+ </message>
+ <message>
+ <source>Prelogin</source>
+ <translation>鐧诲綍鍓</translation>
+ </message>
+ <message>
+ <source>User</source>
+ <translation>鐢ㄦ埛鍚</translation>
+ </message>
+ <message>
+ <source>Password</source>
+ <translation>瀵嗙爜</translation>
+ </message>
+ <message>
+ <source>Postlogin</source>
+ <translation>鐧诲綍鍚</translation>
+ </message>
+ <message>
+ <source>Display</source>
+ <translation>鏄剧ず</translation>
+ </message>
+ <message>
+ <source>ANSI Color</source>
+ <translation>ANSI 棰滆壊</translation>
+ </message>
+ <message>
+ <source>Always Hightlight</source>
+ <translation>鎬绘槸楂樹寒</translation>
+ </message>
+ <message>
+ <source>Auto Select Font Size When Resize Window</source>
+ <translation type="obsolete">绐椾綋鍙樺寲鏃惰嚜鍔ㄨ皟鏁村瓧浣撳ぇ灏</translation>
+ </message>
+ <message>
+ <source>BBS Encoding</source>
+ <translation>BBS 缂栫爜</translation>
+ </message>
+ <message>
+ <source>GBK</source>
+ <translation>GBK</translation>
+ </message>
+ <message>
+ <source>BIG5</source>
+ <translation>BIG5</translation>
+ </message>
+ <message>
+ <source>Display Code</source>
+ <translation type="obsolete">鏄剧ず缂栫爜</translation>
+ </message>
+ <message>
+ <source>Font</source>
+ <translation>瀛椾綋</translation>
+ </message>
+ <message>
+ <source>Text Color</source>
+ <translation>鏂囧瓧棰滆壊</translation>
+ </message>
+ <message>
+ <source>Background</source>
+ <translation>鑳屾櫙</translation>
+ </message>
+ <message>
+ <source>Schema</source>
+ <translation type="obsolete">鍥捐〃</translation>
+ </message>
+ <message>
+ <source>TextLabel3</source>
+ <translation>鏂囨湰鏍囩3</translation>
+ </message>
+ <message>
+ <source>Terminal</source>
+ <translation>缁堢</translation>
+ </message>
+ <message>
+ <source>Columns</source>
+ <translation>鍒</translation>
+ </message>
+ <message>
+ <source>Term Type</source>
+ <translation>缁堢绫诲瀷</translation>
+ </message>
+ <message>
+ <source>Cursor Type</source>
+ <translation>鍏夋爣绫诲瀷</translation>
+ </message>
+ <message>
+ <source>Rows</source>
+ <translation>琛</translation>
+ </message>
+ <message>
+ <source>Block</source>
+ <translation>鍧楃姸</translation>
+ </message>
+ <message>
+ <source>Underline</source>
+ <translation>涓嬪垝绾</translation>
+ </message>
+ <message>
+ <source>I Type</source>
+ <translation>I褰</translation>
+ </message>
+ <message>
+ <source>Scroll Lines</source>
+ <translation>婊氬姩</translation>
+ </message>
+ <message>
+ <source>Escape string (i.e. *[ )</source>
+ <translation>ESC瀛楃涓(濡*[)</translation>
+ </message>
+ <message>
+ <source>Key Type</source>
+ <translation>鎸夐敭绫诲瀷</translation>
+ </message>
+ <message>
+ <source>VT100</source>
+ <translation>VT100</translation>
+ </message>
+ <message>
+ <source>XTERM</source>
+ <translation>XTERM</translation>
+ </message>
+ <message>
+ <source>Connection</source>
+ <translation type="obsolete">杩炴帴</translation>
+ </message>
+ <message>
+ <source>Protocol</source>
+ <translation>鍗忚</translation>
+ </message>
+ <message>
+ <source>Telnet</source>
+ <translation>Telnet</translation>
+ </message>
+ <message>
+ <source>SSH1</source>
+ <translation>SSH1</translation>
+ </message>
+ <message>
+ <source>SSH2</source>
+ <translation>SSH2</translation>
+ </message>
+ <message>
+ <source>Proxy</source>
+ <translation>浠g悊</translation>
+ </message>
+ <message>
+ <source>Authentation</source>
+ <translation>璁よ瘉</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>鏃</translation>
+ </message>
+ <message>
+ <source>Wingate</source>
+ <translation>Wingate</translation>
+ </message>
+ <message>
+ <source>SOCKS4</source>
+ <translation>SOCKS4</translation>
+ </message>
+ <message>
+ <source>SOCKS5</source>
+ <translation>SOCKS5</translation>
+ </message>
+ <message>
+ <source>HTTP</source>
+ <translation>HTTP</translation>
+ </message>
+ <message>
+ <source>Misc</source>
+ <translation>鍏跺畠</translation>
+ </message>
+ <message>
+ <source>Load Control Script</source>
+ <translation>瑁呰浇鎺у埗鑴氭湰</translation>
+ </message>
+ <message>
+ <source>When disconnected, close window automatically</source>
+ <translation>褰撹繛鎺ユ柇寮鏃讹紝鑷姩鍏抽棴绐楀彛</translation>
+ </message>
+ <message>
+ <source>Autoreply Message</source>
+ <translation>鑷姩鍥炲娑堟伅</translation>
+ </message>
+ <message>
+ <source>Max Idle Time</source>
+ <translation>鏈澶у彂鍛嗘椂闂</translation>
+ </message>
+ <message>
+ <source>Anti-idle String</source>
+ <translation>闃插彂鍛嗗瓧绗︿覆</translation>
+ </message>
+ <message>
+ <source>For Maximum</source>
+ <translation>鏈澶</translation>
+ </message>
+ <message>
+ <source>Times (-1 means infinite)</source>
+ <translation>娆℃暟(-1涓烘棤绌)</translation>
+ </message>
+ <message>
+ <source>When disconnected, reconnect every</source>
+ <translation>鑷姩閲嶈繛闂撮殧</translation>
+ </message>
+ <message>
+ <source>Browse...</source>
+ <translation>娴忚...</translation>
+ </message>
+ <message>
+ <source>Key to reply message</source>
+ <translation>鍥炲娑堟伅鎸夐敭</translation>
+ </message>
+ <message>
+ <source>s</source>
+ <translation>s</translation>
+ </message>
+ <message>
+ <source>Mouse</source>
+ <translation>榧犳爣</translation>
+ </message>
+ <message>
+ <source>Menu Type</source>
+ <translation>鑿滃崟绫诲瀷</translation>
+ </message>
+ <message>
+ <source>Menu Label</source>
+ <translation type="obsolete">鑿滃崟鏍囩</translation>
+ </message>
+ <message>
+ <source>Reverse</source>
+ <translation>鍙嶈浆</translation>
+ </message>
+ <message>
+ <source>Color...</source>
+ <translation>棰滆壊...</translation>
+ </message>
+ <message>
+ <source>Custom Color</source>
+ <translation>鑷畾涔夐鑹</translation>
+ </message>
+ <message>
+ <source>Site Setting</source>
+ <translation>绔欑偣璁剧疆</translation>
+ </message>
+ <message>
+ <source>Telnet Auto Login</source>
+ <translation>Telnet鑷姩鐧诲綍</translation>
+ </message>
+ <message>
+ <source>SSH Auto Login</source>
+ <translation>SSH鑷姩鐧诲綍</translation>
+ </message>
+ <message>
+ <source>Menu Color</source>
+ <translation>鑿滃崟棰滆壊</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation type="obsolete">纭(&amp;O)</translation>
+ </message>
+ <message>
+ <source>Apply (&amp;Temporarily)</source>
+ <translation>搴旂敤 (涓存椂&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;Apply (Save)</source>
+ <translation>搴旂敤 (淇濆瓨&amp;A)</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>鍙栨秷(&amp;C)</translation>
+ </message>
+ <message>
+ <source>UTF8</source>
+ <translation>UTF8</translation>
+ </message>
+ <message>
+ <source>Font ratio</source>
+ <translation type="obsolete">涓嫳鏂囨瘮渚</translation>
+ </message>
+ <message>
+ <source>Adjust Font Size When Resize</source>
+ <translation type="obsolete">鑷姩璋冭妭瀛椾綋</translation>
+ </message>
+ <message>
+ <source>Char W/H ratio</source>
+ <translation type="obsolete">瀛楃楂樺姣(褰卞搷闂磋窛)</translation>
+ </message>
+ <message>
+ <source>Keyboard</source>
+ <translation>閿洏</translation>
+ </message>
+ <message>
+ <source>BackSpace Setting</source>
+ <translation>閫鏍奸敭璁惧畾</translation>
+ </message>
+ <message>
+ <source>Send backspace as ^H</source>
+ <translation>閫鏍奸敭涓篰H</translation>
+ </message>
+ <message>
+ <source>Send backspace as ^? (127)</source>
+ <translation>閫鏍奸敭涓篰?(127)</translation>
+ </message>
+ <message>
+ <source>Anti-idle</source>
+ <translation>闃插彂鍛</translation>
+ </message>
+ <message>
+ <source>Enable Zmodem</source>
+ <translation>浣跨敤Zmodem</translation>
+ </message>
+ <message>
+ <source>Enable Buzz</source>
+ <translation>浣跨敤鎸姩</translation>
+ </message>
+ <message>
+ <source>Enable Beep</source>
+ <translation>浣跨敤铚傞福</translation>
+ </message>
+ <message>
+ <source>Enable Mouse Support</source>
+ <translation>鎵撳紑榧犳爣鏀寔</translation>
+ </message>
+ <message>
+ <source>Align Mode</source>
+ <translation>瀵归綈妯″紡</translation>
+ </message>
+ <message>
+ <source>Line Spacing</source>
+ <translation>琛岄棿璺</translation>
+ </message>
+ <message>
+ <source>Char Spacing</source>
+ <translation>瀛楅棿璺</translation>
+ </message>
+ <message>
+ <source>Align Mid</source>
+ <translation>涓嚎瀵归綈</translation>
+ </message>
+ <message>
+ <source>Align Bottom</source>
+ <translation>搴曢儴瀵归綈</translation>
+ </message>
+ <message>
+ <source>Align Top</source>
+ <translation>椤剁瀵归綈</translation>
+ </message>
+ <message>
+ <source>BIG5-HKSCS</source>
+ <translation>BIG5-HKSCS</translation>
+ </message>
+ <message>
+ <source>BIG5-UAO</source>
+ <translation>BIG5-UAO</translation>
+ </message>
+ <message>
+ <source>Keep Font; Adjust Row/Column.</source>
+ <translation>淇濇寔瀛椾綋澶у皬,璋冩暣琛屽垪.</translation>
+ </message>
+ <message>
+ <source>Keep Row/Column; Adjust Font.</source>
+ <translation>淇濇寔琛屽垪,璋冩暣瀛椾綋澶у皬.</translation>
+ </message>
+ <message>
+ <source>Keep Font; Keep Row/Column.</source>
+ <translation>淇濇寔瀛椾綋澶у皬鍙婅鍒.</translation>
+ </message>
+</context>
+<context>
+ <name>articleDialog</name>
+ <message>
+ <source>Article Viewer</source>
+ <translation>鏂囩珷娴忚鍣</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>鍏抽棴</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>鍏ㄩ</translation>
+ </message>
+ <message>
+ <source>Save...</source>
+ <translation>淇濆瓨...</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>澶嶅埗</translation>
+ </message>
+</context>
+<context>
+ <name>dlgDefineEscape</name>
+ <message>
+ <source>Define Escape</source>
+ <translation>瀹氫箟閫冮</translation>
+ </message>
+ <message>
+ <source>Escape String *[</source>
+ <translation>閫冮镐覆 *[</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>纭畾</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>鍙栨秷</translation>
+ </message>
+</context>
+<context>
+ <name>keyDialog</name>
+ <message>
+ <source>Key Setup</source>
+ <translation>鎸夐敭璁剧疆</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>娣诲姞</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>鍒犻櫎</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>鏇存柊</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>鍏抽棴</translation>
+ </message>
+ <message>
+ <source>Define</source>
+ <translation>瀹氫箟</translation>
+ </message>
+ <message>
+ <source>Script</source>
+ <translation>鑴氭湰</translation>
+ </message>
+ <message>
+ <source>Program</source>
+ <translation>绋嬪簭</translation>
+ </message>
+ <message>
+ <source>Enter</source>
+ <translation>鍥炶溅</translation>
+ </message>
+ <message>
+ <source>Right</source>
+ <translation>鏂瑰悜閿甗鍙砞</translation>
+ </message>
+ <message>
+ <source>Left</source>
+ <translation>鏂瑰悜閿甗宸</translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation>鏂瑰悜閿甗涓媇</translation>
+ </message>
+ <message>
+ <source>General Keys</source>
+ <translation>閫氱敤鎸夐敭</translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation>鏂瑰悜閿甗涓奭</translation>
+ </message>
+ <message>
+ <source>Browse...</source>
+ <translation>娴忚...</translation>
+ </message>
+ <message>
+ <source>Key</source>
+ <translation>鎸夐敭</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>鍚嶇О</translation>
+ </message>
+ <message>
+ <source>Short Cut</source>
+ <translation>蹇嵎閿</translation>
+ </message>
+</context>
+<context>
+ <name>msgDialog</name>
+ <message>
+ <source>Messages Viewer</source>
+ <translation>娑堟伅鏌ョ湅鍣</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>纭</translation>
+ </message>
+</context>
+<context>
+ <name>prefDialog</name>
+ <message>
+ <source>Preference</source>
+ <translation>鍋忓ソ</translation>
+ </message>
+ <message>
+ <source>Alternative Mouse Wheel Control</source>
+ <translation>鍏跺畠婊氬姩鎺у埗</translation>
+ </message>
+ <message>
+ <source>Save Message To File</source>
+ <translation>灏嗘秷鎭偍瀛樿嚦鏂囦欢</translation>
+ </message>
+ <message>
+ <source>Warn When Exit Connected</source>
+ <translation>褰撹繛鎺ユ椂璇曞浘閫鍑哄垯鍙戝嚭璀﹀憡</translation>
+ </message>
+ <message>
+ <source>Detect URL When Mouse Move</source>
+ <translation>榧犳爣绉诲姩鏃舵娴婾RL</translation>
+ </message>
+ <message>
+ <source>Blink Tab When Receive Message</source>
+ <translation>鏀跺埌娑堟伅鏃堕棯鐑</translation>
+ </message>
+ <message>
+ <source>Paste word-wrap at</source>
+ <translation type="obsolete">鑷姩鍥炶绮樿创</translation>
+ </message>
+ <message>
+ <source>Sound When Receive Messages</source>
+ <translation>鏀跺埌娑堟伅鏃跺彂澹</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>鏃</translation>
+ </message>
+ <message>
+ <source>Beep</source>
+ <translation>铚傞福</translation>
+ </message>
+ <message>
+ <source>Sound File</source>
+ <translation>澹伴煶鏂囦欢</translation>
+ </message>
+ <message>
+ <source>Configure</source>
+ <translation>璁剧疆</translation>
+ </message>
+ <message>
+ <source>Enable Smart Word-Wrap</source>
+ <translation>鏅鸿兘鑷姩鍥炶</translation>
+ </message>
+ <message>
+ <source>Clear ZModem and HTTP directory when exit</source>
+ <translation type="obsolete">閫鍑烘椂娓呯悊ZModem鍜孒TTP鐩綍</translation>
+ </message>
+ <message>
+ <source>Show as tray when close</source>
+ <translation type="obsolete">鍏抽棴鑷崇郴缁熸墭鐩</translation>
+ </message>
+ <message>
+ <source>Zmodem directory</source>
+ <translation type="obsolete">Zmodem鐩綍</translation>
+ </message>
+ <message>
+ <source>HTTP directory</source>
+ <translation type="obsolete">HTTP鐩綍</translation>
+ </message>
+ <message>
+ <source>HTTP Browser</source>
+ <translation>HTTP娴忚鍣</translation>
+ </message>
+ <message>
+ <source>Image Viewer</source>
+ <translation>鍥惧儚棰勮鍣</translation>
+ </message>
+ <message>
+ <source>Browse</source>
+ <translation>娴忚</translation>
+ </message>
+ <message>
+ <source>Choose</source>
+ <translation>閫夋嫨</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>鍙栨秷</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>纭畾</translation>
+ </message>
+ <message>
+ <source>Input Method</source>
+ <translation>杈撳叆娉</translation>
+ </message>
+ <message>
+ <source>GBK</source>
+ <translation>GBK</translation>
+ </message>
+ <message>
+ <source>BIG5</source>
+ <translation>BIG5</translation>
+ </message>
+ <message>
+ <source>Paste Word-Wrap At</source>
+ <translation>鑷姩鍥炶绮樿创</translation>
+ </message>
+ <message>
+ <source>Show As Tray When Close</source>
+ <translation>鍏抽棴鑷崇郴缁熸墭鐩</translation>
+ </message>
+ <message>
+ <source>Clear ZModem And HTTP Directory When Exit</source>
+ <translation>閫鍑烘椂娓呯悊ZModem鍜孒TTP鐩綍</translation>
+ </message>
+ <message>
+ <source>Zmodem Directory</source>
+ <translation>Zmodem鐩綍</translation>
+ </message>
+ <message>
+ <source>HTTP Directory</source>
+ <translation>HTTP鐩綍</translation>
+ </message>
+ <message>
+ <source>StyleSheet File</source>
+ <translation>StyleSheet鏂囦欢</translation>
+ </message>
+ <message>
+ <source>Reply when ENQ received</source>
+ <translation>鏀跺埌ENQ鏃跺洖澶</translation>
+ </message>
+ <message>
+ <source>Display Offset</source>
+ <translation>鏄剧ず(妯悜)鍋忕Щ閲</translation>
+ </message>
+ <message>
+ <source>Editor &amp; Args</source>
+ <translation>缂栬緫鍣ㄥ強杩愯鍙傛暟</translation>
+ </message>
+ <message>
+ <source>AntiAlias</source>
+ <translation>鍙嶅埆鍚</translation>
+ </message>
+ <message>
+ <source>Vertical Display</source>
+ <translation>鍨傜洿鏄剧ず</translation>
+ </message>
+ <message>
+ <source>Top</source>
+ <translation>灞呴《</translation>
+ </message>
+ <message>
+ <source>Middle</source>
+ <translation>灞呬腑</translation>
+ </message>
+ <message>
+ <source>Bottom</source>
+ <translation>灞呭簳</translation>
+ </message>
+ <message>
+ <source>ASCII Art Enhance Mode</source>
+ <translation>ASCII鑹插潡鏃犵紳妯″紡</translation>
+ </message>
+</context>
+<context>
+ <name>quickDialog</name>
+ <message>
+ <source>Quick Login</source>
+ <translation>蹇熻繛鎺</translation>
+ </message>
+ <message>
+ <source>History</source>
+ <translation type="obsolete">鍘嗗彶</translation>
+ </message>
+ <message>
+ <source>Address</source>
+ <translation type="obsolete">鍦板潃</translation>
+ </message>
+ <message>
+ <source>Connect</source>
+ <translation>杩炴帴</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>鍏抽棴</translation>
+ </message>
+ <message>
+ <source>Advanced</source>
+ <translation>楂樼骇</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>鍒犻櫎</translation>
+ </message>
+ <message>
+ <source>Port</source>
+ <translation>绔彛</translation>
+ </message>
+ <message>
+ <source>Protocol</source>
+ <translation>鍗忚</translation>
+ </message>
+ <message>
+ <source>Telnet</source>
+ <translation>Telnet</translation>
+ </message>
+ <message>
+ <source>SSH1</source>
+ <translation>SSH1</translation>
+ </message>
+ <message>
+ <source>SSH2</source>
+ <translation>SSH2</translation>
+ </message>
+ <message>
+ <source>Host Name</source>
+ <translation>涓绘満鍚</translation>
+ </message>
+ <message>
+ <source>23</source>
+ <translation>23</translation>
+ </message>
+</context>
+<context>
+ <name>schemaDialog</name>
+ <message>
+ <source>Schema Editor</source>
+ <translation>鍥炬爣缂栬緫鍣</translation>
+ </message>
+ <message>
+ <source>Title</source>
+ <translation>鏍囬</translation>
+ </message>
+ <message>
+ <source>8-15</source>
+ <translation>8-15</translation>
+ </message>
+ <message>
+ <source>0-7</source>
+ <translation>0-7</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>淇濆瓨</translation>
+ </message>
+ <message>
+ <source>Remove </source>
+ <translation>绉婚櫎</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>鍙栨秷</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>纭畾</translation>
+ </message>
+ <message>
+ <source>Background</source>
+ <translation>鑳屾櫙</translation>
+ </message>
+ <message>
+ <source>Fade to</source>
+ <translation type="obsolete">娣″叆</translation>
+ </message>
+ <message>
+ <source>Min</source>
+ <translation>鏈灏</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>鏃</translation>
+ </message>
+ <message>
+ <source>Choose</source>
+ <translation>閫夋嫨</translation>
+ </message>
+ <message>
+ <source>Max</source>
+ <translation>鏈澶</translation>
+ </message>
+ <message>
+ <source>Tile</source>
+ <translation>骞抽摵</translation>
+ </message>
+ <message>
+ <source>Center</source>
+ <translation>涓績</translation>
+ </message>
+ <message>
+ <source>Scale</source>
+ <translation>姣斾緥</translation>
+ </message>
+ <message>
+ <source>Image</source>
+ <translation>鍥惧儚</translation>
+ </message>
+ <message>
+ <source>Transparent</source>
+ <translation type="obsolete">閫忔槑</translation>
+ </message>
+ <message>
+ <source>Render</source>
+ <translation>娓叉煋</translation>
+ </message>
+ <message>
+ <source>Coverage</source>
+ <translation>瑕嗙洊鑼冨洿</translation>
+ </message>
+ <message>
+ <source>Whole</source>
+ <translation>鏁翠綋</translation>
+ </message>
+ <message>
+ <source>Padding</source>
+ <translation>骞崇洿</translation>
+ </message>
+ <message>
+ <source>Note:
+ Alpha will only apply on background
+ If Coverage is set to Padding
+ Alpha will take no effect
+</source>
+ <translation>璇锋敞鎰忥細
+ Alpha浠呭簲鐢ㄤ簬鑳屾櫙鑹
+ 鑻モ滆鐩栬寖鍥粹濊璁剧疆涓衡滃钩鐩粹
+ Alpha灏嗕笉浼氱敓鏁
+</translation>
+ </message>
+ <message>
+ <source>Alpha</source>
+ <translation>鍗婇忔槑</translation>
+ </message>
+</context>
+<context>
+ <name>siteManager</name>
+ <message>
+ <source>Address Book</source>
+ <translation>鍦板潃绨</translation>
+ </message>
+ <message>
+ <source>&amp;Up</source>
+ <translation>涓婄Щ(&amp;U)</translation>
+ </message>
+ <message>
+ <source>&amp;Down</source>
+ <translation>涓嬬Щ(&amp;D)</translation>
+ </message>
+ <message>
+ <source>Site Name</source>
+ <translation>绔欑偣鍚嶇О</translation>
+ </message>
+ <message>
+ <source>Address</source>
+ <translation>鍦板潃</translation>
+ </message>
+ <message>
+ <source>Protocol</source>
+ <translation>鍗忚</translation>
+ </message>
+ <message>
+ <source>Telnet</source>
+ <translation>Telnet</translation>
+ </message>
+ <message>
+ <source>SSH1</source>
+ <translation>SSH1</translation>
+ </message>
+ <message>
+ <source>SSH2</source>
+ <translation>SSH2</translation>
+ </message>
+ <message>
+ <source>Port</source>
+ <translation>绔彛</translation>
+ </message>
+ <message>
+ <source>Host Type</source>
+ <translation>涓绘満绫诲瀷</translation>
+ </message>
+ <message>
+ <source>BBS</source>
+ <translation>BBS</translation>
+ </message>
+ <message>
+ <source>*NIX</source>
+ <translation>*NIX</translation>
+ </message>
+ <message>
+ <source>Use Proxy</source>
+ <translation>浣跨敤浠g悊</translation>
+ </message>
+ <message>
+ <source>Setting...</source>
+ <translation>璁剧疆...</translation>
+ </message>
+ <message>
+ <source>Auto Login</source>
+ <translation>鑷姩鐧诲綍</translation>
+ </message>
+ <message>
+ <source>Font Preview</source>
+ <translation>瀛椾綋棰勮</translation>
+ </message>
+ <message>
+ <source>Font Previewer</source>
+ <translation>瀛椾綋棰勮</translation>
+ </message>
+ <message>
+ <source>&amp;Reset</source>
+ <translation>閲嶇疆(&amp;R)</translation>
+ </message>
+ <message>
+ <source>A&amp;dvance</source>
+ <translation>楂樼骇(&amp;d)</translation>
+ </message>
+ <message>
+ <source>&amp;New</source>
+ <translation>鏂板缓(&amp;N)</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>鍒犻櫎(&amp;D)</translation>
+ </message>
+ <message>
+ <source>C&amp;onnect</source>
+ <translation>杩炴帴(&amp;o)</translation>
+ </message>
+ <message>
+ <source>&amp;Apply</source>
+ <translation type="obsolete">搴旂敤(&amp;A)</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>鍏抽棴(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>淇濆瓨(&amp;S)</translation>
+ </message>
+</context>
+<context>
+ <name>soundConf</name>
+ <message>
+ <source>Configure</source>
+ <translation>璁剧疆</translation>
+ </message>
+ <message>
+ <source>Sound File:</source>
+ <translation>澹伴煶鏂囦欢:</translation>
+ </message>
+ <message>
+ <source>Select...</source>
+ <translation>閫夋嫨...</translation>
+ </message>
+ <message>
+ <source>External Program:</source>
+ <translation>澶栭儴绋嬪簭:</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>纭</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>鍙栨秷</translation>
+ </message>
+ <message>
+ <source>Play With:</source>
+ <translation>浣跨敤鎾斁鍣:</translation>
+ </message>
+ <message>
+ <source>Test</source>
+ <translation>娴嬭瘯</translation>
+ </message>
+ <message>
+ <source>External</source>
+ <translation>澶栭儴</translation>
+ </message>
+ <message>
+ <source>Internal</source>
+ <translation>鍐呴儴</translation>
+ </message>
+</context>
+<context>
+ <name>zmodemDialog</name>
+ <message>
+ <source>Zmodem Status</source>
+ <translation>Zmodem鐘舵</translation>
+ </message>
+ <message>
+ <source>textLabel1</source>
+ <translation>鏂囨湰鏍囩1</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>鍙栨秷</translation>
+ </message>
+ <message>
+ <source>textLabel2</source>
+ <translation>鏂囨湰鏍囩2</translation>
+ </message>
+</context>
+</TS>
diff --git a/res/fqterm.desktop b/res/fqterm.desktop
new file mode 100644
index 0000000..0ffad86
--- /dev/null
+++ b/res/fqterm.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+Type=Application
+Categories=Application;Qt;Network;
+Icon=/usr/local/share/FQTerm/pic/fqterm_256x256.png
+Name=FQTerm
+Exec=fqterm -caption "%c" %i %u
+GenericName=BBS Client
+GenericName[zh_CN]=BBS 瀹㈡埛绔▼搴
+GenericName[zh_TW]=BBS 瀹㈡埗绔▼寮
+Comment=BBS client based on Qt library in linux
+Terminal=false
diff --git a/res/fqterm.icns b/res/fqterm.icns
new file mode 100644
index 0000000..e2dc1fe
--- /dev/null
+++ b/res/fqterm.icns
Binary files differ
diff --git a/res/fqterm.sh b/res/fqterm.sh
new file mode 100644
index 0000000..d9e1d2c
--- /dev/null
+++ b/res/fqterm.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+this_name="$0"
+
+current_directory=`/bin/pwd`
+
+cd `dirname "$this_name"`
+base_name=`basename "$this_name"`
+bin_directory=`/bin/pwd`
+
+# get the real file name in case it's a symbolic link.
+while [ -h "$this_name" ]; do
+ this_name=`/bin/ls -l "$base_name" | sed -e 's/^.* -> //' `
+ cd `dirname "$this_name"`
+ base_name=`basename "$this_name"`
+ bin_directory=`/bin/pwd`
+done
+
+# setup environment variables and then run the real executable.
+if [ -x "$base_name".bin ]; then
+ cd "$current_directory"
+ export FQTERM_PREFIX=`dirname "$bin_directory"`
+ export FQTERM_RESOURCE="$FQTERM_PREFIX/share/FQTerm"
+ "$bin_directory/$base_name.bin" "$@"
+ exit $?
+else
+ cd "$current_directory"
+ echo "Error, cannot find $base_name."
+ exit 2
+fi
diff --git a/res/pic/ViewerButtons/adjustsize.png b/res/pic/ViewerButtons/adjustsize.png
new file mode 100644
index 0000000..c4d884c
--- /dev/null
+++ b/res/pic/ViewerButtons/adjustsize.png
Binary files differ
diff --git a/res/pic/ViewerButtons/button-cancel.png b/res/pic/ViewerButtons/button-cancel.png
new file mode 100644
index 0000000..7566a10
--- /dev/null
+++ b/res/pic/ViewerButtons/button-cancel.png
Binary files differ
diff --git a/res/pic/ViewerButtons/button-delete.png b/res/pic/ViewerButtons/button-delete.png
new file mode 100644
index 0000000..3ce2c12
--- /dev/null
+++ b/res/pic/ViewerButtons/button-delete.png
Binary files differ
diff --git a/res/pic/ViewerButtons/button-recover.png b/res/pic/ViewerButtons/button-recover.png
new file mode 100644
index 0000000..753e94a
--- /dev/null
+++ b/res/pic/ViewerButtons/button-recover.png
Binary files differ
diff --git a/res/pic/ViewerButtons/clear-state-gray.png b/res/pic/ViewerButtons/clear-state-gray.png
new file mode 100644
index 0000000..ec13fed
--- /dev/null
+++ b/res/pic/ViewerButtons/clear-state-gray.png
Binary files differ
diff --git a/res/pic/ViewerButtons/clear-state.png b/res/pic/ViewerButtons/clear-state.png
new file mode 100644
index 0000000..6854f0d
--- /dev/null
+++ b/res/pic/ViewerButtons/clear-state.png
Binary files differ
diff --git a/res/pic/ViewerButtons/document-save-as.png b/res/pic/ViewerButtons/document-save-as.png
new file mode 100644
index 0000000..97bad5d
--- /dev/null
+++ b/res/pic/ViewerButtons/document-save-as.png
Binary files differ
diff --git a/res/pic/ViewerButtons/edit-clear.png b/res/pic/ViewerButtons/edit-clear.png
new file mode 100644
index 0000000..7345c44
--- /dev/null
+++ b/res/pic/ViewerButtons/edit-clear.png
Binary files differ
diff --git a/res/pic/ViewerButtons/edit-delete.png b/res/pic/ViewerButtons/edit-delete.png
new file mode 100644
index 0000000..ff5b897
--- /dev/null
+++ b/res/pic/ViewerButtons/edit-delete.png
Binary files differ
diff --git a/res/pic/ViewerButtons/edit-shuffle.png b/res/pic/ViewerButtons/edit-shuffle.png
new file mode 100644
index 0000000..885fa48
--- /dev/null
+++ b/res/pic/ViewerButtons/edit-shuffle.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-info.png b/res/pic/ViewerButtons/emblem-info.png
new file mode 100644
index 0000000..d46bd4e
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-info.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-like-16x16.png b/res/pic/ViewerButtons/emblem-like-16x16.png
new file mode 100644
index 0000000..c1dee22
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-like-16x16.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-like-gray.png b/res/pic/ViewerButtons/emblem-like-gray.png
new file mode 100644
index 0000000..c398b59
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-like-gray.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-like.png b/res/pic/ViewerButtons/emblem-like.png
new file mode 100644
index 0000000..5bfa49c
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-like.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-new-16x16.png b/res/pic/ViewerButtons/emblem-new-16x16.png
new file mode 100644
index 0000000..34af64f
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-new-16x16.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-new-gray.png b/res/pic/ViewerButtons/emblem-new-gray.png
new file mode 100644
index 0000000..6439530
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-new-gray.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-new.png b/res/pic/ViewerButtons/emblem-new.png
new file mode 100644
index 0000000..0ac11c7
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-new.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-recover-16x16.png b/res/pic/ViewerButtons/emblem-recover-16x16.png
new file mode 100644
index 0000000..bc52bb8
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-recover-16x16.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-recover-gray.png b/res/pic/ViewerButtons/emblem-recover-gray.png
new file mode 100644
index 0000000..e9a4eb0
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-recover-gray.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-recover.png b/res/pic/ViewerButtons/emblem-recover.png
new file mode 100644
index 0000000..70070cb
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-recover.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-title-16x16.png b/res/pic/ViewerButtons/emblem-title-16x16.png
new file mode 100644
index 0000000..d40626b
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-title-16x16.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-title.png b/res/pic/ViewerButtons/emblem-title.png
new file mode 100644
index 0000000..f187cd8
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-title.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-trash-16x16.png b/res/pic/ViewerButtons/emblem-trash-16x16.png
new file mode 100644
index 0000000..a07a57d
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-trash-16x16.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-trash-gray.png b/res/pic/ViewerButtons/emblem-trash-gray.png
new file mode 100644
index 0000000..baf8e93
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-trash-gray.png
Binary files differ
diff --git a/res/pic/ViewerButtons/emblem-trash.png b/res/pic/ViewerButtons/emblem-trash.png
new file mode 100644
index 0000000..4d2e963
--- /dev/null
+++ b/res/pic/ViewerButtons/emblem-trash.png
Binary files differ
diff --git a/res/pic/ViewerButtons/next.png b/res/pic/ViewerButtons/next.png
new file mode 100644
index 0000000..a585cab
--- /dev/null
+++ b/res/pic/ViewerButtons/next.png
Binary files differ
diff --git a/res/pic/ViewerButtons/object-rotate-left.png b/res/pic/ViewerButtons/object-rotate-left.png
new file mode 100644
index 0000000..29aa9ab
--- /dev/null
+++ b/res/pic/ViewerButtons/object-rotate-left.png
Binary files differ
diff --git a/res/pic/ViewerButtons/object-rotate-right.png b/res/pic/ViewerButtons/object-rotate-right.png
new file mode 100644
index 0000000..dea855a
--- /dev/null
+++ b/res/pic/ViewerButtons/object-rotate-right.png
Binary files differ
diff --git a/res/pic/ViewerButtons/open.png b/res/pic/ViewerButtons/open.png
new file mode 100644
index 0000000..45fa288
--- /dev/null
+++ b/res/pic/ViewerButtons/open.png
Binary files differ
diff --git a/res/pic/ViewerButtons/play_gif.png b/res/pic/ViewerButtons/play_gif.png
new file mode 100644
index 0000000..70daa33
--- /dev/null
+++ b/res/pic/ViewerButtons/play_gif.png
Binary files differ
diff --git a/res/pic/ViewerButtons/prev.png b/res/pic/ViewerButtons/prev.png
new file mode 100644
index 0000000..612fb34
--- /dev/null
+++ b/res/pic/ViewerButtons/prev.png
Binary files differ
diff --git a/res/pic/ViewerButtons/previous.png b/res/pic/ViewerButtons/previous.png
new file mode 100644
index 0000000..c2295b5
--- /dev/null
+++ b/res/pic/ViewerButtons/previous.png
Binary files differ
diff --git a/res/pic/ViewerButtons/save-state-gray.png b/res/pic/ViewerButtons/save-state-gray.png
new file mode 100644
index 0000000..6567093
--- /dev/null
+++ b/res/pic/ViewerButtons/save-state-gray.png
Binary files differ
diff --git a/res/pic/ViewerButtons/save-state.png b/res/pic/ViewerButtons/save-state.png
new file mode 100644
index 0000000..1feb0dd
--- /dev/null
+++ b/res/pic/ViewerButtons/save-state.png
Binary files differ
diff --git a/res/pic/ViewerButtons/trash-empty.png b/res/pic/ViewerButtons/trash-empty.png
new file mode 100644
index 0000000..264114c
--- /dev/null
+++ b/res/pic/ViewerButtons/trash-empty.png
Binary files differ
diff --git a/res/pic/ViewerButtons/trash-full.png b/res/pic/ViewerButtons/trash-full.png
new file mode 100644
index 0000000..ae18f5f
--- /dev/null
+++ b/res/pic/ViewerButtons/trash-full.png
Binary files differ
diff --git a/res/pic/ViewerButtons/trash-state-gray.png b/res/pic/ViewerButtons/trash-state-gray.png
new file mode 100644
index 0000000..137483d
--- /dev/null
+++ b/res/pic/ViewerButtons/trash-state-gray.png
Binary files differ
diff --git a/res/pic/ViewerButtons/trash-state.png b/res/pic/ViewerButtons/trash-state.png
new file mode 100644
index 0000000..57d3437
--- /dev/null
+++ b/res/pic/ViewerButtons/trash-state.png
Binary files differ
diff --git a/res/pic/ViewerButtons/view-fullscreen.png b/res/pic/ViewerButtons/view-fullscreen.png
new file mode 100644
index 0000000..6845e04
--- /dev/null
+++ b/res/pic/ViewerButtons/view-fullscreen.png
Binary files differ
diff --git a/res/pic/ViewerButtons/window-close.png b/res/pic/ViewerButtons/window-close.png
new file mode 100644
index 0000000..bf8104f
--- /dev/null
+++ b/res/pic/ViewerButtons/window-close.png
Binary files differ
diff --git a/res/pic/ViewerButtons/zoom-fit-best.png b/res/pic/ViewerButtons/zoom-fit-best.png
new file mode 100644
index 0000000..02de8c9
--- /dev/null
+++ b/res/pic/ViewerButtons/zoom-fit-best.png
Binary files differ
diff --git a/res/pic/ViewerButtons/zoom-in.png b/res/pic/ViewerButtons/zoom-in.png
new file mode 100644
index 0000000..54937bd
--- /dev/null
+++ b/res/pic/ViewerButtons/zoom-in.png
Binary files differ
diff --git a/res/pic/ViewerButtons/zoom-original.png b/res/pic/ViewerButtons/zoom-original.png
new file mode 100644
index 0000000..3b79370
--- /dev/null
+++ b/res/pic/ViewerButtons/zoom-original.png
Binary files differ
diff --git a/res/pic/ViewerButtons/zoom-out.png b/res/pic/ViewerButtons/zoom-out.png
new file mode 100644
index 0000000..7543ac4
--- /dev/null
+++ b/res/pic/ViewerButtons/zoom-out.png
Binary files differ
diff --git a/res/pic/ViewerButtons/zoomin.png b/res/pic/ViewerButtons/zoomin.png
new file mode 100644
index 0000000..d46f5af
--- /dev/null
+++ b/res/pic/ViewerButtons/zoomin.png
Binary files differ
diff --git a/res/pic/ViewerButtons/zoomout.png b/res/pic/ViewerButtons/zoomout.png
new file mode 100644
index 0000000..4632656
--- /dev/null
+++ b/res/pic/ViewerButtons/zoomout.png
Binary files differ
diff --git a/res/pic/address_book.png b/res/pic/address_book.png
new file mode 100644
index 0000000..34aac8a
--- /dev/null
+++ b/res/pic/address_book.png
Binary files differ
diff --git a/res/pic/ansi_color.png b/res/pic/ansi_color.png
new file mode 100644
index 0000000..18cbe59
--- /dev/null
+++ b/res/pic/ansi_color.png
Binary files differ
diff --git a/res/pic/anti_idle.png b/res/pic/anti_idle.png
new file mode 100644
index 0000000..a2ed8af
--- /dev/null
+++ b/res/pic/anti_idle.png
Binary files differ
diff --git a/res/pic/auto_reconnect.png b/res/pic/auto_reconnect.png
new file mode 100644
index 0000000..7f73973
--- /dev/null
+++ b/res/pic/auto_reconnect.png
Binary files differ
diff --git a/res/pic/auto_reply.png b/res/pic/auto_reply.png
new file mode 100644
index 0000000..f9c6f24
--- /dev/null
+++ b/res/pic/auto_reply.png
Binary files differ
diff --git a/res/pic/beep.png b/res/pic/beep.png
new file mode 100644
index 0000000..15faf6a
--- /dev/null
+++ b/res/pic/beep.png
Binary files differ
diff --git a/res/pic/change_fonts.png b/res/pic/change_fonts.png
new file mode 100644
index 0000000..c360d0b
--- /dev/null
+++ b/res/pic/change_fonts.png
Binary files differ
diff --git a/res/pic/connect.png b/res/pic/connect.png
new file mode 100644
index 0000000..5fefb93
--- /dev/null
+++ b/res/pic/connect.png
Binary files differ
diff --git a/res/pic/copy.png b/res/pic/copy.png
new file mode 100644
index 0000000..951b521
--- /dev/null
+++ b/res/pic/copy.png
Binary files differ
diff --git a/res/pic/copy_with_color.png b/res/pic/copy_with_color.png
new file mode 100644
index 0000000..52ac2cd
--- /dev/null
+++ b/res/pic/copy_with_color.png
Binary files differ
diff --git a/res/pic/disconnect.png b/res/pic/disconnect.png
new file mode 100644
index 0000000..b8d6085
--- /dev/null
+++ b/res/pic/disconnect.png
Binary files differ
diff --git a/res/pic/english_font.png b/res/pic/english_font.png
new file mode 100644
index 0000000..5553c63
--- /dev/null
+++ b/res/pic/english_font.png
Binary files differ
diff --git a/res/pic/fqterm.png b/res/pic/fqterm.png
new file mode 100644
index 0000000..aab3dfc
--- /dev/null
+++ b/res/pic/fqterm.png
Binary files differ
diff --git a/res/pic/fqterm_128x128.ico b/res/pic/fqterm_128x128.ico
new file mode 100644
index 0000000..3f25061
--- /dev/null
+++ b/res/pic/fqterm_128x128.ico
Binary files differ
diff --git a/res/pic/fqterm_128x128.png b/res/pic/fqterm_128x128.png
new file mode 100644
index 0000000..6e3d7be
--- /dev/null
+++ b/res/pic/fqterm_128x128.png
Binary files differ
diff --git a/res/pic/fqterm_16x16.ico b/res/pic/fqterm_16x16.ico
new file mode 100644
index 0000000..b0a5900
--- /dev/null
+++ b/res/pic/fqterm_16x16.ico
Binary files differ
diff --git a/res/pic/fqterm_16x16.png b/res/pic/fqterm_16x16.png
new file mode 100644
index 0000000..c30e17c
--- /dev/null
+++ b/res/pic/fqterm_16x16.png
Binary files differ
diff --git a/res/pic/fqterm_256x256.ico b/res/pic/fqterm_256x256.ico
new file mode 100644
index 0000000..ec1cbac
--- /dev/null
+++ b/res/pic/fqterm_256x256.ico
Binary files differ
diff --git a/res/pic/fqterm_256x256.png b/res/pic/fqterm_256x256.png
new file mode 100644
index 0000000..2d637b9
--- /dev/null
+++ b/res/pic/fqterm_256x256.png
Binary files differ
diff --git a/res/pic/fqterm_32x32.ico b/res/pic/fqterm_32x32.ico
new file mode 100644
index 0000000..7c8a251
--- /dev/null
+++ b/res/pic/fqterm_32x32.ico
Binary files differ
diff --git a/res/pic/fqterm_32x32.png b/res/pic/fqterm_32x32.png
new file mode 100644
index 0000000..7512cda
--- /dev/null
+++ b/res/pic/fqterm_32x32.png
Binary files differ
diff --git a/res/pic/fqterm_48x48.ico b/res/pic/fqterm_48x48.ico
new file mode 100644
index 0000000..b092999
--- /dev/null
+++ b/res/pic/fqterm_48x48.ico
Binary files differ
diff --git a/res/pic/fqterm_48x48.png b/res/pic/fqterm_48x48.png
new file mode 100644
index 0000000..aab3dfc
--- /dev/null
+++ b/res/pic/fqterm_48x48.png
Binary files differ
diff --git a/res/pic/fqterm_64x64.ico b/res/pic/fqterm_64x64.ico
new file mode 100644
index 0000000..64c9904
--- /dev/null
+++ b/res/pic/fqterm_64x64.ico
Binary files differ
diff --git a/res/pic/fqterm_64x64.png b/res/pic/fqterm_64x64.png
new file mode 100644
index 0000000..4d90164
--- /dev/null
+++ b/res/pic/fqterm_64x64.png
Binary files differ
diff --git a/res/pic/fqterm_tray.png b/res/pic/fqterm_tray.png
new file mode 100644
index 0000000..c30e17c
--- /dev/null
+++ b/res/pic/fqterm_tray.png
Binary files differ
diff --git a/res/pic/get_article_fulltext.png b/res/pic/get_article_fulltext.png
new file mode 100644
index 0000000..8e299a4
--- /dev/null
+++ b/res/pic/get_article_fulltext.png
Binary files differ
diff --git a/res/pic/image_viewer.png b/res/pic/image_viewer.png
new file mode 100644
index 0000000..32eb2ca
--- /dev/null
+++ b/res/pic/image_viewer.png
Binary files differ
diff --git a/res/pic/messagebox_critical.png b/res/pic/messagebox_critical.png
new file mode 100644
index 0000000..da1e944
--- /dev/null
+++ b/res/pic/messagebox_critical.png
Binary files differ
diff --git a/res/pic/messagebox_info.png b/res/pic/messagebox_info.png
new file mode 100644
index 0000000..eb37d9a
--- /dev/null
+++ b/res/pic/messagebox_info.png
Binary files differ
diff --git a/res/pic/messagebox_warning.png b/res/pic/messagebox_warning.png
new file mode 100644
index 0000000..82d3fc7
--- /dev/null
+++ b/res/pic/messagebox_warning.png
Binary files differ
diff --git a/res/pic/mouse.png b/res/pic/mouse.png
new file mode 100644
index 0000000..91ae19a
--- /dev/null
+++ b/res/pic/mouse.png
Binary files differ
diff --git a/res/pic/other_font.png b/res/pic/other_font.png
new file mode 100644
index 0000000..60edbfb
--- /dev/null
+++ b/res/pic/other_font.png
Binary files differ
diff --git a/res/pic/paste.png b/res/pic/paste.png
new file mode 100644
index 0000000..e84e2b7
--- /dev/null
+++ b/res/pic/paste.png
Binary files differ
diff --git a/res/pic/popwidget.png b/res/pic/popwidget.png
new file mode 100644
index 0000000..b44002c
--- /dev/null
+++ b/res/pic/popwidget.png
Binary files differ
diff --git a/res/pic/preferences.png b/res/pic/preferences.png
new file mode 100644
index 0000000..78115ee
--- /dev/null
+++ b/res/pic/preferences.png
Binary files differ
diff --git a/res/pic/quick_login.png b/res/pic/quick_login.png
new file mode 100644
index 0000000..8a4bed6
--- /dev/null
+++ b/res/pic/quick_login.png
Binary files differ
diff --git a/res/pic/rectangle_selection.png b/res/pic/rectangle_selection.png
new file mode 100644
index 0000000..5356741
--- /dev/null
+++ b/res/pic/rectangle_selection.png
Binary files differ
diff --git a/res/pic/refresh.png b/res/pic/refresh.png
new file mode 100644
index 0000000..f4a4873
--- /dev/null
+++ b/res/pic/refresh.png
Binary files differ
diff --git a/res/pic/save_setting.png b/res/pic/save_setting.png
new file mode 100644
index 0000000..46eac82
--- /dev/null
+++ b/res/pic/save_setting.png
Binary files differ
diff --git a/res/pic/setup_shortcuts.png b/res/pic/setup_shortcuts.png
new file mode 100644
index 0000000..b1b86f8
--- /dev/null
+++ b/res/pic/setup_shortcuts.png
Binary files differ
diff --git a/res/pic/shadow.png b/res/pic/shadow.png
new file mode 100644
index 0000000..b54f504
--- /dev/null
+++ b/res/pic/shadow.png
Binary files differ
diff --git a/res/pic/tabpad.png b/res/pic/tabpad.png
new file mode 100644
index 0000000..071acd8
--- /dev/null
+++ b/res/pic/tabpad.png
Binary files differ
diff --git a/res/pic/toggle_ansi_color.png b/res/pic/toggle_ansi_color.png
new file mode 100644
index 0000000..af3cbfa
--- /dev/null
+++ b/res/pic/toggle_ansi_color.png
Binary files differ
diff --git a/res/pic/view_messages.png b/res/pic/view_messages.png
new file mode 100644
index 0000000..588e5c8
--- /dev/null
+++ b/res/pic/view_messages.png
Binary files differ
diff --git a/res/schema/Linux.schema b/res/schema/Linux.schema
new file mode 100644
index 0000000..f338197
--- /dev/null
+++ b/res/schema/Linux.schema
@@ -0,0 +1,27 @@
+[schema]
+title=Linux
+
+[image]
+name=
+type=0
+fade=#000000
+alpha=0
+
+[color]
+color0=#000000
+color1=#b21818
+color2=#18b218
+color3=#b26818
+color4=#1818b2
+color5=#b218b2
+color6=#18b2b2
+color7=#b2b2b2
+color8=#686868
+color9=#ff5454
+color10=#54ff54
+color11=#ffff54
+color12=#5454ff
+color13=#ff54ff
+color14=#54ffff
+color15=#f9f9f9
+
diff --git a/res/schema/Softness.schema b/res/schema/Softness.schema
new file mode 100644
index 0000000..ef33972
--- /dev/null
+++ b/res/schema/Softness.schema
@@ -0,0 +1,27 @@
+[schema]
+title=Softness
+
+[image]
+name=
+type=0
+fade=#000000
+alpha=0.0
+
+[color]
+color0=#141414
+color1=#783c3c
+color2=#3c783c
+color3=#78783c
+color4=#3c3c78
+color5=#783c3c
+color6=#3c7878
+color7=#c0c0c0
+color8=#808080
+color9=#c86464
+color10=#64c864
+color11=#c8c864
+color12=#6464c8
+color13=#c864c8
+color14=#64c8c8
+color15=#e5e5e5
+
diff --git a/res/schema/VIM.schema b/res/schema/VIM.schema
new file mode 100644
index 0000000..ed4e3fa
--- /dev/null
+++ b/res/schema/VIM.schema
@@ -0,0 +1,27 @@
+[schema]
+title=VIM
+
+[image]
+name=
+type=0
+fade=#000000
+alpha=0
+
+[color]
+color0=#000000
+color1=#c00000
+color2=#008000
+color3=#808000
+color4=#0000c0
+color5=#c000c0
+color6=#008080
+color7=#c0c0c0
+color8=#808080
+color9=#ff6060
+color10=#00ff00
+color11=#ffff00
+color12=#8080ff
+color13=#ff40ff
+color14=#00ffff
+color15=#ffffff
+
diff --git a/res/schema/XTerm.schema b/res/schema/XTerm.schema
new file mode 100644
index 0000000..0c0a191
--- /dev/null
+++ b/res/schema/XTerm.schema
@@ -0,0 +1,27 @@
+[schema]
+title=XTerm
+
+[image]
+name=
+type=0
+fade=#000000
+alpha=0
+
+[color]
+color0=#000000
+color1=#cd0000
+color2=#00cd00
+color3=#cdcd00
+color4=#0000cd
+color5=#cd00cd
+color6=#00cdcd
+color7=#e5e5e5
+color8=#4d4d4d
+color9=#ff0000
+color10=#00ff00
+color11=#ffff00
+color12=#0000ff
+color13=#ff00ff
+color14=#00ffff
+color15=#ffffff
+
diff --git a/res/schema/default.schema b/res/schema/default.schema
new file mode 100644
index 0000000..a5a120e
--- /dev/null
+++ b/res/schema/default.schema
@@ -0,0 +1,27 @@
+[schema]
+title=default
+
+[image]
+name=
+type=0
+fade=#000000
+alpha=0
+
+[color]
+color0=#000000
+color1=#800000
+color2=#008000
+color3=#808000
+color4=#000080
+color5=#800080
+color6=#008080
+color7=#808080
+color8=#a0a0a4
+color9=#ff0000
+color10=#00ff00
+color11=#ffff00
+color12=#0000ff
+color13=#ff00ff
+color14=#00ffff
+color15=#ffffff
+
diff --git a/res/script/README b/res/script/README
new file mode 100644
index 0000000..c7dacbc
--- /dev/null
+++ b/res/script/README
@@ -0,0 +1,112 @@
+
+I've contacted one of the authors of CTerm, and got his permisson to use these scripts with FQTerm.
+Other scripts were directly drawn from qterm0.4.1.
+
+Any file to be written to or read from should be in the format of UTF-8.
+
+Usage:
+
+sessionID=long(sys.argv[0])
+
+formatError(sessionID)
+get the traceback info
+return string
+
+getArticle(sessionID, interval)
+copy current article
+return (string, success)
+
+
+copyArticle(sessionID)
+copy current article (obsolete)
+return string
+
+getText(sessionID, line)
+get text at line
+return string
+
+
+getAttrText(sessionID, line)
+get attr text at line
+return string
+
+sendString(sessionID, str)
+send string to server
+return number of bytes written
+
+
+sendParsedString(sessionID, str)
+send string with escape
+return number of bytes written
+
+caretX(sessionID)
+caret x
+return int
+
+caretY(sessionID)
+caret y
+return int
+
+
+columns(sessionID)
+screen width
+return int
+
+
+rows(sessionID)
+screen height
+return int
+
+
+isConnected(sessionID)
+connected to server or not
+return int
+
+disconnect(sessionID)
+disconnect from server
+
+
+reconnect(sessionID)
+reconnect
+
+
+getBBSCodec(sessionID)
+get the bbs encoding, GBK or Big5
+return string
+
+getAddress(sessionID)
+get the bbs address
+return string
+
+getPort(sessionID)
+get the bbs port number
+return int
+
+getProtocol(sessionID)
+get the bbs protocol, 0/1/2 TELNET/SSH1/SSH2
+return int
+
+getReplyKey(sessionID)
+get the key to reply messages
+return string (wtf...?)
+
+
+getURL(sessionID)
+get the url string under mouse (not sure if works)
+return string
+
+
+previewImage(sessionID, url)
+preview the image link
+
+
+fromUTF8(str, codec)
+decode from utf8 to string in specified codec
+return string
+
+
+toUTF8(str, codec)
+decode from string in specified codec to utf8
+return string
+
+
diff --git a/res/script/buildindex.js b/res/script/buildindex.js
new file mode 100644
index 0000000..d5235d4
--- /dev/null
+++ b/res/script/buildindex.js
@@ -0,0 +1,132 @@
+锘縡qterm.import("utils.js");
+//NOTE: 1. this file should be in utf8
+//first enter the folder, then start script.
+var timeout = 2000;
+var path = "c:\\fix-elite\\"; //DO NOT miss last slash
+var base_path = path;
+
+var make_html_header = function(num)
+{
+ num = parseInt(num);
+ var result = '<html><head>\n'+
+ '<meta http-equiv="Content-Language" content="zh-cn">\n'+
+ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n'+
+ '<title>FQTerm Article Downloader</title>\n'+
+ '</head>\n'+
+ '<body>\n'+
+ '<p><b><h1>FQTerm Article Downloader</h1></b></p>\n'+
+ '<p><p align=center><a href=' + (num - 1) + '.html>Prevoius</a>\n'+
+ '<a href=index.html>Index</a>\n'+
+ '<a href=' + (num + 1) + '.html>Next</a></p align=center></p>'+
+ '<hr><p></p>\n';
+ return result;
+}
+
+var make_html_ender = function(num)
+{
+ num = parseInt(num);
+ var result = '<hr><p></p>\n'+
+ '<p><p align=center><a href=' + (num - 1) + '.html>Prevoius</a>\n'+
+ '<a href=index.html>Index</a>\n'+
+ '<a href=' + (num + 1) + '.html>Next</a></p align=center></p>\n'+
+ '<p><b>FQTerm --- BBS client based on Qt library</b><p>\n'+
+ '<p><a href=http://code.google.com/p/fqterm>\n'+
+ 'http://code.google.com/p/fqterm</a><p>\n'+
+ '</body>\n'+
+ '</html>\n';
+ return result;
+}
+
+var make_index_header = function() {
+ var result = '<html><head>\n' +
+ '<meta http-equiv="Content-Language" content="zh-cn">\n' +
+ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n' +
+ '<title>FQTerm Article Downloader</title>\n' +
+ '</head>\n' +
+ '<p><b><h1>FQTerm Article Downloader</h1></b></p>\n' +
+ '<p><p align=center>\n' +
+ '<a href=\"../index.html\">Up</a>\n' +
+ '</p align=center</p>\n' +
+ '<hr><p></p>\n\n';
+ return result;
+}
+
+var make_index_ender = function() {
+ var result = '<hr><p></p>\n' +
+ '<p><p align=center>\n' +
+ '<a href=\"../index.html\">Up</a>\n' +
+ '</p align=center</p>\n' +
+ '<p><b>FQTerm --- BBS client based on Qt library</b><p>\n' +
+ '<p><a href=http://code.google.com/p/fqterm>\n' +
+ 'http://code.google.com/p/fqterm</a><p>\n' +
+ '</body>\n' +
+ '</html>\n';
+ return result;
+}
+
+var get_list_num = function(str_line) {
+ // get the number
+ try{
+ var re = /[0-9]+/;
+ var num = re.exec(str_line);
+ return num[0];
+ } catch(err) {
+ return "";
+ }
+}
+
+var get_list_categary = function(str_line) {
+ try{
+ var re = /\[[^0-9]{2}\]/; //utf8!
+ var cat = re.exec(str_line);
+ return cat[0];
+ } catch(err) {
+ return "";
+ }
+}
+
+var get_list_title = function(str_line) {
+ try{
+ var re = /\[[^0-9]{2}\]/; //utf8!
+ var cat = re.exec(str_line);
+ var i = str_line.search(re);
+ return str_line.substr(i + cat[0].length);
+ } catch(err) {
+ return "";
+ }
+}
+
+
+var build_index = function() {
+ fqterm.makePath(path);
+ var h = make_index_header();
+ fqterm.writeFile(path + 'index.html', h);
+ while (true) {
+ var line = fqterm.caretY();
+ var str_line = fqterm.getText(line);
+ var article_num = get_list_num(str_line);
+ var article_category = get_list_categary(str_line);
+ var article_title = get_list_title(str_line);
+ if (article_category == '[鏂囦欢]') {
+ var a = '<p><a href=' + article_num + '.html>[鏂囦欢] ' + article_title + '</a></p>\n';
+ fqterm.appendFile(path + "index.html", a);
+ } else if (article_category == '[鐩綍]') {
+ var a = '<p><a href=' + article_num + '/index.html>[鐩綍] ' + article_title + '</a></p>\n';
+ fqterm.appendFile(path + "index.html", a);
+ } else {
+ break;
+ }
+ fqterm.sendString('j');
+ sleep(timeout);
+ var str_next = fqterm.getText(fqterm.caretY());
+ article_num_next = get_list_num(str_next);
+ if (article_num_next == "" || parseInt(article_num_next) <= parseInt(article_num)) {
+ break;
+ }
+ }
+ var e = make_index_ender();
+ fqterm.appendFile(path + 'index.html', e);
+ fqterm.sendString('q');
+}
+
+build_index();
diff --git a/res/script/continuous.py b/res/script/continuous.py
new file mode 100644
index 0000000..4240f3a
--- /dev/null
+++ b/res/script/continuous.py
@@ -0,0 +1,19 @@
+# This is demo script to continuousely download 4 articles
+import fqterm
+import sys, time
+
+# f=open("/home/dp2/test.txt","w")
+f = open("c:\\test.txt", "w")
+
+lp=long(sys.argv[0])
+
+for i in range(4):
+ fqterm.sendString(lp,"r")
+ time.sleep(1)
+ f.write(fqterm.getArticle(lp, 100)[0])
+ time.sleep(1)
+ fqterm.sendString(lp,"q")
+ time.sleep(1)
+ fqterm.sendString(lp,"j")
+ time.sleep(1)
+f.close()
diff --git a/res/script/download.js b/res/script/download.js
new file mode 100644
index 0000000..1a27fa4
--- /dev/null
+++ b/res/script/download.js
@@ -0,0 +1,19 @@
+fqterm.import("utils.js");
+
+var n = 4;
+var timeout = 1000;
+var filename = "c:\\test.txt";
+fqterm.writeFile(filename, "")
+
+while(n--)
+{
+ fqterm.sendString("r");
+ sleep(timeout);
+ var article = fqterm.copyArticle();
+ fqterm.appendFile(filename, article)
+ fqterm.sendString("q");
+ sleep(timeout);
+ fqterm.sendString("j");
+ sleep(timeout);
+}
+
diff --git a/res/script/download.py b/res/script/download.py
new file mode 100644
index 0000000..d274cc5
--- /dev/null
+++ b/res/script/download.py
@@ -0,0 +1,253 @@
+# coding=UTF-8
+"""
+download the directory
+
+ 13/09/04 kingson
+ * add this changelog
+
+Notes:
+ 1. make sure the path is empty, otherwise mkdir complain and stoped
+ 2. the time for sleep() varies dependent on sites
+ 3. tested for FireBird BBS only
+Bugs:
+ 1.
+TODO:
+ 1. add some GUI for control, e.g. stop, pause, resume, inside script
+ 2. make it robust
+"""
+
+import fqterm
+import sys,os,string,time,re
+
+# the pointer to fqtermWindow object
+lp=long(sys.argv[0])
+
+wait_time = 2.0
+
+def txt2html(txt):
+ txt=string.replace(txt,"\n","\n<br>")
+ return string.replace(txt," ","&nbsp;")
+
+def upper_dir(path):
+ if(sys.platform=="win32"): # '\' for win32
+ i=path.rfind("\\",0,-1)
+ else:
+ i=path.rfind("/",0,-1) # '/' for *nix
+ return path[:i+1]
+
+def lower_dir(path, subdir):
+ if(sys.platform=="win32"): # '\' for win32
+ return path+subdir+"\\"
+ else:
+ return path+subdir+"/" # '/' for *nix
+
+def write_html_header(hfile, num):
+ hfile.write("""<html><head>
+ <meta http-equiv="Content-Language" content="zh-cn">
+ <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
+ <title>FQTerm Article Downloader</title>
+ </head>""")
+ hfile.write("<body>")
+ hfile.write("<p><b><h1>FQTerm Article Downloader</h1></b></p>")
+ txt="""<p><p align=center><a href=%d.html>Prevoius</a>
+ <a href=index.html>Index</a>
+ <a href=%d.html>Next</a></p align=center></p>""" % (num-1,num+1)
+ hfile.write(txt)
+ hfile.write("<hr><p></p>\n")
+
+def write_html_ender(hfile,num):
+ hfile.write("<hr><p></p>")
+ txt="""<p><p align=center><a href=%d.html>Prevoius</a>
+ <a href=index.html>Index</a>
+ <a href=%d.html>Next</a></p align=center></p>""" % (num-1,num+1)
+ hfile.write(txt)
+ hfile.write("<p><b>FQTerm --- BBS client based on Qt library</b><p>")
+ hfile.write("""<p><a href=http://code.google.com/p/fqterm>
+ http://code.google.com/p/fqterm</a><p>""")
+ hfile.write("</body>")
+ hfile.write("</html>")
+
+def write_index_header(hfile):
+ hfile.write("""<html><head>
+ <meta http-equiv="Content-Language" content="zh-cn">
+ <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
+ <title>FQTerm Article Downloader</title>
+ </head>""")
+ hfile.write("<p><b><h1>FQTerm Article Downloader</h1></b></p>")
+ hfile.write("""<p><p align=center>
+ <a href=\"../index.html\">Up</a>
+ </p align=center</p>""")
+ hfile.write("<hr><p></p>\n")
+
+def write_index_ender(hfile):
+ hfile.write("<hr><p></p>")
+ hfile.write("""<p><p align=center>
+ <a href=\"../index.html\">Up</a>
+ </p align=center</p>""")
+ hfile.write("<p><b>FQTerm --- BBS client based on Qt library</b><p>")
+ hfile.write("""<p><a href=http://code.google.com/p/fqterm>
+ http://code.google.com/p/fqterm</a><p>""")
+ hfile.write("</body>")
+ hfile.write("</html>")
+
+def get_list_num(str_line):
+ # get the number
+ matchobj = re.search("[0-9]+",str_line)
+ if(matchobj==None):
+ # wrong format
+ return None
+ else:
+ return str_line[matchobj.start():matchobj.end()]
+
+def get_list_categary(str_line):
+ # get the categary
+ matchobj = re.search("\[[^0-9]{6}\]",str_line)
+ if(matchobj==None):
+ # wrong format
+ return None
+ else:
+ return str_line[matchobj.start():matchobj.end()]
+
+def get_list_title(str_line):
+ matchobj = re.search("\[[^0-9]{6}\]",str_line)
+ if(matchobj==None):
+ # wrong format
+ return None
+ else:
+ # get the title
+ return str_line[matchobj.end()+1:]
+
+def down_folder():
+ global path
+ first_num = -1
+ while(1):
+ line=fqterm.caretY(lp)
+ str_line=fqterm.getText(lp,line)
+
+ article_num = get_list_num(str_line)
+ if (first_num == -1):
+ first_num = article_num
+ if(article_num==None):
+ print "Wrong format list"
+ # end the index.html
+ f=open(path+"index.html","a+")
+ write_index_ender(f)
+ f.close()
+ # wrong formated list, leave out
+ print "leave %s" % path
+ fqterm.sendString(lp,'q')
+ path=upper_dir(path)
+ time.sleep(wait_time)
+ return
+
+ article_categary = get_list_categary(str_line)
+ article_title = get_list_title(str_line)
+
+ # download if its file
+ if article_categary == '[鏂囦欢]':
+ # log in index.html
+ f=open(path+"index.html","a+")
+ f.write("<p><a href="+article_num+".html>")
+ f.write("[鏂囦欢] "+article_title+"</a></p>\n")
+ f.close()
+ # downlaod and save article
+ f=open(path+article_num+".html","w")
+ fqterm.sendString(lp,'r')
+ time.sleep(wait_time)
+ write_html_header(f,int(article_num))
+ f.write(txt2html(fqterm.getArticle(lp, 100)[0]))
+ f.write("\n")
+ write_html_ender(f,int(article_num))
+ f.close()
+ time.sleep(wait_time)
+ fqterm.sendString(lp,"q")
+ time.sleep(wait_time)
+ # recursive callback if its directory
+ elif article_categary == '[鐩綍]':
+ # log in index.html
+ f=open(path+"index.html","a+")
+ f.write("<p><a href="+article_num+"/index.html>")
+ f.write("[鐩綍] "+article_title+"</a></p>\n")
+ f.close()
+ # make dir and enter
+ path=lower_dir(path,article_num)
+ os.mkdir(path)
+ print "enter %s" % path
+ # create index.html and write the header
+ f=open(path+"index.html","w")
+ write_index_header(f)
+ f.close()
+ # recursive call
+ fqterm.sendString(lp,'r')
+ time.sleep(wait_time)
+ # increase delay when condition not met
+ down_folder()
+ else:
+ print "Unrecognized Categary"
+ # end the index.html
+ f=open(path+"index.html","a+")
+ write_index_ender(f)
+ f.close()
+ # wrong formated list, leave out
+ print "leave %s" % path
+ fqterm.sendString(lp,'q')
+ path=upper_dir(path)
+ time.sleep(wait_time)
+ return
+ str_next=fqterm.getText(lp,line+1)
+ # move cursor down and get the num
+ fqterm.sendString(lp,'j')
+ time.sleep(wait_time)
+ str_next=fqterm.getText(lp,fqterm.caretY(lp))
+ article_num_next = get_list_num(str_next)
+ if(article_num_next==None):
+ print "Wrong format list"
+ # end the index.html
+ f=open(path+"index.html","a+")
+ write_index_ender(f)
+ f.close()
+ # wrong formated list, leave out
+ print "leave %s" % path
+ fqterm.sendString(lp,'q')
+ path=upper_dir(path)
+ time.sleep(wait_time)
+ return
+ # exit current dir when the number of the next one equals or small then last
+ # this may cause problem when the server is extra slow
+ if(int(article_num_next) <= int(article_num)):
+ #print "leaving, because cur: %s < pre: %s" % (article_num_next , article_num)
+ if(path!=path_dir):
+ # end the index.html
+ f=open(path+"index.html","a+")
+ write_index_ender(f)
+ f.close()
+ # leave out
+ print "leave %s" % path
+ fqterm.sendString(lp,'q')
+ path=upper_dir(path)
+ time.sleep(wait_time)
+ return
+
+# NOTE: make sure path ended with '/'(*nix) or '\\'(windowz)
+#path_dir=path="e:\\temp\\test\\"
+path_dir=path="/home/dp2/temp/test/"
+
+# try to save all to home dir
+# path_dir=path=os.environ['HOME']+"/.fqterm/downloads/"+time.ctime()+"/"
+os.makedirs(path)
+
+# enter
+fqterm.sendString(lp,'x')
+time.sleep(wait_time)
+# create index.html and write the header
+f=open(path+"index.html","w")
+write_index_header(f)
+f.close()
+down_folder()
+# end the index.html
+f=open(path+"index.html","a+")
+write_index_ender(f)
+f.close()
+# exit
+fqterm.sendString(lp,'q')
+
diff --git a/res/script/downloadelite.js b/res/script/downloadelite.js
new file mode 100644
index 0000000..b835d6b
--- /dev/null
+++ b/res/script/downloadelite.js
@@ -0,0 +1,207 @@
+锘縡qterm.import("utils.js");
+//NOTE: 1. this file should be in utf8
+// 2. if you cannot enter "BMS", this script may fail.
+//first enter the folder, then start script.
+var timeout = 2000;
+var path = "c:\\elite\\"; //DO NOT miss last slash
+var base_path = path;
+var newlinere;
+if (fqterm.platform() == "Win") {
+ newlinere = /%0D%0A/g;
+} else if (fqterm.platform() == "Mac"){
+ newlinere = /%0D/g;
+} else {
+ newlinere = /%0A/g;
+}
+newlinere = /\r\n|\n|\r/mg;
+//var path = /home/dp2/elite/
+var download = function(filename) {
+ fqterm.sendString("r");
+ sleep(timeout);
+ var article = fqterm.copyArticle();
+ fqterm.sendString("q");
+ sleep(timeout);
+ return article;
+}
+
+var make_html_header = function(num)
+{
+ num = parseInt(num);
+ var result = '<html><head>\n'+
+ '<meta http-equiv="Content-Language" content="zh-cn">\n'+
+ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n'+
+ '<title>FQTerm Article Downloader</title>\n'+
+ '</head>\n'+
+ '<body>\n'+
+ '<p><b><h1>FQTerm Article Downloader</h1></b></p>\n'+
+ '<p><p align=center><a href=' + (num - 1) + '.html>Prevoius</a>\n'+
+ '<a href=index.html>Index</a>\n'+
+ '<a href=' + (num + 1) + '.html>Next</a></p align=center></p>'+
+ '<hr><p></p>\n';
+ return result;
+}
+
+var make_html_ender = function(num)
+{
+ num = parseInt(num);
+ var result = '<hr><p></p>\n'+
+ '<p><p align=center><a href=' + (num - 1) + '.html>Prevoius</a>\n'+
+ '<a href=index.html>Index</a>\n'+
+ '<a href=' + (num + 1) + '.html>Next</a></p align=center></p>\n'+
+ '<p><b>FQTerm --- BBS client based on Qt library</b><p>\n'+
+ '<p><a href=http://code.google.com/p/fqterm>\n'+
+ 'http://code.google.com/p/fqterm</a><p>\n'+
+ '</body>\n'+
+ '</html>\n';
+ return result;
+}
+
+var make_index_header = function() {
+ var result = '<html><head>\n' +
+ '<meta http-equiv="Content-Language" content="zh-cn">\n' +
+ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n' +
+ '<title>FQTerm Article Downloader</title>\n' +
+ '</head>\n' +
+ '<p><b><h1>FQTerm Article Downloader</h1></b></p>\n' +
+ '<p><p align=center>\n' +
+ '<a href=\"../index.html\">Up</a>\n' +
+ '</p align=center</p>\n' +
+ '<hr><p></p>\n\n';
+ return result;
+}
+
+var make_index_ender = function() {
+ var result = '<hr><p></p>\n' +
+ '<p><p align=center>\n' +
+ '<a href=\"../index.html\">Up</a>\n' +
+ '</p align=center</p>\n' +
+ '<p><b>FQTerm --- BBS client based on Qt library</b><p>\n' +
+ '<p><a href=http://code.google.com/p/fqterm>\n' +
+ 'http://code.google.com/p/fqterm</a><p>\n' +
+ '</body>\n' +
+ '</html>\n';
+ return result;
+}
+
+var get_list_num = function(str_line) {
+ // get the number
+ try{
+ var re = /[0-9]+/;
+ var num = re.exec(str_line);
+ return num[0];
+ } catch(err) {
+ return "";
+ }
+}
+
+var get_list_categary = function(str_line) {
+ try{
+ var re = /\[[^0-9]{2}\]/; //utf8!
+ var cat = re.exec(str_line);
+ return cat[0];
+ } catch(err) {
+ return "";
+ }
+}
+
+var get_list_title = function(str_line) {
+ try{
+ var re = /\[[^0-9]{2}\]/; //utf8!
+ var cat = re.exec(str_line);
+ var i = str_line.search(re);
+ return str_line.substr(i + cat[0].length);
+ } catch(err) {
+ return "";
+ }
+}
+
+var txt2html = function(txt) {
+ var result = escape(txt);
+ var re_nlchar;
+ var newline;
+ if(result.indexOf('%0D%0A') > -1){
+ re_nlchar = /%0D%0A/g ;
+ newline = "%0D%0A";
+ }else if(result.indexOf('%0A') > -1) {
+ re_nlchar = /%0A/g ;
+ newline = "%0A";
+ }else if(result.indexOf('%0D') > -1){
+ re_nlchar = /%0D/g ;
+ newline = "%0A";
+ }
+ result = result.replace(re_nlchar, newline + '<br />');
+ result = result.replace(/%20/g, '&nbsp;');
+ return unescape(result);
+}
+
+var upper_dir = function(path) {
+ var spliter;
+ if (fqterm.platform() == "Win") {
+ spliter = '\\';
+ } else {
+ spliter = '/';
+ }
+ if (path.lastIndexOf(spliter) == path.length - 1) {
+ path = path.substr(0, path.length - 1);
+ }
+ var i = path.lastIndexOf(spliter);
+
+ return path.substr(0, i + 1);
+}
+
+var lower_dir = function(path, subdir) {
+ var spliter;
+ if (fqterm.platform() == "Win") {
+ spliter = '\\';
+ } else {
+ spliter = '/';
+ }
+ if (path.lastIndexOf(spliter) != path.length - 1) {
+ path += spliter;
+ }
+ return path + subdir + spliter;
+}
+
+
+var down_folder = function() {
+ fqterm.makePath(path);
+ var h = make_index_header();
+ fqterm.writeFile(path + 'index.html', h);
+ while (true) {
+ var line = fqterm.caretY();
+ var str_line = fqterm.getText(line);
+ var article_num = get_list_num(str_line);
+ var article_category = get_list_categary(str_line);
+ var article_title = get_list_title(str_line);
+ if (article_category == '[鏂囦欢]') {
+ var a = '<p><a href=' + article_num + '.html>[鏂囦欢] ' + article_title + '</a></p>\n';
+ fqterm.appendFile(path + "index.html", a);
+ var content = make_html_header(article_num) + txt2html(download()) + '\n' + make_html_ender(article_num);
+ fqterm.writeFile(path + article_num + ".html", content);
+ } else if (article_category == '[鐩綍]') {
+ var a = '<p><a href=' + article_num + '/index.html>[鐩綍] ' + article_title + '</a></p>\n';
+ fqterm.appendFile(path + "index.html", a);
+ path = lower_dir(path, article_num);
+ fqterm.sendString('r');
+ sleep(timeout);
+ down_folder();
+ } else {
+ break;
+ }
+ fqterm.sendString('j');
+ sleep(timeout);
+ var str_next = fqterm.getText(fqterm.caretY());
+ article_num_next = get_list_num(str_next);
+ if (article_num_next == "" || parseInt(article_num_next) <= parseInt(article_num)) {
+ break;
+ }
+ }
+ var e = make_index_ender();
+ fqterm.appendFile(path + 'index.html', e);
+ fqterm.sendString('q');
+ path = upper_dir(path);
+ sleep(timeout);
+}
+//fqterm.sendString('x');
+//sleep(timeout);
+down_folder();
diff --git a/res/script/downloadelite_smth.js b/res/script/downloadelite_smth.js
new file mode 100644
index 0000000..42a9d2f
--- /dev/null
+++ b/res/script/downloadelite_smth.js
@@ -0,0 +1,255 @@
+锘縡qterm.import("utils.js");
+//NOTE: 1. this file should be in utf8
+// 2. if you cannot enter "BMS", this script may fail.
+//first enter the folder, then start script.
+var timeout = 6000;
+var path = "c:\\elite-sex\\"; //DO NOT miss last slash
+var base_path = path;
+
+newlinere = /\r\n|\n|\r/mg;
+//var path = /home/dp2/elite/
+
+var lastline = function() {
+ return fqterm.getText(fqterm.rows() - 1);
+}
+
+var firstline = function() {
+ return fqterm.getText(0);
+}
+
+var currentline = function(){
+ return fqterm.getText(fqterm.caretY());
+}
+
+var download = function(filename) {
+
+ var last_line = lastline();
+ fqterm.sendString("r");
+ var n = 10;
+ while(n--) {
+ sleep(timeout / 10);
+ if (lastline() != last_line) break;
+ }
+ var article = fqterm.copyArticle();
+
+ last_line = lastline();
+ fqterm.sendString("q");
+ n = 10;
+ while(n--) {
+ sleep(timeout / 10);
+ var c = lastline();
+ if (c != last_line) {
+ break;
+ }
+ }
+ return article;
+}
+
+var make_html_header = function(num)
+{
+ num = parseInt(num);
+ var result = '<html><head>\n'+
+ '<meta http-equiv="Content-Language" content="zh-cn">\n'+
+ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n'+
+ '<title>FQTerm Article Downloader</title>\n'+
+ '</head>\n'+
+ '<body>\n'+
+ '<p><b><h1>FQTerm Article Downloader</h1></b></p>\n'+
+ '<p><p align=center><a href=' + (num - 1) + '.html>Prevoius</a>\n'+
+ '<a href=index.html>Index</a>\n'+
+ '<a href=' + (num + 1) + '.html>Next</a></p align=center></p>'+
+ '<hr><p></p>\n';
+ return result;
+}
+
+var make_html_ender = function(num)
+{
+ num = parseInt(num);
+ var result = '<hr><p></p>\n'+
+ '<p><p align=center><a href=' + (num - 1) + '.html>Prevoius</a>\n'+
+ '<a href=index.html>Index</a>\n'+
+ '<a href=' + (num + 1) + '.html>Next</a></p align=center></p>\n'+
+ '<p><b>FQTerm --- BBS client based on Qt library</b><p>\n'+
+ '<p><a href=http://code.google.com/p/fqterm>\n'+
+ 'http://code.google.com/p/fqterm</a><p>\n'+
+ '</body>\n'+
+ '</html>\n';
+ return result;
+}
+
+var make_index_header = function() {
+ var result = '<html><head>\n' +
+ '<meta http-equiv="Content-Language" content="zh-cn">\n' +
+ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n' +
+ '<title>FQTerm Article Downloader</title>\n' +
+ '</head>\n' +
+ '<p><b><h1>FQTerm Article Downloader</h1></b></p>\n' +
+ '<p><p align=center>\n' +
+ '<a href=\"../index.html\">Up</a>\n' +
+ '</p align=center</p>\n' +
+ '<hr><p></p>\n\n';
+ return result;
+}
+
+var make_index_ender = function() {
+ var result = '<hr><p></p>\n' +
+ '<p><p align=center>\n' +
+ '<a href=\"../index.html\">Up</a>\n' +
+ '</p align=center</p>\n' +
+ '<p><b>FQTerm --- BBS client based on Qt library</b><p>\n' +
+ '<p><a href=http://code.google.com/p/fqterm>\n' +
+ 'http://code.google.com/p/fqterm</a><p>\n' +
+ '</body>\n' +
+ '</html>\n';
+ return result;
+}
+
+var get_list_num = function(str_line) {
+ // get the number
+ try{
+ var re = /[0-9]+/;
+ var num = re.exec(str_line);
+ return num[0];
+ } catch(err) {
+ return "";
+ }
+}
+
+var get_list_categary = function(str_line) {
+ try{
+ var re = /\[[^0-9]{2}\]/; //utf8!
+ var cat = re.exec(str_line);
+ return cat[0];
+ } catch(err) {
+ return "";
+ }
+}
+
+var get_list_title = function(str_line) {
+ try{
+ var re = /\[[^0-9]{2}\]/; //utf8!
+ var cat = re.exec(str_line);
+ var i = str_line.search(re);
+ return str_line.substr(i + cat[0].length);
+ } catch(err) {
+ return "";
+ }
+}
+
+var txt2html = function(txt) {
+ var result = escape(txt);
+ var re_nlchar;
+ var newline;
+ if(result.indexOf('%0D%0A') > -1){
+ re_nlchar = /%0D%0A/g ;
+ newline = "%0D%0A";
+ }else if(result.indexOf('%0A') > -1) {
+ re_nlchar = /%0A/g ;
+ newline = "%0A";
+ }else if(result.indexOf('%0D') > -1){
+ re_nlchar = /%0D/g ;
+ newline = "%0A";
+ }
+ result = result.replace(re_nlchar, newline + '<br />');
+ result = result.replace(/%20/g, '&nbsp;');
+ return unescape(result);
+}
+
+var upper_dir = function(path) {
+ var spliter;
+ if (fqterm.platform() == "Win") {
+ spliter = '\\';
+ } else {
+ spliter = '/';
+ }
+ if (path.lastIndexOf(spliter) == path.length - 1) {
+ path = path.substr(0, path.length - 1);
+ }
+ var i = path.lastIndexOf(spliter);
+
+ return path.substr(0, i + 1);
+}
+
+var lower_dir = function(path, subdir) {
+ var spliter;
+ if (fqterm.platform() == "Win") {
+ spliter = '\\';
+ } else {
+ spliter = '/';
+ }
+ if (path.lastIndexOf(spliter) != path.length - 1) {
+ path += spliter;
+ }
+ return path + subdir + spliter;
+}
+
+
+var down_folder = function() {
+ var single = true;
+ if (fqterm.caretY() > 0 && get_list_num(fqterm.getText(fqterm.caretY() - 1)) != "") {
+ single = false;
+ } else if (fqterm.caretY() < fqterm.rows() - 1 && get_list_num(fqterm.getText(fqterm.caretY() + 1)) != "") {
+ single = false;
+ }
+
+ fqterm.makePath(path);
+ var h = make_index_header();
+ fqterm.writeFile(path + 'index.html', h);
+ while (true) {
+ var line = fqterm.caretY();
+ var str_line = fqterm.getText(line);
+ var article_num = get_list_num(str_line);
+ var article_category = get_list_categary(str_line);
+ var article_title = get_list_title(str_line);
+ if (article_category == '[鏂囦欢]') {
+ var a = '<p><a href=' + article_num + '.html>[鏂囦欢] ' + article_title + '</a></p>\n';
+ fqterm.appendFile(path + "index.html", a);
+ var content = make_html_header(article_num) + txt2html(download()) + '\n' + make_html_ender(article_num);
+ fqterm.writeFile(path + article_num + ".html", content);
+ } else if (article_category == '[鐩綍]') {
+ var a = '<p><a href=' + article_num + '/index.html>[鐩綍] ' + article_title + '</a></p>\n';
+ fqterm.appendFile(path + "index.html", a);
+ path = lower_dir(path, article_num);
+ var first_line = firstline();
+ fqterm.sendString('r');
+ var n = 10;
+ while(n--) {
+ sleep(timeout / 10);
+ if (firstline() != first_line) break;
+ }
+ down_folder();
+ } else if (article_category == '[閿欒]') {
+ } else {
+ break;
+ }
+ //fqterm.msgBox(single);
+ if (single) break;
+ var cur_line = currentline();
+ fqterm.sendString('j');
+ var n = 10;
+ while(n--) {
+ sleep(timeout / 10);
+ if (currentline() != cur_line) break;
+ }
+ var str_next = fqterm.getText(fqterm.caretY());
+ article_num_next = get_list_num(str_next);
+ if (article_num_next == "" || parseInt(article_num_next) <= parseInt(article_num)) {
+ break;
+ }
+ }
+ var e = make_index_ender();
+ fqterm.appendFile(path + 'index.html', e);
+ path = upper_dir(path);
+
+
+ var first_line = firstline();
+ fqterm.sendString('q');
+ var n = 10;
+ while(n--) {
+ sleep(timeout / 10);
+ if (firstline() != first_line) break;
+ }
+}
+//fqterm.sendString('x');
+//sleep(timeout);
+down_folder();
diff --git a/res/script/post.js b/res/script/post.js
new file mode 100644
index 0000000..2de0f56
--- /dev/null
+++ b/res/script/post.js
@@ -0,0 +1,17 @@
+fqterm.import("utils.js");
+var path = "c:\\temp\\"; //DO NOT miss last slash here.
+var timeout = 500;
+var filelist = fqterm.readFolder(path);
+for (var i = 0; i < filelist.length; ++i)
+{
+ var filename = filelist[i];
+ var content = fqterm.readFile(path + filename);
+ fqterm.sendParsedString("^p");
+ sleep(timeout);
+ fqterm.sendString(filename);
+ fqterm.sendString("\n\n");
+ sleep(timeout);
+ fqterm.sendString(content);
+ fqterm.sendParsedString("^W\n");
+ sleep(timeout);
+} \ No newline at end of file
diff --git a/res/script/post.py b/res/script/post.py
new file mode 100644
index 0000000..27348f2
--- /dev/null
+++ b/res/script/post.py
@@ -0,0 +1,21 @@
+# coding=UTF-8
+# 杩炵画鍙戞枃
+
+import fqterm
+import sys, string, random
+
+sessionID=long(sys.argv[0])
+#print "sessionID is %s"%ID
+
+random.seed()
+for j in range(13):
+ i=random.random()*100000
+ print i
+ title='%f鍙潚铔%f寮犲槾'%(i,i)
+ content='%f鍙溂鐫%f鏉¤吙'%(2*i,4*i)
+ #data=['^p', title, '\n', '\n', content, '^w','\n']
+ fqterm.sendParsedString(sessionID, r'^p%s\n\n%s^w\n'%(title, content) )
+ #for item in data:
+ # SendParsedString(ID, item)
+ # if dataEvents.has_key(ID):
+ # dataEvents[ID].wait()
diff --git a/res/script/postfile.py b/res/script/postfile.py
new file mode 100644
index 0000000..7de8244
--- /dev/null
+++ b/res/script/postfile.py
@@ -0,0 +1,48 @@
+# coding=UTF-8
+
+# 浠庣‖鐩樻枃浠惰繛缁彂鏂
+# for fqterm: we need to add some status check.
+
+import fqterm
+import tools
+import sys, string, random, glob, os, time
+
+ID=long(sys.argv[0])
+#print "sessionID is %s"%ID
+
+random.seed()
+os.chdir(r'/home/dp2/') #涓荤洰褰
+filenames = glob.glob(r'*.txt') #杩囨护鏉′欢
+#filenames.extend( )
+for n in filenames:
+ print n
+ if len(n)>=5 and n[0:5]=='album': #鐗逛緥
+ continue
+ #if n[-4:len(n)]!='.txt':
+ # continue
+ f=file(n, 'r')
+ title=f.readline()
+ title=title.strip()
+ while title and title.strip()=='':
+ title=f.readline()
+ title=title.strip()
+ if not title:
+ continue
+ content=f.read()
+
+ if not title or not content:
+ continue
+
+ data=['\x10', title, '\n', '\n', content, '\x17']
+
+ for item in data:
+ fqterm.sendString(ID, item)
+ print item
+ #if dataEvents.has_key(ID):
+ #dataEvents[ID].wait()
+ fqterm.sendString(ID, '\n')
+ #WaitFor(ID, SST_LIST)
+
+ interval=random.random()*7+3
+ #print interval
+ time.sleep(interval)
diff --git a/res/script/search.js b/res/script/search.js
new file mode 100644
index 0000000..a5be08b
--- /dev/null
+++ b/res/script/search.js
@@ -0,0 +1,22 @@
+fqterm.searchSelected = function(engine) {
+
+ var text = encodeURIComponent(String(fqterm.getSelect(false)));
+ var url = "about:blank";
+ engine = engine.toLowerCase();
+ if (engine == "google") {
+ searchUrl = "http://www.google.com/search?client=fqterm&rls=en&q=" + text + "&sourceid=fqterm";
+ } else if (engine == "baidu") {
+ searchUrl = "http://www.baidu.com/s?ie=utf-8&wd=" + text;
+ } else if (engine == "bing") {
+ searchUrl = "http://www.bing.com/search?q=" + text;
+ } else if (engine == "yahoo") {
+ searchUrl = "http://search.yahoo.com/search?ei=UTF-8&p=" + text;
+ } else if (engine == "custom") {
+ fqterm.msgBox("Modify search.js to customize search engine...");
+ return false;
+ }else {
+ return false;
+ }
+ fqterm.openUrl(searchUrl);
+ return true;
+}
diff --git a/res/script/sendmsg.py b/res/script/sendmsg.py
new file mode 100644
index 0000000..4d9ef2f
--- /dev/null
+++ b/res/script/sendmsg.py
@@ -0,0 +1,33 @@
+# send current article to one assigned email address
+# 1. need CJK codec
+import smtplib
+from email.Header import Header
+from email.Message import Message
+import fqterm,sys,string
+
+lp=long(sys.argv[0])
+article=fqterm.getArticle(lp, 100)[0]
+
+from_addr = "mime@email.com"
+to_addr="yours@email.com"
+
+subject = article.split("\n")
+subject = subject[1]
+subject = subject[7:]
+
+mess = Message()
+h = Header(subject,'GB2312')
+mess['Subject']=h
+
+msg = ("Content-Type: text/plain; charset= GB2312\r\n"
+ "From: %s\r\nTo: %s\r\n%s\r\n\r\n"
+ % (from_addr,to_addr, mess.as_string()))
+msg = msg + article
+
+smtp_host = "smtp.email.com"
+server = smtplib.SMTP(smtp_host)
+server.set_debuglevel(1)
+#maybe your smtp need auth
+#server.login(usr,pwd)
+server.sendmail(from_addr,to_addr,msg)
+server.quit()
diff --git a/res/script/system.js b/res/script/system.js
new file mode 100644
index 0000000..a49df9e
--- /dev/null
+++ b/res/script/system.js
@@ -0,0 +1,48 @@
+锘縡qterm.import("utils.js");
+fqterm.mouseEvent = function(type, states, x, y, delta) {
+ if (type == fqterm.MOUSEEVENT.MOUSE_PRESS &&
+ states & fqterm.BUTTONSTATE.LEFT_BUTTON &&
+ states & fqterm.BUTTONSTATE.CTRL) {
+ fqterm.msgBox(fqterm.getFullTextAt(y, x, 1));
+ }
+ return false;
+}
+
+fqterm.detectMenu = function() {
+ fqterm.setMenuRect(1, 3, 20);
+ return false;
+}
+
+fqterm.antiIdle = function() {
+ //fqterm.msgBox("antiIdle");
+ return false;
+}
+
+
+fqterm.onBell = function() {
+ //fqterm.msgBox("onBell");
+}
+
+fqterm.autoReply = function() {
+ //fqterm.msgBox("autoReply");
+ return false;
+}
+
+
+fqterm.dataEvent = function() {
+ //fqterm.msgBox("data event");
+}
+
+fqterm.keyEvent = function(type, states, key) {
+// if (type == fqterm.KEYEVENT.KEY_PRESS &&
+// states & fqterm.BUTTONSTATE.CTRL && key) {
+// fqterm.msgBox(key);
+// }
+}
+
+
+var timeEvent = function() {
+ //fqterm.msgBox("haha");
+}
+var id = fqterm.setInterval(1000, timeEvent);
+//fqterm.clearInterval(id); \ No newline at end of file
diff --git a/res/script/system.py b/res/script/system.py
new file mode 100644
index 0000000..5305995
--- /dev/null
+++ b/res/script/system.py
@@ -0,0 +1,103 @@
+# coding=UTF-8
+"""
+This information is used to track the changes following this format
+ dd/mm/yy Author
+ * changes
+ * ...
+
+ 10/09/04 kingson
+ * merge code for ytht.net preview by cppgx
+ 08/09/04 kingson
+ * add this changelog information
+"""
+import fqterm, string
+import re, urllib
+
+"""
+get url from ytht
+"""
+
+def previewYTHT(lp):
+ URL=fqterm.getURL(lp)
+ if(URL=='' or URL==None):
+ return
+ if re.search('http://ytht.net/Ytht.Net' \
+ '(\S+)/con\?B=(\d+)&F=M\.(\d+)\.A', URL) != None:
+ # ytht artical URL
+ print 'Analizing ytht artical URL'
+ f_con = urllib.urlopen(URL)
+ con = f_con.read()
+ f_con.close()
+ m_con = re.search('src=\"http://162.105.31.(\d+)(/|:(\d+)/)' \
+ 'Ytht.Net/boards/(\d+)/M\.(\d+)\.A\+\d+\"', con)
+ if m_con != None:
+ URL1 = con[(m_con.start() + 5):(m_con.end() - 1)]
+ print 'URL1 = %s' % URL1
+ f_con1 = urllib.urlopen(URL1)
+ con1_lines = f_con1.readlines()
+ f_con1.close()
+ x = range(0, len(con1_lines))
+ for i in x:
+ m_con1 = re.search('<a href=\'http://162.105.31.(\d+)' \
+ '(/|:(\d+)/)Ytht.Net/attach/bbscon/(\S+)\?B=(\d+)&amp;' \
+ 'F=M\.(\d+)\.A&amp;attachpos=(\d+)&amp;attachname=/(\S+)\'', \
+ con1_lines[i])
+ if m_con1 != None:
+ URL2 = con1_lines[i][(m_con1.start() + 9): \
+ (m_con1.end() - 1)].replace('&amp;', '&')
+ print 'URL2 = %s' % URL2
+ fqterm.previewImage(lp, URL2)
+
+"""
+this is called when beep received
+"""
+def onBell(lp):
+ pass
+
+"""
+this is called when ready to autoreply
+"""
+def autoReply(lp):
+ reply = "I am the auto replier, please wait..."
+ reply_key = fqterm.getReplyKey(lp)
+ if(reply_key==''):
+ fqterm.sendParsedString(lp,"^Z")
+ else:
+ fqterm.sendParsedString(lp,reply_key)
+ fqterm.sendString(lp,reply)
+ fqterm.sendParsedString(lp,"^M")
+
+"""
+this is called when no activity after certain seconds,
+which is set in AddressBook dialog
+"""
+def antiIdle(lp):
+ fqterm.sendParsedString(lp,"^@")
+ print "antiIdle"
+
+"""
+whenever there is a mouse event
+type 0-press 1-release 2-move 3-double click 4-wheel
+state 0x01-left 0x02-right 0x04-middle 0x08-alt 0x10-control 0x20-shift
+cx/cy cursor position x/y in character
+"""
+def mouseEvent(lp, type, state, x, y, delta):
+ # left click + control to preview image
+ if type==0 and state==0x11:
+ previewYTHT(lp)
+
+"""
+whenever there is a key event
+type 0-press 1-release
+state 0x08-alt 0x10-control 0x20-shift
+key refer to Qt/Doc
+"""
+def keyEvent(lp, type, state, key):
+ pass
+
+"""
+whenever there is data from server after decoding
+and displaying
+"""
+def dataEvent(lp):
+ pass
diff --git a/res/script/test.js b/res/script/test.js
new file mode 100644
index 0000000..3018d8c
--- /dev/null
+++ b/res/script/test.js
@@ -0,0 +1,4 @@
+//fqterm.msgBox(fqterm.getAddress())
+//if (!fqterm.isConnected()) fqterm.reconnect()
+//fqterm.previewImage("http://img1.kaixin001.com.cn/i2/kaixinlogo.gif")
+fqterm.msgBox(fqterm.copyArticle());
diff --git a/res/script/tools.py b/res/script/tools.py
new file mode 100644
index 0000000..65320a0
--- /dev/null
+++ b/res/script/tools.py
@@ -0,0 +1,65 @@
+# coding=UTF-8
+# various tools
+
+# Left Arrow <--
+def sendLeft(fqterm,lp):
+ fqterm.sendParsedString(lp,"^[[C")
+# Left Arrow -->
+def sendRight(fqterm,lp):
+ fqterm.sendParsedString(lp,"^[[D")
+# Up Arrow
+def sendUp(fqterm,lp):
+ fqterm.sendParsedString(lp,"^[[A")
+# Down Arrow
+def sendDown(fqterm,lp):
+ fqterm.sendParsedString(lp,"^[[B")
+# Page Up
+def sendPageUp(fqterm,lp):
+ fqterm.sendParsedString(lp,"^[[5")
+# Page Down
+def sendPageDown(fqterm,lp):
+ fqterm.sendParsedString(lp,"^[[6")
+# Enter
+def sendDown(fqterm,lp):
+ fqterm.sendParsedString(lp,"^M")
+
+# Page State
+# Firebird BBS only
+def getPageState(fqterm,lp):
+ pageState="unknown"
+ lastline=fqterm.getText(lp,fqterm.rows(lp)-1)
+ if(lastline.find("闃呰鏂囩珷")!=-1 or
+ lastline.find("闃呰绮惧崕鍖")!=-1 or
+ lastline.find("涓嬮潰杩樻湁")!=-1 or
+ lastline.find("鍥炰俊")!=-1):
+ pageState="reading"
+ elif(lastline.find("鏃堕棿")!=-1 and
+ lastline.find("浣跨敤鑰")!=-1):
+ pageState="list"
+
+ return pageState
+
+# analyze article list
+# return a dictionary
+# {"num":xxx,"sign":"","id":"","date":"","title":""}
+def getListInfo(text):
+ lst=text.split()
+ info["num"]=long(lst[0])
+ info["sign"]=lst[1]
+ info["id"]=lst[2]
+ info["date"]=lst[3]+lst[4]
+ info["title"]=lst[5]
+ return info
+
+# get the current user ID
+# only for FireBird BBS
+def getCurrentID(fqterm,lp):
+ text = fqterm.getText(lp,fqterm.rows(lp)-1)
+ if(text.find("浣跨敤鑰")==-1):
+ return
+ lst = string.split(text,"]")
+ text = lst[2]
+ lst = string.split(text,"[")
+ return lst[1]
+
+
diff --git a/res/script/utils.js b/res/script/utils.js
new file mode 100644
index 0000000..c13202c
--- /dev/null
+++ b/res/script/utils.js
@@ -0,0 +1,46 @@
+锘//script function names:
+//antiIdle() called on antiIdle, if this function exists, the embedded antiIdle procedure will not be called. (use fqterm.isAntiIdle() to get info.)
+//onBell() called on bell received. if this callback exists, the autoReply procedure will not be started. (use fqterm.isAutoReply() to get info.)
+//autoReply() (deprecated) called on autoReply, if this callback exists, the embedded autoReply procedure will not be called
+//dataEvent() called when contents in buffer changed. (after onBell, you will definitely receive one)
+//keyEvent(type(key event type), states (OR flags), key (key code)) called when keyevent received.
+//mouseEvent(type(mouse event type), states (OR flags), x, y, delta(for wheel)) called when mouseevent received. x, y are in term coordinates. If this callback exists, the embedded mouse/wheel support will be disabled (click to read article/enter menu), selecting/right click menu will still be there.
+//detectMenu() set menu rect here and return true to override the embedded menu selection rect. (call fqterm.setMenuRect()). and the mouse click on article, menu, ... will not take effect. you need to implement them in your mouse event.
+
+
+sleep = function(ms) {
+ var originInterval = fqterm.getUIEventInterval();
+ fqterm.setUIEventInterval(1);
+ var start = new Date().getTime();
+ while(true) {
+ if(new Date().getTime() - start > ms) break;
+ }
+ fqterm.setUIEventInterval(originInterval);
+}
+
+
+//script key event type
+fqterm.KEYEVENT = {
+ UNKNOWN : -1,
+ KEY_PRESS : 0
+}
+
+//script mouse event type
+fqterm.MOUSEEVENT = {
+ UNKNOWN : -1,
+ MOUSE_PRESS : 0,
+ MOUSE_RELEASE : 1,
+ MOUSE_MOVE : 2,
+ MOUSE_DBCLICK : 3,
+ WHEEL : 4
+}
+
+//script button state & key modifier
+fqterm.BUTTONSTATE = {
+ LEFT_BUTTON : 0x01,
+ RIGHT_BUTTON : 0x02,
+ MID_BUTTON : 0x04,
+ ALT : 0x08,
+ CTRL : 0x10,
+ SHIFT : 0x20
+}
diff --git a/res/script/weiboshare.js b/res/script/weiboshare.js
new file mode 100644
index 0000000..1ca9f92
--- /dev/null
+++ b/res/script/weiboshare.js
@@ -0,0 +1,51 @@
+
+var text = String(fqterm.getSelect(false));
+var url = String(fqterm.getURL());
+
+/*
+var sharejs = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n' +
+ '<html xmlns="http://www.w3.org/1999/xhtml">\n' +
+ '<head>\n' +
+ '<meta http-equiv="Content-type" content="text/html;charset=UTF-8">\n' +
+ '</head>\n' +
+ '<body onload="simulateclick()">\n' +
+ "<script type=\"text/javascript\" charset=\"utf-8\">\n(function(){\nvar _w = 142 , _h = 32;" +
+ "var param = {\nurl:location.href,\n" +
+ "type:'4',\n" +
+ "count:'0', \n" +
+ "appkey:'',\n" +
+ "title:'%1',\n" +
+ "pic:'%2',\n" +
+ "ralateUid:'2868108420',\n" +
+ "language:'zh_cn', \n" +
+ "rnd:new Date().valueOf()\n}\n" +
+ "var temp = [];\nfor( var p in param ){\ntemp.push(p + '=' + encodeURIComponent( param[p] || '' ) )\n}\n" +
+ "document.write('<iframe allowTransparency=\"true\" frameborder=\"0\" scrolling=\"no\" src=\"http://hits.sinajs.cn/A1/weiboshare.html?' + temp.join('&') + '\"" +
+ " width=\"'+ _w+'\" height=\"'+_h+'\"></iframe>')\n})()\n";
+ sharejs = sharejs + " </script>\n </body>\n </html>\n";
+ fqterm.writeFile("tmp.html", sharejs);
+*/
+
+var picUrl = "";
+
+var pattern = new RegExp('.+\\.(png|jpg|gif|bmp)$', 'i');
+if (pattern.test(url)) {
+ picUrl = url;
+} else {
+ text = text + ' ' + url;
+}
+
+shareurl = 'http://v.t.sina.com.cn/share/share.php?title=' + encodeURIComponent(removeSpecial(text));
+shareurl= shareurl + '&pic=' + encodeURIComponent(picUrl);
+shareurl= shareurl + '&ralateUid=2868108420&url=' + encodeURIComponent("D:\Test\test.html");
+
+
+fqterm.openUrl(shareurl);
+function removeSpecial(str) {
+ var res = str.replace(/"/g, '\\\"');
+ res = res.replace(/'/g, '\\\'');
+ res = res.replace(/\\/g, '\\\\');
+ res = res.replace(/\n/g, ' ');
+ res = res.replace(/\r/g, '');
+ return res;
+}
diff --git a/res/skin/dpstyle/ReadMe.txt b/res/skin/dpstyle/ReadMe.txt
new file mode 100644
index 0000000..bc3e2ed
--- /dev/null
+++ b/res/skin/dpstyle/ReadMe.txt
@@ -0,0 +1,5 @@
+dp"随便"做的style sheet
+基本包括了所有的可定制元素
+请先将.qss文件中的各处image路径改为本机上的路径
+然后在偏好中选择.qss文件
+如果将偏好中qss文件一项留空,则不会使用sytlesheet,也不会占用任何资源。
diff --git a/res/skin/dpstyle/dpstyle.qss b/res/skin/dpstyle/dpstyle.qss
new file mode 100644
index 0000000..b3ad554
--- /dev/null
+++ b/res/skin/dpstyle/dpstyle.qss
@@ -0,0 +1,203 @@
+QMenuBar {
+spacing: 10px;
+background-color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop : 0.0 white, stop : 0.5 gray, stop : 1 black);
+border : 1px outset;
+}
+QMenuBar::item {
+color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+background: transparent;
+}
+
+QMenuBar::item:selected {
+border-radius: 3px;
+border: 2px outset gray;
+color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 gray, stop: 0.1 black,stop: 0.2 gray, stop: 0.3 white, stop: 0.4 gray, stop: 0.5 black, stop: 0.6 gray,stop: 0.7 white, stop: 0.8 gray, stop: 0.9 black, stop: 1.0 gray);
+background : rgba(200, 200, 200, 150);}
+
+QMenuBar::item:pressed {
+border-radius: 3px;
+border: 2px inset gray;
+color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 gray, stop: 0.1 black,stop: 0.2 gray, stop: 0.3 white, stop: 0.4 gray, stop: 0.5 black, stop: 0.6 gray,stop: 0.7 white, stop: 0.8 gray, stop: 0.9 black, stop: 1.0 gray);
+background : rgba(100, 100, 100, 150);}
+
+ QMenu {
+ background-color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+
+ }
+
+ QMenu::item {
+ padding: 2px 25px 2px 20px;
+ border: 1px solid transparent; /* reserve space for selection border */
+ background : rgba(200,200,200,100);
+ color : rgb(40,40,40);
+ }
+
+ QMenu::item:disabled {
+ padding: 2px 25px 2px 20px;
+ border: 1px solid transparent; /* reserve space for selection border */
+ background : rgba(200,200,200,100);
+ color : rgb(200,200,200);
+ }
+
+ QMenu::item:selected {
+ color : rgb(200,200,200);
+ border-radius: 2px;
+ border: 1px outset gray;
+ background: rgba(100, 100, 100, 150);
+ }
+
+ QMenu::icon:checked {
+ border: 1px inset gray;
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ bottom: 1px;
+ left: 1px;
+ }
+
+ QMenu::separator {
+ height: 2px;
+ background: rgb(40,40,40);
+ margin-left: 10px;
+ margin-right: 5px;
+ }
+
+ QMenu::indicator {
+ width: 13px;
+ height: 13px;
+ }
+
+ QMenu::indicator:non-exclusive:unchecked {
+ image: url(C:/Users/Iroul/Desktop/images/checkbox_unchecked.png);
+ }
+
+ QMenu::indicator:non-exclusive:unchecked:selected {
+ image: url(C:/Users/Iroul/Desktop/images/checkbox_unchecked_hover.png);
+ }
+
+ QMenu::indicator:non-exclusive:checked {
+ image: url(C:/Users/Iroul/Desktop/images/checkbox_checked.png);
+ }
+
+ QMenu::indicator:non-exclusive:checked:selected {
+ image: url(C:/Users/Iroul/Desktop/images/checkbox_checked_hover.png);
+ }
+
+ /* exclusive indicator = radio button style indicator (see QActionGroup::setExclusive) */
+ QMenu::indicator:exclusive:unchecked {
+ image: url(C:/Users/Iroul/Desktop/images/radiobutton_unchecked.png);
+ }
+
+ QMenu::indicator:exclusive:unchecked:selected {
+ image: url(C:/Users/Iroul/Desktop/images/radiobutton_unchecked_hover.png);
+ }
+
+ QMenu::indicator:exclusive:checked {
+ image: url(C:/Users/Iroul/Desktop/images/radiobutton_checked.png);
+ }
+
+ QMenu::indicator:exclusive:checked:selected {
+ image: url(C:/Users/Iroul/Desktop/images/radiobutton_checked_hover.png);
+ }
+QToolBar {
+background-color : gray;
+border : 1px inset;
+}
+
+QToolBar:first {
+background-color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop : 0.0 white,stop : 1 gray);
+border : 1px inset;
+}
+QToolBar:middle {
+background-color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop : 0.0 gray,stop : 1 gray);
+border : 1px inset;
+}
+QToolBar:last {
+background-color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop : 0.0 gray,stop : 1 black);
+border : 1px inset;
+}
+
+QToolBar:only-one {
+background-color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop : 0.0 white,stop : 1 black);
+border : 1px inset;
+}
+QToolBar QToolButton {
+background : transparent;
+border : 2px outset transparent;
+border-radius : 3px;
+margin : 2px;
+}
+QToolBar QToolButton:hover {
+background-color : rgba(200,200,200,150);
+border : 2px outset gray;
+border-radius : 3px;
+}
+QToolBar QToolButton:pressed {
+background-color : rgba(200,200,200,150);
+border : 2px inset gray;
+border-radius : 3px;
+}
+QToolBar QToolButton:checked {
+background-color : rgba(200,200,200,150);
+border : 2px inset gray;
+border-radius : 3px;
+}
+ QTabWidget::pane { /* The tab widget frame */
+ border-top: 2px solid #C2C7CB;
+ background : blue;
+ border-color: #9B9B9B;
+ border-bottom-color: #C2C7CB; /* same as pane color */
+ }
+
+ QTabWidget::tab-bar {
+ background : blue;
+ left: 5px; /* move to the right by 5px */
+ }
+
+ QTabWidget {
+ background : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+ }
+ QTabBar {
+ background : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+ }
+ /* Style the tab using the tab sub-control. Note that
+ it reads QTabBar _not_ QTabWidget */
+ QTabBar::tab {
+ border: 2px solid #C4C4C3;
+ border-bottom-color: #C2C7CB; /* same as the pane color */
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ min-width: 8ex;
+ padding: 2px;
+ }
+
+ QTabBar::tab:hover {
+ color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 gray, stop: 0.1 black,stop: 0.2 gray, stop: 0.3 white, stop: 0.4 gray, stop: 0.5 black, stop: 0.6 gray,stop: 0.7 white, stop: 0.8 gray, stop: 0.9 black, stop: 1.0 gray);
+ background : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+ border-color: #9B9B9B;
+ border-bottom-color: #C2C7CB; /* same as pane color */
+ }
+
+ QTabBar::tab:selected {
+ color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 gray, stop: 0.1 black,stop: 0.2 gray, stop: 0.3 white, stop: 0.4 gray, stop: 0.5 black, stop: 0.6 gray,stop: 0.7 white, stop: 0.8 gray, stop: 0.9 black, stop: 1.0 gray);
+ background : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+ border-color: #9B9B9B;
+ border-bottom-color: #C2C7CB; /* same as pane color */
+ }
+
+ QTabBar::tab:!selected {
+ margin-top: 2px; /* make non-selected tabs look smaller */
+ background : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 gray, stop: 0.1 black,stop: 0.2 gray, stop: 0.3 white, stop: 0.4 gray, stop: 0.5 black, stop: 0.6 gray,stop: 0.7 white, stop: 0.8 gray, stop: 0.9 black, stop: 1.0 gray);
+ color : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+
+ }
+ QStatusBar {
+ background : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+ }
+
+QWidget#taskbar {
+ background : transparent;
+}
+#tasklayout {
+ background : qlineargradient(x1: 0, y1: 0, x2: 1, y2: 1, stop: 0.0 black,stop: 0.1 gray, stop: 0.2 white, stop: 0.3 gray, stop: 0.4 black, stop: 0.5 gray,stop: 0.6 white, stop: 0.7 gray, stop: 0.8 black, stop: 0.9 gray, stop: 1.0 white);
+} \ No newline at end of file
diff --git a/res/skin/dpstyle/image/checkbox_checked.png b/res/skin/dpstyle/image/checkbox_checked.png
new file mode 100644
index 0000000..cbf06f6
--- /dev/null
+++ b/res/skin/dpstyle/image/checkbox_checked.png
Binary files differ
diff --git a/res/skin/dpstyle/image/checkbox_checked_hover.png b/res/skin/dpstyle/image/checkbox_checked_hover.png
new file mode 100644
index 0000000..fb4d4d3
--- /dev/null
+++ b/res/skin/dpstyle/image/checkbox_checked_hover.png
Binary files differ
diff --git a/res/skin/dpstyle/image/checkbox_checked_pressed.png b/res/skin/dpstyle/image/checkbox_checked_pressed.png
new file mode 100644
index 0000000..852fcc0
--- /dev/null
+++ b/res/skin/dpstyle/image/checkbox_checked_pressed.png
Binary files differ
diff --git a/res/skin/dpstyle/image/checkbox_unchecked.png b/res/skin/dpstyle/image/checkbox_unchecked.png
new file mode 100644
index 0000000..5f54655
--- /dev/null
+++ b/res/skin/dpstyle/image/checkbox_unchecked.png
Binary files differ
diff --git a/res/skin/dpstyle/image/checkbox_unchecked_hover.png b/res/skin/dpstyle/image/checkbox_unchecked_hover.png
new file mode 100644
index 0000000..6873644
--- /dev/null
+++ b/res/skin/dpstyle/image/checkbox_unchecked_hover.png
Binary files differ
diff --git a/res/skin/dpstyle/image/checkbox_unchecked_pressed.png b/res/skin/dpstyle/image/checkbox_unchecked_pressed.png
new file mode 100644
index 0000000..6a768c4
--- /dev/null
+++ b/res/skin/dpstyle/image/checkbox_unchecked_pressed.png
Binary files differ
diff --git a/res/skin/dpstyle/image/down_arrow.png b/res/skin/dpstyle/image/down_arrow.png
new file mode 100644
index 0000000..85004ae
--- /dev/null
+++ b/res/skin/dpstyle/image/down_arrow.png
Binary files differ
diff --git a/res/skin/dpstyle/image/down_arrow_disabled.png b/res/skin/dpstyle/image/down_arrow_disabled.png
new file mode 100644
index 0000000..d9eefed
--- /dev/null
+++ b/res/skin/dpstyle/image/down_arrow_disabled.png
Binary files differ
diff --git a/res/skin/dpstyle/image/frame.png b/res/skin/dpstyle/image/frame.png
new file mode 100644
index 0000000..05a6005
--- /dev/null
+++ b/res/skin/dpstyle/image/frame.png
Binary files differ
diff --git a/res/skin/dpstyle/image/pagefold.png b/res/skin/dpstyle/image/pagefold.png
new file mode 100644
index 0000000..69be8f2
--- /dev/null
+++ b/res/skin/dpstyle/image/pagefold.png
Binary files differ
diff --git a/res/skin/dpstyle/image/pushbutton.png b/res/skin/dpstyle/image/pushbutton.png
new file mode 100644
index 0000000..c7529ba
--- /dev/null
+++ b/res/skin/dpstyle/image/pushbutton.png
Binary files differ
diff --git a/res/skin/dpstyle/image/pushbutton_hover.png b/res/skin/dpstyle/image/pushbutton_hover.png
new file mode 100644
index 0000000..af0ef9d
--- /dev/null
+++ b/res/skin/dpstyle/image/pushbutton_hover.png
Binary files differ
diff --git a/res/skin/dpstyle/image/pushbutton_pressed.png b/res/skin/dpstyle/image/pushbutton_pressed.png
new file mode 100644
index 0000000..f7381f7
--- /dev/null
+++ b/res/skin/dpstyle/image/pushbutton_pressed.png
Binary files differ
diff --git a/res/skin/dpstyle/image/radiobutton_checked.png b/res/skin/dpstyle/image/radiobutton_checked.png
new file mode 100644
index 0000000..8ab9157
--- /dev/null
+++ b/res/skin/dpstyle/image/radiobutton_checked.png
Binary files differ
diff --git a/res/skin/dpstyle/image/radiobutton_checked_hover.png b/res/skin/dpstyle/image/radiobutton_checked_hover.png
new file mode 100644
index 0000000..d68cb00
--- /dev/null
+++ b/res/skin/dpstyle/image/radiobutton_checked_hover.png
Binary files differ
diff --git a/res/skin/dpstyle/image/radiobutton_checked_pressed.png b/res/skin/dpstyle/image/radiobutton_checked_pressed.png
new file mode 100644
index 0000000..e3cd5a5
--- /dev/null
+++ b/res/skin/dpstyle/image/radiobutton_checked_pressed.png
Binary files differ
diff --git a/res/skin/dpstyle/image/radiobutton_unchecked.png b/res/skin/dpstyle/image/radiobutton_unchecked.png
new file mode 100644
index 0000000..321a9a1
--- /dev/null
+++ b/res/skin/dpstyle/image/radiobutton_unchecked.png
Binary files differ
diff --git a/res/skin/dpstyle/image/radiobutton_unchecked_hover.png b/res/skin/dpstyle/image/radiobutton_unchecked_hover.png
new file mode 100644
index 0000000..666a3b0
--- /dev/null
+++ b/res/skin/dpstyle/image/radiobutton_unchecked_hover.png
Binary files differ
diff --git a/res/skin/dpstyle/image/radiobutton_unchecked_pressed.png b/res/skin/dpstyle/image/radiobutton_unchecked_pressed.png
new file mode 100644
index 0000000..c4b0567
--- /dev/null
+++ b/res/skin/dpstyle/image/radiobutton_unchecked_pressed.png
Binary files differ
diff --git a/res/skin/dpstyle/image/sizegrip.png b/res/skin/dpstyle/image/sizegrip.png
new file mode 100644
index 0000000..350583a
--- /dev/null
+++ b/res/skin/dpstyle/image/sizegrip.png
Binary files differ
diff --git a/res/skin/dpstyle/image/spindown.png b/res/skin/dpstyle/image/spindown.png
new file mode 100644
index 0000000..7ff3c64
--- /dev/null
+++ b/res/skin/dpstyle/image/spindown.png
Binary files differ
diff --git a/res/skin/dpstyle/image/spindown_hover.png b/res/skin/dpstyle/image/spindown_hover.png
new file mode 100644
index 0000000..1486c4d
--- /dev/null
+++ b/res/skin/dpstyle/image/spindown_hover.png
Binary files differ
diff --git a/res/skin/dpstyle/image/spindown_off.png b/res/skin/dpstyle/image/spindown_off.png
new file mode 100644
index 0000000..a90ab3f
--- /dev/null
+++ b/res/skin/dpstyle/image/spindown_off.png
Binary files differ
diff --git a/res/skin/dpstyle/image/spindown_pressed.png b/res/skin/dpstyle/image/spindown_pressed.png
new file mode 100644
index 0000000..f6271cb
--- /dev/null
+++ b/res/skin/dpstyle/image/spindown_pressed.png
Binary files differ
diff --git a/res/skin/dpstyle/image/spinup.png b/res/skin/dpstyle/image/spinup.png
new file mode 100644
index 0000000..1069dd0
--- /dev/null
+++ b/res/skin/dpstyle/image/spinup.png
Binary files differ
diff --git a/res/skin/dpstyle/image/spinup_hover.png b/res/skin/dpstyle/image/spinup_hover.png
new file mode 100644
index 0000000..884c8d7
--- /dev/null
+++ b/res/skin/dpstyle/image/spinup_hover.png
Binary files differ
diff --git a/res/skin/dpstyle/image/spinup_off.png b/res/skin/dpstyle/image/spinup_off.png
new file mode 100644
index 0000000..02dad1f
--- /dev/null
+++ b/res/skin/dpstyle/image/spinup_off.png
Binary files differ
diff --git a/res/skin/dpstyle/image/spinup_pressed.png b/res/skin/dpstyle/image/spinup_pressed.png
new file mode 100644
index 0000000..b1843e2
--- /dev/null
+++ b/res/skin/dpstyle/image/spinup_pressed.png
Binary files differ
diff --git a/res/skin/dpstyle/image/up_arrow.png b/res/skin/dpstyle/image/up_arrow.png
new file mode 100644
index 0000000..e7f7ddb
--- /dev/null
+++ b/res/skin/dpstyle/image/up_arrow.png
Binary files differ
diff --git a/res/skin/dpstyle/image/up_arrow_disabled.png b/res/skin/dpstyle/image/up_arrow_disabled.png
new file mode 100644
index 0000000..4d2c277
--- /dev/null
+++ b/res/skin/dpstyle/image/up_arrow_disabled.png
Binary files differ
diff --git a/res/unite/exit b/res/unite/exit
new file mode 100644
index 0000000..b6852af
--- /dev/null
+++ b/res/unite/exit
@@ -0,0 +1,24 @@
+锘 
+ 
+ 
+ 
+ 
+ 
+ 
+ 鈺斺晲[*]鈺愨晲鈺 Message 鈺愨晲鈺愨晲鈺愨晲鈺 
+ 鈺 鈺 
+ 鈺 [1] 杩斿洖FQ BBS 鈺 
+ 鈺 [2] 绂诲紑鏈珺BS绔 鈺 
+ 鈺 鈺 
+ 鈺________________________________鈺 
+ 鈺 鈺 
+ 鈺   鍙栨秷(C) 鈻 鈺 
+ 鈺 鈻冣杻鈻冣杻鈻冣杻 鈺 
+ 鈺氣晲鈺愨晲鈺愨晲鈺愨晲鈺愨晲鈺愨晲鈺愨晲鈺愨晲鈺愨暆 
+ 
+ 
+ 
+ 
+ 
+ 
+  \ No newline at end of file
diff --git a/res/unite/help b/res/unite/help
new file mode 100644
index 0000000..3b0aa0c
--- /dev/null
+++ b/res/unite/help
@@ -0,0 +1,24 @@
+锘甯姪 FQTerm BBS  
+  
+ 鈹屸攢 鈺扁暡鈺扁暡 Let's fq~ 鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹 
+ 鈺扁暡锔 鈹 鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹 
+ 鈹 鈹 鈺鈺憋浚鈺  鈹 
+ 鈺 鈺|/鈺憋浚锟  code.google.com/p/fqterm  鈹 
+ 鈹 锟o浚路  鈹 
+ 鈹溾攢鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹 
+ 鈹斺攢鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹[FQ TEAM]鈹 
+ 
+ S) 鑴氭湰鏂囨。 
+ T) 蹇嵎閿 
+ U) 杩炴帴Unix涓绘満 F
+ X) 閫鍑 鏄 Q .
+   鈺扁暡鈺扁暡 涓 路 
+  鈺扁暡锔 鈹 鈹 涔 蹇 绉 鈭 
+  鈹 鈹 鈺鈺憋浚鈺 鐢 鏄 鎯 :路 
+  鈺 鈺|/鈺憋浚锟 娲 涓 .鈭: 
+  锟o浚路 鏂 绉 .鈭绰 
+  ` . 寮 .路鈭碻 
+   鈭: .. ..:鈭.:路` 
+  `路鈭 .:鈭:鈭粹` 
+  
+      \ No newline at end of file
diff --git a/res/unite/script-doc b/res/unite/script-doc
new file mode 100644
index 0000000..b23f26f
--- /dev/null
+++ b/res/unite/script-doc
@@ -0,0 +1,199 @@
+锘
+FQTerm鏀寔javascript鍜孭ython鑴氭湰
+
+javascript杩愯鏂瑰紡鏄湪鑴氭湰鑿滃崟涓夋嫨杩愯鑴氭湰
+
+鑰孭ython鍒欓渶瑕侀夋嫨杩愯Python鑴氭湰
+
+濡傛灉浣犵殑鑿滃崟涓病鏈"杩愯Python鑴氭湰"锛岃鏄庣紪璇戞椂鏈皢Python鏀寔缂栬瘧杩汧QTerm锛岃涓庝綔鑰呮垨鑰呮墦鍖呰呰仈绯
+
+*缂栬瘧fqterm鏃讹紝鑻ヨ鏀寔Python锛岃鍦ㄧ幆澧冨彉閲忎腑鍖呭惈python2*.lib鐨勮矾寰
+
+鐜板湪fqterm瀵硅剼鏈洖璋冪殑鏀寔浠嶇劧澶勪簬璇曢獙闃舵锛屾墍浠ユ病鏈夎杞藉湪杩欓噷銆
+
+
+浠ヤ笅鏄痡s鐨刟pi鍒楄〃锛屼綘鍩烘湰鍙互鍦╦s涓儚璋冪敤鏅氱殑javascript function涓鏍疯皟鐢ㄨ繖浜涘嚱鏁
+
+QString绫诲瀷鐨勮繑鍥炲煎皢琚浆鍙樹负瀛楃涓诧紝鑰孮List绫诲瀷鍒欎細琚浆鍙樹负涓涓垪琛
+
+濡傛灉闇瑕乻leep锛屽垯闇瑕乫qterm.import(utils.js)銆俿leep鏄繖绛夛紝鍙傛暟涓簃s銆
+
+璋冪敤鏂瑰紡锛氬湪js鑴氭湰涓紝fqterm.function()鍗冲彲
+
+ //import鍙︿竴涓剼鏈紝濡傛灉鏄浉瀵硅矾寰勶紝鍒欏厛鍦ㄨ剼鏈綋鍓嶈矾寰勬悳绱
+ //鐒跺悗鍦╯cript鐩綍涓嬫悳绱
+ bool import(const QString& filename);
+
+ //timer
+ int setInterval(int ms, const QScriptValue& func);
+ void clearInterval(int id);
+
+ //ui functions.
+ void msgBox(const QString& msg);
+
+ //bbs ui functions
+ int caretX();
+ int caretY();
+
+ QString getText(int row);
+ QString getTextAt(int row, int column, int len);
+ //褰揷olumn鏄竴涓瓧鐨勫悗鍗婇儴鍒嗘椂锛岀敤full鐨勮繖涓増鏈彲浠ュ緱鍒拌繖涓瓧
+ QString getFullTextAt(int row, int column, int len);
+ QString getAttrText(int row);
+ QString getAttrTextAt(int row, int column, int len);
+ QString getFullAttrTextAt(int row, int column, int len);
+
+ void sendString(const QString& str);
+ void sendParsedString(const QString& str);
+
+ int columns();
+ int rows();
+
+ bool isConnected();
+ void disconnect();
+ void reconnect();
+
+ QString getBBSCodec();
+ QString getAddress();
+ int getPort();
+ int getProtocol();
+
+ QString getReplyKey();
+
+ QString getURL();
+ QString getIP();
+ void previewImage(const QString& url);
+ QString copyArticle();
+ void openUrl(const QString & url);
+ QString getSelect(bool color_copy);
+ QList<int> mapToChar(int screenX, int screenY);
+ //next 2 functions are map screen to char for x, y.
+ int charX(int screenX);
+ int charY(int screenY);
+ //mouse position is given in screen coordinate.
+ int mouseX();
+ int mouseY();
+
+ //auxiliary functions.
+ //should be move to some other class.
+ //qt script provides so poor extensions to js.
+ void writeFile(const QString& filename, const QString& str);
+ void appendFile(const QString& filename, const QString& str);
+ QString readFile(const QString& filename);
+ QStringList readFolder(const QString& path);
+ QString platform();
+ bool makePath(const QString& path);
+ QString newLine();
+
+
+浠ヤ笅鏄疨ython鐨凙PI鍒楄〃锛屽叿浣撶敤娉曡繕璇峰弬鑰僺cript鐩綍涓嬬殑鑴氭湰绀轰緥
+
+闇瑕佹敞鎰忕殑鏄
+
+1.闇瑕乮mport fqterm锛屾墠鑳戒娇鐢╢qterm鐨凙PI
+2.long(sys.argv[0])鏄綋鍓嶇獥鍙g殑鏍囪
+
+sessionID=long(sys.argv[0])
+
+formatError(sessionID)
+get the traceback info
+return string
+
+getArticle(sessionID, interval)
+copy current article
+return (string, success)
+
+
+copyArticle(sessionID)
+copy current article (obsolete)
+return string
+
+getText(sessionID, line)
+get text at line
+return string
+
+
+getAttrText(sessionID, line)
+get attr text at line
+return string
+
+sendString(sessionID, str)
+send string to server
+return number of bytes written
+
+
+sendParsedString(sessionID, str)
+send string with escape
+return number of bytes written
+
+caretX(sessionID)
+caret x
+return int
+
+caretY(sessionID)
+caret y
+return int
+
+
+columns(sessionID)
+screen width
+return int
+
+
+rows(sessionID)
+screen height
+return int
+
+
+isConnected(sessionID)
+connected to server or not
+return int
+
+disconnect(sessionID)
+disconnect from server
+
+
+reconnect(sessionID)
+reconnect
+
+
+getBBSCodec(sessionID)
+get the bbs encoding, GBK or Big5
+return string
+
+getAddress(sessionID)
+get the bbs address
+return string
+
+getPort(sessionID)
+get the bbs port number
+return int
+
+getProtocol(sessionID)
+get the bbs protocol, 0/1/2 TELNET/SSH1/SSH2
+return int
+
+getReplyKey(sessionID)
+get the key to reply messages
+return string (wtf...?)
+
+
+getURL(sessionID)
+get the url string under mouse (not sure if works)
+return string
+
+
+previewImage(sessionID, url)
+preview the image link
+
+
+fromUTF8(str, codec)
+decode from utf8 to string in specified codec
+return string
+
+
+toUTF8(str, codec)
+decode from string in specified codec to utf8
+return string
+
+
diff --git a/res/unite/shortcut-doc b/res/unite/shortcut-doc
new file mode 100644
index 0000000..6a08262
--- /dev/null
+++ b/res/unite/shortcut-doc
@@ -0,0 +1,10 @@
+锘縁QTerm鏀寔涓ょ蹇嵎閿缃
+
+1.绯荤粺蹇嵎閿紝璇烽夋嫨Option-->Shortcut Setting鑿滃崟椤癸紝鐒跺悗閫変腑瀵瑰簲鍔熻兘鐨勫揩鎹烽敭涓鍒楋紝鎸変笅浣犻渶瑕佺殑蹇嵎閿傛敞鎰廌el閿槸淇濈暀鐨勶紝鐢ㄤ互娓呯┖蹇嵎閿
+
+
+2.鑷畾涔夊揩鎹烽敭锛屽彲浠ラ氳繃鐐瑰嚮宸ュ叿鏍忎笂鐨勯敭鐩樺浘鏍囨潵璁剧疆銆傝繖閲岄渶瑕佹墜宸ヨ緭鍏ュ揩鎹烽敭浠g爜(濡侰trl+Alt+C)锛屽苟涓斿湪鎸夐敭鏍忎腑杈撳叆鐩稿簲鐨勬寜閿簭鍒椼傞渶瑕佹敞鎰忕殑涓鐐规槸锛孍nter鐢≧eturn浠f浛锛屽嵆浣跨敤Ctrl+Return锛屼笉鑳戒娇鐢–trl+Enter銆
+
+娉ㄦ剰Ctrl鐢╚琛ㄧず锛屾瘮濡侰trl-P灏辨槸^P锛屽洖杞︽槸^M锛屾柟鍚戦敭璇风敤涓嬮潰鐨勬彁绀烘寜閽緭鍏ャ
+
+F1鑷矲12鐨勫簭鍒楁槸^[[11~ ^[[12~ ^[[13~ ^[[14~ ^[[15~ ^[[17~ ^[[18~ ^[[19~ ^[[20~ ^[[21~ ^[[23~ ^[[24~ \ No newline at end of file
diff --git a/res/unite/ssh-unix-doc b/res/unite/ssh-unix-doc
new file mode 100644
index 0000000..7d5d6fa
--- /dev/null
+++ b/res/unite/ssh-unix-doc
@@ -0,0 +1,17 @@
+锘1.鍦ㄧ珯鐐硅缃-->鍏朵粬閫夐」鍗′腑鍏抽棴鍝嶉搩銆傜獥鍙f尟鍔ㄤ細鑷姩琚叧闂
+
+2.鍦ㄧ珯鐐硅缃-->鍏朵粬閫夐」鍗′腑鍏抽棴闃插彂鍛嗭紝鍚﹀垯浼氭湁闃插彂鍛嗗瓧绗︿覆琚彂閫佽嚦鏈嶅姟鍣ㄣ
+
+3.鍦ㄧ珯鐐硅缃-->灞炴ч夐」鍗′腑璁剧疆姝g‘鐨勭紪鐮佽缃紝杩欏拰浣犵殑*nix涓绘満璁剧疆鏈夊叧锛屾垜浠幇鍦ㄦ敮鎸乁TF8缂栫爜銆
+
+4.浣跨敤UTF8鏃舵垜浠棤娉曚娇鐢╠ebug妯″紡锛屽惁鍒欒繖浼氬鑷翠竴浜涜竟鐣屾鏌ラ棶棰樺拰crash锛屽湪浠ュ悗鐨勭増鏈腑锛屾垜浠細璇曞浘瑙e喅杩欎釜闂銆
+
+5.鍦ㄧ珯鐐硅缃-->閿洏涓皢閫鏍奸敭璁剧疆涓"^?"銆
+
+6.鍦ㄩ夐」-->鍋忓ソ涓叧闂璄NQ銆
+
+7.鍦ㄧ珯鐐硅缃-->鍏朵粬閫夐」鍗″叧闂瓃modem涓嬭浇銆
+
+8.鍦ㄧ珯鐐硅缃-->缁堢閫夐」鍗′腑灏嗙粓绔被鍨嬭缃负vt102鎴杧term銆
+
+9.鐜板湪鎴戜滑鏀寔缁堢绐楀彛琛屽垪鏁扮殑鍙樺寲锛屼絾鏄粓绔獥鍙g殑澶у皬闄愬畾涓640x480銆
diff --git a/res/unite/welcome b/res/unite/welcome
new file mode 100644
index 0000000..e8cf95e
--- /dev/null
+++ b/res/unite/welcome
@@ -0,0 +1,24 @@
+锘涓婚夊崟 FQTerm BBS  
+  
+ 鈹屸攢 鈺扁暡鈺扁暡 Let's fq~~ 鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹 
+ 鈺扁暡锔 鈹 鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹 
+ 鈹 鈹 鈺鈺憋浚鈺  鈹 
+ 鈺 鈺|/鈺憋浚锟  code.google.com/p/fqterm  鈹 
+ 鈹 锟o浚路  鈹 
+ 鈹溾攢鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹 
+ 鈹斺攢鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹鈹[FQ TEAM]鈹 
+ 
+ H) 甯姪鏂囨。 
+ X) 閫鍑 
+ F 
+  鏄 Q . 
+   鈺扁暡鈺扁暡 涓 路 
+  鈺扁暡锔 鈹 鈹 涔 蹇 绉 鈭 
+  鈹 鈹 鈺鈺憋浚鈺 鐢 鏄 鎯 :路 
+  鈺 鈺|/鈺憋浚锟 娲 涓 .鈭: 
+  锟o浚路 鏂 绉 .鈭绰 
+  ` . 寮 .路鈭碻 
+   鈭: .. ..:鈭.:路` 
+  `路鈭 .:鈭:鈭粹` 
+  
+      \ No newline at end of file
diff --git a/res/userconf/README.txt b/res/userconf/README.txt
new file mode 100644
index 0000000..9f88660
--- /dev/null
+++ b/res/userconf/README.txt
@@ -0,0 +1,5 @@
+Don't modify files in this directory. They are backup files for user configurable data.
+
+If you do want to change settings, please go to:
+*nix: $HOME/.fqterm/
+win32: $HOME/Application Data/FQTerm/ \ No newline at end of file
diff --git a/res/userconf/address.cfg.orig b/res/userconf/address.cfg.orig
new file mode 100644
index 0000000..a842800
--- /dev/null
+++ b/res/userconf/address.cfg.orig
@@ -0,0 +1,156 @@
+[bbs 0]
+addr=bbs.newsmth.org
+alwayshighlight=0
+ansicolor=1
+antiidlestring=^@
+autoclosewin=0
+autocopy=1
+autofont=1
+autologin=0
+autoreply=(FQTerm) Sorry, I am not around
+bautoreply=1
+bbscode=0
+bgcolor=#000000
+colorcopy=0
+column=80
+cursor=1
+displaycode=0
+escape=^[^[[
+fgcolor=#c6c3c6
+hosttype=0
+interval=2
+keytype=0
+loadscript=0
+maxidle=120
+menucolor=#004184
+menutype=2
+name=NEWSMTH
+password=
+port=23
+postlogin=
+prelogin=
+protocol=0
+proxyaddr=
+proxyauth=0
+proxypassword=
+proxyport=0
+proxytype=0
+proxyuser=
+reconnect=0
+rectselect=0
+replykey=
+retrytimes=-1
+row=24
+schemafile=
+scriptfile=
+scroll=240
+sshpassword=
+sshuser=
+termtype=vt102
+user=
+
+[bbs 1]
+addr=newsmth.net
+alwayshighlight=0
+ansicolor=1
+antiidlestring=^@
+autoclosewin=0
+autocopy=1
+autofont=1
+autologin=0
+autoreply=(FQTerm) Sorry, I am not around
+bautoreply=1
+bbscode=0
+bgcolor=#000000
+colorcopy=0
+column=80
+cursor=1
+displaycode=0
+escape=^[^[[
+fgcolor=#c6c3c6
+hosttype=0
+interval=2
+keytype=0
+loadscript=0
+maxidle=120
+menucolor=#004184
+menutype=2
+name=ssh_NEWSMTH
+password=
+port=22
+postlogin=
+prelogin=
+protocol=1
+proxyaddr=
+proxyauth=0
+proxypassword=
+proxyport=0
+proxytype=0
+proxyuser=
+reconnect=0
+rectselect=0
+replykey=
+retrytimes=-1
+row=24
+schemafile=
+scriptfile=
+scroll=240
+sshpassword=
+sshuser=
+termtype=vt102
+user=
+
+[bbs 2]
+addr=mitbbs.com
+alwayshighlight=0
+ansicolor=1
+antiidlestring=^@
+autoclosewin=0
+autocopy=1
+autofont=1
+autologin=0
+autoreply=(FQTerm) Sorry, I am not around
+bautoreply=1
+bbscode=0
+bgcolor=#000000
+colorcopy=0
+column=80
+cursor=1
+displaycode=0
+escape=^[^[[
+fgcolor=#c6c3c6
+hosttype=0
+interval=2
+keytype=0
+loadscript=0
+maxidle=120
+menucolor=#004084
+menutype=2
+name=Unknown Space
+password=
+port=23
+postlogin=
+prelogin=
+protocol=0
+proxyaddr=
+proxyauth=0
+proxypassword=
+proxyport=0
+proxytype=0
+proxyuser=
+reconnect=0
+rectselect=0
+replykey=
+retrytimes=-1
+row=24
+schemafile=
+scriptfile=
+scroll=240
+sshpassword=
+sshuser=
+termtype=vt102
+user=
+
+[bbs list]
+num=3
+
diff --git a/res/userconf/fqterm.cfg.orig b/res/userconf/fqterm.cfg.orig
new file mode 100644
index 0000000..a82c376
--- /dev/null
+++ b/res/userconf/fqterm.cfg.orig
@@ -0,0 +1,58 @@
+[global]
+articledialog=700 224 645 584
+bbsbar=0 2 2 1 21
+clipcodec=0
+fullscreen=0
+keybar=1 2 1 0 0
+language=zh_CN
+mainbar=1 2 0 1 0
+max=1
+msgdialog=629 325 474 212
+pixelsize=16
+pointsize=12
+quick default index=0
+quickdefaultindex=3
+subwindowmax=1
+subwindowsize=1280 652
+switchbar=1
+theme=0
+toolbarstate=000000ff00000000fd00000000000005000000029800000004000000040000000800000008fc00000001000000020000000300000018004d00610069006e00200054006f006f006c0042006100720100000000000000460000000000000000000000140043007500730074006f006d0020004b0065007901000000460000006200000000000000000000001c0062006200730020006f007000650072006100740069006f006e007301000000a8000004580000000000000000
+version=000309
+vscrollpos=2
+
+[key]
+key0=0^Ptest^M^Mhehe^M^X^M^M
+key1=0^[[Cr^Morz!^W^M
+name0=post
+name1=orz
+num=1
+shortcut0=
+shortcut1=Ctrl+Alt+R
+
+[preference]
+antialias=1
+beep=1
+blinktab=1
+clearpool=0
+http=
+image=
+logmsg=1
+smartww=1
+url=1
+vsetting=1
+warn=1
+wheel=1
+wordwrap=72
+xim=0
+
+[quick 0]
+addr=newsmth.net
+port=23
+
+[quick 1]
+addr=newsmth.net
+port=22
+
+[quick list]
+num=2
+
diff --git a/res/userconf/language.cfg.orig b/res/userconf/language.cfg.orig
new file mode 100644
index 0000000..a7fa5cc
--- /dev/null
+++ b/res/userconf/language.cfg.orig
@@ -0,0 +1,4 @@
+锘縖Name]
+zh_CN=绠浣撲腑鏂(&C)
+zh_TW=绻侀珨涓枃(&T)
+