2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2006 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},
106 {"attach_save_directory", NULL,
107 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
108 {"attach_load_directory", NULL,
109 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
112 {"mime_textviewer", NULL,
113 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
114 {"mime_open_command", "notepad '%s'",
115 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
118 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
119 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
122 {"uri_open_command", NULL,
123 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
124 {"print_command", "notepad /p %s",
125 &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
126 {"ext_editor_command", "notepad %s",
127 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
129 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
132 # define SPECIFIC_PREFS prefs_common
136 parameter name, default value, pointer to the prefs variable, data type,
137 pointer to the widget pointer,
138 pointer to the function for data setting,
139 pointer to the function for widget setting
142 static PrefParam param[] = {
144 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
146 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
149 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
151 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
153 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
155 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
156 P_BOOL, NULL, NULL, NULL},
157 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
158 P_BOOL, NULL, NULL, NULL},
159 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
160 P_BOOL, NULL, NULL, NULL},
161 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
162 P_BOOL, NULL, NULL, NULL},
163 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
165 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
167 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
169 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
171 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
172 P_BOOL, NULL, NULL, NULL},
173 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
174 P_BOOL, NULL, NULL, NULL},
177 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
179 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
180 P_BOOL, NULL, NULL, NULL},
181 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
183 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
185 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
188 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
190 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
193 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
194 P_BOOL, NULL, NULL, NULL},
197 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
199 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
200 P_BOOL, NULL, NULL, NULL},
201 {"redirect_keep_from", "FALSE",
202 &prefs_common.redirect_keep_from, P_BOOL,
204 {"undo_level", "50", &prefs_common.undolevels, P_INT,
207 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
209 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
211 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
213 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
215 {"autosave", "TRUE", &prefs_common.autosave,
216 P_BOOL, NULL, NULL, NULL},
217 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
220 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
222 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
224 {"dictionary", "", &prefs_common.dictionary, P_STRING,
226 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
228 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
230 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
232 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
233 P_BOOL, NULL, NULL, NULL},
234 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
237 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
239 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
242 /* Account autoselection */
243 {"reply_account_autoselect", "TRUE",
244 &prefs_common.reply_account_autosel, P_BOOL,
246 {"forward_account_autoselect", "TRUE",
247 &prefs_common.forward_account_autosel, P_BOOL,
249 {"reedit_account_autoselect", "TRUE",
250 &prefs_common.reedit_account_autosel, P_BOOL,
253 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
256 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
260 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
262 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
263 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
265 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
267 {"forward_quote_format",
268 N_("\\n\\nBegin forwarded message:\\n\\n"
269 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
270 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
271 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
272 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
276 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
277 {"widget_font", NULL,
278 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
279 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
280 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
281 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
282 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
283 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
284 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
285 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
286 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
289 {"widget_font_gtk2", NULL,
290 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
291 {"message_font_gtk2", "Monospace 9",
292 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
293 {"print_font_gtk2", "Monospace 9",
294 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
295 {"small_font_gtk2", "Sans 9",
296 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
297 {"normal_font_gtk2", "Sans 9",
298 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
301 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
303 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
305 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
307 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
309 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
311 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
313 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
315 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
317 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
319 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
321 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
323 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
325 {"custom_color7", "#663366", &prefs_common.custom_colorlabel[6].color, P_COLOR,
327 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
331 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
333 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
335 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
338 {"display_folder_unread_num", "FALSE",
339 &prefs_common.display_folder_unread, P_BOOL,
341 {"newsgroup_abbrev_len", "16",
342 &prefs_common.ng_abbrev_len, P_INT,
345 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
348 /* Display: Summary View */
349 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
351 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
353 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
354 P_STRING, NULL, NULL, NULL},
356 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
359 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
361 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
363 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
365 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
367 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
371 {"summary_col_show_mark", "TRUE",
372 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
373 {"summary_col_show_unread", "TRUE",
374 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
375 {"summary_col_show_mime", "TRUE",
376 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
377 {"summary_col_show_subject", "TRUE",
378 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
379 {"summary_col_show_from", "TRUE",
380 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
381 {"summary_col_show_to", "FALSE",
382 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
383 {"summary_col_show_date", "TRUE",
384 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
385 {"summary_col_show_size", "TRUE",
386 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
387 {"summary_col_show_number", "FALSE",
388 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
389 {"summary_col_show_score", "FALSE",
390 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
391 {"summary_col_show_locked", "FALSE",
392 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
394 {"summary_col_pos_mark", "0",
395 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
396 {"summary_col_pos_unread", "1",
397 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
398 {"summary_col_pos_mime", "2",
399 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
400 {"summary_col_pos_subject", "3",
401 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
402 {"summary_col_pos_from", "4",
403 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
404 {"summary_col_pos_date", "5",
405 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
406 {"summary_col_pos_size", "6",
407 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
408 {"summary_col_pos_number", "7",
409 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
410 {"summary_col_pos_score", "8",
411 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
412 {"summary_col_pos_locked", "9",
413 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
414 {"summary_col_pos_to", "10",
415 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
417 {"summary_col_size_mark", "10",
418 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
419 {"summary_col_size_unread", "13",
420 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
421 {"summary_col_size_mime", "10",
422 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
423 {"summary_col_size_subject", "200",
424 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
425 {"summary_col_size_from", "120",
426 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
427 {"summary_col_size_to", "120",
428 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
429 {"summary_col_size_date", "118",
430 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
431 {"summary_col_size_size", "45",
432 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
433 {"summary_col_size_number", "40",
434 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
435 {"summary_col_size_score", "40",
436 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
437 {"summary_col_size_locked", "13",
438 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
441 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
443 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
445 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
447 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
449 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
452 {"folder_col_show_folder", "TRUE",
453 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
454 {"folder_col_show_new", "TRUE",
455 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
456 {"folder_col_show_unread", "TRUE",
457 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
458 {"folder_col_show_total", "TRUE",
459 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
461 {"folder_col_pos_folder", "0",
462 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
463 {"folder_col_pos_new", "1",
464 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
465 {"folder_col_pos_unread", "2",
466 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
467 {"folder_col_pos_total", "3",
468 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
470 {"folder_col_size_folder", "120",
471 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
472 {"folder_col_size_new", "32",
473 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
474 {"folder_col_size_unread", "32",
475 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
476 {"folder_col_size_total", "32",
477 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
479 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
481 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
484 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
486 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
488 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
490 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
492 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
495 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
497 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
499 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
501 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
503 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
505 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
507 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
509 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
511 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
513 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
515 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
517 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
519 {"compose_width", "600", &prefs_common.compose_width, P_INT,
521 {"compose_height", "560", &prefs_common.compose_height, P_INT,
523 {"compose_x", "0", &prefs_common.compose_x, P_INT,
525 {"compose_y", "0", &prefs_common.compose_y, P_INT,
528 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
531 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
533 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
535 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
537 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
539 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
541 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
543 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
545 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
547 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
549 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
551 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
552 P_BOOL, NULL, NULL, NULL},
554 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
555 P_BOOL, NULL, NULL, NULL},
556 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
558 {"display_xface", "TRUE", &prefs_common.display_xface,
559 P_BOOL, NULL, NULL, NULL},
560 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
562 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
564 {"line_space", "2", &prefs_common.line_space, P_INT,
566 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
569 {"enable_smooth_scroll", "FALSE",
570 &prefs_common.enable_smooth_scroll, P_BOOL,
572 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
574 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
576 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
579 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
582 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
585 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
587 {"attach_save_directory", NULL,
588 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
589 {"attach_load_directory", NULL,
590 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
593 {"mime_textviewer", NULL,
594 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
595 {"mime_open_command", "gedit '%s'",
596 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
599 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
601 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
604 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
605 NULL, NULL, NULL}, */
606 {"always_show_message_when_selected", "FALSE",
607 &prefs_common.always_show_msg,
608 P_BOOL, NULL, NULL, NULL},
609 {"select_on_entry", "2", &prefs_common.select_on_entry,
610 P_ENUM, NULL, NULL, NULL},
611 {"mark_as_read_on_new_window", "FALSE",
612 &prefs_common.mark_as_read_on_new_window,
613 P_BOOL, NULL, NULL, NULL},
614 {"mark_as_read_delay", "0",
615 &prefs_common.mark_as_read_delay, P_INT,
617 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
619 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
622 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
623 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
626 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
629 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
631 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
635 {"uri_open_command", DEFAULT_BROWSER_CMD,
636 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
637 {"print_command", "lpr %s",
638 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
639 {"ext_editor_command", DEFAULT_EDITOR_CMD,
640 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
642 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
643 P_BOOL, NULL, NULL, NULL},
644 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
646 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
648 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
650 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
651 P_BOOL, NULL, NULL, NULL},
652 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
654 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
656 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
659 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
660 P_INT, NULL, NULL, NULL},
661 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
663 {"important_score", "1", &prefs_common.important_score, P_INT,
665 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
667 {"log_length", "500", &prefs_common.loglength, P_INT,
669 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
671 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
673 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
675 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
677 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
680 {"color_new", "179", &prefs_common.color_new, P_COLOR,
683 /* Some windows' sizes */
684 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
686 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
689 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
691 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
694 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
696 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
699 {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
701 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
704 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
706 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
709 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
711 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
714 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
716 {"addressbookeditpersonwin_height", "-1", &prefs_common.addressbookeditpersonwin_height, P_INT,
719 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
721 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
724 {"pluginswin_width", "480", &prefs_common.pluginswin_width, P_INT,
726 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
729 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
731 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
734 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
736 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
739 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
741 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
744 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
746 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
749 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
751 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
754 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
756 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
759 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
761 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
764 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
766 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
770 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
772 {"utf8_instead_of_locale_for_broken_mail", "0",
773 &prefs_common.broken_are_utf8, P_INT,
775 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
777 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
779 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
781 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
783 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
785 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
787 {"folderview_vscrollbar_policy", "0",
788 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
790 {"textview_cursor_visible", "FALSE",
791 &prefs_common.textview_cursor_visible, P_BOOL,
793 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
795 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
797 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
799 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
800 P_INT, NULL, NULL, NULL },
801 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
803 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
805 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
807 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
809 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
811 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
813 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
816 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
819 PrefsCommon *prefs_common_get(void)
821 return &prefs_common;
825 * Read history list from the specified history file
827 GList *prefs_common_read_history(const gchar *history)
831 gchar buf[PREFSBUFSIZE];
834 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
836 if ((fp = g_fopen(path, "rb")) == NULL) {
837 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
842 while (fgets(buf, sizeof(buf), fp) != NULL) {
844 if (buf[0] == '\0') continue;
845 tmp = add_history(tmp, buf);
849 tmp = g_list_reverse(tmp);
854 void prefs_common_read_config(void)
859 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
860 prefs_read_config(param, "Common", rcpath, NULL);
862 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
867 tmp = g_strdup(gettext(prefs_common.quotefmt));
868 g_free(prefs_common.quotefmt);
869 prefs_common.quotefmt = tmp;
871 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
872 g_free(prefs_common.fw_quotefmt);
873 prefs_common.fw_quotefmt = tmp;
875 tmp = g_strdup(gettext(prefs_common.date_format));
876 g_free(prefs_common.date_format);
877 prefs_common.date_format = tmp;
879 prefs_common.mime_open_cmd_history =
880 prefs_common_read_history(COMMAND_HISTORY);
881 prefs_common.summary_quicksearch_history =
882 prefs_common_read_history(QUICKSEARCH_HISTORY);
884 colorlabel_update_colortable_from_prefs();
888 * Save history list to the specified history file
890 void prefs_common_save_history(const gchar *history, GList *list)
896 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
898 if ((fp = g_fopen(path, "wb")) == NULL) {
899 FILE_OP_ERROR(path, "fopen");
904 for (cur = list; cur != NULL; cur = cur->next) {
905 fputs((gchar *)cur->data, fp);
913 void prefs_common_write_config(void)
915 prefs_write_config(param, "Common", COMMON_RC);
917 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
920 prefs_common_save_history(COMMAND_HISTORY,
921 prefs_common.mime_open_cmd_history);
922 prefs_common_save_history(QUICKSEARCH_HISTORY,
923 prefs_common.summary_quicksearch_history);
926 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
927 both 'in' and 'out' must be non-NULL.
928 'out' must be a pointer to a buffer whose size is at least equal
929 to strlen(txt)+1, this buffer will get cleared. */
930 void pref_get_unescaped_pref(gchar *out, const gchar *in)
934 g_return_if_fail( in != NULL );
935 g_return_if_fail( out != NULL );
939 memset(out, 0, strlen(in)+1);
941 if (*i == '\\' && *(i+1) == 'n') {
944 } else if (*i == '\\' && *(i+1) == 't') {
947 } else if (*i == '\\' && *(i+1) == '\\') {
958 /* set the contents of a textview widget from the internal \-escaped
959 representation of a pref string */
960 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
962 GtkTextBuffer *out_buffer;
965 g_return_if_fail( txt != NULL );
967 out_buffer = gtk_text_view_get_buffer(textview);
968 out = malloc(txt?(strlen(txt)+1):1);
970 pref_get_unescaped_pref(out, txt);
972 gtk_text_buffer_set_text(out_buffer, out?out:"", -1);
976 /* get the \-escaped internal representation of a pref from the contents of
978 gchar *pref_get_pref_from_textview(GtkTextView *textview)
980 GtkTextBuffer *buffer;
981 GtkTextIter start, end;
982 gchar *o_out, *out, *tmp, *t;
984 buffer = gtk_text_view_get_buffer(textview);
985 gtk_text_buffer_get_start_iter(buffer, &start);
986 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
987 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
989 o_out = out = malloc(2*strlen(tmp)+1);
995 } else if (*t == '\t') {
998 } else if (*t == '\\') {