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