94b3fa1481bf7ea95b55626eecb7dea83e75519b
[claws.git] / src / prefs_common.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  * 
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #endif
23
24 #include "defs.h"
25
26 #include <glib.h>
27 #include <glib/gi18n.h>
28 #include <gtk/gtk.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <unistd.h>
34 #include <sys/types.h>
35 #include <sys/stat.h>
36 #include <errno.h>
37
38 #include "main.h"
39 #include "prefs_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "prefs_folder_column.h"
44 #include "mainwindow.h"
45 #include "summaryview.h"
46 #include "folderview.h"
47 #include "messageview.h"
48 #include "manage_window.h"
49 #include "inc.h"
50 #include "menu.h"
51 #include "codeconv.h"
52 #include "utils.h"
53 #include "gtkutils.h"
54 #include "alertpanel.h"
55 #include "folder.h"
56 #include "socket.h"
57 #include "filesel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
62
63 enum {
64         DATEFMT_FMT,
65         DATEFMT_TXT,
66         N_DATEFMT_COLUMNS
67 };
68
69 PrefsCommon prefs_common;
70
71 GtkWidget *notebook;
72
73 #ifdef G_OS_WIN32
74 /*
75  * In the Windows version prefs_common contains
76  *   - the non-OS-specific settings of the "Common" section and
77  *   - the OS-specific settings of the "CommonWin32" section
78  * The OS-specific settings of the "Common" section are not used
79  * but saved in prefs_unix.
80  */
81
82 #  define SPECIFIC_PREFS prefs_unix
83
84 static PrefsCommon prefs_unix;
85
86 static PrefParam param_os_specific[] = {
87         /* Receive */
88         {"ext_inc_path", "",
89          &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
90         {"newmail_notify_cmd", "",
91          &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
92
93         /* new fonts */
94         {"widget_font_gtk2",    NULL,
95           &prefs_common.widgetfont,             P_STRING, NULL, NULL, NULL},
96         {"message_font_gtk2",   "Monospace 9",
97          &prefs_common.textfont,                P_STRING, NULL, NULL, NULL},
98         {"print_font_gtk2",     "Monospace 9",
99          &prefs_common.printfont,               P_STRING, NULL, NULL, NULL},
100         {"small_font_gtk2",     "Sans 9",
101           &prefs_common.smallfont,              P_STRING, NULL, NULL, NULL},
102         {"normal_font_gtk2",    "Sans 9",
103           &prefs_common.normalfont,             P_STRING, NULL, NULL, NULL},
104         /* Message */
105         {"attach_save_directory", NULL,
106          &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
107         {"attach_load_directory", NULL,
108          &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
109
110         /* MIME viewer */
111         {"mime_textviewer", NULL,
112          &prefs_common.mime_textviewer,   P_STRING, NULL, NULL, NULL},
113         {"mime_open_command", "notepad '%s'",
114          &prefs_common.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
115
116         /* Interface */
117         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
118          &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
119
120         /* Other */
121         {"uri_open_command", NULL,
122          &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
123         {"print_command", "notepad /p %s",
124          &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
125         {"ext_editor_command", "notepad %s",
126          &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
127
128         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
129 };
130 #else
131 #  define SPECIFIC_PREFS prefs_common
132 #endif
133
134 /*
135    parameter name, default value, pointer to the prefs variable, data type,
136    pointer to the widget pointer,
137    pointer to the function for data setting,
138    pointer to the function for widget setting
139  */
140
141 static PrefParam param[] = {
142         /* Receive */
143         {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
144          NULL, NULL, NULL},
145         {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
146          NULL, NULL, NULL},
147
148         {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
149          NULL, NULL, NULL},
150         {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
151          NULL, NULL, NULL},
152         {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
153          NULL, NULL, NULL},
154         {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
155          P_BOOL, NULL, NULL, NULL},
156         {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
157          P_BOOL, NULL, NULL, NULL},
158         {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
159          P_BOOL, NULL, NULL, NULL},
160         {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
161         P_BOOL, NULL, NULL, NULL},
162         {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
163          NULL, NULL, NULL},
164         {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
165          NULL, NULL, NULL},
166         {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
167          NULL, NULL, NULL},
168         {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
169          NULL, NULL, NULL},
170         {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
171          P_BOOL, NULL, NULL, NULL},
172         {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
173          P_BOOL, NULL, NULL, NULL},
174  
175         /* Send */
176         {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
177          NULL, NULL, NULL},
178         {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
179          P_BOOL, NULL, NULL, NULL},
180         {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
181          NULL, NULL, NULL},
182         {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
183          NULL, NULL, NULL},
184         {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
185          NULL, NULL, NULL},
186
187         {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
188          NULL, NULL, NULL},
189         {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
190          NULL, NULL, NULL},
191
192         {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
193          P_BOOL, NULL, NULL, NULL},
194
195         /* Compose */
196         {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
197          NULL, NULL, NULL},
198         {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
199          P_BOOL, NULL, NULL, NULL},
200         {"redirect_keep_from", "FALSE",
201          &prefs_common.redirect_keep_from, P_BOOL,
202          NULL, NULL, NULL},
203         {"undo_level", "50", &prefs_common.undolevels, P_INT,
204          NULL, NULL, NULL},
205         {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
206          NULL, NULL, NULL},
207         {"compose_subject_format", "",
208          &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
209         {"compose_body_format", N_("Hello,\\n"),
210          &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
211
212         {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
213          NULL, NULL, NULL},
214         {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
215          NULL, NULL, NULL},
216         {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
217          NULL, NULL, NULL},
218         {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
219          NULL, NULL, NULL},
220         {"autosave", "TRUE", &prefs_common.autosave,
221          P_BOOL, NULL, NULL, NULL},
222         {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
223          NULL, NULL, NULL},
224 #if USE_ASPELL
225         {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
226          NULL, NULL, NULL},
227         {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
228          NULL, NULL, NULL},
229         {"dictionary",  "", &prefs_common.dictionary, P_STRING,
230          NULL, NULL, NULL},
231         {"alt_dictionary",  "", &prefs_common.alt_dictionary, P_STRING,
232          NULL, NULL, NULL},
233         {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
234          NULL, NULL, NULL},
235         {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
236          NULL, NULL, NULL},
237         {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
238          NULL, NULL, NULL},
239         {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
240          P_BOOL, NULL, NULL, NULL},
241         {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
242          NULL, NULL, NULL},
243         {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
244          NULL, NULL, NULL},
245 #endif
246         {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
247          NULL, NULL, NULL},
248         {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
249          NULL, NULL, NULL},
250
251         /* Account autoselection */
252         {"reply_account_autoselect", "TRUE",
253          &prefs_common.reply_account_autosel, P_BOOL,
254          NULL, NULL, NULL},
255         {"forward_account_autoselect", "TRUE",
256          &prefs_common.forward_account_autosel, P_BOOL,
257          NULL, NULL, NULL},
258         {"reedit_account_autoselect", "TRUE",
259          &prefs_common.reedit_account_autosel, P_BOOL,
260          NULL, NULL, NULL},
261
262         {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
263          NULL, NULL, NULL},
264
265 #ifndef MAEMO
266         {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
267          NULL, NULL, NULL},
268 #else
269         {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
270          NULL, NULL, NULL},
271 #endif
272
273         /* Quote */
274         {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
275          NULL, NULL, NULL},
276         {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
277          &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
278
279         {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
280          NULL, NULL, NULL},
281         {"forward_quote_format",
282          N_("\\n\\nBegin forwarded message:\\n\\n"
283          "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
284          "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
285          &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
286         {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
287          NULL, NULL, NULL},
288
289         /* Display */
290         /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
291         {"widget_font",         NULL,
292           &prefs_common.widgetfont_gtk1,        P_STRING, NULL, NULL, NULL},
293         {"message_font",        "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
294          &prefs_common.textfont_gtk1,           P_STRING, NULL, NULL, NULL},
295         {"small_font",          "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
296           &prefs_common.smallfont_gtk1,         P_STRING, NULL, NULL, NULL},
297         {"bold_font",           "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
298           &prefs_common.boldfont_gtk1,          P_STRING, NULL, NULL, NULL},
299         {"normal_font",         "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
300           &prefs_common.normalfont_gtk1,        P_STRING, NULL, NULL, NULL},
301
302         /* new fonts */
303 #ifndef MAEMO
304         {"widget_font_gtk2",    NULL,
305           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
306         {"message_font_gtk2",   "Monospace 9",
307          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
308         {"print_font_gtk2",     "Monospace 9",
309          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
310         {"small_font_gtk2",     "Sans 9",
311           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
312         {"normal_font_gtk2",    "Sans 9",
313           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
314 #else
315         {"widget_font_gtk2",    NULL,
316           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
317         {"message_font_gtk2",   "Monospace 8",
318          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
319         {"print_font_gtk2",     "Monospace 8",
320          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
321         {"small_font_gtk2",     "Sans 8",
322           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
323         {"normal_font_gtk2",    "Sans 8",
324           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
325 #endif
326         /* custom colors */
327         {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
328          NULL, NULL, NULL},
329         {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
330          NULL, NULL, NULL},
331         {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
332          NULL, NULL, NULL},
333         {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
334          NULL, NULL, NULL},
335         {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
336          NULL, NULL, NULL},
337         {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
338          NULL, NULL, NULL},
339         {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
340          NULL, NULL, NULL},
341         {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
342          NULL, NULL, NULL},
343         {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
344          NULL, NULL, NULL},
345         {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
346          NULL, NULL, NULL},
347         {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
348          NULL, NULL, NULL},
349         {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
350          NULL, NULL, NULL},
351         {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
352          NULL, NULL, NULL},
353         {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
354          NULL, NULL, NULL},
355         {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
356          NULL, NULL, NULL},
357         {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
358          NULL, NULL, NULL},
359         {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
360          NULL, NULL, NULL},
361         {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
362          NULL, NULL, NULL},
363         {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
364          NULL, NULL, NULL},
365         {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
366          NULL, NULL, NULL},
367         {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
368          NULL, NULL, NULL},
369         {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
370          NULL, NULL, NULL},
371         {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
372          NULL, NULL, NULL},
373         {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
374          NULL, NULL, NULL},
375         {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
376          NULL, NULL, NULL},
377         {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
378          NULL, NULL, NULL},
379         {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
380          NULL, NULL, NULL},
381         {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
382          NULL, NULL, NULL},
383         {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
384          NULL, NULL, NULL},
385         {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
386          NULL, NULL, NULL},
387
388         /* image viewer */
389         {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
390          NULL, NULL, NULL},
391         {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
392          NULL, NULL, NULL},
393         {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
394          NULL, NULL, NULL},
395
396         {"display_folder_unread_num", "0",
397          &prefs_common.display_folder_unread, P_INT,
398          NULL, NULL, NULL},
399         {"newsgroup_abbrev_len", "16",
400          &prefs_common.ng_abbrev_len, P_INT,
401          NULL, NULL, NULL},
402
403         {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
404          NULL, NULL, NULL},
405
406         /* Display: Summary View */
407         {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
408          NULL, NULL, NULL},
409         {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
410          NULL, NULL, NULL},
411         {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
412          P_STRING, NULL, NULL, NULL},
413
414         {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
415          NULL, NULL, NULL},
416
417         {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
418          NULL, NULL, NULL},
419 #ifndef MAEMO
420         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
421          NULL, NULL, NULL},
422 #else
423         {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
424          NULL, NULL, NULL},
425 #endif
426         {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
427          NULL, NULL, NULL},
428 #ifndef MAEMO
429         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
430          NULL, NULL, NULL},
431         {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
432          NULL, NULL, NULL},
433 #else
434         {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
435          NULL, NULL, NULL},
436         {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
437          NULL, NULL, NULL},
438 #endif
439
440         {"summary_col_show_mark", "TRUE",
441          &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
442         {"summary_col_show_unread", "TRUE",
443          &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
444         {"summary_col_show_subject", "TRUE",
445          &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
446         {"summary_col_show_from", "TRUE",
447          &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
448         {"summary_col_show_to", "FALSE",
449          &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
450         {"summary_col_show_date", "TRUE",
451          &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
452         {"summary_col_show_mime", "TRUE",
453          &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
454         {"summary_col_show_size", "TRUE",
455          &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
456         {"summary_col_show_number", "FALSE",
457          &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
458         {"summary_col_show_score", "FALSE",
459          &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
460         {"summary_col_show_locked", "FALSE",
461          &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
462         {"summary_col_show_tags", "FALSE",
463          &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
464
465         {"summary_col_pos_mark", "0",
466           &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
467         {"summary_col_pos_unread", "1",
468           &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
469         {"summary_col_pos_mime", "2",
470           &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
471         {"summary_col_pos_subject", "3",
472           &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
473         {"summary_col_pos_from", "4",
474           &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
475         {"summary_col_pos_date", "5",
476           &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
477         {"summary_col_pos_size", "6",
478           &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
479         {"summary_col_pos_number", "7",
480           &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
481         {"summary_col_pos_score", "8",
482          &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
483         {"summary_col_pos_locked", "9",
484          &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
485         {"summary_col_pos_to", "10",
486           &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
487         {"summary_col_pos_tags", "11",
488           &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
489
490         {"summary_col_size_mark", "10",
491          &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
492         {"summary_col_size_unread", "13",
493          &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
494         {"summary_col_size_mime", "10",
495          &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
496 #ifndef MAEMO
497         {"summary_col_size_subject", "200",
498          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
499         {"summary_col_size_from", "120",
500          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
501         {"summary_col_size_to", "120",
502          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
503 #else
504         {"summary_col_size_subject", "300",
505          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
506         {"summary_col_size_from", "150",
507          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
508         {"summary_col_size_to", "150",
509          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
510
511 #endif
512         {"summary_col_size_date", "118",
513          &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
514         {"summary_col_size_size", "45",
515          &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
516         {"summary_col_size_number", "40",
517          &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
518         {"summary_col_size_score", "40",
519          &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
520         {"summary_col_size_locked", "13",
521          &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
522         {"summary_col_size_tags", "150",
523          &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
524
525         /* Widget size */
526         {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
527          NULL, NULL, NULL},
528         {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
529          NULL, NULL, NULL},
530         {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
531          NULL, NULL, NULL},
532         {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
533          NULL, NULL, NULL},
534         {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
535          NULL, NULL, NULL},
536
537         {"folder_col_show_folder", "TRUE",
538          &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
539         {"folder_col_show_new", "TRUE",
540          &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
541         {"folder_col_show_unread", "TRUE",
542          &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
543         {"folder_col_show_total", "TRUE",
544          &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
545
546         {"folder_col_pos_folder", "0",
547          &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
548         {"folder_col_pos_new", "1",
549          &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
550         {"folder_col_pos_unread", "2",
551          &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
552         {"folder_col_pos_total", "3",
553          &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
554
555 #ifndef MAEMO
556         {"folder_col_size_folder", "120",
557          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
558         {"folder_col_size_new", "32",
559          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
560         {"folder_col_size_unread", "32",
561          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
562         {"folder_col_size_total", "32",
563          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
564 #else
565         {"folder_col_size_folder", "400",
566          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
567         {"folder_col_size_new", "32",
568          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
569         {"folder_col_size_unread", "32",
570          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
571         {"folder_col_size_total", "32",
572          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
573 #endif
574         {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
575          NULL, NULL, NULL},
576         {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
577          NULL, NULL, NULL},
578
579         {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
580          NULL, NULL, NULL},
581         {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
582          NULL, NULL, NULL},
583         {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
584          NULL, NULL, NULL},
585         {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
586          NULL, NULL, NULL},
587         {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
588          NULL, NULL, NULL},
589
590         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
591          NULL, NULL, NULL},
592         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
593          NULL, NULL, NULL},
594         {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
595          NULL, NULL, NULL},
596         {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
597          NULL, NULL, NULL},
598         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
599          NULL, NULL, NULL},
600         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
601          NULL, NULL, NULL},
602 #ifndef MAEMO
603         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
604          NULL, NULL, NULL},
605         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
606          NULL, NULL, NULL},
607         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
608          NULL, NULL, NULL},
609         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
610          NULL, NULL, NULL},
611         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
612          NULL, NULL, NULL},
613         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
614          NULL, NULL, NULL},
615         {"compose_width", "600", &prefs_common.compose_width, P_INT,
616          NULL, NULL, NULL},
617         {"compose_height", "560", &prefs_common.compose_height, P_INT,
618          NULL, NULL, NULL},
619 #else
620         {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
621          NULL, NULL, NULL},
622         {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
623          NULL, NULL, NULL},
624         {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
625          NULL, NULL, NULL},
626         {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
627          NULL, NULL, NULL},
628         {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
629          NULL, NULL, NULL},
630         {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
631          NULL, NULL, NULL},
632         {"compose_width", "700", &prefs_common.compose_width, P_INT,
633          NULL, NULL, NULL},
634         {"compose_height", "470", &prefs_common.compose_height, P_INT,
635          NULL, NULL, NULL},
636 #endif
637         {"compose_x", "0", &prefs_common.compose_x, P_INT,
638          NULL, NULL, NULL},
639         {"compose_y", "0", &prefs_common.compose_y, P_INT,
640          NULL, NULL, NULL},
641         /* Message */
642         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
643          NULL, NULL, NULL},
644
645         {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
646          NULL, NULL, NULL},
647         {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
648          NULL, NULL, NULL},
649         {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
650          NULL, NULL, NULL},
651         {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
652          NULL, NULL, NULL},
653         {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
654          NULL, NULL, NULL},
655         {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
656          NULL, NULL, NULL},
657         {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
658          NULL, NULL, NULL},
659         {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
660          NULL, NULL, NULL},
661         {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
662          NULL, NULL, NULL},
663         {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
664          NULL, NULL, NULL},
665         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
666          P_BOOL, NULL, NULL, NULL},
667
668         {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
669          P_BOOL, NULL, NULL, NULL},
670         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
671          NULL, NULL, NULL},
672         {"display_xface", "TRUE", &prefs_common.display_xface,
673          P_BOOL, NULL, NULL, NULL},
674         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
675          NULL, NULL, NULL},
676         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
677          NULL, NULL, NULL},
678         {"line_space", "2", &prefs_common.line_space, P_INT,
679          NULL, NULL, NULL},
680         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
681          NULL, NULL, NULL},
682
683         {"enable_smooth_scroll", "FALSE",
684          &prefs_common.enable_smooth_scroll, P_BOOL,
685          NULL, NULL, NULL},
686         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
687          NULL, NULL, NULL},
688         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
689          NULL, NULL, NULL},
690         {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
691          NULL, NULL, NULL},
692
693         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
694          NULL, NULL, NULL},
695
696         {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
697          NULL, NULL, NULL},
698
699         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
700          NULL, NULL, NULL},
701         {"attach_save_directory", NULL,
702          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
703         {"attach_load_directory", NULL,
704          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
705
706         /* MIME viewer */
707         {"mime_textviewer",   NULL,
708          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
709         {"mime_open_command", "gedit '%s'",
710          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
711
712         /* Interface */
713 #ifndef MAEMO
714         {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
715          NULL, NULL, NULL},
716 #else
717         {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
718          NULL, NULL, NULL},
719 #endif
720         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
721          NULL, NULL, NULL}, */
722         {"always_show_message_when_selected", "FALSE",
723          &prefs_common.always_show_msg,
724          P_BOOL, NULL, NULL, NULL},
725         {"select_on_entry", "3", &prefs_common.select_on_entry,
726          P_ENUM, NULL, NULL, NULL},
727
728         {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
729          NULL, NULL, NULL},
730         {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
731          NULL, NULL, NULL},
732         {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
733          NULL, NULL, NULL},
734         {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
735          NULL, NULL, NULL},
736         {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
737          NULL, NULL, NULL},
738         {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
739          NULL, NULL, NULL},
740
741         {"mark_as_read_on_new_window", "FALSE",
742          &prefs_common.mark_as_read_on_new_window,
743          P_BOOL, NULL, NULL, NULL},
744         {"mark_as_read_delay", "0",
745          &prefs_common.mark_as_read_delay, P_INT, 
746          NULL, NULL, NULL},
747         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
748          NULL, NULL, NULL},
749         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
750          NULL, NULL, NULL},
751
752         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
753          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
754          NULL, NULL, NULL},
755
756         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
757          NULL, NULL, NULL},
758
759         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
760          NULL, NULL, NULL},
761         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
762          NULL, NULL, NULL},
763
764         /* Addressbook */
765         {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
766          P_BOOL, NULL, NULL, NULL},
767         {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
768          P_INT, NULL, NULL, NULL},
769         {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
770          P_INT, NULL, NULL, NULL},
771
772         /* Other */
773         {"uri_open_command", DEFAULT_BROWSER_CMD,
774          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
775         {"print_command", "lpr %s",
776          &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
777         {"ext_editor_command", DEFAULT_EDITOR_CMD,
778          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
779         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
780          P_BOOL, NULL, NULL, NULL},
781         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
782          NULL, NULL, NULL},
783         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
784          NULL, NULL, NULL},
785         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
786          NULL, NULL, NULL},
787         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
788          P_BOOL, NULL, NULL, NULL},
789         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
790          NULL, NULL, NULL},
791         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
792          NULL, NULL, NULL},
793 #ifndef MAEMO
794         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
795          NULL, NULL, NULL},
796 #else
797         {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
798          NULL, NULL, NULL},
799 #endif
800
801         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
802          P_INT, NULL, NULL, NULL},
803         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
804          NULL, NULL, NULL},
805         {"important_score", "1", &prefs_common.important_score, P_INT,
806          NULL, NULL, NULL},
807
808         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
809          NULL, NULL, NULL},
810         {"log_length", "500", &prefs_common.loglength, P_INT,
811          NULL, NULL, NULL},
812 #ifndef MAEMO
813         {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
814          NULL, NULL, NULL},
815         {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
816          NULL, NULL, NULL},
817         {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
818          NULL, NULL, NULL},
819         {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
820          NULL, NULL, NULL},
821 #else
822         {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
823          NULL, NULL, NULL},
824         {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
825          NULL, NULL, NULL},
826         {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
827          NULL, NULL, NULL},
828         {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
829          NULL, NULL, NULL},
830 #endif
831         {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
832          NULL, NULL, NULL},
833         {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
834          NULL, NULL, NULL},
835         {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
836          NULL, NULL, NULL},
837         {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
838          NULL, NULL, NULL},
839         {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
840          NULL, NULL, NULL},
841         {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
842          NULL, NULL, NULL},
843         {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
844          NULL, NULL, NULL},
845         {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
846          NULL, NULL, NULL},
847
848     {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
849          NULL, NULL, NULL},
850     {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
851          NULL, NULL, NULL},
852     {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
853          NULL, NULL, NULL},
854     {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
855          NULL, NULL, NULL},
856     {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
857          NULL, NULL, NULL},
858     {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
859          NULL, NULL, NULL},
860     {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
861          NULL, NULL, NULL},
862     {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
863          NULL, NULL, NULL},
864         {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
865          NULL, NULL, NULL},
866
867         {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
868          NULL, NULL, NULL},
869
870         {"color_new", "179", &prefs_common.color_new, P_COLOR,
871          NULL, NULL, NULL},
872
873         /* Some windows' sizes */
874         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
875          NULL, NULL, NULL},
876         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
877          NULL, NULL, NULL},
878
879         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
880          NULL, NULL, NULL},
881         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
882          NULL, NULL, NULL},
883
884         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
885          NULL, NULL, NULL},
886         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
887          NULL, NULL, NULL},
888
889         {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
890          NULL, NULL, NULL},
891         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
892          NULL, NULL, NULL},
893
894         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
895          NULL, NULL, NULL},
896         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
897          NULL, NULL, NULL},
898
899         {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
900          NULL, NULL, NULL},
901         {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
902          NULL, NULL, NULL},
903
904         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
905          NULL, NULL, NULL},
906         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
907          NULL, NULL, NULL},
908
909         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
910          NULL, NULL, NULL},
911         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
912          NULL, NULL, NULL},
913
914         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
915          NULL, NULL, NULL},
916         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
917          NULL, NULL, NULL},
918
919         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
920          NULL, NULL, NULL},
921         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
922          NULL, NULL, NULL},
923
924         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
925          NULL, NULL, NULL},
926         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
927          NULL, NULL, NULL},
928
929         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
930          NULL, NULL, NULL},
931         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
932          NULL, NULL, NULL},
933
934         {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
935          NULL, NULL, NULL},
936
937         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
938          NULL, NULL, NULL},
939         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
940          NULL, NULL, NULL},
941
942         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
943          NULL, NULL, NULL},
944         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
945          NULL, NULL, NULL},
946
947         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
948          NULL, NULL, NULL},
949         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
950          NULL, NULL, NULL},
951
952         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
953          NULL, NULL, NULL},
954         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
955          NULL, NULL, NULL},
956
957         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
958          NULL, NULL, NULL},
959         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
960          NULL, NULL, NULL},
961
962         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
963          NULL, NULL, NULL},
964         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
965          NULL, NULL, NULL},
966
967         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
968          NULL, NULL, NULL},
969         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
970          NULL, NULL, NULL},
971
972         /* Hidden */
973         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
974          NULL, NULL, NULL},
975         {"utf8_instead_of_locale_for_broken_mail", "0", 
976          &prefs_common.broken_are_utf8, P_INT,
977          NULL, NULL, NULL},
978         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
979          NULL, NULL, NULL},
980         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
981          NULL, NULL, NULL},
982         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
983          NULL, NULL, NULL},
984         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
985          NULL, NULL, NULL},
986         {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
987          NULL, NULL, NULL},
988         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
989          NULL, NULL, NULL},
990         {"folderview_vscrollbar_policy", "0",
991          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
992          NULL, NULL, NULL},
993         {"textview_cursor_visible", "FALSE",
994          &prefs_common.textview_cursor_visible, P_BOOL,
995          NULL, NULL, NULL},
996         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
997          NULL, NULL, NULL},
998 #ifndef MAEMO
999         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1000          NULL, NULL, NULL},
1001         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1002          NULL, NULL, NULL},
1003 #else
1004         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1005          NULL, NULL, NULL},
1006         {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1007          NULL, NULL, NULL},
1008 #endif
1009         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1010         P_INT, NULL, NULL, NULL },
1011         {"last_opened_folder", "", &prefs_common.last_opened_folder,
1012         P_STRING, NULL, NULL, NULL },
1013         {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1014         P_BOOL, NULL, NULL, NULL },
1015         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1016          NULL, NULL, NULL},
1017         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1018          NULL, NULL, NULL},
1019         {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1020          NULL, NULL, NULL},
1021         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1022          NULL, NULL, NULL},
1023         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1024          NULL, NULL, NULL},
1025         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1026          NULL, NULL, NULL},
1027         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1028          NULL, NULL, NULL},
1029         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1030          NULL, NULL, NULL},
1031         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1032          NULL, NULL, NULL},
1033 #ifndef MAEMO
1034         {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1035          NULL, NULL, NULL},
1036 #else
1037         {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1038          NULL, NULL, NULL},
1039 #endif
1040         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1041 };
1042
1043 PrefsCommon *prefs_common_get(void)
1044 {
1045         return &prefs_common;
1046 }
1047
1048 /*
1049  * Read history list from the specified history file
1050  */
1051 static GList *prefs_common_read_history(const gchar *history) 
1052 {
1053         FILE *fp;
1054         gchar *path;
1055         gchar buf[PREFSBUFSIZE];
1056         GList *tmp = NULL;
1057
1058         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1059                            NULL);
1060         if ((fp = g_fopen(path, "rb")) == NULL) {
1061                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1062                 g_free(path);
1063                 return NULL;
1064         }
1065         g_free(path);
1066         while (fgets(buf, sizeof(buf), fp) != NULL) {
1067                 g_strstrip(buf);
1068                 if (buf[0] == '\0') continue;
1069                 tmp = add_history(tmp, buf);
1070         }
1071         fclose(fp);
1072
1073         tmp = g_list_reverse(tmp);
1074
1075         return tmp;
1076 }
1077
1078 void prefs_common_read_config(void)
1079 {
1080         gchar *rcpath;
1081         gchar *tmp;
1082
1083         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1084         prefs_read_config(param, "Common", rcpath, NULL);
1085 #ifdef G_OS_WIN32
1086         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1087 #endif
1088
1089         g_free(rcpath);
1090
1091         tmp = g_strdup(gettext(prefs_common.quotefmt));
1092         g_free(prefs_common.quotefmt);
1093         prefs_common.quotefmt = tmp;
1094
1095         tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1096         g_free(prefs_common.fw_quotefmt);
1097         prefs_common.fw_quotefmt = tmp;
1098         
1099         tmp = g_strdup(gettext(prefs_common.date_format));
1100         g_free(prefs_common.date_format);
1101         prefs_common.date_format = tmp;
1102
1103         tmp = g_strdup(gettext(prefs_common.compose_body_format));
1104         g_free(prefs_common.compose_body_format);
1105         prefs_common.compose_body_format = tmp;
1106
1107         prefs_common.mime_open_cmd_history =
1108                 prefs_common_read_history(COMMAND_HISTORY);
1109         prefs_common.summary_quicksearch_history =
1110                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1111         prefs_common.summary_search_from_history =
1112                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1113         prefs_common.summary_search_to_history =
1114                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1115         prefs_common.summary_search_subject_history =
1116                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1117         prefs_common.summary_search_body_history =
1118                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1119         prefs_common.summary_search_adv_condition_history =
1120                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1121         prefs_common.message_search_history =
1122                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1123
1124         colorlabel_update_colortable_from_prefs();
1125 }
1126
1127 #define TRY(func) \
1128 if (!(func)) \
1129 { \
1130         g_warning("failed to write\n"); \
1131         goto out;                       \
1132 } \
1133
1134 /*
1135  * Save history list to the specified history file
1136  */
1137 static void prefs_common_save_history(const gchar *history, GList *list)
1138 {
1139         GList *cur;
1140         FILE *fp;
1141         gchar *path, *tmp_path;
1142
1143         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1144                            NULL);
1145         tmp_path = g_strconcat(path, ".tmp", NULL);
1146
1147         if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1148                 FILE_OP_ERROR(tmp_path, "fopen");
1149                 goto out;
1150         }
1151
1152         for (cur = list; cur != NULL; cur = cur->next) {
1153                 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1154                     fputc('\n', fp) != EOF);
1155         }
1156
1157         if (fclose(fp) == EOF) {
1158                 FILE_OP_ERROR(tmp_path, "fclose");
1159                 fp = NULL;
1160                 goto out;
1161         }
1162         fp = NULL;
1163 #ifdef G_OS_WIN32
1164         g_unlink(path);
1165 #endif
1166         if (g_rename(tmp_path, path) < 0) {
1167                 FILE_OP_ERROR(path, "rename");
1168                 goto out;
1169         }
1170
1171 out:
1172         if (fp)
1173                 fclose(fp);
1174         g_free(tmp_path);
1175         g_free(path);
1176 }
1177
1178 #undef TRY
1179
1180 void prefs_common_write_config(void)
1181 {
1182         prefs_write_config(param, "Common", COMMON_RC);
1183 #ifdef G_OS_WIN32
1184         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1185 #endif
1186
1187         prefs_common_save_history(COMMAND_HISTORY, 
1188                 prefs_common.mime_open_cmd_history);
1189         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1190                 prefs_common.summary_quicksearch_history);
1191         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1192                 prefs_common.summary_search_from_history);
1193         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1194                 prefs_common.summary_search_to_history);
1195         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1196                 prefs_common.summary_search_subject_history);
1197         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1198                 prefs_common.summary_search_body_history);
1199         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1200                 prefs_common.summary_search_adv_condition_history);
1201         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1202                 prefs_common.message_search_history);
1203 }
1204
1205 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1206    both 'in' and 'out' must be non-NULL.
1207    'out' must be a pointer to a buffer whose size is at least equal
1208    to strlen(txt)+1, this buffer will get cleared. out's contents
1209    will always get set to a valid string, even if it's "".*/
1210 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1211 {
1212         const gchar *i;
1213         gchar *o;
1214
1215         *out = '\0';
1216
1217         g_return_if_fail( in != NULL );
1218         g_return_if_fail( out != NULL );
1219
1220         i = in;
1221         o = out;
1222         memset(out, 0, strlen(in)+1);
1223         while (*i != '\0') {
1224                 if (*i == '\\' && *(i+1) == 'n') {
1225                         *o++ = '\n';
1226                         i++;
1227                 } else if (*i == '\\' && *(i+1) == 't') {
1228                         *o++ = '\t';
1229                         i++;
1230                 } else if (*i == '\\' && *(i+1) == '\\') {
1231                         *o++ = '\\';
1232                         i++;
1233                 } else {
1234                         *o++ = *i;
1235                 }
1236                 i++;
1237         }
1238         *o='\0';
1239 }
1240
1241 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1242    both 'in' and 'out' must be non-NULL.
1243    'out' must be a pointer to a buffer whose size is at least equal
1244    to 2*strlen(txt)+1. out's contents will always get set to a valid
1245    string, even if it's "". */
1246 void pref_get_escaped_pref(gchar *out, const gchar *in)
1247 {
1248         const gchar *i;
1249         gchar *o;
1250
1251         *out = '\0';
1252
1253         g_return_if_fail( in != NULL );
1254         g_return_if_fail( out != NULL );
1255
1256         i = in;
1257         o = out;
1258         while (*i != '\0') {
1259                 if (*i == '\n') {
1260                         *o++ = '\\';
1261                         *o++ = 'n';
1262                 } else if (*i == '\t') {
1263                         *o++ = '\\';
1264                         *o++ = 't';
1265                 } else if (*i == '\\') {
1266                         *o++ = '\\';
1267                         *o++ = '\\';
1268                 } else {
1269                         *o++ = *i;
1270                 }
1271                 i++;
1272         }
1273         *o = '\0';
1274 }
1275                 
1276 /* set the contents of a textview widget from the internal \-escaped
1277   representation of a pref string. both txt and textview must be non-NULL. */
1278 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1279 {
1280         GtkTextBuffer *buffer;
1281         gchar *out = NULL;
1282
1283         g_return_if_fail( textview != NULL );
1284
1285         buffer = gtk_text_view_get_buffer(textview);
1286
1287         if (!txt) {
1288                 gtk_text_buffer_set_text(buffer, "", -1);
1289         } else {
1290                 out = malloc(strlen(txt)+1);
1291
1292                 pref_get_unescaped_pref(out, txt);
1293
1294                 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1295                 g_free(out);
1296         }
1297 }
1298
1299 /* set the contents of a gtkentry widget from the internal \-escaped
1300   representation of a pref string. both txt and entry must be non-NULL. */
1301 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1302 {
1303         gchar *out = NULL;
1304
1305         g_return_if_fail( entry != NULL );
1306         if (!txt) {
1307                 gtk_entry_set_text(entry, "");
1308         } else {
1309                 out = malloc(strlen(txt)+1);
1310
1311                 pref_get_unescaped_pref(out, txt);
1312
1313                 gtk_entry_set_text(entry, out?out:"");
1314                 g_free(out);
1315         }
1316 }
1317
1318 /* get the \-escaped internal representation of a pref from the contents of
1319    a textview widget. textview must be non-NULL. */
1320 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1321 {
1322         GtkTextBuffer *buffer;
1323         GtkTextIter start, end;
1324         gchar *out, *tmp;
1325         
1326         g_return_val_if_fail( textview != NULL, "" );
1327
1328         buffer = gtk_text_view_get_buffer(textview);
1329         gtk_text_buffer_get_start_iter(buffer, &start);
1330         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1331         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1332         out = malloc(2*strlen(tmp)+1);
1333         
1334         pref_get_escaped_pref(out, tmp);
1335         g_free(tmp);
1336
1337         return out?out:"";
1338 }
1339
1340 /* get the \-escaped internal representation of a pref from the contents of
1341    a gtkentry widget. entry must be non-NULL. */
1342 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1343 {
1344         gchar *out, *tmp;
1345
1346         g_return_val_if_fail( entry != NULL, "" );
1347
1348         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1349         out = malloc(2*strlen(tmp)+1);
1350
1351         pref_get_escaped_pref(out, tmp);
1352         g_free(tmp);
1353
1354         return out?out:"";
1355 }
1356
1357 /* ugly hack to be able to get this pref from ssl_certificate.c */
1358 gboolean prefs_common_unsafe_ssl_certs(void)
1359 {
1360         return prefs_common.unsafe_ssl_certs;
1361 }
1362
1363 gboolean prefs_common_enable_log_standard(void)
1364 {
1365         return prefs_common.enable_log_standard;
1366 }
1367
1368 gboolean prefs_common_enable_log_warning(void)
1369 {
1370         return prefs_common.enable_log_warning;
1371 }
1372 gboolean prefs_common_enable_log_error(void)
1373 {
1374         return prefs_common.enable_log_error;
1375 }
1376 gboolean prefs_common_enable_log_status(void)
1377 {
1378         return prefs_common.enable_log_status;
1379 }
1380 /**
1381    return the translated name of a header, if the translate_header option is
1382    set, otherwise return the untranslated header name (header_name itself).
1383    this function is provided for convenience, it's an interface to
1384    prefs_common.trans_hdr.
1385    works with header names either with or without trailing colon, provided
1386    that gettext found such header name in the sources (they should all be
1387    found in src/gtk/headers.h anyway).
1388 */
1389 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1390 {
1391         if (header_name == NULL || *header_name == '\0')
1392                 return header_name;
1393
1394         return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1395 }