2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
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.
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.
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/>.
27 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
34 #include <sys/types.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"
54 #include "alertpanel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
69 PrefsCommon prefs_common;
75 * In the Windows version prefs_common contains
76 * - the non-OS-specific settings of the "Common" section and
77 * - the OS-specific settings of the "CommonWin32" section
78 * The OS-specific settings of the "Common" section are not used
79 * but saved in prefs_unix.
82 # define SPECIFIC_PREFS prefs_unix
84 static PrefsCommon prefs_unix;
86 static PrefParam param_os_specific[] = {
89 &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
90 {"newmail_notify_cmd", "",
91 &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
94 {"widget_font_gtk2", NULL,
95 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
96 {"message_font_gtk2", "Monospace 9",
97 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
98 {"print_font_gtk2", "Monospace 9",
99 &prefs_common.printfont, P_STRING, NULL, NULL, NULL},
100 {"small_font_gtk2", "Sans 9",
101 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
102 {"normal_font_gtk2", "Sans 9",
103 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
105 {"attach_save_directory", NULL,
106 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
107 {"attach_load_directory", NULL,
108 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
111 {"mime_textviewer", NULL,
112 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
113 {"mime_open_command", "notepad '%s'",
114 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
117 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
118 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
121 {"uri_open_command", NULL,
122 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
123 {"print_command", "notepad /p %s",
124 &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
125 {"ext_editor_command", "notepad %s",
126 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
128 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
131 # define SPECIFIC_PREFS prefs_common
135 parameter name, default value, pointer to the prefs variable, data type,
136 pointer to the widget pointer,
137 pointer to the function for data setting,
138 pointer to the function for widget setting
141 static PrefParam param[] = {
143 {"data_root", "", &prefs_common.data_root, P_STRING,
147 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
149 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
152 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
154 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
156 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
158 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
159 P_BOOL, NULL, NULL, NULL},
160 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
161 P_BOOL, NULL, NULL, NULL},
162 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
163 P_BOOL, NULL, NULL, NULL},
164 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
165 P_BOOL, NULL, NULL, NULL},
166 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
169 {"maemo_play_sound", "FALSE", &prefs_common.maemo_play_sound, P_BOOL,
171 {"maemo_show_banner", "FALSE", &prefs_common.maemo_show_banner, P_BOOL,
174 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
176 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
178 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
180 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
181 P_BOOL, NULL, NULL, NULL},
182 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
183 P_BOOL, NULL, NULL, NULL},
186 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
188 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
189 P_BOOL, NULL, NULL, NULL},
190 {"send_dialog_mode", "0", &prefs_common.send_dialog_invisible, P_BOOL,
192 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
194 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
197 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
199 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
202 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
203 P_BOOL, NULL, NULL, NULL},
206 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
208 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
209 P_BOOL, NULL, NULL, NULL},
210 {"redirect_keep_from", "FALSE",
211 &prefs_common.redirect_keep_from, P_BOOL,
213 {"undo_level", "50", &prefs_common.undolevels, P_INT,
215 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
217 {"compose_subject_format", "",
218 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
219 {"compose_body_format", N_("Hello,\\n"),
220 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
222 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
224 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
226 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
228 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
230 {"autosave", "TRUE", &prefs_common.autosave,
231 P_BOOL, NULL, NULL, NULL},
232 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
235 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
237 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
239 {"dictionary", "", &prefs_common.dictionary, P_STRING,
241 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
243 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
245 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
247 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
249 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
250 P_BOOL, NULL, NULL, NULL},
251 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
253 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
256 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
258 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
261 /* Account autoselection */
262 {"reply_account_autoselect", "TRUE",
263 &prefs_common.reply_account_autosel, P_BOOL,
265 {"forward_account_autoselect", "TRUE",
266 &prefs_common.forward_account_autosel, P_BOOL,
268 {"reedit_account_autoselect", "TRUE",
269 &prefs_common.reedit_account_autosel, P_BOOL,
272 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
276 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
279 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
284 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
286 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
287 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
289 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
291 {"forward_quote_format",
292 N_("\\n\\nBegin forwarded message:\\n\\n"
293 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
294 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
295 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
296 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
300 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
301 {"widget_font", NULL,
302 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
303 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
304 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
305 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
306 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
307 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
308 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
309 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
310 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
314 {"widget_font_gtk2", NULL,
315 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
316 {"message_font_gtk2", "Monospace 9",
317 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
318 {"print_font_gtk2", "Monospace 9",
319 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
320 {"small_font_gtk2", "Sans 9",
321 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
322 {"normal_font_gtk2", "Sans 9",
323 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
325 {"widget_font_gtk2", NULL,
326 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
327 {"message_font_gtk2", "Monospace 8",
328 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
329 {"print_font_gtk2", "Monospace 8",
330 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
331 {"small_font_gtk2", "Sans 8",
332 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
333 {"normal_font_gtk2", "Sans 8",
334 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
337 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
339 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
341 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
343 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
345 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
347 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
349 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
351 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
353 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
355 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
357 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
359 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
361 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
363 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
365 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
367 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
369 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
371 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
373 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
375 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
377 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
379 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
381 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
383 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
385 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
387 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
389 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
391 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
393 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
395 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
399 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
401 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
403 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
406 {"display_folder_unread_num", "0",
407 &prefs_common.display_folder_unread, P_INT,
409 {"newsgroup_abbrev_len", "16",
410 &prefs_common.ng_abbrev_len, P_INT,
413 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
416 /* Display: Summary View */
417 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
419 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
421 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
422 P_STRING, NULL, NULL, NULL},
424 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
427 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
430 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
433 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
436 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
438 {"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL,
441 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
443 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
446 {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
448 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
452 {"summary_col_show_mark", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_unread", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_subject", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_from", "TRUE",
459 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_to", "FALSE",
461 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_date", "TRUE",
463 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_mime", "TRUE",
465 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
466 {"summary_col_show_size", "TRUE",
467 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
468 {"summary_col_show_number", "FALSE",
469 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
470 {"summary_col_show_score", "FALSE",
471 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
472 {"summary_col_show_locked", "FALSE",
473 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
474 {"summary_col_show_tags", "FALSE",
475 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
477 {"summary_col_pos_mark", "0",
478 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_unread", "1",
480 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_mime", "2",
482 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_subject", "3",
484 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_from", "4",
486 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_date", "5",
488 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
489 {"summary_col_pos_size", "6",
490 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
491 {"summary_col_pos_number", "7",
492 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
493 {"summary_col_pos_score", "8",
494 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
495 {"summary_col_pos_locked", "9",
496 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
497 {"summary_col_pos_to", "10",
498 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
499 {"summary_col_pos_tags", "11",
500 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_mark", "10",
503 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_unread", "13",
505 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_mime", "10",
507 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
509 {"summary_col_size_subject", "200",
510 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
511 {"summary_col_size_from", "120",
512 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
513 {"summary_col_size_to", "120",
514 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
516 {"summary_col_size_subject", "300",
517 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
518 {"summary_col_size_from", "150",
519 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
520 {"summary_col_size_to", "150",
521 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
524 {"summary_col_size_date", "118",
525 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
526 {"summary_col_size_size", "45",
527 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
528 {"summary_col_size_number", "40",
529 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
530 {"summary_col_size_score", "40",
531 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
532 {"summary_col_size_locked", "13",
533 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
534 {"summary_col_size_tags", "150",
535 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
538 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
540 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
542 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
544 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
546 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
549 {"folder_col_show_folder", "TRUE",
550 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
551 {"folder_col_show_new", "TRUE",
552 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
553 {"folder_col_show_unread", "TRUE",
554 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
555 {"folder_col_show_total", "TRUE",
556 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
558 {"folder_col_pos_folder", "0",
559 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
560 {"folder_col_pos_new", "1",
561 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
562 {"folder_col_pos_unread", "2",
563 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
564 {"folder_col_pos_total", "3",
565 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
568 {"folder_col_size_folder", "120",
569 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
570 {"folder_col_size_new", "32",
571 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
572 {"folder_col_size_unread", "32",
573 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
574 {"folder_col_size_total", "32",
575 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
577 {"folder_col_size_folder", "400",
578 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
579 {"folder_col_size_new", "32",
580 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
581 {"folder_col_size_unread", "32",
582 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
583 {"folder_col_size_total", "32",
584 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
586 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
588 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
591 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
593 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
595 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
597 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
599 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
602 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
604 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
606 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
608 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
610 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
612 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
615 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
617 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
619 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
621 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
623 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
625 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
627 {"compose_width", "600", &prefs_common.compose_width, P_INT,
629 {"compose_height", "560", &prefs_common.compose_height, P_INT,
632 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
634 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
636 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
638 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
640 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
642 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
644 {"compose_width", "700", &prefs_common.compose_width, P_INT,
646 {"compose_height", "470", &prefs_common.compose_height, P_INT,
649 {"compose_x", "0", &prefs_common.compose_x, P_INT,
651 {"compose_y", "0", &prefs_common.compose_y, P_INT,
654 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
657 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
659 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
661 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
663 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
665 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
667 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
669 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
671 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
673 {"emphasis_color", "207", &prefs_common.emphasis_col, P_COLOR,
675 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
677 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
679 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
680 P_BOOL, NULL, NULL, NULL},
682 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
683 P_BOOL, NULL, NULL, NULL},
684 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
686 {"display_xface", "TRUE", &prefs_common.display_xface,
687 P_BOOL, NULL, NULL, NULL},
688 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
690 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
692 {"line_space", "2", &prefs_common.line_space, P_INT,
694 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
697 {"enable_smooth_scroll", "FALSE",
698 &prefs_common.enable_smooth_scroll, P_BOOL,
700 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
702 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
704 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
707 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
710 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
713 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
715 {"attach_save_directory", NULL,
716 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
717 {"attach_load_directory", NULL,
718 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
721 {"mime_textviewer", NULL,
722 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
723 {"mime_open_command", "gedit '%s'",
724 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
728 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
731 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
734 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
735 NULL, NULL, NULL}, */
736 {"always_show_message_when_selected", "FALSE",
737 &prefs_common.always_show_msg,
738 P_BOOL, NULL, NULL, NULL},
739 {"select_on_entry", "3", &prefs_common.select_on_entry,
740 P_ENUM, NULL, NULL, NULL},
741 {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
742 P_BOOL, NULL, NULL, NULL},
744 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
746 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
748 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
750 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
752 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
754 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
757 {"mark_as_read_on_new_window", "FALSE",
758 &prefs_common.mark_as_read_on_new_window,
759 P_BOOL, NULL, NULL, NULL},
760 {"mark_as_read_delay", "0",
761 &prefs_common.mark_as_read_delay, P_INT,
763 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
765 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
768 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
769 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
772 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
775 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
777 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
781 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
782 P_BOOL, NULL, NULL, NULL},
783 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
784 P_INT, NULL, NULL, NULL},
785 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
786 P_INT, NULL, NULL, NULL},
789 {"uri_open_command", DEFAULT_BROWSER_CMD,
790 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
791 {"print_command", "lpr %s",
792 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
793 {"ext_editor_command", DEFAULT_EDITOR_CMD,
794 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
795 {"cmds_use_system_default", "FALSE",
796 &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
797 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
798 P_BOOL, NULL, NULL, NULL},
799 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
801 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
803 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
805 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
806 P_BOOL, NULL, NULL, NULL},
807 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
809 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
812 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
815 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
819 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
820 P_INT, NULL, NULL, NULL},
821 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
823 {"important_score", "1", &prefs_common.important_score, P_INT,
826 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
828 {"log_length", "500", &prefs_common.loglength, P_INT,
831 {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
833 {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
835 {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
837 {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
840 {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
842 {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
844 {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
846 {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
849 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
851 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
853 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
855 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
857 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
859 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
861 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
863 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
866 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
868 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
870 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
872 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
874 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
876 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
878 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
880 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
882 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
885 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
888 {"color_new", "179", &prefs_common.color_new, P_COLOR,
891 /* Some windows' sizes */
892 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
894 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
897 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
899 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
902 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
904 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
907 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
909 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
912 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
914 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
917 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
919 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
922 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
924 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
927 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
929 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
932 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
934 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
937 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
939 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
942 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
944 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
947 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
949 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
952 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
955 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
957 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
960 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
962 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
965 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
967 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
970 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
972 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
975 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
977 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
980 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
982 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
985 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
987 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
991 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
993 {"utf8_instead_of_locale_for_broken_mail", "0",
994 &prefs_common.broken_are_utf8, P_INT,
996 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
998 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1000 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1002 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1004 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
1006 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1008 {"folderview_vscrollbar_policy", "0",
1009 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1011 {"textview_cursor_visible", "FALSE",
1012 &prefs_common.textview_cursor_visible, P_BOOL,
1014 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1017 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1019 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1022 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1024 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1027 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1028 P_INT, NULL, NULL, NULL },
1029 {"last_opened_folder", "", &prefs_common.last_opened_folder,
1030 P_STRING, NULL, NULL, NULL },
1031 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1032 P_BOOL, NULL, NULL, NULL },
1033 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1035 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1037 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1039 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1041 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1043 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1045 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1047 {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1049 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1051 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1054 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1057 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1061 {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1063 {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1065 {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1067 {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1069 {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1071 {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1073 {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1075 {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1077 {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1080 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1084 * Read history list from the specified history file
1086 static GList *prefs_common_read_history(const gchar *history)
1090 gchar buf[PREFSBUFSIZE];
1093 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1095 if ((fp = g_fopen(path, "rb")) == NULL) {
1096 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1101 while (fgets(buf, sizeof(buf), fp) != NULL) {
1103 if (buf[0] == '\0') continue;
1104 tmp = add_history(tmp, buf);
1108 tmp = g_list_reverse(tmp);
1113 void prefs_common_read_config(void)
1118 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1119 prefs_read_config(param, "Common", rcpath, NULL);
1121 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1126 tmp = g_strdup(gettext(prefs_common.quotefmt));
1127 g_free(prefs_common.quotefmt);
1128 prefs_common.quotefmt = tmp;
1130 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1131 g_free(prefs_common.fw_quotefmt);
1132 prefs_common.fw_quotefmt = tmp;
1134 tmp = g_strdup(gettext(prefs_common.date_format));
1135 g_free(prefs_common.date_format);
1136 prefs_common.date_format = tmp;
1138 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1139 g_free(prefs_common.compose_body_format);
1140 prefs_common.compose_body_format = tmp;
1142 prefs_common.mime_open_cmd_history =
1143 prefs_common_read_history(COMMAND_HISTORY);
1144 prefs_common.summary_quicksearch_history =
1145 prefs_common_read_history(QUICKSEARCH_HISTORY);
1146 prefs_common.summary_search_from_history =
1147 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1148 prefs_common.summary_search_to_history =
1149 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1150 prefs_common.summary_search_subject_history =
1151 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1152 prefs_common.summary_search_body_history =
1153 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1154 prefs_common.summary_search_adv_condition_history =
1155 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1156 prefs_common.message_search_history =
1157 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1159 colorlabel_update_colortable_from_prefs();
1165 g_warning("failed to write\n"); \
1170 * Save history list to the specified history file
1172 static void prefs_common_save_history(const gchar *history, GList *list)
1176 gchar *path, *tmp_path;
1178 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1180 tmp_path = g_strconcat(path, ".tmp", NULL);
1182 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1183 FILE_OP_ERROR(tmp_path, "fopen");
1187 for (cur = list; cur != NULL; cur = cur->next) {
1188 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1189 fputc('\n', fp) != EOF);
1192 if (fclose(fp) == EOF) {
1193 FILE_OP_ERROR(tmp_path, "fclose");
1201 if (g_rename(tmp_path, path) < 0) {
1202 FILE_OP_ERROR(path, "rename");
1215 void prefs_common_write_config(void)
1217 prefs_write_config(param, "Common", COMMON_RC);
1219 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1222 prefs_common_save_history(COMMAND_HISTORY,
1223 prefs_common.mime_open_cmd_history);
1224 prefs_common_save_history(QUICKSEARCH_HISTORY,
1225 prefs_common.summary_quicksearch_history);
1226 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1227 prefs_common.summary_search_from_history);
1228 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1229 prefs_common.summary_search_to_history);
1230 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1231 prefs_common.summary_search_subject_history);
1232 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1233 prefs_common.summary_search_body_history);
1234 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1235 prefs_common.summary_search_adv_condition_history);
1236 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1237 prefs_common.message_search_history);
1240 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1241 both 'in' and 'out' must be non-NULL.
1242 'out' must be a pointer to a buffer whose size is at least equal
1243 to strlen(txt)+1, this buffer will get cleared. out's contents
1244 will always get set to a valid string, even if it's "".*/
1245 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1252 g_return_if_fail( in != NULL );
1253 g_return_if_fail( out != NULL );
1257 memset(out, 0, strlen(in)+1);
1258 while (*i != '\0') {
1259 if (*i == '\\' && *(i+1) == 'n') {
1262 } else if (*i == '\\' && *(i+1) == 't') {
1265 } else if (*i == '\\' && *(i+1) == '\\') {
1276 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1277 both 'in' and 'out' must be non-NULL.
1278 'out' must be a pointer to a buffer whose size is at least equal
1279 to 2*strlen(txt)+1. out's contents will always get set to a valid
1280 string, even if it's "". */
1281 void pref_get_escaped_pref(gchar *out, const gchar *in)
1288 g_return_if_fail( in != NULL );
1289 g_return_if_fail( out != NULL );
1293 while (*i != '\0') {
1297 } else if (*i == '\t') {
1300 } else if (*i == '\\') {
1311 /* set the contents of a textview widget from the internal \-escaped
1312 representation of a pref string. both txt and textview must be non-NULL. */
1313 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1315 GtkTextBuffer *buffer;
1318 g_return_if_fail( textview != NULL );
1320 buffer = gtk_text_view_get_buffer(textview);
1323 gtk_text_buffer_set_text(buffer, "", -1);
1325 out = malloc(strlen(txt)+1);
1327 pref_get_unescaped_pref(out, txt);
1329 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1334 /* set the contents of a gtkentry widget from the internal \-escaped
1335 representation of a pref string. both txt and entry must be non-NULL. */
1336 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1340 g_return_if_fail( entry != NULL );
1342 gtk_entry_set_text(entry, "");
1344 out = malloc(strlen(txt)+1);
1346 pref_get_unescaped_pref(out, txt);
1348 gtk_entry_set_text(entry, out?out:"");
1353 /* get the \-escaped internal representation of a pref from the contents of
1354 a textview widget. textview must be non-NULL. */
1355 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1357 GtkTextBuffer *buffer;
1358 GtkTextIter start, end;
1361 g_return_val_if_fail( textview != NULL, "" );
1363 buffer = gtk_text_view_get_buffer(textview);
1364 gtk_text_buffer_get_start_iter(buffer, &start);
1365 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1366 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1367 out = malloc(2*strlen(tmp)+1);
1369 pref_get_escaped_pref(out, tmp);
1375 /* get the \-escaped internal representation of a pref from the contents of
1376 a gtkentry widget. entry must be non-NULL. */
1377 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1381 g_return_val_if_fail( entry != NULL, "" );
1383 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1384 out = malloc(2*strlen(tmp)+1);
1386 pref_get_escaped_pref(out, tmp);
1392 /* ugly hack to be able to get this pref from ssl_certificate.c */
1393 gboolean prefs_common_unsafe_ssl_certs(void)
1395 return prefs_common.unsafe_ssl_certs;
1398 gboolean prefs_common_enable_log_standard(void)
1400 return prefs_common.enable_log_standard;
1403 gboolean prefs_common_enable_log_warning(void)
1405 return prefs_common.enable_log_warning;
1407 gboolean prefs_common_enable_log_error(void)
1409 return prefs_common.enable_log_error;
1411 gboolean prefs_common_enable_log_status(void)
1413 return prefs_common.enable_log_status;
1417 const gchar *prefs_common_get_data_root(void)
1419 if (prefs_common.data_root && *prefs_common.data_root)
1420 return prefs_common.data_root;
1426 return the translated name of a header, if the translate_header option is
1427 set, otherwise return the untranslated header name (header_name itself).
1428 this function is provided for convenience, it's an interface to
1429 prefs_common.trans_hdr.
1430 works with header names either with or without trailing colon, provided
1431 that gettext found such header name in the sources (they should all be
1432 found in src/gtk/headers.h anyway).
1434 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1436 if (header_name == NULL || *header_name == '\0')
1439 return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1442 const gchar *prefs_common_get_uri_cmd(void)
1446 if (!prefs_common.cmds_use_system_default)
1447 return prefs_common.uri_cmd;
1449 tmp = g_find_program_in_path("xdg-open");
1451 return prefs_common.uri_cmd;
1454 return "xdg-open %s";
1457 const gchar *prefs_common_get_ext_editor_cmd(void)
1459 return prefs_common.ext_editor_cmd;
1460 #if 0 /* we should do that, but it detaches the editor and breaks
1461 compose.c's external composition. */
1464 if (!prefs_common.cmds_use_system_default)
1465 return prefs_common.ext_editor_cmd;
1467 tmp = g_find_program_in_path("xdg-open");
1469 return prefs_common.ext_editor_cmd;
1472 return "xdg-open %s";