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