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 2 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, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
145 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
148 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
150 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
152 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
154 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
155 P_BOOL, NULL, NULL, NULL},
156 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
157 P_BOOL, NULL, NULL, NULL},
158 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
159 P_BOOL, NULL, NULL, NULL},
160 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
161 P_BOOL, NULL, NULL, NULL},
162 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
164 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
166 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
168 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
170 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
171 P_BOOL, NULL, NULL, NULL},
172 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
173 P_BOOL, NULL, NULL, NULL},
176 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
178 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
179 P_BOOL, NULL, NULL, NULL},
180 {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
182 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
184 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
187 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
189 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
192 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
193 P_BOOL, NULL, NULL, NULL},
196 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
198 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
199 P_BOOL, NULL, NULL, NULL},
200 {"redirect_keep_from", "FALSE",
201 &prefs_common.redirect_keep_from, P_BOOL,
203 {"undo_level", "50", &prefs_common.undolevels, P_INT,
205 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
207 {"compose_subject_format", "",
208 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
209 {"compose_body_format", N_("Hello,\\n"),
210 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
212 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
214 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
216 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
218 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
220 {"autosave", "TRUE", &prefs_common.autosave,
221 P_BOOL, NULL, NULL, NULL},
222 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
225 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
227 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
229 {"dictionary", "", &prefs_common.dictionary, P_STRING,
231 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
233 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
235 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
237 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
239 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
240 P_BOOL, NULL, NULL, NULL},
241 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
243 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
246 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
248 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
251 /* Account autoselection */
252 {"reply_account_autoselect", "TRUE",
253 &prefs_common.reply_account_autosel, P_BOOL,
255 {"forward_account_autoselect", "TRUE",
256 &prefs_common.forward_account_autosel, P_BOOL,
258 {"reedit_account_autoselect", "TRUE",
259 &prefs_common.reedit_account_autosel, P_BOOL,
262 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
266 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
269 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
274 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
276 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
277 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
279 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
281 {"forward_quote_format",
282 N_("\\n\\nBegin forwarded message:\\n\\n"
283 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
284 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
285 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
286 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
290 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
291 {"widget_font", NULL,
292 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
293 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
294 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
295 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
296 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
297 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
298 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
299 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
300 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
304 {"widget_font_gtk2", NULL,
305 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
306 {"message_font_gtk2", "Monospace 9",
307 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
308 {"print_font_gtk2", "Monospace 9",
309 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
310 {"small_font_gtk2", "Sans 9",
311 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
312 {"normal_font_gtk2", "Sans 9",
313 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
315 {"widget_font_gtk2", NULL,
316 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
317 {"message_font_gtk2", "Monospace 8",
318 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
319 {"print_font_gtk2", "Monospace 8",
320 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
321 {"small_font_gtk2", "Sans 8",
322 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
323 {"normal_font_gtk2", "Sans 8",
324 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
327 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
329 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
331 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
333 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
335 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
337 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
339 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
341 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
343 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
345 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
347 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
349 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
351 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
353 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
355 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
357 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
359 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
361 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
363 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
365 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
367 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
369 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
371 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
373 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
375 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
377 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
379 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
381 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
383 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
385 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
389 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
391 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
393 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
396 {"display_folder_unread_num", "0",
397 &prefs_common.display_folder_unread, P_INT,
399 {"newsgroup_abbrev_len", "16",
400 &prefs_common.ng_abbrev_len, P_INT,
403 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
406 /* Display: Summary View */
407 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
409 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
411 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
412 P_STRING, NULL, NULL, NULL},
414 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
417 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
420 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
423 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
426 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
428 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
431 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
434 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
438 {"summary_col_show_mark", "TRUE",
439 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
440 {"summary_col_show_unread", "TRUE",
441 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
442 {"summary_col_show_subject", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_from", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_to", "FALSE",
447 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_date", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_mime", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_size", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_number", "FALSE",
455 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_score", "FALSE",
457 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_locked", "FALSE",
459 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
461 {"summary_col_pos_mark", "0",
462 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
463 {"summary_col_pos_unread", "1",
464 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
465 {"summary_col_pos_mime", "2",
466 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_subject", "3",
468 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_from", "4",
470 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_date", "5",
472 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_size", "6",
474 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_number", "7",
476 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_score", "8",
478 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_locked", "9",
480 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_to", "10",
482 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
484 {"summary_col_size_mark", "10",
485 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
486 {"summary_col_size_unread", "13",
487 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_mime", "10",
489 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
491 {"summary_col_size_subject", "200",
492 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
493 {"summary_col_size_from", "120",
494 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_to", "120",
496 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_subject", "300",
499 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
500 {"summary_col_size_from", "150",
501 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_to", "150",
503 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_date", "118",
507 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
508 {"summary_col_size_size", "45",
509 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
510 {"summary_col_size_number", "40",
511 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
512 {"summary_col_size_score", "40",
513 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
514 {"summary_col_size_locked", "13",
515 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
518 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
520 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
522 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
524 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
526 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
529 {"folder_col_show_folder", "TRUE",
530 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
531 {"folder_col_show_new", "TRUE",
532 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
533 {"folder_col_show_unread", "TRUE",
534 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
535 {"folder_col_show_total", "TRUE",
536 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
538 {"folder_col_pos_folder", "0",
539 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
540 {"folder_col_pos_new", "1",
541 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
542 {"folder_col_pos_unread", "2",
543 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
544 {"folder_col_pos_total", "3",
545 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
548 {"folder_col_size_folder", "120",
549 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
550 {"folder_col_size_new", "32",
551 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
552 {"folder_col_size_unread", "32",
553 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
554 {"folder_col_size_total", "32",
555 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
557 {"folder_col_size_folder", "400",
558 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
559 {"folder_col_size_new", "32",
560 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
561 {"folder_col_size_unread", "32",
562 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
563 {"folder_col_size_total", "32",
564 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
566 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
568 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
571 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
573 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
575 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
577 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
579 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
582 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
584 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
586 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
588 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
590 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
592 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
595 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
597 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
599 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
601 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
603 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
605 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
607 {"compose_width", "600", &prefs_common.compose_width, P_INT,
609 {"compose_height", "560", &prefs_common.compose_height, P_INT,
612 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
614 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
616 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
618 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
620 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
622 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
624 {"compose_width", "700", &prefs_common.compose_width, P_INT,
626 {"compose_height", "470", &prefs_common.compose_height, P_INT,
629 {"compose_x", "0", &prefs_common.compose_x, P_INT,
631 {"compose_y", "0", &prefs_common.compose_y, P_INT,
634 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
637 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
639 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
641 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
643 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
645 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
647 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
649 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
651 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
653 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
655 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
657 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
658 P_BOOL, NULL, NULL, NULL},
660 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
661 P_BOOL, NULL, NULL, NULL},
662 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
664 {"display_xface", "TRUE", &prefs_common.display_xface,
665 P_BOOL, NULL, NULL, NULL},
666 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
668 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
670 {"line_space", "2", &prefs_common.line_space, P_INT,
672 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
675 {"enable_smooth_scroll", "FALSE",
676 &prefs_common.enable_smooth_scroll, P_BOOL,
678 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
680 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
682 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
685 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
688 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
691 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
693 {"attach_save_directory", NULL,
694 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
695 {"attach_load_directory", NULL,
696 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
699 {"mime_textviewer", NULL,
700 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
701 {"mime_open_command", "gedit '%s'",
702 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
706 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
709 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
712 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
713 NULL, NULL, NULL}, */
714 {"always_show_message_when_selected", "FALSE",
715 &prefs_common.always_show_msg,
716 P_BOOL, NULL, NULL, NULL},
717 {"select_on_entry", "2", &prefs_common.select_on_entry,
718 P_ENUM, NULL, NULL, NULL},
719 {"mark_as_read_on_new_window", "FALSE",
720 &prefs_common.mark_as_read_on_new_window,
721 P_BOOL, NULL, NULL, NULL},
722 {"mark_as_read_delay", "0",
723 &prefs_common.mark_as_read_delay, P_INT,
725 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
727 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
730 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
731 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
734 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
737 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
739 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
743 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
744 P_BOOL, NULL, NULL, NULL},
745 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
746 P_INT, NULL, NULL, NULL},
747 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
748 P_INT, NULL, NULL, NULL},
751 {"uri_open_command", DEFAULT_BROWSER_CMD,
752 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
753 {"print_command", "lpr %s",
754 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
755 {"ext_editor_command", DEFAULT_EDITOR_CMD,
756 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
757 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
758 P_BOOL, NULL, NULL, NULL},
759 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
761 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
763 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
765 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
766 P_BOOL, NULL, NULL, NULL},
767 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
769 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
772 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
775 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
779 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
780 P_INT, NULL, NULL, NULL},
781 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
783 {"important_score", "1", &prefs_common.important_score, P_INT,
786 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
788 {"log_length", "500", &prefs_common.loglength, P_INT,
791 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
793 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
795 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
797 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
799 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
801 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
803 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
805 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
808 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
810 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
812 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
814 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
816 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
818 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
820 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
822 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
824 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
827 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
830 {"color_new", "179", &prefs_common.color_new, P_COLOR,
833 /* Some windows' sizes */
834 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
836 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
839 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
841 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
844 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
846 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
849 {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
851 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
854 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
856 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
859 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
861 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
864 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
866 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
869 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
871 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
874 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
876 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
879 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
881 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
884 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
886 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
889 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
892 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
894 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
897 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
899 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
902 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
904 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
907 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
909 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
912 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
914 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
917 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
919 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
922 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
924 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
928 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
930 {"utf8_instead_of_locale_for_broken_mail", "0",
931 &prefs_common.broken_are_utf8, P_INT,
933 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
935 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
937 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
939 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
941 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
943 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
945 {"folderview_vscrollbar_policy", "0",
946 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
948 {"textview_cursor_visible", "FALSE",
949 &prefs_common.textview_cursor_visible, P_BOOL,
951 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
954 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
956 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
959 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
961 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
964 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
965 P_INT, NULL, NULL, NULL },
966 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
968 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
970 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
972 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
974 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
976 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
978 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
980 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
983 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
986 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
989 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
992 PrefsCommon *prefs_common_get(void)
994 return &prefs_common;
998 * Read history list from the specified history file
1000 static GList *prefs_common_read_history(const gchar *history)
1004 gchar buf[PREFSBUFSIZE];
1007 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1009 if ((fp = g_fopen(path, "rb")) == NULL) {
1010 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1015 while (fgets(buf, sizeof(buf), fp) != NULL) {
1017 if (buf[0] == '\0') continue;
1018 tmp = add_history(tmp, buf);
1022 tmp = g_list_reverse(tmp);
1027 void prefs_common_read_config(void)
1032 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1033 prefs_read_config(param, "Common", rcpath, NULL);
1035 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1040 tmp = g_strdup(gettext(prefs_common.quotefmt));
1041 g_free(prefs_common.quotefmt);
1042 prefs_common.quotefmt = tmp;
1044 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1045 g_free(prefs_common.fw_quotefmt);
1046 prefs_common.fw_quotefmt = tmp;
1048 tmp = g_strdup(gettext(prefs_common.date_format));
1049 g_free(prefs_common.date_format);
1050 prefs_common.date_format = tmp;
1052 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1053 g_free(prefs_common.compose_body_format);
1054 prefs_common.compose_body_format = tmp;
1056 prefs_common.mime_open_cmd_history =
1057 prefs_common_read_history(COMMAND_HISTORY);
1058 prefs_common.summary_quicksearch_history =
1059 prefs_common_read_history(QUICKSEARCH_HISTORY);
1060 prefs_common.summary_search_from_history =
1061 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1062 prefs_common.summary_search_to_history =
1063 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1064 prefs_common.summary_search_subject_history =
1065 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1066 prefs_common.summary_search_body_history =
1067 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1068 prefs_common.summary_search_adv_condition_history =
1069 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1070 prefs_common.message_search_history =
1071 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1073 colorlabel_update_colortable_from_prefs();
1079 g_warning("failed to write\n"); \
1084 * Save history list to the specified history file
1086 static void prefs_common_save_history(const gchar *history, GList *list)
1090 gchar *path, *tmp_path;
1092 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1094 tmp_path = g_strconcat(path, ".tmp", NULL);
1096 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1097 FILE_OP_ERROR(tmp_path, "fopen");
1101 for (cur = list; cur != NULL; cur = cur->next) {
1102 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1103 fputc('\n', fp) != EOF);
1106 if (fclose(fp) == EOF) {
1107 FILE_OP_ERROR(tmp_path, "fclose");
1115 if (g_rename(tmp_path, path) < 0) {
1116 FILE_OP_ERROR(path, "rename");
1129 void prefs_common_write_config(void)
1131 prefs_write_config(param, "Common", COMMON_RC);
1133 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1136 prefs_common_save_history(COMMAND_HISTORY,
1137 prefs_common.mime_open_cmd_history);
1138 prefs_common_save_history(QUICKSEARCH_HISTORY,
1139 prefs_common.summary_quicksearch_history);
1140 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1141 prefs_common.summary_search_from_history);
1142 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1143 prefs_common.summary_search_to_history);
1144 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1145 prefs_common.summary_search_subject_history);
1146 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1147 prefs_common.summary_search_body_history);
1148 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1149 prefs_common.summary_search_adv_condition_history);
1150 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1151 prefs_common.message_search_history);
1154 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1155 both 'in' and 'out' must be non-NULL.
1156 'out' must be a pointer to a buffer whose size is at least equal
1157 to strlen(txt)+1, this buffer will get cleared. out's contents
1158 will always get set to a valid string, even if it's "".*/
1159 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1166 g_return_if_fail( in != NULL );
1167 g_return_if_fail( out != NULL );
1171 memset(out, 0, strlen(in)+1);
1172 while (*i != '\0') {
1173 if (*i == '\\' && *(i+1) == 'n') {
1176 } else if (*i == '\\' && *(i+1) == 't') {
1179 } else if (*i == '\\' && *(i+1) == '\\') {
1190 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1191 both 'in' and 'out' must be non-NULL.
1192 'out' must be a pointer to a buffer whose size is at least equal
1193 to 2*strlen(txt)+1. out's contents will always get set to a valid
1194 string, even if it's "". */
1195 void pref_get_escaped_pref(gchar *out, const gchar *in)
1202 g_return_if_fail( in != NULL );
1203 g_return_if_fail( out != NULL );
1207 while (*i != '\0') {
1211 } else if (*i == '\t') {
1214 } else if (*i == '\\') {
1225 /* set the contents of a textview widget from the internal \-escaped
1226 representation of a pref string. both txt and textview must be non-NULL. */
1227 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1229 GtkTextBuffer *buffer;
1232 g_return_if_fail( txt != NULL );
1233 g_return_if_fail( textview != NULL );
1235 buffer = gtk_text_view_get_buffer(textview);
1236 out = malloc(strlen(txt)+1);
1238 pref_get_unescaped_pref(out, txt);
1240 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1244 /* set the contents of a gtkentry widget from the internal \-escaped
1245 representation of a pref string. both txt and entry must be non-NULL. */
1246 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1250 g_return_if_fail( txt != NULL );
1251 g_return_if_fail( entry != NULL );
1253 out = malloc(strlen(txt)+1);
1255 pref_get_unescaped_pref(out, txt);
1257 gtk_entry_set_text(entry, out?out:"");
1261 /* get the \-escaped internal representation of a pref from the contents of
1262 a textview widget. textview must be non-NULL. */
1263 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1265 GtkTextBuffer *buffer;
1266 GtkTextIter start, end;
1269 g_return_val_if_fail( textview != NULL, "" );
1271 buffer = gtk_text_view_get_buffer(textview);
1272 gtk_text_buffer_get_start_iter(buffer, &start);
1273 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1274 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1275 out = malloc(2*strlen(tmp)+1);
1277 pref_get_escaped_pref(out, tmp);
1283 /* get the \-escaped internal representation of a pref from the contents of
1284 a gtkentry widget. entry must be non-NULL. */
1285 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1289 g_return_val_if_fail( entry != NULL, "" );
1291 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1292 out = malloc(2*strlen(tmp)+1);
1294 pref_get_escaped_pref(out, tmp);
1300 /* ugly hack to be able to get this pref from ssl_certificate.c */
1301 gboolean prefs_common_unsafe_ssl_certs(void)
1303 return prefs_common.unsafe_ssl_certs;
1307 return the translated name of a header, if the translate_header option is
1308 set, otherwise return the untranslated header name (header_name itself).
1309 this function is provided for convenience, it's an interface to
1310 prefs_common.trans_hdr.
1311 works with header names either with or without trailing colon, provided
1312 that gettext found such header name in the sources (they should all be
1313 found in src/gtk/headers.h anyway).
1315 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1317 if (header_name == NULL || *header_name == '\0')
1320 return prefs_common.trans_hdr ? gettext(header_name) : header_name;