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", "1", &prefs_common.send_dialog_mode, P_ENUM,
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,
439 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
441 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
444 {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
446 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
450 {"summary_col_show_mark", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_unread", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_subject", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_from", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_to", "FALSE",
459 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_date", "TRUE",
461 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_mime", "TRUE",
463 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_size", "TRUE",
465 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
466 {"summary_col_show_number", "FALSE",
467 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
468 {"summary_col_show_score", "FALSE",
469 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
470 {"summary_col_show_locked", "FALSE",
471 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
472 {"summary_col_show_tags", "FALSE",
473 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
475 {"summary_col_pos_mark", "0",
476 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_unread", "1",
478 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_mime", "2",
480 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_subject", "3",
482 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_from", "4",
484 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_date", "5",
486 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_size", "6",
488 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
489 {"summary_col_pos_number", "7",
490 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
491 {"summary_col_pos_score", "8",
492 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
493 {"summary_col_pos_locked", "9",
494 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
495 {"summary_col_pos_to", "10",
496 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
497 {"summary_col_pos_tags", "11",
498 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
500 {"summary_col_size_mark", "10",
501 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_unread", "13",
503 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_mime", "10",
505 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
507 {"summary_col_size_subject", "200",
508 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
509 {"summary_col_size_from", "120",
510 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
511 {"summary_col_size_to", "120",
512 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
514 {"summary_col_size_subject", "300",
515 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
516 {"summary_col_size_from", "150",
517 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
518 {"summary_col_size_to", "150",
519 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
522 {"summary_col_size_date", "118",
523 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
524 {"summary_col_size_size", "45",
525 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
526 {"summary_col_size_number", "40",
527 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
528 {"summary_col_size_score", "40",
529 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
530 {"summary_col_size_locked", "13",
531 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
532 {"summary_col_size_tags", "150",
533 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
536 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
538 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
540 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
542 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
544 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
547 {"folder_col_show_folder", "TRUE",
548 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
549 {"folder_col_show_new", "TRUE",
550 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
551 {"folder_col_show_unread", "TRUE",
552 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
553 {"folder_col_show_total", "TRUE",
554 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
556 {"folder_col_pos_folder", "0",
557 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
558 {"folder_col_pos_new", "1",
559 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
560 {"folder_col_pos_unread", "2",
561 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
562 {"folder_col_pos_total", "3",
563 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
566 {"folder_col_size_folder", "120",
567 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
568 {"folder_col_size_new", "32",
569 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
570 {"folder_col_size_unread", "32",
571 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
572 {"folder_col_size_total", "32",
573 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
575 {"folder_col_size_folder", "400",
576 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
577 {"folder_col_size_new", "32",
578 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
579 {"folder_col_size_unread", "32",
580 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
581 {"folder_col_size_total", "32",
582 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
584 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
586 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
589 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
591 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
593 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
595 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
597 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
600 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
602 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
604 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
606 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
608 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
610 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
613 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
615 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
617 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
619 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
621 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
623 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
625 {"compose_width", "600", &prefs_common.compose_width, P_INT,
627 {"compose_height", "560", &prefs_common.compose_height, P_INT,
630 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
632 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
634 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
636 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
638 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
640 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
642 {"compose_width", "700", &prefs_common.compose_width, P_INT,
644 {"compose_height", "470", &prefs_common.compose_height, P_INT,
647 {"compose_x", "0", &prefs_common.compose_x, P_INT,
649 {"compose_y", "0", &prefs_common.compose_y, P_INT,
652 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
655 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
657 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
659 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
661 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
663 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
665 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
667 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
669 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
671 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
673 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
675 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
676 P_BOOL, NULL, NULL, NULL},
678 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
679 P_BOOL, NULL, NULL, NULL},
680 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
682 {"display_xface", "TRUE", &prefs_common.display_xface,
683 P_BOOL, NULL, NULL, NULL},
684 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
686 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
688 {"line_space", "2", &prefs_common.line_space, P_INT,
690 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
693 {"enable_smooth_scroll", "FALSE",
694 &prefs_common.enable_smooth_scroll, P_BOOL,
696 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
698 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
700 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
703 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
706 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
709 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
711 {"attach_save_directory", NULL,
712 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
713 {"attach_load_directory", NULL,
714 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
717 {"mime_textviewer", NULL,
718 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
719 {"mime_open_command", "gedit '%s'",
720 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
724 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
727 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
730 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
731 NULL, NULL, NULL}, */
732 {"always_show_message_when_selected", "FALSE",
733 &prefs_common.always_show_msg,
734 P_BOOL, NULL, NULL, NULL},
735 {"select_on_entry", "3", &prefs_common.select_on_entry,
736 P_ENUM, NULL, NULL, NULL},
738 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
740 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
742 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
744 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
746 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
748 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
751 {"mark_as_read_on_new_window", "FALSE",
752 &prefs_common.mark_as_read_on_new_window,
753 P_BOOL, NULL, NULL, NULL},
754 {"mark_as_read_delay", "0",
755 &prefs_common.mark_as_read_delay, P_INT,
757 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
759 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
762 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
763 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
766 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
769 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
771 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
775 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
776 P_BOOL, NULL, NULL, NULL},
777 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
778 P_INT, NULL, NULL, NULL},
779 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
780 P_INT, NULL, NULL, NULL},
783 {"uri_open_command", DEFAULT_BROWSER_CMD,
784 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
785 {"print_command", "lpr %s",
786 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
787 {"ext_editor_command", DEFAULT_EDITOR_CMD,
788 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
789 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
790 P_BOOL, NULL, NULL, NULL},
791 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
793 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
795 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
797 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
798 P_BOOL, NULL, NULL, NULL},
799 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
801 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
804 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
807 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
811 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
812 P_INT, NULL, NULL, NULL},
813 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
815 {"important_score", "1", &prefs_common.important_score, P_INT,
818 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
820 {"log_length", "500", &prefs_common.loglength, P_INT,
823 {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
825 {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
827 {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
829 {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
832 {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
834 {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
836 {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
838 {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
841 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
843 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
845 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
847 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
849 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
851 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
853 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
855 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
858 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
860 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
862 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
864 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
866 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
868 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
870 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
872 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
874 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
877 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
880 {"color_new", "179", &prefs_common.color_new, P_COLOR,
883 /* Some windows' sizes */
884 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
886 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
889 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
891 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
894 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
896 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
899 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
901 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
904 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
906 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
909 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
911 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
914 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
916 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
919 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
921 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
924 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
926 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
929 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
931 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
934 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
936 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
939 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
941 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
944 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
947 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
949 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
952 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
954 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
957 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
959 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
962 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
964 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
967 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
969 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
972 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
974 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
977 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
979 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
983 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
985 {"utf8_instead_of_locale_for_broken_mail", "0",
986 &prefs_common.broken_are_utf8, P_INT,
988 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
990 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
992 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
994 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
996 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
998 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1000 {"folderview_vscrollbar_policy", "0",
1001 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1003 {"textview_cursor_visible", "FALSE",
1004 &prefs_common.textview_cursor_visible, P_BOOL,
1006 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1009 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1011 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1014 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1016 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1019 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1020 P_INT, NULL, NULL, NULL },
1021 {"last_opened_folder", "", &prefs_common.last_opened_folder,
1022 P_STRING, NULL, NULL, NULL },
1023 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1024 P_BOOL, NULL, NULL, NULL },
1025 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1027 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1029 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1031 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1033 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1035 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1037 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1039 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1041 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1044 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1047 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1050 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1053 PrefsCommon *prefs_common_get(void)
1055 return &prefs_common;
1059 * Read history list from the specified history file
1061 static GList *prefs_common_read_history(const gchar *history)
1065 gchar buf[PREFSBUFSIZE];
1068 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1070 if ((fp = g_fopen(path, "rb")) == NULL) {
1071 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1076 while (fgets(buf, sizeof(buf), fp) != NULL) {
1078 if (buf[0] == '\0') continue;
1079 tmp = add_history(tmp, buf);
1083 tmp = g_list_reverse(tmp);
1088 void prefs_common_read_config(void)
1093 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1094 prefs_read_config(param, "Common", rcpath, NULL);
1096 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1101 tmp = g_strdup(gettext(prefs_common.quotefmt));
1102 g_free(prefs_common.quotefmt);
1103 prefs_common.quotefmt = tmp;
1105 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1106 g_free(prefs_common.fw_quotefmt);
1107 prefs_common.fw_quotefmt = tmp;
1109 tmp = g_strdup(gettext(prefs_common.date_format));
1110 g_free(prefs_common.date_format);
1111 prefs_common.date_format = tmp;
1113 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1114 g_free(prefs_common.compose_body_format);
1115 prefs_common.compose_body_format = tmp;
1117 prefs_common.mime_open_cmd_history =
1118 prefs_common_read_history(COMMAND_HISTORY);
1119 prefs_common.summary_quicksearch_history =
1120 prefs_common_read_history(QUICKSEARCH_HISTORY);
1121 prefs_common.summary_search_from_history =
1122 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1123 prefs_common.summary_search_to_history =
1124 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1125 prefs_common.summary_search_subject_history =
1126 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1127 prefs_common.summary_search_body_history =
1128 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1129 prefs_common.summary_search_adv_condition_history =
1130 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1131 prefs_common.message_search_history =
1132 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1134 colorlabel_update_colortable_from_prefs();
1140 g_warning("failed to write\n"); \
1145 * Save history list to the specified history file
1147 static void prefs_common_save_history(const gchar *history, GList *list)
1151 gchar *path, *tmp_path;
1153 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1155 tmp_path = g_strconcat(path, ".tmp", NULL);
1157 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1158 FILE_OP_ERROR(tmp_path, "fopen");
1162 for (cur = list; cur != NULL; cur = cur->next) {
1163 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1164 fputc('\n', fp) != EOF);
1167 if (fclose(fp) == EOF) {
1168 FILE_OP_ERROR(tmp_path, "fclose");
1176 if (g_rename(tmp_path, path) < 0) {
1177 FILE_OP_ERROR(path, "rename");
1190 void prefs_common_write_config(void)
1192 prefs_write_config(param, "Common", COMMON_RC);
1194 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1197 prefs_common_save_history(COMMAND_HISTORY,
1198 prefs_common.mime_open_cmd_history);
1199 prefs_common_save_history(QUICKSEARCH_HISTORY,
1200 prefs_common.summary_quicksearch_history);
1201 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1202 prefs_common.summary_search_from_history);
1203 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1204 prefs_common.summary_search_to_history);
1205 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1206 prefs_common.summary_search_subject_history);
1207 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1208 prefs_common.summary_search_body_history);
1209 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1210 prefs_common.summary_search_adv_condition_history);
1211 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1212 prefs_common.message_search_history);
1215 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1216 both 'in' and 'out' must be non-NULL.
1217 'out' must be a pointer to a buffer whose size is at least equal
1218 to strlen(txt)+1, this buffer will get cleared. out's contents
1219 will always get set to a valid string, even if it's "".*/
1220 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1227 g_return_if_fail( in != NULL );
1228 g_return_if_fail( out != NULL );
1232 memset(out, 0, strlen(in)+1);
1233 while (*i != '\0') {
1234 if (*i == '\\' && *(i+1) == 'n') {
1237 } else if (*i == '\\' && *(i+1) == 't') {
1240 } else if (*i == '\\' && *(i+1) == '\\') {
1251 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1252 both 'in' and 'out' must be non-NULL.
1253 'out' must be a pointer to a buffer whose size is at least equal
1254 to 2*strlen(txt)+1. out's contents will always get set to a valid
1255 string, even if it's "". */
1256 void pref_get_escaped_pref(gchar *out, const gchar *in)
1263 g_return_if_fail( in != NULL );
1264 g_return_if_fail( out != NULL );
1268 while (*i != '\0') {
1272 } else if (*i == '\t') {
1275 } else if (*i == '\\') {
1286 /* set the contents of a textview widget from the internal \-escaped
1287 representation of a pref string. both txt and textview must be non-NULL. */
1288 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1290 GtkTextBuffer *buffer;
1293 g_return_if_fail( textview != NULL );
1295 buffer = gtk_text_view_get_buffer(textview);
1298 gtk_text_buffer_set_text(buffer, "", -1);
1300 out = malloc(strlen(txt)+1);
1302 pref_get_unescaped_pref(out, txt);
1304 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1309 /* set the contents of a gtkentry widget from the internal \-escaped
1310 representation of a pref string. both txt and entry must be non-NULL. */
1311 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1315 g_return_if_fail( entry != NULL );
1317 gtk_entry_set_text(entry, "");
1319 out = malloc(strlen(txt)+1);
1321 pref_get_unescaped_pref(out, txt);
1323 gtk_entry_set_text(entry, out?out:"");
1328 /* get the \-escaped internal representation of a pref from the contents of
1329 a textview widget. textview must be non-NULL. */
1330 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1332 GtkTextBuffer *buffer;
1333 GtkTextIter start, end;
1336 g_return_val_if_fail( textview != NULL, "" );
1338 buffer = gtk_text_view_get_buffer(textview);
1339 gtk_text_buffer_get_start_iter(buffer, &start);
1340 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1341 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1342 out = malloc(2*strlen(tmp)+1);
1344 pref_get_escaped_pref(out, tmp);
1350 /* get the \-escaped internal representation of a pref from the contents of
1351 a gtkentry widget. entry must be non-NULL. */
1352 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1356 g_return_val_if_fail( entry != NULL, "" );
1358 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1359 out = malloc(2*strlen(tmp)+1);
1361 pref_get_escaped_pref(out, tmp);
1367 /* ugly hack to be able to get this pref from ssl_certificate.c */
1368 gboolean prefs_common_unsafe_ssl_certs(void)
1370 return prefs_common.unsafe_ssl_certs;
1373 gboolean prefs_common_enable_log_standard(void)
1375 return prefs_common.enable_log_standard;
1378 gboolean prefs_common_enable_log_warning(void)
1380 return prefs_common.enable_log_warning;
1382 gboolean prefs_common_enable_log_error(void)
1384 return prefs_common.enable_log_error;
1386 gboolean prefs_common_enable_log_status(void)
1388 return prefs_common.enable_log_status;
1392 const gchar *prefs_common_get_data_root(void)
1394 if (prefs_common.data_root && *prefs_common.data_root)
1395 return prefs_common.data_root;
1401 return the translated name of a header, if the translate_header option is
1402 set, otherwise return the untranslated header name (header_name itself).
1403 this function is provided for convenience, it's an interface to
1404 prefs_common.trans_hdr.
1405 works with header names either with or without trailing colon, provided
1406 that gettext found such header name in the sources (they should all be
1407 found in src/gtk/headers.h anyway).
1409 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1411 if (header_name == NULL || *header_name == '\0')
1414 return prefs_common.trans_hdr ? gettext(header_name) : header_name;