prefs_common.c (43435B)
1 /* 2 * Claws Mail -- a GTK based, lightweight, and fast e-mail client 3 * Copyright (C) 1999-2025 the Claws Mail team and Hiroyuki Yamamoto 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 */ 18 19 #include "defs.h" 20 21 #include <glib.h> 22 #include <glib/gi18n.h> 23 #include <gtk/gtk.h> 24 #include <gdk/gdkkeysyms.h> 25 #include <stdio.h> 26 #include <stdlib.h> 27 #include <string.h> 28 #include <unistd.h> 29 #include <sys/types.h> 30 #include <sys/stat.h> 31 #include <errno.h> 32 33 #include "main.h" 34 #include "prefs_gtk.h" 35 #include "prefs_common.h" 36 #include "prefs_display_header.h" 37 #include "prefs_summary_column.h" 38 #include "prefs_folder_column.h" 39 #include "mainwindow.h" 40 #include "summaryview.h" 41 #include "folderview.h" 42 #include "messageview.h" 43 #include "manage_window.h" 44 #include "inc.h" 45 #include "menu.h" 46 #include "codeconv.h" 47 #include "utils.h" 48 #include "gtkutils.h" 49 #include "alertpanel.h" 50 #include "folder.h" 51 #include "socket.h" 52 #include "filesel.h" 53 #include "stock_pixmap.h" 54 #include "prefswindow.h" 55 #include "passwordstore.h" 56 #include "file-utils.h" 57 58 enum { 59 DATEFMT_FMT, 60 DATEFMT_TXT, 61 N_DATEFMT_COLUMNS 62 }; 63 64 PrefsCommon prefs_common; 65 66 GtkWidget *notebook; 67 68 /* 69 parameter name, default value, pointer to the prefs variable, data type, 70 pointer to the widget pointer, 71 pointer to the function for data setting, 72 pointer to the function for widget setting 73 */ 74 75 static PrefParam param[] = { 76 {"config_version", "0", 77 &prefs_common.config_version, P_INT, NULL, NULL, NULL}, 78 79 /* Receive */ 80 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL, 81 NULL, NULL, NULL}, 82 {"ext_inc_path", "/usr/bin/mh/inc", &prefs_common.extinc_cmd, P_STRING, 83 NULL, NULL, NULL}, 84 85 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu, 86 P_BOOL, NULL, NULL, NULL}, 87 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto, 88 P_BOOL, NULL, NULL, NULL}, 89 {"newmail_notify_cmd", "", &prefs_common.newmail_notify_cmd, P_STRING, 90 NULL, NULL, NULL}, 91 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT, 92 NULL, NULL, NULL}, 93 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT, 94 NULL, NULL, NULL}, 95 96 /* Send */ 97 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL, 98 NULL, NULL, NULL}, 99 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages, 100 P_BOOL, NULL, NULL, NULL}, 101 {"send_dialog_mode", "0", &prefs_common.send_dialog_invisible, P_BOOL, 102 NULL, NULL, NULL}, 103 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT, 104 NULL, NULL, NULL}, 105 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT, 106 NULL, NULL, NULL}, 107 108 {"outgoing_charset", CS_UTF_8, &prefs_common.outgoing_charset, P_STRING, 109 NULL, NULL, NULL}, 110 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM, 111 NULL, NULL, NULL}, 112 {"outgoing_fallback_to_ascii", "TRUE", &prefs_common.outgoing_fallback_to_ascii, P_BOOL, 113 NULL, NULL, NULL}, 114 {"rewrite_first_from", "TRUE", &prefs_common.rewrite_first_from, 115 P_BOOL, NULL, NULL, NULL}, 116 {"warn_empty_subj", "TRUE", &prefs_common.warn_empty_subj, 117 P_BOOL, NULL, NULL, NULL}, 118 {"warn_sending_many_recipients_num", "0", &prefs_common.warn_sending_many_recipients_num, P_INT, 119 NULL, NULL, NULL}, 120 {"hide_timezone", "FALSE", &prefs_common.hide_timezone, 121 P_BOOL, NULL, NULL, NULL}, 122 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana, 123 P_BOOL, NULL, NULL, NULL}, 124 125 /* Compose */ 126 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL, 127 NULL, NULL, NULL}, 128 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment, 129 P_BOOL, NULL, NULL, NULL}, 130 {"redirect_keep_from", "FALSE", 131 &prefs_common.redirect_keep_from, P_BOOL, 132 NULL, NULL, NULL}, 133 {"undo_level", "50", &prefs_common.undolevels, P_INT, 134 NULL, NULL, NULL}, 135 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL, 136 NULL, NULL, NULL}, 137 {"compose_subject_format", "", 138 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL}, 139 {"compose_body_format", N_("Hello,\\n"), 140 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL}, 141 {"type_any_header", "FALSE", &prefs_common.type_any_header, P_BOOL, 142 NULL, NULL, NULL}, 143 {"notify_pasted_attachments", "TRUE", &prefs_common.notify_pasted_attachments, P_BOOL, 144 NULL, NULL, NULL}, 145 146 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT, 147 NULL, NULL, NULL}, 148 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL, 149 NULL, NULL, NULL}, 150 {"primary_paste_unselects", "FALSE", &prefs_common.primary_paste_unselects, P_BOOL, 151 NULL, NULL, NULL}, 152 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL, 153 NULL, NULL, NULL}, 154 {"auto_indent", "TRUE", &prefs_common.auto_indent, P_BOOL, 155 NULL, NULL, NULL}, 156 {"autosave", "TRUE", &prefs_common.autosave, 157 P_BOOL, NULL, NULL, NULL}, 158 {"autosave_length", "50", &prefs_common.autosave_length, P_INT, 159 NULL, NULL, NULL}, 160 {"warn_large_insert", "TRUE", &prefs_common.warn_large_insert, 161 P_BOOL, NULL, NULL, NULL}, 162 {"warn_large_insert_size", "500", &prefs_common.warn_large_insert_size, 163 P_INT, NULL, NULL, NULL}, 164 165 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL, 166 NULL, NULL, NULL}, 167 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM, 168 NULL, NULL, NULL}, 169 170 /* Account autoselection */ 171 {"reply_account_autoselect", "TRUE", 172 &prefs_common.reply_account_autosel, P_BOOL, 173 NULL, NULL, NULL}, 174 {"forward_account_autoselect", "TRUE", 175 &prefs_common.forward_account_autosel, P_BOOL, 176 NULL, NULL, NULL}, 177 {"reedit_account_autoselect", "TRUE", 178 &prefs_common.reedit_account_autosel, P_BOOL, 179 NULL, NULL, NULL}, 180 181 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL, 182 NULL, NULL, NULL}, 183 184 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q\\n%X"), 185 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL}, 186 187 {"forward_quote_format", 188 N_("\\n\\nBegin forwarded message:\\n\\n" 189 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}" 190 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"), 191 &prefs_common.fw_quotefmt, P_STRING, 192 NULL, NULL, NULL}, 193 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING, 194 NULL, NULL, NULL}, 195 196 {"display_folder_unread_num", "0", 197 &prefs_common.display_folder_unread, P_INT, 198 NULL, NULL, NULL}, 199 200 /* Display: Summary View */ 201 {"default_sort_key", "3", &prefs_common.default_sort_key, P_ENUM, 202 NULL, NULL, NULL}, 203 {"default_sort_type", "1", &prefs_common.default_sort_type, P_ENUM, 204 NULL, NULL, NULL}, 205 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL, 206 NULL, NULL, NULL}, 207 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL, 208 NULL, NULL, NULL}, 209 {"date_format", N_("%x(%a) %H:%M"), &prefs_common.date_format, 210 P_STRING, NULL, NULL, NULL}, 211 {"msgview_date_format", "FALSE", &prefs_common.msgview_date_format, P_BOOL, 212 NULL, NULL, NULL}, 213 214 {"next_on_delete", "FALSE", &prefs_common.next_on_delete, P_BOOL, 215 NULL, NULL, NULL}, 216 217 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL, 218 NULL, NULL, NULL}, 219 {"bold_marked", "FALSE", &prefs_common.bold_marked, P_BOOL, 220 NULL, NULL, NULL}, 221 222 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM, 223 NULL, NULL, NULL}, 224 {"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL, 225 NULL, NULL, NULL}, 226 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL, 227 NULL, NULL, NULL}, 228 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL, 229 NULL, NULL, NULL}, 230 231 {"summary_col_show_mark", "TRUE", 232 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL}, 233 {"summary_col_show_unread", "TRUE", 234 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL}, 235 {"summary_col_show_subject", "TRUE", 236 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL}, 237 {"summary_col_show_from", "TRUE", 238 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL}, 239 {"summary_col_show_to", "FALSE", 240 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL}, 241 {"summary_col_show_date", "TRUE", 242 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL}, 243 {"summary_col_show_mime", "TRUE", 244 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL}, 245 {"summary_col_show_size", "TRUE", 246 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL}, 247 {"summary_col_show_number", "FALSE", 248 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL}, 249 {"summary_col_show_score", "FALSE", 250 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL}, 251 {"summary_col_show_locked", "FALSE", 252 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL}, 253 {"summary_col_show_tags", "FALSE", 254 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL}, 255 256 {"summary_col_lock", "FALSE", &prefs_common.summary_col_lock, P_BOOL, 257 NULL, NULL, NULL}, 258 259 {"summary_col_pos_mark", "0", 260 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL}, 261 {"summary_col_pos_unread", "1", 262 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL}, 263 {"summary_col_pos_mime", "2", 264 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL}, 265 {"summary_col_pos_subject", "3", 266 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL}, 267 {"summary_col_pos_from", "4", 268 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL}, 269 {"summary_col_pos_date", "5", 270 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL}, 271 {"summary_col_pos_size", "6", 272 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL}, 273 {"summary_col_pos_number", "7", 274 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL}, 275 {"summary_col_pos_score", "8", 276 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL}, 277 {"summary_col_pos_locked", "9", 278 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL}, 279 {"summary_col_pos_to", "10", 280 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL}, 281 {"summary_col_pos_tags", "11", 282 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL}, 283 284 {"summary_col_size_mark", "10", 285 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL}, 286 {"summary_col_size_unread", "13", 287 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL}, 288 {"summary_col_size_mime", "10", 289 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL}, 290 {"summary_col_size_subject", "200", 291 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL}, 292 {"summary_col_size_from", "120", 293 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL}, 294 {"summary_col_size_to", "120", 295 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL}, 296 {"summary_col_size_date", "118", 297 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL}, 298 {"summary_col_size_size", "45", 299 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL}, 300 {"summary_col_size_number", "40", 301 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL}, 302 {"summary_col_size_score", "40", 303 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL}, 304 {"summary_col_size_locked", "13", 305 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL}, 306 {"summary_col_size_tags", "150", 307 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL}, 308 309 /* Widget size */ 310 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT, 311 NULL, NULL, NULL}, 312 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT, 313 NULL, NULL, NULL}, 314 {"folderview_width", "270", &prefs_common.folderview_width, P_INT, 315 NULL, NULL, NULL}, 316 {"folderview_height", "450", &prefs_common.folderview_height, P_INT, 317 NULL, NULL, NULL}, 318 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL, 319 NULL, NULL, NULL}, 320 321 {"folder_col_show_folder", "TRUE", 322 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL}, 323 {"folder_col_show_new", "TRUE", 324 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL}, 325 {"folder_col_show_unread", "TRUE", 326 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL}, 327 {"folder_col_show_total", "TRUE", 328 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL}, 329 330 {"folder_col_pos_folder", "0", 331 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL}, 332 {"folder_col_pos_new", "1", 333 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL}, 334 {"folder_col_pos_unread", "2", 335 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL}, 336 {"folder_col_pos_total", "3", 337 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL}, 338 339 {"folder_col_size_folder", "120", 340 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL}, 341 {"folder_col_size_new", "32", 342 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL}, 343 {"folder_col_size_unread", "32", 344 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL}, 345 {"folder_col_size_total", "32", 346 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL}, 347 348 {"folder_default_thread", "TRUE", &prefs_common.folder_default_thread, P_BOOL, 349 NULL, NULL, NULL}, 350 {"folder_default_thread_collapsed", "FALSE", &prefs_common.folder_default_thread_collapsed, P_BOOL, 351 NULL, NULL, NULL}, 352 {"folder_default_hide_read_threads", "FALSE", &prefs_common.folder_default_hide_read_threads, P_BOOL, 353 NULL, NULL, NULL}, 354 {"folder_default_hide_read_msgs", "FALSE", &prefs_common.folder_default_hide_read_msgs, P_BOOL, 355 NULL, NULL, NULL}, 356 {"folder_default_hide_del_msgs", "FALSE", &prefs_common.folder_default_hide_del_msgs, P_BOOL, 357 NULL, NULL, NULL}, 358 359 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT, 360 NULL, NULL, NULL}, 361 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT, 362 NULL, NULL, NULL}, 363 364 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT, 365 NULL, NULL, NULL}, 366 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT, 367 NULL, NULL, NULL}, 368 {"messageview_width", "500", &prefs_common.msgview_width, P_INT, 369 NULL, NULL, NULL}, 370 {"messageview_height", "213", &prefs_common.msgview_height, P_INT, 371 NULL, NULL, NULL}, 372 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL, 373 NULL, NULL, NULL}, 374 375 {"mainview_x", "64", &prefs_common.mainview_x, P_INT, 376 NULL, NULL, NULL}, 377 {"mainview_y", "64", &prefs_common.mainview_y, P_INT, 378 NULL, NULL, NULL}, 379 {"mainview_width", "500", &prefs_common.mainview_width, P_INT, 380 NULL, NULL, NULL}, 381 {"mainview_height", "400", &prefs_common.mainview_height, P_INT, 382 NULL, NULL, NULL}, 383 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT, 384 NULL, NULL, NULL}, 385 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT, 386 NULL, NULL, NULL}, 387 {"mainwin_maximised", "FALSE", &prefs_common.mainwin_maximised, P_BOOL, 388 NULL, NULL, NULL}, 389 {"mainwin_fullscreen", "FALSE", &prefs_common.mainwin_fullscreen, P_BOOL, 390 NULL, NULL, NULL}, 391 {"mainwin_menubar", "TRUE", &prefs_common.mainwin_menubar, P_BOOL, 392 NULL, NULL, NULL}, 393 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT, 394 NULL, NULL, NULL}, 395 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT, 396 NULL, NULL, NULL}, 397 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT, 398 NULL, NULL, NULL}, 399 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT, 400 NULL, NULL, NULL}, 401 {"mimeview_tree_height", "60", &prefs_common.mimeview_tree_height, P_INT, 402 NULL, NULL, NULL}, 403 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT, 404 NULL, NULL, NULL}, 405 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT, 406 NULL, NULL, NULL}, 407 {"compose_width", "600", &prefs_common.compose_width, P_INT, 408 NULL, NULL, NULL}, 409 {"compose_height", "560", &prefs_common.compose_height, P_INT, 410 NULL, NULL, NULL}, 411 {"compose_notebook_height", "180", &prefs_common.compose_notebook_height, P_INT, 412 NULL, NULL, NULL}, 413 {"compose_x", "0", &prefs_common.compose_x, P_INT, 414 NULL, NULL, NULL}, 415 {"compose_y", "0", &prefs_common.compose_y, P_INT, 416 NULL, NULL, NULL}, 417 /* Message */ 418 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL, 419 NULL, NULL, NULL}, 420 421 {"quote_level1_color", "#0000b3", &prefs_common.color[COL_QUOTE_LEVEL1], 422 P_COLOR, NULL, NULL, NULL}, 423 {"quote_level2_color", "#b35a00", &prefs_common.color[COL_QUOTE_LEVEL2], 424 P_COLOR, NULL, NULL, NULL}, 425 {"quote_level3_color", "#5ab300", &prefs_common.color[COL_QUOTE_LEVEL3], 426 P_COLOR, NULL, NULL, NULL}, 427 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL, 428 NULL, NULL, NULL}, 429 {"quote_level1_bgcolor", "#cccccc", &prefs_common.color[COL_QUOTE_LEVEL1_BG], 430 P_COLOR, NULL, NULL, NULL}, 431 {"quote_level2_bgcolor", "#d4d4d4", &prefs_common.color[COL_QUOTE_LEVEL2_BG], 432 P_COLOR, NULL, NULL, NULL}, 433 {"quote_level3_bgcolor", "#dddddd", &prefs_common.color[COL_QUOTE_LEVEL3_BG], 434 P_COLOR, NULL, NULL, NULL}, 435 {"uri_color", "#007f00", &prefs_common.color[COL_URI], 436 P_COLOR, NULL, NULL, NULL}, 437 {"emphasis_color", "#0000cf", &prefs_common.color[COL_EMPHASIS], 438 P_COLOR, NULL, NULL, NULL}, 439 {"target_folder_color", "#da1cca", &prefs_common.color[COL_TGT_FOLDER], 440 P_COLOR, NULL, NULL, NULL}, 441 {"signature_color", "#797979", &prefs_common.color[COL_SIGNATURE], 442 P_COLOR, NULL, NULL, NULL}, 443 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors, 444 P_BOOL, NULL, NULL, NULL}, 445 446 {"default_header_color", "#000000", &prefs_common.color[COL_DEFAULT_HEADER], 447 P_COLOR, NULL, NULL, NULL}, 448 {"default_header_bgcolor", "#f5f6be", &prefs_common.color[COL_DEFAULT_HEADER_BG], 449 P_COLOR, NULL, NULL, NULL}, 450 {"tags_color", "#000000", &prefs_common.color[COL_TAGS], 451 P_COLOR, NULL, NULL, NULL}, 452 {"tags_bgcolor", "#f5f6be", &prefs_common.color[COL_TAGS_BG], 453 P_COLOR, NULL, NULL, NULL}, 454 {"qs_active_color", "#000000", &prefs_common.color[COL_QS_ACTIVE], 455 P_COLOR, NULL, NULL, NULL}, 456 {"qs_active_bgcolor", "#f5f6be", &prefs_common.color[COL_QS_ACTIVE_BG], 457 P_COLOR, NULL, NULL, NULL}, 458 {"qs_error_color", "#000000", &prefs_common.color[COL_QS_ERROR], 459 P_COLOR, NULL, NULL, NULL}, 460 {"qs_error_bgcolor", "#ff7070", &prefs_common.color[COL_QS_ERROR_BG], 461 P_COLOR, NULL, NULL, NULL}, 462 463 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL, 464 NULL, NULL, NULL}, 465 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL, 466 NULL, NULL, NULL}, 467 {"line_space", "2", &prefs_common.line_space, P_INT, 468 NULL, NULL, NULL}, 469 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL, 470 NULL, NULL, NULL}, 471 472 {"hide_quoted", "TRUE", 473 &prefs_common.hide_quoted, P_BOOL, 474 NULL, NULL, NULL}, 475 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL, 476 NULL, NULL, NULL}, 477 {"show_all_headers", "FALSE", &prefs_common.show_all_headers, P_BOOL, 478 NULL, NULL, NULL}, 479 480 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL, 481 NULL, NULL, NULL}, 482 483 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL, 484 NULL, NULL, NULL}, 485 {"attach_save_directory", NULL, 486 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL}, 487 {"attach_load_directory", NULL, 488 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL}, 489 490 /* MIME viewer */ 491 {"mime_textviewer", NULL, 492 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL}, 493 {"mime_open_command", "xdg-open '%s'", 494 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL}, 495 {"show_inline_attachments", "TRUE", 496 &prefs_common.show_inline_attachments, P_BOOL, NULL, NULL, NULL}, 497 498 /* Interface */ 499 {"layout_mode", "0", &prefs_common.layout_mode, P_INT, 500 NULL, NULL, NULL}, 501 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL, 502 NULL, NULL, NULL}, */ 503 {"open_selected_message_on_folder_open", "FALSE", 504 &prefs_common.open_selected_on_folder_open, 505 P_BOOL, NULL, NULL, NULL}, 506 {"open_selected_message_on_search_results", "FALSE", 507 &prefs_common.open_selected_on_search_results, 508 P_BOOL, NULL, NULL, NULL}, 509 {"open_selected_message_on_prevnext", "FALSE", 510 &prefs_common.open_selected_on_prevnext, 511 P_BOOL, NULL, NULL, NULL}, 512 {"open_selected_message_on_deletemove", "FALSE", 513 &prefs_common.open_selected_on_deletemove, 514 P_BOOL, NULL, NULL, NULL}, 515 {"open_selected_message_on_directional", "FALSE", 516 &prefs_common.open_selected_on_directional, 517 P_BOOL, NULL, NULL, NULL}, 518 {"always_show_message_when_selected", "FALSE", 519 &prefs_common.always_show_msg, 520 P_BOOL, NULL, NULL, NULL}, 521 {"select_on_entry", "3", &prefs_common.select_on_entry, 522 P_ENUM, NULL, NULL, NULL}, 523 {"show_tooltips", "TRUE", &prefs_common.show_tooltips, 524 P_BOOL, NULL, NULL, NULL}, 525 526 /* do it SUMMARY_OPEN_ACTIONS-1 times */ 527 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM, 528 NULL, NULL, NULL}, 529 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM, 530 NULL, NULL, NULL}, 531 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM, 532 NULL, NULL, NULL}, 533 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM, 534 NULL, NULL, NULL}, 535 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM, 536 NULL, NULL, NULL}, 537 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM, 538 NULL, NULL, NULL}, 539 {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM, 540 NULL, NULL, NULL}, 541 {"summary_select_prio8", "0", &prefs_common.summary_select_prio[7], P_ENUM, 542 NULL, NULL, NULL}, 543 {"summary_select_prio9", "0", &prefs_common.summary_select_prio[8], P_ENUM, 544 NULL, NULL, NULL}, 545 {"summary_select_prio10", "0", &prefs_common.summary_select_prio[9], P_ENUM, 546 NULL, NULL, NULL}, 547 548 {"mark_as_read_on_new_window", "FALSE", 549 &prefs_common.mark_as_read_on_new_window, 550 P_BOOL, NULL, NULL, NULL}, 551 {"mark_as_read_delay", "0", 552 &prefs_common.mark_as_read_delay, P_INT, 553 NULL, NULL, NULL}, 554 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL, 555 NULL, NULL, NULL}, 556 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM, 557 NULL, NULL, NULL}, 558 {"summary_from_show", "0", &prefs_common.summary_from_show, P_ENUM, 559 NULL, NULL, NULL}, 560 561 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 562 &prefs_common.pixmap_theme_path, P_STRING, 563 NULL, NULL, NULL}, 564 565 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL, 566 NULL, NULL, NULL}, 567 568 /* Addressbook */ 569 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog, 570 P_BOOL, NULL, NULL, NULL}, 571 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos, 572 P_INT, NULL, NULL, NULL}, 573 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos, 574 P_INT, NULL, NULL, NULL}, 575 576 /* Other */ 577 {"uri_open_command", "firefox '%s'", 578 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL}, 579 {"ext_editor_command", DEFAULT_EDITOR_CMD, 580 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL}, 581 {"cmds_use_system_default", "TRUE", 582 &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL}, 583 {"session_passwords", "FALSE", &prefs_common.session_passwords, 584 P_BOOL, NULL, NULL, NULL}, 585 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL, 586 NULL, NULL, NULL}, 587 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit, 588 P_BOOL, NULL, NULL, NULL}, 589 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL, 590 NULL, NULL, NULL}, 591 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT, 592 NULL, NULL, NULL}, 593 594 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT, 595 NULL, NULL, NULL}, 596 597 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs, 598 P_INT, NULL, NULL, NULL}, 599 600 {"hide_score", "-9999", &prefs_common.kill_score, P_INT, 601 NULL, NULL, NULL}, 602 {"important_score", "1", &prefs_common.important_score, P_INT, 603 NULL, NULL, NULL}, 604 605 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL, 606 NULL, NULL, NULL}, 607 {"log_length", "500", &prefs_common.loglength, P_INT, 608 NULL, NULL, NULL}, 609 {"log_msg_color", "#00af00", &prefs_common.color[COL_LOG_MSG], 610 P_COLOR, NULL, NULL, NULL}, 611 {"log_warn_color", "#af0000", &prefs_common.color[COL_LOG_WARN], 612 P_COLOR, NULL, NULL, NULL}, 613 {"log_error_color", "#af0000", &prefs_common.color[COL_LOG_ERROR], 614 P_COLOR, NULL, NULL, NULL}, 615 {"log_in_color", "#000000", &prefs_common.color[COL_LOG_IN], 616 P_COLOR, NULL, NULL, NULL}, 617 {"log_out_color", "#0000ef", &prefs_common.color[COL_LOG_OUT], 618 P_COLOR, NULL, NULL, NULL}, 619 620 {"gtk_enable_accels", "TRUE", &prefs_common.gtk_enable_accels, P_BOOL, 621 NULL, NULL, NULL}, 622 623 {"color_new", "#0000b3", &prefs_common.color[COL_NEW], 624 P_COLOR, NULL, NULL, NULL}, 625 626 /* Some windows' sizes */ 627 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT, 628 NULL, NULL, NULL}, 629 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT, 630 NULL, NULL, NULL}, 631 632 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT, 633 NULL, NULL, NULL}, 634 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT, 635 NULL, NULL, NULL}, 636 637 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT, 638 NULL, NULL, NULL}, 639 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT, 640 NULL, NULL, NULL}, 641 642 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT, 643 NULL, NULL, NULL}, 644 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT, 645 NULL, NULL, NULL}, 646 647 {"actionsiodialog_width", "582", &prefs_common.actionsiodialog_width, P_INT, 648 NULL, NULL, NULL}, 649 {"actionsiodialog_height", "310", &prefs_common.actionsiodialog_height, P_INT, 650 NULL, NULL, NULL}, 651 652 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT, 653 NULL, NULL, NULL}, 654 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT, 655 NULL, NULL, NULL}, 656 657 {"tagswin_width", "586", &prefs_common.tagswin_width, P_INT, 658 NULL, NULL, NULL}, 659 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT, 660 NULL, NULL, NULL}, 661 662 {"sslmanwin_width", "486", &prefs_common.sslmanwin_width, P_INT, 663 NULL, NULL, NULL}, 664 {"sslmanwin_height", "-1", &prefs_common.sslmanwin_height, P_INT, 665 NULL, NULL, NULL}, 666 667 {"uriopenerwin_width", "-1", &prefs_common.uriopenerwin_width, P_INT, 668 NULL, NULL, NULL}, 669 {"uriopenerwin_height", "-1", &prefs_common.uriopenerwin_height, P_INT, 670 NULL, NULL, NULL}, 671 672 {"foldersortwin_width", "400", &prefs_common.foldersortwin_width, P_INT, 673 NULL, NULL, NULL}, 674 {"foldersortwin_height", "300", &prefs_common.foldersortwin_height, P_INT, 675 NULL, NULL, NULL}, 676 677 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT, 678 NULL, NULL, NULL}, 679 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT, 680 NULL, NULL, NULL}, 681 682 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT, 683 NULL, NULL, NULL}, 684 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT, 685 NULL, NULL, NULL}, 686 687 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT, 688 NULL, NULL, NULL}, 689 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT, 690 NULL, NULL, NULL}, 691 692 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT, 693 NULL, NULL, NULL}, 694 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT, 695 NULL, NULL, NULL}, 696 697 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT, 698 NULL, NULL, NULL}, 699 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT, 700 NULL, NULL, NULL}, 701 702 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING, 703 NULL, NULL, NULL}, 704 705 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT, 706 NULL, NULL, NULL}, 707 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT, 708 NULL, NULL, NULL}, 709 710 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT, 711 NULL, NULL, NULL}, 712 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT, 713 NULL, NULL, NULL}, 714 715 {"logwin_width", "520", &prefs_common.logwin_width, P_INT, 716 NULL, NULL, NULL}, 717 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT, 718 NULL, NULL, NULL}, 719 720 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT, 721 NULL, NULL, NULL}, 722 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT, 723 NULL, NULL, NULL}, 724 725 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT, 726 NULL, NULL, NULL}, 727 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT, 728 NULL, NULL, NULL}, 729 730 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT, 731 NULL, NULL, NULL}, 732 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT, 733 NULL, NULL, NULL}, 734 735 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT, 736 NULL, NULL, NULL}, 737 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT, 738 NULL, NULL, NULL}, 739 740 {"addrgather_width", "450", &prefs_common.addrgather_width, P_INT, 741 NULL, NULL, NULL}, 742 {"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT, 743 NULL, NULL, NULL}, 744 745 {"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT, 746 NULL, NULL, NULL}, 747 {"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT, 748 NULL, NULL, NULL}, 749 750 /* Hidden */ 751 {"imap_scan_tree_recurs_limit", "64", &prefs_common.imap_scan_tree_recurs_limit, P_INT, 752 NULL, NULL, NULL}, 753 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT, 754 NULL, NULL, NULL}, 755 {"show_save_all_success", "1", &prefs_common.show_save_all_success, P_INT, 756 NULL, NULL, NULL}, 757 {"show_save_all_failure", "1", &prefs_common.show_save_all_failure, P_INT, 758 NULL, NULL, NULL}, 759 {"utf8_instead_of_locale_for_broken_mail", "0", 760 &prefs_common.broken_are_utf8, P_INT, 761 NULL, NULL, NULL}, 762 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL, 763 NULL, NULL, NULL}, 764 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL, 765 NULL, NULL, NULL}, 766 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL, 767 NULL, NULL, NULL}, 768 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT, 769 NULL, NULL, NULL}, 770 771 {"enable_hscrollbar", "FALSE", &prefs_common.enable_hscrollbar, P_BOOL, 772 NULL, NULL, NULL}, 773 774 {"folderview_vscrollbar_policy", "0", 775 &prefs_common.folderview_vscrollbar_policy, P_ENUM, 776 NULL, NULL, NULL}, 777 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT, 778 NULL, NULL, NULL}, 779 780 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT, 781 NULL, NULL, NULL}, 782 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT, 783 NULL, NULL, NULL}, 784 785 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age, 786 P_INT, NULL, NULL, NULL }, 787 {"startup_folder", "", &prefs_common.startup_folder, 788 P_STRING, NULL, NULL, NULL }, 789 {"goto_folder_on_startup", "FALSE", &prefs_common.goto_folder_on_startup, 790 P_BOOL, NULL, NULL, NULL }, 791 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT, 792 NULL, NULL, NULL}, 793 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT, 794 NULL, NULL, NULL}, 795 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT, 796 NULL, NULL, NULL}, 797 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT, 798 NULL, NULL, NULL}, 799 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL, 800 NULL, NULL, NULL}, 801 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL, 802 NULL, NULL, NULL}, 803 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL, 804 NULL, NULL, NULL}, 805 {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL, 806 NULL, NULL, NULL}, 807 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT, 808 NULL, NULL, NULL}, 809 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL, 810 NULL, NULL, NULL}, 811 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL, 812 NULL, NULL, NULL}, 813 814 {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING, 815 NULL, NULL, NULL}, 816 {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT, 817 NULL, NULL, NULL}, 818 {"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT, 819 NULL, NULL, NULL}, 820 {"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT, 821 NULL, NULL, NULL}, 822 {"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT, 823 NULL, NULL, NULL}, 824 {"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT, 825 NULL, NULL, NULL}, 826 {"print_use_color", "0", &prefs_common.print_use_color, P_INT, 827 NULL, NULL, NULL}, 828 {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT, 829 NULL, NULL, NULL}, 830 {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT, 831 NULL, NULL, NULL}, 832 {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT, 833 NULL, NULL, NULL}, 834 {"print_imgs", "1", &prefs_common.print_imgs, P_INT, 835 NULL, NULL, NULL}, 836 {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT, 837 NULL, NULL, NULL}, 838 {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT, 839 NULL, NULL, NULL}, 840 841 {"two_line_vertical", "TRUE", &prefs_common.two_line_vert, 842 P_BOOL, NULL, NULL, NULL }, 843 844 {"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL, 845 NULL, NULL, NULL}, 846 847 {"nav_history_length", "50", &prefs_common.nav_history_length, P_INT, 848 NULL, NULL, NULL}, 849 850 {"diff_added_color", "#008b8b", &prefs_common.color[COL_DIFF_ADDED], 851 P_COLOR, NULL, NULL, NULL}, 852 {"diff_deleted_color", "#6a5acd", &prefs_common.color[COL_DIFF_DELETED], 853 P_COLOR, NULL, NULL, NULL}, 854 {"diff_hunk_color", "#a52a2a", &prefs_common.color[COL_DIFF_HUNK], 855 P_COLOR, NULL, NULL, NULL}, 856 857 {"folder_search_wildcard", "TRUE", &prefs_common.folder_search_wildcard, P_BOOL, 858 NULL, NULL, NULL}, 859 {"address_search_wildcard", "TRUE", &prefs_common.address_search_wildcard, P_BOOL, 860 NULL, NULL, NULL}, 861 {"master_passphrase", "", &prefs_common.primary_passphrase, P_STRING, NULL, NULL, NULL }, 862 {"master_passphrase_salt", "", &prefs_common.primary_passphrase_salt, P_STRING, NULL, NULL, NULL }, 863 {"master_passphrase_pbkdf2_rounds", "50000", &prefs_common.primary_passphrase_pbkdf2_rounds, P_INT, NULL, NULL, NULL}, 864 865 {"qs_press_timeout", "500", &prefs_common.qs_press_timeout, P_INT, 866 NULL, NULL, NULL}, 867 868 {"mainwin_toolbar_always_enable_actions", "FALSE", &prefs_common.mainwin_toolbar_always_enable_actions, P_BOOL, 869 NULL, NULL, NULL}, 870 871 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL} 872 }; 873 874 /* 875 * Read history list from the specified history file in the specified directory (subdir of rc_dir) 876 * Fallback to default_list if history file is not found 877 */ 878 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history, 879 GList *default_list) 880 { 881 FILE *fp; 882 gchar *path; 883 gchar buf[PREFSBUFSIZE]; 884 GList *tmp = NULL; 885 886 if (dirname) { 887 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname, 888 G_DIR_SEPARATOR_S, history, 889 NULL); 890 } else { 891 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history, 892 NULL); 893 } 894 if ((fp = g_fopen(path, "rb")) == NULL) { 895 if (ENOENT != errno) FILE_OP_ERROR(path, "g_fopen"); 896 g_free(path); 897 /* returns default list if set, otherwise NULL */ 898 return default_list; 899 } 900 g_free(path); 901 while (fgets(buf, sizeof(buf), fp) != NULL) { 902 g_strstrip(buf); 903 if (buf[0] == '\0') continue; 904 tmp = add_history(tmp, buf); 905 } 906 fclose(fp); 907 908 tmp = g_list_reverse(tmp); 909 910 return tmp; 911 } 912 913 /* 914 * Read history list from the specified history file in the specified directory (subdir of rc_dir) 915 */ 916 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history) 917 { 918 return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL); 919 } 920 921 /* 922 * Read history list from the specified history file 923 */ 924 static GList *prefs_common_read_history(const gchar *history) 925 { 926 return prefs_common_read_history_from_dir(NULL, history); 927 } 928 929 void prefs_common_read_config(void) 930 { 931 gchar *rcpath; 932 gchar *tmp; 933 934 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL); 935 prefs_read_config(param, "Common", rcpath, NULL); 936 937 g_free(rcpath); 938 939 tmp = g_strdup(prefs_common.date_format); 940 g_free(prefs_common.date_format); 941 prefs_common.date_format = tmp; 942 943 prefs_common.mime_open_cmd_history = 944 prefs_common_read_history(COMMAND_HISTORY); 945 prefs_common.message_search_history = 946 prefs_common_read_history("messagesearch_history"); 947 prefs_common.compose_save_to_history = 948 prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY); 949 } 950 951 #define TRY(func) \ 952 if (!(func)) \ 953 { \ 954 g_warning("failed to write"); \ 955 goto out; \ 956 } \ 957 958 /* 959 * Save history list to the specified history file in the specified directory (subdir of rc_dir) 960 */ 961 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list) 962 { 963 GList *cur; 964 FILE *fp; 965 gchar *path, *tmp_path; 966 967 if (dirname) { 968 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname, 969 G_DIR_SEPARATOR_S, history, 970 NULL); 971 } else { 972 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history, 973 NULL); 974 } 975 tmp_path = g_strconcat(path, ".tmp", NULL); 976 977 if ((fp = g_fopen(tmp_path, "wb")) == NULL) { 978 FILE_OP_ERROR(tmp_path, "g_fopen"); 979 goto out; 980 } 981 982 for (cur = list; cur != NULL; cur = cur->next) { 983 TRY(fputs((gchar *)cur->data, fp) != EOF && 984 fputc('\n', fp) != EOF); 985 } 986 987 if (fclose(fp) == EOF) { 988 FILE_OP_ERROR(tmp_path, "fclose"); 989 fp = NULL; 990 goto out; 991 } 992 fp = NULL; 993 if (g_rename(tmp_path, path) < 0) { 994 FILE_OP_ERROR(path, "rename"); 995 goto out; 996 } 997 998 out: 999 if (fp) 1000 fclose(fp); 1001 g_free(tmp_path); 1002 g_free(path); 1003 } 1004 1005 /* 1006 * Save history list to the specified history file 1007 */ 1008 static void prefs_common_save_history(const gchar *history, GList *list) 1009 { 1010 prefs_common_save_history_to_dir(NULL, history, list); 1011 } 1012 1013 #undef TRY 1014 1015 void prefs_common_write_config(void) 1016 { 1017 prefs_write_config(param, "Common", COMMON_RC); 1018 prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY, prefs_common.compose_save_to_history); 1019 } 1020 1021 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences. 1022 both 'in' and 'out' must be non-NULL. 1023 'out' must be a pointer to a buffer whose size is at least equal 1024 to strlen(txt)+1, this buffer will get cleared. out's contents 1025 will always get set to a valid string, even if it's "".*/ 1026 void pref_get_unescaped_pref(gchar *out, const gchar *in) 1027 { 1028 const gchar *i; 1029 gchar *o; 1030 1031 *out = '\0'; 1032 1033 cm_return_if_fail( in != NULL ); 1034 cm_return_if_fail( out != NULL ); 1035 1036 i = in; 1037 o = out; 1038 memset(out, 0, strlen(in)+1); 1039 while (*i != '\0') { 1040 if (*i == '\\' && *(i+1) == 'n') { 1041 *o++ = '\n'; 1042 i++; 1043 } else if (*i == '\\' && *(i+1) == 't') { 1044 *o++ = '\t'; 1045 i++; 1046 } else if (*i == '\\' && *(i+1) == '\\') { 1047 *o++ = '\\'; 1048 i++; 1049 } else { 1050 *o++ = *i; 1051 } 1052 i++; 1053 } 1054 *o='\0'; 1055 } 1056 1057 /* make a copy of string 'in' into buffer 'out'. escape \ sequences. 1058 both 'in' and 'out' must be non-NULL. 1059 'out' must be a pointer to a buffer whose size is at least equal 1060 to 2*strlen(txt)+1. out's contents will always get set to a valid 1061 string, even if it's "". */ 1062 void pref_get_escaped_pref(gchar *out, const gchar *in) 1063 { 1064 const gchar *i; 1065 gchar *o; 1066 1067 *out = '\0'; 1068 1069 cm_return_if_fail( in != NULL ); 1070 cm_return_if_fail( out != NULL ); 1071 1072 i = in; 1073 o = out; 1074 while (*i != '\0') { 1075 if (*i == '\n') { 1076 *o++ = '\\'; 1077 *o++ = 'n'; 1078 } else if (*i == '\t') { 1079 *o++ = '\\'; 1080 *o++ = 't'; 1081 } else if (*i == '\\') { 1082 *o++ = '\\'; 1083 *o++ = '\\'; 1084 } else { 1085 *o++ = *i; 1086 } 1087 i++; 1088 } 1089 *o = '\0'; 1090 } 1091 1092 /* set the contents of a textview widget from the internal \-escaped 1093 representation of a pref string. both txt and textview must be non-NULL. */ 1094 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt) 1095 { 1096 GtkTextBuffer *buffer; 1097 gchar *out = NULL; 1098 1099 cm_return_if_fail( textview != NULL ); 1100 1101 buffer = gtk_text_view_get_buffer(textview); 1102 1103 if (!txt) { 1104 gtk_text_buffer_set_text(buffer, "", -1); 1105 } else { 1106 out = g_malloc(strlen(txt)+1); 1107 1108 pref_get_unescaped_pref(out, txt); 1109 1110 gtk_text_buffer_set_text(buffer, out, -1); 1111 g_free(out); 1112 } 1113 } 1114 1115 /* set the contents of a gtkentry widget from the internal \-escaped 1116 representation of a pref string. both txt and entry must be non-NULL. */ 1117 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt) 1118 { 1119 gchar *out = NULL; 1120 1121 cm_return_if_fail( entry != NULL ); 1122 if (!txt) { 1123 gtk_entry_set_text(entry, ""); 1124 } else { 1125 out = g_malloc(strlen(txt)+1); 1126 1127 pref_get_unescaped_pref(out, txt); 1128 1129 gtk_entry_set_text(entry, out); 1130 g_free(out); 1131 } 1132 } 1133 1134 /* get the \-escaped internal representation of a pref from the contents of 1135 a textview widget. textview must be non-NULL. */ 1136 gchar *pref_get_pref_from_textview(GtkTextView *textview) 1137 { 1138 GtkTextBuffer *buffer; 1139 GtkTextIter start, end; 1140 gchar *out, *tmp; 1141 1142 cm_return_val_if_fail( textview != NULL, "" ); 1143 1144 buffer = gtk_text_view_get_buffer(textview); 1145 gtk_text_buffer_get_start_iter(buffer, &start); 1146 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1); 1147 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); 1148 out = malloc(2*strlen(tmp)+1); 1149 if (out) 1150 pref_get_escaped_pref(out, tmp); 1151 g_free(tmp); 1152 1153 return out?out:""; 1154 } 1155 1156 /* get the \-escaped internal representation of a pref from the contents of 1157 a gtkentry widget. entry must be non-NULL. */ 1158 gchar *pref_get_pref_from_entry(GtkEntry *entry) 1159 { 1160 gchar *out, *tmp; 1161 1162 cm_return_val_if_fail( entry != NULL, "" ); 1163 1164 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); 1165 out = malloc(2*strlen(tmp)+1); 1166 1167 if (out) 1168 pref_get_escaped_pref(out, tmp); 1169 g_free(tmp); 1170 1171 return out?out:""; 1172 } 1173 1174 /* ugly hack to be able to get this pref from ssl_certificate.c */ 1175 gboolean prefs_common_unsafe_ssl_certs(void) 1176 { 1177 return prefs_common.unsafe_ssl_certs; 1178 } 1179 1180 const gchar *prefs_common_get_uri_cmd(void) 1181 { 1182 gchar *tmp = NULL; 1183 1184 if (!prefs_common.cmds_use_system_default) 1185 return prefs_common.uri_cmd; 1186 1187 tmp = g_find_program_in_path("xdg-open"); 1188 if (!tmp) 1189 return prefs_common.uri_cmd; 1190 1191 g_free(tmp); 1192 return "xdg-open %s"; 1193 } 1194 1195 const gchar *prefs_common_get_ext_editor_cmd(void) 1196 { 1197 return prefs_common.ext_editor_cmd; 1198 #if 0 /* we should do that, but it detaches the editor and breaks 1199 compose.c's external composition. */ 1200 gchar *tmp = NULL; 1201 1202 if (!prefs_common.cmds_use_system_default) 1203 return prefs_common.ext_editor_cmd; 1204 1205 tmp = g_find_program_in_path("xdg-open"); 1206 if (!tmp) 1207 return prefs_common.ext_editor_cmd; 1208 1209 g_free(tmp); 1210 return "xdg-open %s"; 1211 #endif /* 0 */ 1212 } 1213 1214 PrefsCommon *prefs_common_get_prefs(void) 1215 { 1216 return &prefs_common; 1217 }