From d77d8b0724bf8445973d45a87a1bda06241019fd Mon Sep 17 00:00:00 2001 From: DustVoice Date: Sun, 9 Aug 2020 21:44:59 +0200 Subject: [PATCH] Add .weechat --- .gitignore | 1 + .weechat/.gitignore | 36 + .weechat/alias.conf | 47 + .weechat/buflist.conf | 39 + .weechat/charset.conf | 18 + .weechat/exec.conf | 19 + .weechat/fifo.conf | 14 + .weechat/fset.conf | 95 + .weechat/guile.conf | 14 + .weechat/irc.conf | 203 ++ .weechat/logger.conf | 36 + .weechat/logs/core.weechat.weechatlog | 435 ++++ .../logs/irc.freenode.#archlinux.weechatlog | 542 +++++ .weechat/logs/irc.freenode.#latex.weechatlog | 48 + .weechat/logs/irc.server.freenode.weechatlog | 528 +++++ .weechat/lua.conf | 14 + .weechat/perl.conf | 14 + .weechat/plugins.conf | 56 + .weechat/python.conf | 14 + .weechat/python/autoload/vimode.py | 1 + .weechat/python/vimode.py | 1882 +++++++++++++++++ .weechat/relay.conf | 59 + .weechat/ruby.conf | 14 + .weechat/script.conf | 56 + .weechat/script/plugins.xml.gz | Bin 0 -> 128539 bytes .weechat/sec.conf | 18 + .weechat/spell.conf | 33 + .weechat/tcl.conf | 14 + .weechat/trigger.conf | 67 + .weechat/weechat.conf | 685 ++++++ .weechat/xfer.conf | 49 + 31 files changed, 5051 insertions(+) create mode 100644 .weechat/.gitignore create mode 100644 .weechat/alias.conf create mode 100644 .weechat/buflist.conf create mode 100644 .weechat/charset.conf create mode 100644 .weechat/exec.conf create mode 100644 .weechat/fifo.conf create mode 100644 .weechat/fset.conf create mode 100644 .weechat/guile.conf create mode 100644 .weechat/irc.conf create mode 100644 .weechat/logger.conf create mode 100644 .weechat/logs/core.weechat.weechatlog create mode 100644 .weechat/logs/irc.freenode.#archlinux.weechatlog create mode 100644 .weechat/logs/irc.freenode.#latex.weechatlog create mode 100644 .weechat/logs/irc.server.freenode.weechatlog create mode 100644 .weechat/lua.conf create mode 100644 .weechat/perl.conf create mode 100644 .weechat/plugins.conf create mode 100644 .weechat/python.conf create mode 120000 .weechat/python/autoload/vimode.py create mode 100644 .weechat/python/vimode.py create mode 100644 .weechat/relay.conf create mode 100644 .weechat/ruby.conf create mode 100644 .weechat/script.conf create mode 100644 .weechat/script/plugins.xml.gz create mode 100644 .weechat/sec.conf create mode 100644 .weechat/spell.conf create mode 100644 .weechat/tcl.conf create mode 100644 .weechat/trigger.conf create mode 100644 .weechat/weechat.conf create mode 100644 .weechat/xfer.conf diff --git a/.gitignore b/.gitignore index 1b25402..cf19e71 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ !/.config/ !/.gnupg/ +!/.weechat/ !/.ssh/ !/.zsh/ !/AUR/ diff --git a/.weechat/.gitignore b/.weechat/.gitignore new file mode 100644 index 0000000..ffd2223 --- /dev/null +++ b/.weechat/.gitignore @@ -0,0 +1,36 @@ +/* +/*/ +!/.gitignore + +!/alias.conf +!/buflist.conf +!/charset.conf +!/exec.conf +!/fifo.conf +!/fset.conf +!/guile.conf +!/irc.conf +!/logger.conf +!/lua.conf +!/perl.conf +!/plugins.conf +!/python.conf +!/relay.conf +!/ruby.conf +!/script.conf +!/sec.conf +!/spell.conf +!/tcl.conf +!/trigger.conf +!/weechat.conf +!/xfer.conf + +!/guile/ +!/logs/ +!/lua/ +!/perl/ +!/python/ +!/ruby/ +!/script/ +!/tcl/ +!/xfer/ diff --git a/.weechat/alias.conf b/.weechat/alias.conf new file mode 100644 index 0000000..0a02da3 --- /dev/null +++ b/.weechat/alias.conf @@ -0,0 +1,47 @@ +# +# weechat -- alias.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[cmd] +AAWAY = "allserv /away" +ANICK = "allserv /nick" +BEEP = "print -beep" +BYE = "quit" +C = "buffer clear" +CHAT = "dcc chat" +CL = "buffer clear" +CLOSE = "buffer close" +EXIT = "quit" +IG = "ignore" +J = "join" +K = "kick" +KB = "kickban" +LEAVE = "part" +M = "msg" +MSGBUF = "command -buffer $1 * /input send $2-" +MUB = "unban *" +N = "names" +Q = "query" +REDRAW = "window refresh" +SAY = "msg *" +SIGNOFF = "quit" +T = "topic" +UB = "unban" +UMODE = "mode $nick" +V = "command core version" +W = "who" +WC = "window close" +WI = "whois" +WII = "whois $1 $1" +WM = "window merge" +WW = "whowas" + +[completion] +MSGBUF = "%(buffers_plugins_names)" diff --git a/.weechat/buflist.conf b/.weechat/buflist.conf new file mode 100644 index 0000000..d285f89 --- /dev/null +++ b/.weechat/buflist.conf @@ -0,0 +1,39 @@ +# +# weechat -- buflist.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +add_newline = on +auto_scroll = 50 +display_conditions = "${buffer.hidden}==0" +enabled = on +mouse_jump_visited_buffer = off +mouse_move_buffer = on +mouse_wheel = on +nick_prefix = off +nick_prefix_empty = on +signals_refresh = "" +sort = "number,-active" + +[format] +buffer = "${format_number}${indent}${format_nick_prefix}${color_hotlist}${format_name}" +buffer_current = "${color:,blue}${format_buffer}" +hotlist = " ${color:green}(${hotlist}${color:green})" +hotlist_highlight = "${color:magenta}" +hotlist_low = "${color:white}" +hotlist_message = "${color:brown}" +hotlist_none = "${color:default}" +hotlist_private = "${color:green}" +hotlist_separator = "${color:default}," +indent = " " +lag = " ${color:green}[${color:brown}${lag}${color:green}]" +name = "${name}" +nick_prefix = "${color_nick_prefix}${nick_prefix}" +number = "${color:green}${number}${if:${number_displayed}?.: }" diff --git a/.weechat/charset.conf b/.weechat/charset.conf new file mode 100644 index 0000000..00d304c --- /dev/null +++ b/.weechat/charset.conf @@ -0,0 +1,18 @@ +# +# weechat -- charset.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[default] +decode = "iso-8859-1" +encode = "" + +[decode] + +[encode] diff --git a/.weechat/exec.conf b/.weechat/exec.conf new file mode 100644 index 0000000..9e1b4f1 --- /dev/null +++ b/.weechat/exec.conf @@ -0,0 +1,19 @@ +# +# weechat -- exec.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[command] +default_options = "" +purge_delay = 0 +shell = "${env:SHELL}" + +[color] +flag_finished = lightred +flag_running = lightgreen diff --git a/.weechat/fifo.conf b/.weechat/fifo.conf new file mode 100644 index 0000000..904985d --- /dev/null +++ b/.weechat/fifo.conf @@ -0,0 +1,14 @@ +# +# weechat -- fifo.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[file] +enabled = on +path = "%h/weechat_fifo" diff --git a/.weechat/fset.conf b/.weechat/fset.conf new file mode 100644 index 0000000..668266c --- /dev/null +++ b/.weechat/fset.conf @@ -0,0 +1,95 @@ +# +# weechat -- fset.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +auto_unmark = off +condition_catch_set = "${count} >= 1" +export_help_default = on +format_number = 1 +marked_string = "*" +scroll_horizontal = 10 +show_plugins_desc = off +sort = "~name" +unmarked_string = " " +use_color_value = off +use_keys = on +use_mute = off + +[format] +export_help = "# ${description2}" +export_option = "/set ${name} ${quoted_value}" +export_option_null = "/unset ${name}" +option1 = "" +option2 = "${marked} ${name} ${type} ${value2}${newline} ${empty_name} ${_default_value}${color:darkgray} -- ${min}..${max}${newline} ${empty_name} ${description}" + +[color] +default_value = default +default_value_selected = white +description = default +description_selected = white +file = default +file_changed = brown +file_changed_selected = yellow +file_selected = white +help_default_value = white +help_description = default +help_name = white +help_quotes = darkgray +help_values = default +index = cyan +index_selected = lightcyan +line_marked_bg1 = default +line_marked_bg2 = default +line_selected_bg1 = blue +line_selected_bg2 = red +marked = brown +marked_selected = yellow +max = default +max_selected = white +min = default +min_selected = white +name = default +name_changed = brown +name_changed_selected = yellow +name_selected = white +option = default +option_changed = brown +option_changed_selected = yellow +option_selected = white +parent_name = default +parent_name_selected = white +parent_value = cyan +parent_value_selected = lightcyan +quotes = darkgray +quotes_changed = default +quotes_changed_selected = white +quotes_selected = default +section = default +section_changed = brown +section_changed_selected = yellow +section_selected = white +string_values = default +string_values_selected = white +title_count_options = cyan +title_current_option = lightcyan +title_filter = yellow +title_marked_options = lightgreen +title_sort = white +type = green +type_selected = lightgreen +unmarked = default +unmarked_selected = white +value = cyan +value_changed = brown +value_changed_selected = yellow +value_selected = lightcyan +value_undef = magenta +value_undef_selected = lightmagenta diff --git a/.weechat/guile.conf b/.weechat/guile.conf new file mode 100644 index 0000000..07a4910 --- /dev/null +++ b/.weechat/guile.conf @@ -0,0 +1,14 @@ +# +# weechat -- guile.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/irc.conf b/.weechat/irc.conf new file mode 100644 index 0000000..dce0eef --- /dev/null +++ b/.weechat/irc.conf @@ -0,0 +1,203 @@ +# +# weechat -- irc.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +buffer_open_before_autojoin = on +buffer_open_before_join = off +buffer_switch_autojoin = on +buffer_switch_join = on +color_nicks_in_names = off +color_nicks_in_nicklist = off +color_nicks_in_server_messages = on +color_pv_nick_like_channel = on +ctcp_time_format = "%a, %d %b %Y %T %z" +display_away = local +display_ctcp_blocked = on +display_ctcp_reply = on +display_ctcp_unknown = on +display_host_join = on +display_host_join_local = on +display_host_quit = on +display_join_message = "329,332,333,366" +display_old_topic = on +display_pv_away_once = on +display_pv_back = on +display_pv_warning_address = off +highlight_channel = "$nick" +highlight_pv = "$nick" +highlight_server = "$nick" +highlight_tags_restrict = "irc_privmsg,irc_notice" +item_channel_modes_hide_args = "k" +item_display_server = buffer_plugin +item_nick_modes = on +item_nick_prefix = on +join_auto_add_chantype = off +msgbuffer_fallback = current +new_channel_position = none +new_pv_position = none +nick_completion_smart = speakers +nick_mode = prefix +nick_mode_empty = off +nicks_hide_password = "nickserv" +notice_as_pv = auto +notice_welcome_redirect = on +notice_welcome_tags = "" +notify_tags_ison = "notify_message" +notify_tags_whois = "notify_message" +part_closes_buffer = off +pv_buffer = independent +pv_tags = "notify_private" +raw_messages = 256 +server_buffer = merge_with_core +smart_filter = on +smart_filter_account = on +smart_filter_chghost = on +smart_filter_delay = 5 +smart_filter_join = on +smart_filter_join_unmask = 30 +smart_filter_mode = "+" +smart_filter_nick = on +smart_filter_quit = on +temporary_servers = off +topic_strip_colors = off + +[color] +input_nick = lightcyan +item_channel_modes = default +item_lag_counting = default +item_lag_finished = yellow +item_nick_modes = default +message_account = cyan +message_chghost = brown +message_join = green +message_kick = red +message_quit = red +mirc_remap = "1,-1:darkgray" +nick_prefixes = "y:lightred;q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue" +notice = green +reason_kick = default +reason_quit = default +topic_current = default +topic_new = white +topic_old = default + +[network] +autoreconnect_delay_growing = 2 +autoreconnect_delay_max = 600 +ban_mask_default = "*!$ident@$host" +colors_receive = on +colors_send = on +lag_check = 60 +lag_max = 1800 +lag_min_show = 500 +lag_reconnect = 300 +lag_refresh_interval = 1 +notify_check_ison = 1 +notify_check_whois = 5 +sasl_fail_unavailable = on +send_unknown_commands = off +whois_double_nick = off + +[msgbuffer] + +[ctcp] + +[ignore] + +[server_default] +addresses = "" +anti_flood_prio_high = 2 +anti_flood_prio_low = 2 +autoconnect = off +autojoin = "" +autoreconnect = on +autoreconnect_delay = 10 +autorejoin = off +autorejoin_delay = 30 +away_check = 0 +away_check_max_nicks = 25 +capabilities = "" +charset_message = message +command = "" +command_delay = 0 +connection_timeout = 60 +ipv6 = on +local_hostname = "" +msg_kick = "" +msg_part = "WeeChat ${info:version}" +msg_quit = "WeeChat ${info:version}" +nicks = "dustvoice,dustvoice1,dustvoice2,dustvoice3,dustvoice4" +nicks_alternate = on +notify = "" +password = "" +proxy = "" +realname = "" +sasl_fail = continue +sasl_key = "" +sasl_mechanism = plain +sasl_password = "" +sasl_timeout = 15 +sasl_username = "" +split_msg_max_length = 512 +ssl = off +ssl_cert = "" +ssl_dhkey_size = 2048 +ssl_fingerprint = "" +ssl_password = "" +ssl_priorities = "NORMAL:-VERS-SSL3.0" +ssl_verify = on +usermode = "" +username = "dustvoice" + +[server] +freenode.addresses = "irc.freenode.net" +freenode.proxy +freenode.ipv6 +freenode.ssl +freenode.ssl_cert +freenode.ssl_password +freenode.ssl_priorities +freenode.ssl_dhkey_size +freenode.ssl_fingerprint +freenode.ssl_verify +freenode.password +freenode.capabilities +freenode.sasl_mechanism +freenode.sasl_username +freenode.sasl_password +freenode.sasl_key +freenode.sasl_timeout +freenode.sasl_fail +freenode.autoconnect +freenode.autoreconnect +freenode.autoreconnect_delay +freenode.nicks +freenode.nicks_alternate +freenode.username +freenode.realname +freenode.local_hostname +freenode.usermode +freenode.command +freenode.command_delay +freenode.autojoin +freenode.autorejoin +freenode.autorejoin_delay +freenode.connection_timeout +freenode.anti_flood_prio_high +freenode.anti_flood_prio_low +freenode.away_check +freenode.away_check_max_nicks +freenode.msg_kick +freenode.msg_part +freenode.msg_quit +freenode.notify +freenode.split_msg_max_length +freenode.charset_message diff --git a/.weechat/logger.conf b/.weechat/logger.conf new file mode 100644 index 0000000..d0d3218 --- /dev/null +++ b/.weechat/logger.conf @@ -0,0 +1,36 @@ +# +# weechat -- logger.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +backlog = 20 +backlog_conditions = "" + +[color] +backlog_end = default +backlog_line = default + +[file] +auto_log = on +color_lines = off +flush_delay = 120 +fsync = off +info_lines = off +mask = "$plugin.$name.weechatlog" +name_lower_case = on +nick_prefix = "" +nick_suffix = "" +path = "%h/logs/" +replacement_char = "_" +time_format = "%Y-%m-%d %H:%M:%S" + +[level] + +[mask] diff --git a/.weechat/logs/core.weechat.weechatlog b/.weechat/logs/core.weechat.weechatlog new file mode 100644 index 0000000..e618582 --- /dev/null +++ b/.weechat/logs/core.weechat.weechatlog @@ -0,0 +1,435 @@ +2020-01-29 20:15:43 New key binding (context "default"): meta2-1;5P => /bar scroll buflist * -100% +2020-01-29 20:15:43 New key binding (context "default"): meta2-1;5Q => /bar scroll buflist * +100% +2020-01-29 20:15:43 New key binding (context "default"): meta-meta-OQ => /bar scroll buflist * e +2020-01-29 20:15:43 New key binding (context "default"): meta2-1;3Q => /bar scroll buflist * e +2020-01-29 20:15:43 New key binding (context "default"): meta2-1;3P => /bar scroll buflist * b +2020-01-29 20:15:43 New key binding (context "default"): meta-meta-OP => /bar scroll buflist * b +2020-01-29 20:15:43 New key binding (context "default"): meta-OQ => /bar scroll buflist * +100% +2020-01-29 20:15:43 New key binding (context "default"): meta-OP => /bar scroll buflist * -100% +2020-01-29 20:15:43 New key binding (context "default"): meta-meta2-12~ => /bar scroll buflist * e +2020-01-29 20:15:43 New key binding (context "default"): meta-meta2-11~ => /bar scroll buflist * b +2020-01-29 20:15:43 New key binding (context "default"): meta2-12^ => /bar scroll buflist * +100% +2020-01-29 20:15:43 New key binding (context "default"): meta2-12~ => /bar scroll buflist * +100% +2020-01-29 20:15:43 New key binding (context "default"): meta2-11^ => /bar scroll buflist * -100% +2020-01-29 20:15:43 New key binding (context "default"): meta2-11~ => /bar scroll buflist * -100% +2020-01-29 20:15:43 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, perl, python, relay, script, trigger, xfer +2020-01-29 20:15:47 script: downloading list of scripts... +2020-01-29 20:15:48 script: 364 scripts for WeeChat 2.7 +2020-01-29 20:15:48 python: loading script "/home/dustvoice/.weechat/python/vimode.py" +2020-01-29 20:15:48 python: registered script "vimode", version 0.7 (Add vi/vim-like modes and keybindings to WeeChat.) +2020-01-29 20:15:48 [vimode.py] Problematic keybindings detected: +2020-01-29 20:15:48 [vimode.py] meta-jmeta-f -> /buffer - +2020-01-29 20:15:48 [vimode.py] meta-jmeta-l -> /buffer + +2020-01-29 20:15:48 [vimode.py] meta-jmeta-r -> /server raw +2020-01-29 20:15:48 [vimode.py] meta-jmeta-s -> /server jump +2020-01-29 20:15:48 [vimode.py] meta-wmeta-meta2-A -> /window up +2020-01-29 20:15:48 [vimode.py] meta-wmeta-meta2-B -> /window down +2020-01-29 20:15:48 [vimode.py] meta-wmeta-meta2-C -> /window right +2020-01-29 20:15:48 [vimode.py] meta-wmeta-meta2-D -> /window left +2020-01-29 20:15:48 [vimode.py] meta-wmeta2-1;3A -> /window up +2020-01-29 20:15:48 [vimode.py] meta-wmeta2-1;3B -> /window down +2020-01-29 20:15:48 [vimode.py] meta-wmeta2-1;3C -> /window right +2020-01-29 20:15:48 [vimode.py] meta-wmeta2-1;3D -> /window left +2020-01-29 20:15:48 [vimode.py] meta-wmeta-b -> /window balance +2020-01-29 20:15:48 [vimode.py] meta-wmeta-s -> /window swap +2020-01-29 20:15:48 [vimode.py] These keybindings may conflict with vimode. +2020-01-29 20:15:48 [vimode.py] You can remove problematic key bindings and add recommended ones by using /vimode bind_keys, or only list them with /vimode bind_keys --list +2020-01-29 20:15:48 [vimode.py] For help, see: https://github.com/GermainZ/weechat-vimode/blob/master/FAQ.md#problematic-key-bindings +2020-01-29 20:15:48 [vimode.py] To force disable warnings, you can set plugins.var.python.vimode.no_warn to 'on' +2020-01-29 20:15:51 Running commands: +2020-01-29 20:15:51 Key "ctrl-W" unbound (context: "default") +2020-01-29 20:15:51 New key binding (context "default"): ctrl-W => /input delete_previous_word +2020-01-29 20:15:51 New key binding (context "default"): ctrl-^ => /input jump_last_buffer_displayed +2020-01-29 20:15:51 New key binding (context "default"): ctrl-Wh => /window left +2020-01-29 20:15:51 New key binding (context "default"): ctrl-Wj => /window down +2020-01-29 20:15:51 New key binding (context "default"): ctrl-Wk => /window up +2020-01-29 20:15:51 New key binding (context "default"): ctrl-Wl => /window right +2020-01-29 20:15:51 New key binding (context "default"): ctrl-W= => /window balance +2020-01-29 20:15:51 New key binding (context "default"): ctrl-Wx => /window swap +2020-01-29 20:15:51 New key binding (context "default"): ctrl-Ws => /window splith +2020-01-29 20:15:51 New key binding (context "default"): ctrl-Wv => /window splitv +2020-01-29 20:15:51 New key binding (context "default"): ctrl-Wq => /window merge +2020-01-29 20:15:51 Key "meta-jmeta-f" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-jmeta-l" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-jmeta-r" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-jmeta-s" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta-meta2-A" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta-meta2-B" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta-meta2-C" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta-meta2-D" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta2-1;3A" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta2-1;3B" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta2-1;3C" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta2-1;3D" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta-b" unbound (context: "default") +2020-01-29 20:15:51 Key "meta-wmeta-s" unbound (context: "default") +2020-01-29 20:15:51 Done. +2020-01-29 20:16:09 Option changed: plugins.var.python.vimode.mode_indicator_normal_color_bg = "blue" +2020-01-29 20:16:50 Option changed: weechat.bar.input.items = "mode_indicator+[input_prompt]+(away),[input_search],[input_paste],input_text,[vi_buffer]" (default: "[input_prompt]+(away),[input_search],[input_paste],input_text") +2020-01-29 20:18:21 Option changed: weechat.bar.status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],completion,cmd_completion" (default: "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],completion") +2020-01-29 20:18:31 Option changed: plugins.var.python.vimode.search_vim = "on" +2020-01-29 20:18:41 irc: server freenode added +2020-01-29 20:19:26 =!= Too few arguments for command "/query" (help on command: /help query) +2020-01-29 20:19:28 fifo: pipe closed +2020-01-29 20:19:28 python: scripts unloaded +2020-01-29 20:20:50 python scripts loaded: vimode +2020-01-29 20:20:50 script: 364 scripts for WeeChat 2.7 +2020-01-29 20:20:50 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, perl, python, relay, script, trigger, xfer +2020-01-29 20:21:14 =!= Too few arguments for command "/msg" (help on command: /help msg) +2020-01-29 20:22:13 =!= Too few arguments for command "/query" (help on command: /help query) +2020-01-29 20:22:15 fifo: pipe closed +2020-01-29 20:22:15 python: scripts unloaded +2020-03-03 14:38:34 python scripts loaded: vimode +2020-03-03 14:38:34 script: downloading list of scripts... +2020-03-03 14:38:34 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, tcl, trigger, xfer +2020-03-03 14:38:34 script: 364 scripts for WeeChat 2.7.1 +2020-03-03 14:38:39 =!= You can not write text in this buffer +2020-03-03 14:45:50 fifo: pipe closed +2020-03-03 14:45:50 python: scripts unloaded +2020-05-17 11:59:12 python scripts loaded: vimode +2020-05-17 11:59:12 script: downloading list of scripts... +2020-05-17 11:59:12 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-05-17 11:59:17 script: 364 scripts for WeeChat 2.8 +2020-05-17 14:53:31 python: scripts unloaded +2020-08-08 21:02:26 New key binding (context "default"): meta-B => /buflist toggle +2020-08-08 21:02:26 =!= python: wrong arguments for function "bar_new" (script: vimode) +2020-08-08 21:02:26 python: stdout/stderr (vimode): TypeError: function takes exactly 16 arguments (15 given) +2020-08-08 21:02:26 python: stdout/stderr (vimode): The above exception was the direct cause of the following exception: +2020-08-08 21:02:26 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-08 21:02:26 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1855, in +2020-08-08 21:02:26 python: stdout/stderr (vimode): weechat.bar_new("vi_line_numbers", "on", "0", "window", "", "left", +2020-08-08 21:02:26 python: stdout/stderr (vimode): SystemError: returned a result with an error set +2020-08-08 21:02:26 =!= python: unable to parse file "/home/dustvoice/.weechat/python/autoload/vimode.py" +2020-08-08 21:02:26 script: downloading list of scripts... +2020-08-08 21:02:26 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-08-08 21:02:27 script: 364 scripts for WeeChat 2.9 +2020-08-08 21:02:34 =!= irc: command "join" must be executed on irc buffer (server, channel or private) +2020-08-09 20:31:28 New key binding (context "default"): meta-B => /buflist toggle +2020-08-09 20:31:28 =!= python: wrong arguments for function "bar_new" (script: vimode) +2020-08-09 20:31:28 python: stdout/stderr (vimode): TypeError: function takes exactly 16 arguments (15 given) +2020-08-09 20:31:28 python: stdout/stderr (vimode): The above exception was the direct cause of the following exception: +2020-08-09 20:31:28 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:31:28 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1855, in +2020-08-09 20:31:28 python: stdout/stderr (vimode): weechat.bar_new("vi_line_numbers", "on", "0", "window", "", "left", +2020-08-09 20:31:28 python: stdout/stderr (vimode): SystemError: returned a result with an error set +2020-08-09 20:31:28 =!= python: unable to parse file "/home/dustvoice/.weechat/python/autoload/vimode.py" +2020-08-09 20:31:28 script: 364 scripts for WeeChat 2.9 +2020-08-09 20:31:28 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-08-09 20:31:34 python: script removed: /home/dustvoice/.weechat/python/autoload/vimode.py +2020-08-09 20:31:34 python: script removed: /home/dustvoice/.weechat/python/vimode.py +2020-08-09 20:31:38 script: script "vimode.py" is already installed and up-to-date +2020-08-09 20:31:49 =!= Error: unknown command "/vimode" (type /help for help) +2020-08-09 20:31:58 python scripts loaded: vimode +2020-08-09 20:31:58 script: 364 scripts for WeeChat 2.9 +2020-08-09 20:31:58 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-08-09 20:32:07 Running commands: +2020-08-09 20:32:07 Key "ctrl-W" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-W => /input delete_previous_word +2020-08-09 20:32:07 Key "ctrl-^" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-^ => /input jump_last_buffer_displayed +2020-08-09 20:32:07 Key "ctrl-Wh" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-Wh => /window left +2020-08-09 20:32:07 Key "ctrl-Wj" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-Wj => /window down +2020-08-09 20:32:07 Key "ctrl-Wk" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-Wk => /window up +2020-08-09 20:32:07 Key "ctrl-Wl" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-Wl => /window right +2020-08-09 20:32:07 Key "ctrl-W=" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-W= => /window balance +2020-08-09 20:32:07 Key "ctrl-Wx" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-Wx => /window swap +2020-08-09 20:32:07 Key "ctrl-Ws" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-Ws => /window splith +2020-08-09 20:32:07 Key "ctrl-Wv" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-Wv => /window splitv +2020-08-09 20:32:07 Key "ctrl-Wq" unbound (context: "default") +2020-08-09 20:32:07 New key binding (context "default"): ctrl-Wq => /window merge +2020-08-09 20:32:07 Done. +2020-08-09 20:32:11 Running commands: +2020-08-09 20:32:11 Key "ctrl-W" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-W => /input delete_previous_word +2020-08-09 20:32:11 Key "ctrl-^" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-^ => /input jump_last_buffer_displayed +2020-08-09 20:32:11 Key "ctrl-Wh" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-Wh => /window left +2020-08-09 20:32:11 Key "ctrl-Wj" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-Wj => /window down +2020-08-09 20:32:11 Key "ctrl-Wk" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-Wk => /window up +2020-08-09 20:32:11 Key "ctrl-Wl" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-Wl => /window right +2020-08-09 20:32:11 Key "ctrl-W=" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-W= => /window balance +2020-08-09 20:32:11 Key "ctrl-Wx" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-Wx => /window swap +2020-08-09 20:32:11 Key "ctrl-Ws" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-Ws => /window splith +2020-08-09 20:32:11 Key "ctrl-Wv" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-Wv => /window splitv +2020-08-09 20:32:11 Key "ctrl-Wq" unbound (context: "default") +2020-08-09 20:32:11 New key binding (context "default"): ctrl-Wq => /window merge +2020-08-09 20:32:11 Done. +2020-08-09 20:32:30 Option changed: plugins.var.python.vimode.mode_indicator_normal_color_bg = "blue" +2020-08-09 20:33:04 Option changed: weechat.bar.input.items = "mode_indicator+[input_prompt]+(away),[input_search],[input_paste],input_text,[vi_buffer]" (default: "[input_prompt]+(away),[input_search],[input_paste],input_text") +2020-08-09 20:33:27 Option changed: weechat.bar.status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],completion,cmd_completion" (default: "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],completion") +2020-08-09 20:33:36 Option changed: plugins.var.python.vimode.search_vim = "on" +2020-08-09 20:34:32 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:32 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1302, in cb_key_combo_default +2020-08-09 20:34:32 python: stdout/stderr (vimode): VI_KEYS[vi_keys](buf, input_line, cur, count) +2020-08-09 20:34:32 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 918, in key_semicolon +2020-08-09 20:34:32 python: stdout/stderr (vimode): globals()[func](False) +2020-08-09 20:34:32 python: stdout/stderr (vimode): KeyError: 'cb_motion_None' +2020-08-09 20:34:32 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:32 =!= python: function "cb_vi_buffer" must return a valid value +2020-08-09 20:34:32 =!= python: error in function "cb_vi_buffer" +2020-08-09 20:34:33 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:33 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:33 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:33 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:33 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:33 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:33 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:33 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:33 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:33 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:33 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:33 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:33 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:33 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:33 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:34 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:34 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:34 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:34 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:34 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:34 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:34 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:34 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:34 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:34 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:34 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:34 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:34 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:34 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:34 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:34 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:34 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:34 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:34 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:34 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:34 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:34 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:34 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:34 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:34 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:34 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:34 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:34 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:34 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:34 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:35 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:35 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:35 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:35 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:35 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:35 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:35 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:35 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:35 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:35 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:35 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:35 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:35 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:35 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:35 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:35 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:35 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:35 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:35 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:35 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:35 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:35 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:35 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:35 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:35 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:35 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:35 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:35 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:35 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:35 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:36 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:36 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:36 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:36 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:36 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:36 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:36 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:36 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:36 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:36 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:36 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:36 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:36 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:36 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:36 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:36 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:36 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:36 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:36 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:36 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:37 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:37 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:37 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:37 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:37 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:37 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:37 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:37 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:37 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:37 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:37 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:37 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:37 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:37 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:37 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:37 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:37 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:37 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:37 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:37 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:37 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:37 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:37 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:37 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:37 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:37 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:37 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:37 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:37 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:37 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:37 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:37 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:37 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:37 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:37 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:37 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:37 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:37 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:37 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:37 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:34:38 python: stdout/stderr (vimode): Traceback (most recent call last): +2020-08-09 20:34:38 python: stdout/stderr (vimode): File "/home/dustvoice/.weechat/python/autoload/vimode.py", line 1255, in cb_key_combo_default +2020-08-09 20:34:38 python: stdout/stderr (vimode): vi_buffer += keys +2020-08-09 20:34:38 python: stdout/stderr (vimode): TypeError: unsupported operand type(s) for +=: 'NoneType' and 'str' +2020-08-09 20:34:38 =!= python: error in function "cb_key_combo_default" +2020-08-09 20:35:26 python: scripts unloaded +2020-08-09 20:35:30 [vimode.py] tmux/screen users, see: https://github.com/GermainZ/weechat-vimode/blob/master/FAQ.md#esc-key-not-being-detected-instantly +2020-08-09 20:35:30 [vimode.py] To force disable warnings, you can set plugins.var.python.vimode.no_warn to 'on' +2020-08-09 20:35:30 python scripts loaded: vimode +2020-08-09 20:35:30 script: 364 scripts for WeeChat 2.9 +2020-08-09 20:35:30 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-08-09 21:11:41 [vimode.py] tmux/screen users, see: https://github.com/GermainZ/weechat-vimode/blob/master/FAQ.md#esc-key-not-being-detected-instantly +2020-08-09 21:11:41 [vimode.py] To force disable warnings, you can set plugins.var.python.vimode.no_warn to 'on' +2020-08-09 21:11:41 python scripts loaded: vimode +2020-08-09 21:11:41 script: 364 scripts for WeeChat 2.9 +2020-08-09 21:11:41 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-08-09 21:12:23 python: scripts unloaded +2020-08-09 21:23:12 [vimode.py] tmux/screen users, see: https://github.com/GermainZ/weechat-vimode/blob/master/FAQ.md#esc-key-not-being-detected-instantly +2020-08-09 21:23:12 [vimode.py] To force disable warnings, you can set plugins.var.python.vimode.no_warn to 'on' +2020-08-09 21:23:12 python scripts loaded: vimode +2020-08-09 21:23:12 script: 364 scripts for WeeChat 2.9 +2020-08-09 21:23:12 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-08-09 21:23:33 Option changed: plugins.var.python.vimode.no_warn = "on" +2020-08-09 21:23:41 python: scripts unloaded +2020-08-09 21:23:42 python scripts loaded: vimode +2020-08-09 21:23:42 script: 364 scripts for WeeChat 2.9 +2020-08-09 21:23:42 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-08-09 21:23:48 Options saved to sec.conf +2020-08-09 21:23:48 Options saved to weechat.conf +2020-08-09 21:23:48 Options saved to plugins.conf +2020-08-09 21:23:48 Options saved to charset.conf +2020-08-09 21:23:48 Options saved to logger.conf +2020-08-09 21:23:48 Options saved to exec.conf +2020-08-09 21:23:48 Options saved to trigger.conf +2020-08-09 21:23:48 Options saved to spell.conf +2020-08-09 21:23:48 Options saved to alias.conf +2020-08-09 21:23:48 Options saved to buflist.conf +2020-08-09 21:23:48 Options saved to fifo.conf +2020-08-09 21:23:48 Options saved to xfer.conf +2020-08-09 21:23:48 Options saved to irc.conf +2020-08-09 21:23:48 Options saved to relay.conf +2020-08-09 21:23:48 Options saved to guile.conf +2020-08-09 21:23:48 Options saved to lua.conf +2020-08-09 21:23:48 Options saved to perl.conf +2020-08-09 21:23:48 Options saved to python.conf +2020-08-09 21:23:48 Options saved to ruby.conf +2020-08-09 21:23:48 Options saved to script.conf +2020-08-09 21:23:48 Options saved to fset.conf +2020-08-09 21:23:52 =!= Too few arguments for command "/query" (help on command: /help query) +2020-08-09 21:23:56 =!= irc: command "quiet" must be executed on irc buffer (server, channel or private) +2020-08-09 21:23:59 python: scripts unloaded +2020-08-09 21:38:54 python scripts loaded: vimode +2020-08-09 21:38:54 script: 364 scripts for WeeChat 2.9 +2020-08-09 21:38:54 Plugins loaded: alias, buflist, charset, exec, fifo, fset, guile, irc, logger, lua, perl, python, relay, ruby, script, spell, trigger, xfer +2020-08-09 21:39:06 Options saved to sec.conf +2020-08-09 21:39:06 Options saved to weechat.conf +2020-08-09 21:39:06 Options saved to plugins.conf +2020-08-09 21:39:06 Options saved to charset.conf +2020-08-09 21:39:06 Options saved to logger.conf +2020-08-09 21:39:06 Options saved to exec.conf +2020-08-09 21:39:06 Options saved to trigger.conf +2020-08-09 21:39:06 Options saved to spell.conf +2020-08-09 21:39:06 Options saved to alias.conf +2020-08-09 21:39:06 Options saved to buflist.conf +2020-08-09 21:39:06 Options saved to fifo.conf +2020-08-09 21:39:06 Options saved to xfer.conf +2020-08-09 21:39:06 Options saved to irc.conf +2020-08-09 21:39:06 Options saved to relay.conf +2020-08-09 21:39:06 Options saved to guile.conf +2020-08-09 21:39:06 Options saved to lua.conf +2020-08-09 21:39:06 Options saved to perl.conf +2020-08-09 21:39:06 Options saved to python.conf +2020-08-09 21:39:06 Options saved to ruby.conf +2020-08-09 21:39:06 Options saved to script.conf +2020-08-09 21:39:06 Options saved to fset.conf diff --git a/.weechat/logs/irc.freenode.#archlinux.weechatlog b/.weechat/logs/irc.freenode.#archlinux.weechatlog new file mode 100644 index 0000000..09445a6 --- /dev/null +++ b/.weechat/logs/irc.freenode.#archlinux.weechatlog @@ -0,0 +1,542 @@ +2020-08-08 21:03:20 --> dustvoice (~dustvoice@89-201-247-206.dsl.optinet.hr) has joined #archlinux +2020-08-08 21:03:20 -- Topic for #archlinux is "Welcome to Arch Linux, Good Luck: https://archlinux.org | Rules: https://goo.gl/XWFreH | Pastebins: see !paste | status.archlinux.org | Installing? New `base` package; read the install guide carefully" +2020-08-08 21:03:20 -- Topic set by phrik (~phrik@archlinux/bot/phrik) on Fri, 24 Jul 2020 22:12:54 +2020-08-08 21:03:20 -- Channel #archlinux: 1720 nicks (1 op, 0 voices, 1719 normals) +2020-08-08 21:03:21 -- Channel created on Sun, 15 Feb 2004 06:08:31 +2020-08-08 21:03:28 --> xtro (~xtro@cpe-104-173-141-189.socal.res.rr.com) has joined #archlinux +2020-08-08 21:03:45 <-- lizr (~lizr@1.83.104.248) has quit (Ping timeout: 240 seconds) +2020-08-08 21:04:09 <-- seankhliao (~seankhlia@233.19.90.34.bc.googleusercontent.com) has quit (Quit: it can't be DNS?! it's always DNS!!!) +2020-08-08 21:04:34 --> seankhliao (~seankhlia@233.19.90.34.bc.googleusercontent.com) has joined #archlinux +2020-08-08 21:05:38 santost12 the second display is still showing the "corruption". i installed QXL driver and everything else except the for the AMD GPU. im about to do that. windows says no other monitors were detected. +2020-08-08 21:06:12 --> Lenny_ (lenny@srv3.blesmrt.net) has joined #archlinux +2020-08-08 21:06:16 <-- Elodin (~weechat@unaffiliated/padawan) has quit (Ping timeout: 256 seconds) +2020-08-08 21:06:17 --> lizr (~lizr@1.83.106.58) has joined #archlinux +2020-08-08 21:06:39 dustvoice Is there an IRC chat where I could recieve some support regarding zfs? Because the AUR package `zfs-utils` doesn't compile for me, but I suppose this isn't the right channel to ask, cause ZFS isn't officially supported +2020-08-08 21:07:05 CompanionCube there's #zfsonlinux +2020-08-08 21:07:21 NetSysFire you can also ask alis +2020-08-08 21:07:37 sheep did you check the comments on its AUR page? +2020-08-08 21:07:49 --> chepaz (~chepaz@195.245.21.236) has joined #archlinux +2020-08-08 21:09:06 <-- desmu (~desmu@2a02:908:391:8260:3c1:9333:2bd5:4202) has quit (Ping timeout: 246 seconds) +2020-08-08 21:09:38 <-- Garb0 (~Garb0@unaffiliated/garb0) has quit (Remote host closed the connection) +2020-08-08 21:09:53 dustvoice sheep: Yes, but I didn't find a solution unfortunately +2020-08-08 21:10:04 -- SpinTronix is now known as SpinTronix_ +2020-08-08 21:10:29 sheep how much RAM do you have? +2020-08-08 21:10:32 dustvoice I think I'll try to hit them people up in #zfsonlinux, cause the upstream git repo doesn't compile as well +2020-08-08 21:10:46 <-- seankhliao (~seankhlia@233.19.90.34.bc.googleusercontent.com) has quit (Quit: it can't be DNS?! it's always DNS!!!) +2020-08-08 21:10:50 <-- Megver83 (~Icedove@pc-88-170-100-190.cm.vtr.net) has quit (Read error: Connection reset by peer) +2020-08-08 21:10:53 --> seankhliao (~seankhlia@233.19.90.34.bc.googleusercontent.com) has joined #archlinux +2020-08-08 21:10:56 dustvoice sheep: 64G should be enough ':) +2020-08-08 21:10:58 sheep if gcc is segfaulting then either it ran out of memory or there's some really obscure compiler bug happening +2020-08-08 21:11:18 --> Megver83 (~Icedove@pc-88-170-100-190.cm.vtr.net) has joined #archlinux +2020-08-08 21:11:35 MacGyver dustvoice: If you're actually on arch, zfs isn't *that* out there that nobody here would be willing to help you just because it's an AUR package. +2020-08-08 21:11:41 dustvoice hmm ok. compiler bug could be the issue, or gcc does weird stuff with the RAM... Will try another run and monitor mem usage... +2020-08-08 21:12:07 MacGyver I applaud the effort to search for a "more appropriate" channel but I think the risk of being shouted at in this case is rather small. +2020-08-08 21:12:50 <-- m1cr0xf7 (~m1cr0xf7@41.46.131.90) has quit (Quit: leaving) +2020-08-08 21:13:40 dustvoice MacGyver: Yes I'm on arch. I know I could probably get some support here, but I'm always asking if there is a more appropriate channel first. I'll try some runs, maybe even do a memtest. I've got no hurry regarding this. Nilfs2 is nice, but I would love to run ZFS really. +2020-08-08 21:14:10 --> quitman (~master@217-64-148-87.pool.ovpn.com) has joined #archlinux +2020-08-08 21:14:17 <-- ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has left #archlinux +2020-08-08 21:14:25 --> Al3v (~arch@85-76-145-47-nat.elisa-mobile.fi) has joined #archlinux +2020-08-08 21:14:52 NetSysFire do you have some debug information? +2020-08-08 21:16:34 santost12 MacGyver: this is what i was talking about earlier: https://postimg.cc/Q9KmNskT +2020-08-08 21:16:36 phrik Title: 1 — Postimage.org (at postimg.cc) +2020-08-08 21:19:35 Strykar dustvoice: post the error you get while compiling the aur package +2020-08-08 21:20:04 -- SpinTronix_ is now known as SpinTronix +2020-08-08 21:20:40 MacGyver santost12: Hmright. Hunting this is difficult. Apparently there's also a potential problem if you *do* have virtual GPUs enabled and boot with the AMD GPU passed through & enabled; so you could try rebooting, disabling the QXL GPU, then starting the VM. +2020-08-08 21:21:18 dustvoice Another weird issue I'm encountering on the Lenovo Yoga Laptop of my mother, I also tried this on is that sometimes the screen just starts to flicker. It's an Intel integrated graphics card. I first thought it was some issue with her Manjaro install and/or my portable Arch install, but as I tried to look at some journals and therefore booted into the archiso, the problem still occured. On my +2020-08-08 21:21:18 dustvoice portable arch install (just an arch install on a USB) it only occurs, after I enter my password for LUKS. It also happens more often during normal usage, after the display gets woken from sleep. I can reproduce it 70% of the time by forcing the standby with `xset dpms force standby`. The flicker starts slowly and then increases in frequency. In approx. 3s one can't see sh*t. I've also tried with +2020-08-08 21:21:18 dustvoice `nomodeset` etc. without success. Several reboots resolve the error temporarily. Sorry for opening up 2 issues at the same time, but I gotta admit those 2 problems are slowly but steadily driving me insane. And sorry for the wall of text. I can offer cookies for compensation +2020-08-08 21:21:19 MacGyver santost12: You're beyond my expertise in issues with AMD GPUs though so at this point I'm merely interpreting any results from https://www.reddit.com/r/VFIO/search?q=AMD%20code%2043&restrict_sr=1 +2020-08-08 21:21:21 phrik Title: reddit.com: search results - AMD code 43 (at www.reddit.com) +2020-08-08 21:21:22 <-- panikovsky (~panikovsk@5.139.149.148) has quit (Quit: Leaving) +2020-08-08 21:21:30 <-- djapo (~archie@unaffiliated/djapo) has quit (Remote host closed the connection) +2020-08-08 21:21:50 dustvoice Strykar: It was indeed a segfault +2020-08-08 21:22:09 dustvoice Weird thing is, I just brute-force tried it like 6 times and magically it somehow worked +2020-08-08 21:22:24 <-- akar (~akar@2a01:e0a:d5:f450:d253:ae33:86a:84dc) has quit (Ping timeout: 246 seconds) +2020-08-08 21:22:28 dustvoice I have no idea. Maybe it's indeed a mem issue. Will run a memtest tonight just for good measure +2020-08-08 21:22:46 MacGyver santost12: Oh, also, you should make sure you're passing through *all* the devices in that card's IOMMU-group. +2020-08-08 21:22:53 MacGyver santost12: Including the audio device on the GPU. +2020-08-08 21:23:32 dustvoice Well I'm gonna try to build the zfs-dkms package now. If I'm understanding stuff correctly, I therefore won't need zfs-linux right? I can use a normal linux kernel and use zfs-dkms with it right? +2020-08-08 21:23:38 <-- simbioz (~simbioz@unaffiliated/simbioz) has quit (Ping timeout: 265 seconds) +2020-08-08 21:23:42 dustvoice Or would it be recommended to use the zfs-linux kernel +2020-08-08 21:23:51 Tom^ dustvoice: https://wiki.archlinux.org/index.php/intel_graphics#Screen_flickering +2020-08-08 21:23:52 phrik Title: Intel graphics - ArchWiki (at wiki.archlinux.org) +2020-08-08 21:24:00 MacGyver Either should work if you're on [core]/linux. +2020-08-08 21:24:03 --> djapo (~archie@unaffiliated/djapo) has joined #archlinux +2020-08-08 21:24:04 Tom^ dustvoice: i915.enable_psr=0 +2020-08-08 21:24:13 MacGyver dkms will build fine for the official kernels. +2020-08-08 21:24:29 dustvoice MacGyver: So also for linux-zen? +2020-08-08 21:24:33 MacGyver The prebuilt packages are usually only there as an additional convenience. +2020-08-08 21:24:38 MacGyver No, not for linux-zen. +2020-08-08 21:24:43 MacGyver That's a different kernel. +2020-08-08 21:24:52 dustvoice Tom^: Thanks will look into it, but I'm pretty sure I tried the i915 option. +2020-08-08 21:24:55 MacGyver So only dkms would work there. +2020-08-08 21:25:04 MacGyver Unless somebody provides zfs-linux-zen. +2020-08-08 21:25:09 ryzokuken I'd been wondering what people have been using for quickly accessible dictionaries akin to some other OSes. +2020-08-08 21:25:19 ryzokuken dmenu with a script that hooks up to a dict? +2020-08-08 21:25:49 ryzokuken and from *a* dict, I mean dict(1) lol +2020-08-08 21:25:56 dustvoice MacGyver: Oh ok. So just there's no misunderstanding, the dkms version also won't work with linux-zen? Not that I require the zen kernel. I can also run the stock linux kernel +2020-08-08 21:27:24 MacGyver The dkms-version will work for any kernel for which you have the headers. +2020-08-08 21:27:35 MacGyver The prebuilt version for linux will not work for linux-zen. +2020-08-08 21:27:53 santost12 MacGyver: still nothing but thank you for the suggestions and help. i tried disabling QXL and then i removed it. i used RDP and same error +2020-08-08 21:27:54 dustvoice MacGyver: Thanks for the info. I assumed this, but having some confirmation is always helpful +2020-08-08 21:28:15 santost12 im going to buy another hard drive for windows. +2020-08-08 21:28:41 --> nabukadnezar43 (~mmturk@85.102.37.217) has joined #archlinux +2020-08-08 21:29:42 dustvoice Tom^: After reading your provided wiki article, I'm not so sure, I tried, but possibly *wanted* to try the kernel parameter. Will try it out after grabbing some food. Thanks to you guys anyways. Helpful as always. +2020-08-08 21:29:59 --> Szadek (~Szadek@193.27.14.37) has joined #archlinux +2020-08-08 21:31:04 <-- nabukadnezar43 (~mmturk@85.102.37.217) has quit (Client Quit) +2020-08-08 21:31:56 -- SpinTronix is now known as SpinTronix_ +2020-08-08 21:32:01 --> ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has joined #archlinux +2020-08-08 21:32:30 <-- ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has left #archlinux +2020-08-08 21:33:08 <-- santost12 (~santost12@2001:5b0:2a59:2508:f3ca:aae8:33ca:bfd1) has quit (Quit: reboot) +2020-08-08 21:34:55 <-- scrumplex_ (~quassel@p200300d27708cc00dea632fffe541a61.dip0.t-ipconnect.de) has quit (Quit: Quassel - Signing Off) +2020-08-08 21:35:36 <-- irc_user (uid423822@gateway/web/irccloud.com/x-vksrowldhkawixkp) has quit (Quit: Connection closed for inactivity) +2020-08-08 21:35:40 <-- sa02irc (~mbax@155-079-043-212.ip-addr.inexio.net) has quit (Remote host closed the connection) +2020-08-08 21:35:59 --> scrumplex (~quassel@pd95d4310.dip0.t-ipconnect.de) has joined #archlinux +2020-08-08 21:37:30 --> ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has joined #archlinux +2020-08-08 21:37:39 --> santost12 (~santost12@2001:5b0:2a59:2508:f3ca:aae8:33ca:bfd1) has joined #archlinux +2020-08-08 21:37:53 --> ricus (~kiike@unaffiliated/ricus) has joined #archlinux +2020-08-08 21:40:06 --> Alakzadeh (~Alak@unaffiliated/alakzadeh) has joined #archlinux +2020-08-08 21:40:15 --> simbioz (~simbioz@unaffiliated/simbioz) has joined #archlinux +2020-08-08 21:42:06 <-- djapo (~archie@unaffiliated/djapo) has quit (Ping timeout: 260 seconds) +2020-08-08 21:44:42 mattfly hmm when is libreoffice 7 arriving on arch? where do you look for this? +2020-08-08 21:45:27 mattfly or have it... +2020-08-08 21:45:29 sheep mattfly: you'll see it in pacman when it's available. Otherwise there's no public tracking +2020-08-08 21:45:36 mattfly oh ok +2020-08-08 21:45:37 sheep besides the svn/git repos +2020-08-08 21:46:07 sheep given how large libreoffice is and how many dependencies it has, it will probably take a few days +2020-08-08 21:46:46 sheep if you want immediate notifications about the source package being updated, you could subscribe to the arch-commits mailing list +2020-08-08 21:47:08 heftig post-factum: yes, once I get back to my desk (all my access keys are on a yubikey) +2020-08-08 21:47:42 post-factum heftig: ok. i've already created a bug-request for that and updated another bug +2020-08-08 21:47:45 <-- Kruppt (~Kruppt@50.111.30.170) has quit (Remote host closed the connection) +2020-08-08 21:48:30 heftig post-factum: yes, thanks. they're already on my to-do list +2020-08-08 21:50:28 --> linux_dream (~isaac@unaffiliated/linux-dream/x-5839402) has joined #archlinux +2020-08-08 21:50:58 <-- fstd (~fstd@unaffiliated/fisted) has quit (Ping timeout: 260 seconds) +2020-08-08 21:51:06 <-- skinkie (~skinkie@konink.de) has left #archlinux +2020-08-08 21:51:11 <-- Szadek (~Szadek@193.27.14.37) has quit (Ping timeout: 246 seconds) +2020-08-08 21:51:13 <-- _illy_ (~illyohs@70-237-10-37.lightspeed.cntmoh.sbcglobal.net) has quit (Quit: WeeChat 2.9) +2020-08-08 21:51:15 --> fstd (~fstd@unaffiliated/fisted) has joined #archlinux +2020-08-08 21:51:45 --> Pidgeotto (drowsyivy@gateway/shell/tilde.team/x-yekebhqdbtfjhbeu) has joined #archlinux +2020-08-08 21:51:45 <-- Pidgeotto (drowsyivy@gateway/shell/tilde.team/x-yekebhqdbtfjhbeu) has quit (Excess Flood) +2020-08-08 21:52:11 -- SpinTronix_ is now known as SpinTronix +2020-08-08 21:52:14 --> Pidgeotto (drowsyivy@gateway/shell/tilde.team/x-nzapgtuhmzsvcxpr) has joined #archlinux +2020-08-08 21:52:14 <-- Pidgeotto (drowsyivy@gateway/shell/tilde.team/x-nzapgtuhmzsvcxpr) has quit (Excess Flood) +2020-08-08 21:52:45 <-- Jesin (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) has quit (Quit: Leaving) +2020-08-08 21:52:47 --> Pidgeotto (drowsyivy@gateway/shell/tilde.team/x-kllsefaqgumjtdck) has joined #archlinux +2020-08-08 21:52:47 <-- Pidgeotto (drowsyivy@gateway/shell/tilde.team/x-kllsefaqgumjtdck) has quit (Excess Flood) +2020-08-08 21:55:39 <-- florent (~florent@2a01:e0a:409:1890:deed:2ade:b95:9d8f) has quit (Read error: Connection reset by peer) +2020-08-08 21:56:12 <-- Satin (~satina@unaffiliated/satin) has quit (Quit: don't press me there!) +2020-08-08 21:56:12 <-- Inu (~Inu@unaffiliated/inu) has quit (Quit: woof) +2020-08-08 21:56:12 <-- warsh (~warsh@unaffiliated/warsh) has quit (Quit: smell ya later) +2020-08-08 21:56:46 <-- fyrgebraec (~enceladus@sp137-h04-128-78-140-174.dsl.sta.abo.bbox.fr) has quit (Ping timeout: 246 seconds) +2020-08-08 21:58:02 <-- Zeyphros (~Zeyphros@2a02:908:1016:f40:2d8:61ff:fe55:26be) has quit (Quit: WeeChat 2.9) +2020-08-08 21:58:27 --> easo2k (a@unaffiliated/easo2k) has joined #archlinux +2020-08-08 21:58:36 --> Satin (~satina@unaffiliated/satin) has joined #archlinux +2020-08-08 21:58:45 --> henninb (~user@63.226.173.112) has joined #archlinux +2020-08-08 21:58:46 <-- Trashlord (~trash@wikipedia/Sentient-Planet) has quit (Quit: "True ignorance is not the absence of knowledge, but the refusal to acquire it.") +2020-08-08 21:59:46 -- ireadallthelogs is now known as sevu +2020-08-08 22:00:32 <-- Carduus (~Carduus@pc199.phh.uni-kiel.de) has quit (Quit: leaving) +2020-08-08 22:00:33 --> Cirrus_Minor (~Cirrus_Mi@CAcert/Cirrus-Minor) has joined #archlinux +2020-08-08 22:00:42 <-- henninb (~user@63.226.173.112) has quit (Remote host closed the connection) +2020-08-08 22:01:15 --> ttyX (~ttyX@unaffiliated/ttyx) has joined #archlinux +2020-08-08 22:01:32 <-- kaguya (~kaguya@jkvlon0504w-grc-08-70-27-8-63.dsl.bell.ca) has quit (Quit: WeeChat 2.9) +2020-08-08 22:01:34 --> Inu (~Inu@unaffiliated/inu) has joined #archlinux +2020-08-08 22:01:59 drathir_tor not sure, but from curiosity isnt community/perl-test-simple should replace the perl-test-tester in dependencies bc of conflicting files ? +2020-08-08 22:02:04 --> warsh (~warsh@unaffiliated/warsh) has joined #archlinux +2020-08-08 22:02:09 <-- santost12 (~santost12@2001:5b0:2a59:2508:f3ca:aae8:33ca:bfd1) has quit (Quit: quit) +2020-08-08 22:02:30 --> Carduus (~Carduus@pc199.phh.uni-kiel.de) has joined #archlinux +2020-08-08 22:04:02 <-- heat_ (~heat@sortix/contributor/heat) has quit (Ping timeout: 260 seconds) +2020-08-08 22:04:19 -- SpinTronix is now known as SpinTronix_ +2020-08-08 22:05:10 drathir_tor or its like replaces not apply to packages no longer included/existing in repositories... ? +2020-08-08 22:05:29 jonathon mattfly: I can point you to some packages if you want; I build it a couple of days ago for myself. +2020-08-08 22:05:49 sheep drathir_tor: I'm not sure what you're asking or what you mean by "bc of conflicting files". can you show us the full output of pacman? +2020-08-08 22:06:16 drathir_tor sheep: k one sec... +2020-08-08 22:06:53 <-- C5OK5Y (~C5OK5Y@ip-78-102-149-138.net.upcbroadband.cz) has quit (Quit: C5OK5Y) +2020-08-08 22:07:46 --> ilhanraja (~ilhanraja@104.37.129.153) has joined #archlinux +2020-08-08 22:07:46 --> kalbasit (~kalbasit@unaffiliated/kalbasit) has joined #archlinux +2020-08-08 22:08:21 <-- _thelion_ (~matthias@93-82-97-54.adsl.highway.telekom.at) has quit (Quit: WeeChat 2.8) +2020-08-08 22:09:14 <-- Alakzadeh (~Alak@unaffiliated/alakzadeh) has quit (Quit: WeeChat 2.9) +2020-08-08 22:09:22 -- SpinTronix_ is now known as SpinTronix +2020-08-08 22:09:53 <-- finnmark (~finnmark@2a0c:f040:0:2790::4d) has quit (Ping timeout: 272 seconds) +2020-08-08 22:10:28 drathir_tor sheep: there You go https://gist.github.com/b7cc117147c46b2982586a0cf4a45506 +2020-08-08 22:10:30 phrik Title: conflicting__perl-test-simple_with_perl-test-tester · GitHub (at gist.github.com) +2020-08-08 22:11:47 --> Jesin (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) has joined #archlinux +2020-08-08 22:11:49 sheep drathir_tor: the perl-test-tester package doesn't exist in the repos anymore. I think perl-test-simple should replace it +2020-08-08 22:11:55 --> Phrenic (~cailean@static-198-54-128-77.cust.tzulo.com) has joined #archlinux +2020-08-08 22:11:58 --> semeion (~semeion@unaffiliated/semeion) has joined #archlinux +2020-08-08 22:12:41 bentglasstube so I reinstalled arch entirely and I'm still having performance issues in x +2020-08-08 22:12:43 <-- Thaodan (~Thaodan@thaodan.de) has quit (Quit: ZNC - https://znc.in) +2020-08-08 22:13:06 drathir_tor bentglasstube: dmesg spamming any errors ? +2020-08-08 22:13:27 bentglasstube no, nothing interesting in there that I see +2020-08-08 22:13:28 --> Thaodan (~Thaodan@thaodan.de) has joined #archlinux +2020-08-08 22:13:42 bentglasstube nothing interesting in xorg log either +2020-08-08 22:13:46 Phrenic What's the irc command for font help? +2020-08-08 22:14:11 sheep Phrenic: there isn't one +2020-08-08 22:14:58 NetSysFire bentglasstube: what performance issues? +2020-08-08 22:15:14 --> desmu (~desmu@2a02:908:391:8260:3c1:9333:2bd5:4202) has joined #archlinux +2020-08-08 22:15:16 drathir_tor bentglasstube: from curiosity does glxgears affected as well ? +2020-08-08 22:15:21 <-- J_Darnley (~J_Darnley@d51A44418.access.telenet.be) has quit (Ping timeout: 265 seconds) +2020-08-08 22:15:25 Namarrgon Phrenic: plain english works best; explain your issue +2020-08-08 22:15:42 bentglasstube mouse movement is super choppy mostly +2020-08-08 22:16:10 NetSysFire what gpu? +2020-08-08 22:16:15 Namarrgon bentglasstube: did you try with nouveau instead of the blob? +2020-08-08 22:16:17 bentglasstube seems to be since I updated things a couple days ago, so I assume gpu drivers +2020-08-08 22:16:21 --> mr_sm1th (~mr_sm1111@94-215-58-197.cable.dynamic.v4.ziggo.nl) has joined #archlinux +2020-08-08 22:16:36 bentglasstube I was going to try nouveau next, but it doesn't support much on my gpu +2020-08-08 22:16:39 mr_sm1th I'm trying to update with pacman, but I'm getting "error: sublime-text: key "F57D4F59BD3DF454" is unknown" +2020-08-08 22:16:52 Namarrgon mr_sm1th: which repo do you get that package from? +2020-08-08 22:16:53 mr_sm1th rm -rf /etc/pacman.d/gnupg doesn't work +2020-08-08 22:16:54 bentglasstube 01:00.0 VGA compatible controller: NVIDIA Corporation TU104 [GeForce RTX 2070 SUPER] (rev a1) +2020-08-08 22:17:04 --> J_Darnley (~J_Darnley@d51a44418.access.telenet.be) has joined #archlinux +2020-08-08 22:17:07 Phrenic I'm just missing some characters. Just looking for some font packages that provide good coverage for more obscure icons and characters. +2020-08-08 22:17:13 mr_sm1th Namarrgon, I'm not installing sublime-text, it's long gone from my system, but it seems to have left some files that break pacman +2020-08-08 22:17:29 Namarrgon mr_sm1th: post the full pacman -Syu --debug output +2020-08-08 22:17:44 bentglasstube glxgears looks choppy too, but stdout reports 60fps +2020-08-08 22:18:04 drathir_tor mr_sm1th: that most likely not help You wipe all keys maybe instead go try reinstal archlinux-keyring... +2020-08-08 22:18:13 mr_sm1th I did that +2020-08-08 22:18:20 mr_sm1th !paste +2020-08-08 22:18:21 phrik Paste short snippets (up to 3 lines) in channel. Please do NOT use pastebin.com or paste.ubuntu.com -- some good, sane paste services are http://ix.io, https://paste.rs, https://bpaste.net and https://gist.github.com. See !ix or !rs for an easy way to paste from a pipe. +2020-08-08 22:18:31 Namarrgon !pastepacman +2020-08-08 22:18:32 phrik LC_ALL=C pacman --debug |& tee >(curl -F 'f:1=<-' ix.io) +2020-08-08 22:18:51 <-- patrick96 (~Patrick@polybar/patrick) has quit (Read error: Connection reset by peer) +2020-08-08 22:18:51 mr_sm1th this seems to be the relevant part https://bpa.st/4DOQ +2020-08-08 22:18:51 phrik Title: View paste 4DOQ (at bpa.st) +2020-08-08 22:19:13 <-- mrbanie (~mrbanie@unaffiliated/mrbanie) has quit (Ping timeout: 265 seconds) +2020-08-08 22:19:25 sheep is there a sublime-text repo in your pacman.conf? +2020-08-08 22:19:51 Namarrgon post the full output +2020-08-08 22:19:55 mr_sm1th Ok yeah that was it +2020-08-08 22:19:58 mr_sm1th Thank you +2020-08-08 22:20:08 <-- segurb (~segurb@unaffiliated/segurb) has quit (Quit: https://i.imgur.com/xrUtDu3.gif) +2020-08-08 22:20:11 mr_sm1th Namarrgon, there was 500+ lines of new repos being added ':) +2020-08-08 22:20:30 Namarrgon why do you have so many mirrors in your mirrorlist? +2020-08-08 22:20:54 drathir_tor O,O' +2020-08-08 22:21:29 mr_sm1th Ehm +2020-08-08 22:21:36 mr_sm1th I have one for every country it seems +2020-08-08 22:21:47 mr_sm1th Generated on 2019-02-01 +2020-08-08 22:22:22 mr_sm1th Anyway, thank you :) +2020-08-08 22:23:04 <-- Phrenic (~cailean@static-198-54-128-77.cust.tzulo.com) has left #archlinux +2020-08-08 22:23:41 --> patrick96 (~Patrick@polybar/patrick) has joined #archlinux +2020-08-08 22:24:35 <-- jgbyrne (~jgbyrne@host86-164-149-194.range86-164.btcentralplus.com) has quit (Ping timeout: 240 seconds) +2020-08-08 22:24:38 <-- andril (~andril@2601:586:8400:a:eddb:2518:3553:6011) has quit (Quit: WeeChat 2.9) +2020-08-08 22:25:16 j0hannes I shutdown my laptop before a flight and restarted it afterwards; now the Network Connections status bar entry in KDE is gone and in the system configuration I don't find any of the previously existing connections (VPN etc.) anymore +2020-08-08 22:25:33 <-- dvx_ (~dvx@82.113.48.124) has quit (Quit: dvx_) +2020-08-08 22:25:34 j0hannes ip a lists the wifi adapter as DOWN +2020-08-08 22:26:37 NetSysFire did you updated anything? check pacman.log +2020-08-08 22:26:53 NetSysFire also check that you didnt push a hw button, like the airplane mode one if you have something like this +2020-08-08 22:27:04 --> jgbyrne (~jgbyrne@host86-164-149-194.range86-164.btcentralplus.com) has joined #archlinux +2020-08-08 22:28:14 --> akar (~akar@2a01:e0a:d5:f450:d253:ae33:86a:84dc) has joined #archlinux +2020-08-08 22:28:35 --> Brocellous (~Brocellou@unaffiliated/brocellous) has joined #archlinux +2020-08-08 22:30:42 <-- qin (~qin@unaffiliated/soalokin) has quit (Ping timeout: 256 seconds) +2020-08-08 22:30:51 <-- sevu (~sevu@2a01:c22:a80a:200:781d:24ff:fed2:5c17) has quit (Ping timeout: 244 seconds) +2020-08-08 22:31:50 <-- SanskritFritz (~quassel@2E8B45C2.catv.pool.telekom.hu) has quit (Ping timeout: 256 seconds) +2020-08-08 22:32:34 --> MarcinWieczorek (~marcin@afoe197.neoplus.adsl.tpnet.pl) has joined #archlinux +2020-08-08 22:33:02 <-- klokken (~klokken@unaffiliated/klokken) has quit (Quit: klokken) +2020-08-08 22:33:19 j0hannes NetSysFire: there is an Fn key combination to toggle wifi, but it never worked under Arch +2020-08-08 22:33:33 <-- ilhanraja (~ilhanraja@104.37.129.153) has quit (Quit: My MacBook has gone to sleep. ZZZzzz…) +2020-08-08 22:34:03 NetSysFire what is your specific device? +2020-08-08 22:34:09 NetSysFire check rfkill just in case +2020-08-08 22:34:25 <-- semeion (~semeion@unaffiliated/semeion) has quit (Ping timeout: 240 seconds) +2020-08-08 22:35:03 --> cnsvc (~cnsvc@gateway/tor-sasl/cnsvc) has joined #archlinux +2020-08-08 22:36:12 --> mrbanie (~mrbanie@unaffiliated/mrbanie) has joined #archlinux +2020-08-08 22:36:30 --> semeion (~semeion@unaffiliated/semeion) has joined #archlinux +2020-08-08 22:37:43 _Warl0ck does anyone know how to do a subshell with fish? like: (command) +2020-08-08 22:38:16 _Warl0ck wal requires "(cat ~/.cache/wal/sequences &)" to be in your shell config, but fish doesn't support that syntax and I can't find an equivalent +2020-08-08 22:38:58 dreisner yo dawg, i heard you like subshells. +2020-08-08 22:39:09 --> ilhanraja (~ilhanraja@104.37.129.153) has joined #archlinux +2020-08-08 22:39:29 _Warl0ck you heard right +2020-08-08 22:39:36 dreisner can't see why you need the explicit ( ) subshell if you're backgrounding the thing... +2020-08-08 22:39:59 dreisner then again, i've no idea what "wal" is. +2020-08-08 22:40:08 NetSysFire there is also a fish channel +2020-08-08 22:40:10 _Warl0ck yeah the thing is removing the parens causes other isssues, it seems to spew character codes into the active shell session +2020-08-08 22:40:14 NetSysFire the official one is not on freenode though +2020-08-08 22:40:16 _Warl0ck I asked there, it's kinda dead +2020-08-08 22:40:24 bentglasstube nouveau drivers don't have the performance issues +2020-08-08 22:40:29 bentglasstube so I guess I'm sticking with them +2020-08-08 22:40:32 bentglasstube thanks for the suggestion +2020-08-08 22:40:46 dreisner ...but adding the subshell doesn't change that. +2020-08-08 22:40:51 dreisner FD inheritance is a thing. +2020-08-08 22:41:02 _Warl0ck dreisner: wal just applies a system wide colorscheme, and that line echoes the color chars +2020-08-08 22:41:19 dreisner and why does this have to be fish? +2020-08-08 22:41:27 <-- kaivai (~kaivai@104.158.156.144) has quit (Ping timeout: 265 seconds) +2020-08-08 22:41:32 dreisner isn't wal the one executing this? +2020-08-08 22:41:47 _Warl0ck because that's my every day shell, and fish needs to source the colors so each shell I open is themed +2020-08-08 22:41:56 _Warl0ck wal just creates the colorscheme itself +2020-08-08 22:42:16 _Warl0ck dreisner: removing the perens is directly responsible for this issue: https://github.com/liuchengxu/vista.vim/issues/297 +2020-08-08 22:42:17 bentglasstube nouveau seems to have some different problems not understanding left and right displays though +2020-08-08 22:42:18 phrik Title: [vista.vim] Fail to decode from JSON: · Issue #297 · liuchengxu/vista.vim · GitHub (at github.com) +2020-08-08 22:42:37 --> sevu (~sevu@x4d0d8e0b.dyn.telefonica.de) has joined #archlinux +2020-08-08 22:43:06 <-- mimiku (~mimiku@gateway/tor-sasl/mimiku) has quit (Quit: mimiku) +2020-08-08 22:43:06 <-- KeiraT (~k4ra@gateway/tor-sasl/k4ra) has quit (Quit: KeiraT) +2020-08-08 22:43:20 dreisner that makes even less sense +2020-08-08 22:43:40 bentglasstube wow, this is really strange. I used xrandr to arrange my displays correctly, but now if I click on something on the left monitor, it clicks in that position on the right monitor (and vice versa) +2020-08-08 22:43:56 _Warl0ck I never said it made sense dreisner, im confused as well +2020-08-08 22:44:02 --> largetni (largetni@gateway/vpn/privateinternetaccess/largetni) has joined #archlinux +2020-08-08 22:44:19 --> tatsumaru (~tatsumaru@87.227.201.106) has joined #archlinux +2020-08-08 22:44:19 dreisner now we're talking about bad json? because of a missing subshell? +2020-08-08 22:44:52 <-- zalt_ (~devp@unaffiliated/lambda443) has quit (Ping timeout: 256 seconds) +2020-08-08 22:45:08 _Warl0ck dreisner: I believe it's because the cat command throws some characters into the terminal to change its color, which it does, but for some reason they are not handled correctly and it interferes with other stuff +2020-08-08 22:45:17 Namarrgon bentglasstube: nouveau probably doesn't work too well on that gpu, brace for more bugs +2020-08-08 22:45:19 tatsumaru hey guys, my computer uses a usb printer that's connected to my mom's pc and is shared and this works fine I can print as expected. however I just installed xsane in order to use the scan function as well and when I start xsane it says - no devices found. how can I help xsane also detect the shared printer? +2020-08-08 22:45:21 dreisner yes, that's what cat does.... +2020-08-08 22:45:33 bentglasstube nouveau doesn't work, nvidia drivers don't work +2020-08-08 22:45:34 dreisner adding a subshell doesn't magically change where the output goes. +2020-08-08 22:45:36 bentglasstube what is this 1990 +2020-08-08 22:45:44 Namarrgon bentglasstube: this is nvidia +2020-08-08 22:45:53 _Warl0ck dreisner: https://github.com/liuchengxu/vista.vim/issues/297 +2020-08-08 22:45:55 phrik Title: [vista.vim] Fail to decode from JSON: · Issue #297 · liuchengxu/vista.vim · GitHub (at github.com) +2020-08-08 22:46:03 dreisner _Warl0ck: you already posted that +2020-08-08 22:46:05 _Warl0ck it says it "hides shell job control messages" +2020-08-08 22:46:11 bentglasstube I suppose I can just swap which ports the monitors are plugged into +2020-08-08 22:46:25 _Warl0ck whoops meant to paste https://github.com/dylanaraps/pywal/wiki/Getting-Started#applying-the-theme-to-new-terminals +2020-08-08 22:46:27 phrik Title: Getting Started · dylanaraps/pywal Wiki · GitHub (at github.com) +2020-08-08 22:46:31 dreisner does fish emit job control message? +2020-08-08 22:47:16 dreisner i'm not even sure why you need to background this. +2020-08-08 22:47:20 dreisner it's not a continuous stream. +2020-08-08 22:47:29 _Warl0ck Googling it returned no results. Knowing fish, they just call it something different +2020-08-08 22:47:32 <-- sahej (~sahej@103.208.70.146) has quit (Remote host closed the connection) +2020-08-08 22:47:52 _Warl0ck I think it's backgrounded so the shell isn't blocked for a few ms every time it starts +2020-08-08 22:48:01 dreisner a few ms!? how big is this file? +2020-08-08 22:48:15 dreisner should file a bug against wal so that it only reads stdout, not stdout and stderr. +2020-08-08 22:48:22 _Warl0ck I'm just going off the comment in that link: # Alternative (blocks terminal for 0-3ms) +2020-08-08 22:48:25 _Warl0ck cat ~/.cache/wal/sequences +2020-08-08 22:48:32 --> eoli3n (~eoli3n@pop.92-184-102-30.mobile.abo.orange.fr) has joined #archlinux +2020-08-08 22:49:15 dreisner 0ms is pretty short. 3ms is too. i doubt you'd actually notice it. +2020-08-08 22:50:19 _Warl0ck yeah, it is pretty short. Seems to remove the error for now +2020-08-08 22:50:34 dreisner im responsible for a ip geolocation service which has a 5ms SLA at about 20M QPS. if we fail the SLA we start losing money (thousands of dollars) every seconds. surely 3ms is tolerable for you to open a shell. +2020-08-08 22:50:45 _Warl0ck I would like to know how to do subshells in fish anyways. I use them ib my bash scripts all the time +2020-08-08 22:50:57 --> samantaz (~samantaz@lfbn-rou-1-143-136.w83-114.abo.wanadoo.fr) has joined #archlinux +2020-08-08 22:51:10 Namarrgon they don't have a channel on freenode? +2020-08-08 22:51:28 dreisner it's too fucked of a shell to offer such basic functionality: https://github.com/fish-shell/fish-shell/issues/1439 +2020-08-08 22:51:29 <-- ttyX (~ttyX@unaffiliated/ttyx) has quit (Quit: Leaving) +2020-08-08 22:51:32 phrik Title: Provide subshell like functionality · Issue #1439 · fish-shell/fish-shell · GitHub (at github.com) +2020-08-08 22:52:10 --> mimiku (~mimiku@gateway/tor-sasl/mimiku) has joined #archlinux +2020-08-08 22:52:15 --> KeiraT (~k4ra@gateway/tor-sasl/k4ra) has joined #archlinux +2020-08-08 22:52:16 _Warl0ck It's great for an everyday use shell, manpage completions, git integration, etc, but for anything complex and portable I just use bash +2020-08-08 22:52:21 tatsumaru any help with the xsane issue please? +2020-08-08 22:52:44 --> heat_ (~heat@sortix/contributor/heat) has joined #archlinux +2020-08-08 22:53:01 --> Szybet (b97f165f@gateway/web/cgi-irc/kiwiirc.com/ip.185.127.22.95) has joined #archlinux +2020-08-08 22:55:00 --> xulfer (uid452788@gateway/web/irccloud.com/x-mimtcsfurjcndwhu) has joined #archlinux +2020-08-08 22:55:17 --> halv (~halv@p200300d3c712cb00458bde521f41c34b.dip0.t-ipconnect.de) has joined #archlinux +2020-08-08 22:56:20 --> boottp (~boottp@2-235-73-104.ip227.fastwebnet.it) has joined #archlinux +2020-08-08 22:57:43 <-- boottp (~boottp@2-235-73-104.ip227.fastwebnet.it) has quit (Client Quit) +2020-08-08 22:58:44 _Warl0ck dreisner: scratch that, I am still getting the garbage json issue with the plain cat command. I think it just needs to be run in the background somehow +2020-08-08 22:59:04 <-- beelzebuzz (~rasputin@gateway/tor-sasl/beelzebuzz) has quit (Ping timeout: 240 seconds) +2020-08-08 22:59:13 dustvoice tatsumaru: Never tried scanning with my printer unfortunately O.o +2020-08-08 22:59:41 tatsumaru well it has a scanner in it +2020-08-08 22:59:51 sheep tatsumaru: what do you get from "pacman -Q linux" and "uname -r"? +2020-08-08 23:00:06 <-- halv (~halv@p200300d3c712cb00458bde521f41c34b.dip0.t-ipconnect.de) has quit (Client Quit) +2020-08-08 23:00:24 tatsumaru sheep, linux 5.7.12.arch1-1 and 5.7.12-arch1-1 +2020-08-08 23:00:29 dustvoice Sorry for sounding sarcastic. My printer has a scanner included too. I really didn't try scanning. I don't know how I navigated around that to be perfectly honest. So really O.o +2020-08-08 23:00:43 sheep so it's not an issue with a kernel mismatch +2020-08-08 23:00:55 <-- ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has left #archlinux +2020-08-08 23:00:55 <-- billybigrigger (~billybigr@S0106000c292e42fd.cg.shawcable.net) has quit (Quit: The Lounge - https://thelounge.chat) +2020-08-08 23:01:01 tatsumaru my mom's pc also has arch with the latest updates and the printer/scanner works fine there with xsane +2020-08-08 23:01:15 sheep are sane-airscan and ipp-usb installed? +2020-08-08 23:01:55 --> kernschrott (~kernschro@p57917920.dip0.t-ipconnect.de) has joined #archlinux +2020-08-08 23:02:03 tatsumaru sheep, no +2020-08-08 23:02:18 --> Ruuchan (~Ruuchan@unaffiliated/ruuchan) has joined #archlinux +2020-08-08 23:03:46 tatsumaru maybe I need to share the scanner separately from the printer even though they are the same device? +2020-08-08 23:03:56 sheep install sane-airscan and ipp-usb +2020-08-08 23:04:07 tatsumaru sheep, installed them, now? +2020-08-08 23:04:32 sheep systemctl daemon-reload; systemctl enable --now ipp-usb +2020-08-08 23:04:44 --> ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has joined #archlinux +2020-08-08 23:04:58 --> Ruuchan_ (~Ruuchan@unaffiliated/ruuchan) has joined #archlinux +2020-08-08 23:05:11 --> ttyX (~ttyX@unaffiliated/ttyx) has joined #archlinux +2020-08-08 23:05:13 <-- Ar|stote|is (~quassel@2a02:587:9a03:661f:d8f8:f8ff:febf:1da6) has quit (Ping timeout: 260 seconds) +2020-08-08 23:05:26 --> boottp_ (~boottp@2-235-73-104.ip227.fastwebnet.it) has joined #archlinux +2020-08-08 23:05:31 --> beelzebuzz (~rasputin@gateway/tor-sasl/beelzebuzz) has joined #archlinux +2020-08-08 23:05:56 <-- boottp_ (~boottp@2-235-73-104.ip227.fastwebnet.it) has quit (Remote host closed the connection) +2020-08-08 23:05:58 --> GI_Jack (~GI_Jack@pdpc/supporter/active/gi-jack) has joined #archlinux +2020-08-08 23:06:12 tatsumaru sheep, https://dpaste.org/YG1e +2020-08-08 23:06:14 phrik Title: dpaste/YG1e (Bash) (at dpaste.org) +2020-08-08 23:06:24 sheep ignore that +2020-08-08 23:06:25 <-- Ruuchan (~Ruuchan@unaffiliated/ruuchan) has quit (Ping timeout: 240 seconds) +2020-08-08 23:06:43 sheep it might be a service that is activated on demand by dbus +2020-08-08 23:06:48 sheep now try using xsane again +2020-08-08 23:06:54 <-- Szybet (b97f165f@gateway/web/cgi-irc/kiwiirc.com/ip.185.127.22.95) has quit (Quit: Connection closed) +2020-08-08 23:07:14 tatsumaru nope, still can't find the scanner +2020-08-08 23:07:29 sheep does lsusb find the scanner? +2020-08-08 23:07:32 --> boottp (~boottp@2-235-73-104.ip227.fastwebnet.it) has joined #archlinux +2020-08-08 23:07:58 <-- kernschrott (~kernschro@p57917920.dip0.t-ipconnect.de) has quit (Ping timeout: 260 seconds) +2020-08-08 23:08:00 tatsumaru well it's not connected to this PC so should it? +2020-08-08 23:08:02 <-- binTrl_ (~binaryTra@47.29.106.122) has quit (Ping timeout: 265 seconds) +2020-08-08 23:08:10 --> kernschrott (~kernschro@x4e301927.dyn.telefonica.de) has joined #archlinux +2020-08-08 23:08:16 sheep you said it was a usb scanner, right? +2020-08-08 23:08:28 sheep oh wait +2020-08-08 23:08:30 tatsumaru yeah but it's connect to my mom's pc and my mom's pc is sharing the printer with my pc +2020-08-08 23:08:38 sheep what protocol is that PC using to share the scanner? +2020-08-08 23:08:44 tatsumaru ipp +2020-08-08 23:09:15 sheep is saned sharing it? +2020-08-08 23:09:43 --> agregory (~agregory@c-98-207-137-206.hsd1.ca.comcast.net) has joined #archlinux +2020-08-08 23:09:45 tatsumaru not sure what you mean +2020-08-08 23:09:45 --> binTrl (~binaryTra@47.29.106.122) has joined #archlinux +2020-08-08 23:09:53 tatsumaru I used cups to share it +2020-08-08 23:10:01 <-- linux_dream (~isaac@unaffiliated/linux-dream/x-5839402) has quit (Quit: WeeChat 2.9) +2020-08-08 23:10:24 sheep I think cups would only share the printer function +2020-08-08 23:10:44 sheep try something like https://wiki.archlinux.org/index.php/SANE#Sharing_your_scanner_over_a_network +2020-08-08 23:10:45 phrik Title: SANE - ArchWiki (at wiki.archlinux.org) +2020-08-08 23:12:33 --> pnd (~un@104.221.66.247) has joined #archlinux +2020-08-08 23:13:19 --> pardoides (xfnw@gateway/shell/tilde.team/x-vkgqjydhrezactzj) has joined #archlinux +2020-08-08 23:13:26 <-- pardoides (xfnw@gateway/shell/tilde.team/x-vkgqjydhrezactzj) has left #archlinux +2020-08-08 23:13:42 --> Szadek (~Szadek@185.213.155.168) has joined #archlinux +2020-08-08 23:17:08 <-- ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has left #archlinux +2020-08-08 23:17:21 --> ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has joined #archlinux +2020-08-08 23:18:36 <-- ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has left #archlinux +2020-08-08 23:18:40 tatsumaru sheep, this worked, thanks a lot ! :) +2020-08-08 23:19:03 --> Szybet (b97f165f@gateway/web/cgi-irc/kiwiirc.com/ip.185.127.22.95) has joined #archlinux +2020-08-08 23:19:13 --> ShadowKyogre (~ShadowKyo@unaffiliated/shadowkyogre) has joined #archlinux +2020-08-08 23:21:01 <-- tatsumaru (~tatsumaru@87.227.201.106) has left #archlinux +2020-08-08 23:22:50 <-- mariuszskon_ (~mariuszsk@103.107.198.100) has quit (Ping timeout: 256 seconds) +2020-08-08 23:23:40 <-- Megver83 (~Icedove@pc-88-170-100-190.cm.vtr.net) has quit (Quit: Megver83) +2020-08-08 23:23:44 --> Kilroo (~Kilroo@71.71.105.78) has joined #archlinux +2020-08-08 23:23:53 <-- frostschutz (~frostschu@55d40828.access.ecotel.net) has quit (Remote host closed the connection) +2020-08-08 23:23:59 --> Megver83 (~Icedove@pc-88-170-100-190.cm.vtr.net) has joined #archlinux +2020-08-08 23:24:32 --> mariuszskon_ (~mariuszsk@103.107.198.100) has joined #archlinux +2020-08-08 23:25:26 --> incentive (~rbatty@unaffiliated/incentive) has joined #archlinux +2020-08-08 23:25:40 <-- vuoto (~vuoto@80.71.142.174) has quit (Quit: WeeChat 2.9-dev) +2020-08-08 23:26:37 <-- xdarklight (~freenode@unaffiliated/xdarklight) has quit (Quit: ZNC - http://znc.in) +2020-08-08 23:26:55 <-- myr463 (~myr463@2a01:cb11:20:5700:9eeb:e8ff:fec4:afbf) has quit (Quit: myr463) +2020-08-08 23:28:10 <-- gffa (~unknown@unaffiliated/gffa) has quit (Quit: sleep) +2020-08-08 23:29:42 j0hannes NetSysFire: it's an Intel 8265/8275, rfkill doesn't report any blocking +2020-08-08 23:30:05 --> xdarklight (~freenode@unaffiliated/xdarklight) has joined #archlinux +2020-08-08 23:31:29 dustvoice The mighty ArchWiki strikes again I see. Truly a holy pool of knowledge. Never ceases to impress +2020-08-08 23:36:07 <-- edlou (uid413273@gateway/web/irccloud.com/x-qzjwcxojxigavqfv) has quit (Quit: Connection closed for inactivity) +2020-08-08 23:36:10 <-- xdarklight (~freenode@unaffiliated/xdarklight) has quit (Quit: ZNC - http://znc.in) +2020-08-08 23:37:07 <-- Megver83 (~Icedove@pc-88-170-100-190.cm.vtr.net) has quit (Quit: Megver83) +2020-08-08 23:37:31 --> Megver83 (~Icedove@pc-88-170-100-190.cm.vtr.net) has joined #archlinux +2020-08-08 23:37:49 <-- heat_ (~heat@sortix/contributor/heat) has quit (Remote host closed the connection) +2020-08-08 23:38:06 --> xdarklight (~freenode@unaffiliated/xdarklight) has joined #archlinux +2020-08-08 23:38:22 --> heat (~heat@sortix/contributor/heat) has joined #archlinux +2020-08-08 23:38:54 <-- kalbasit (~kalbasit@unaffiliated/kalbasit) has quit (Remote host closed the connection) +2020-08-08 23:40:59 <-- leonjza (~user@unaffiliated/leonjza) has quit (Ping timeout: 240 seconds) +2020-08-08 23:41:00 <-- sorcus (~sorcus@2a01:7e01:e002:8ffc:caf2:ef3d:542:bc0e) has quit (Ping timeout: 246 seconds) +2020-08-08 23:41:08 --> shiki (~sevu@2a01:c22:a851:7b00:781d:24ff:fed2:5c17) has joined #archlinux +2020-08-08 23:42:50 <-- eoli3n (~eoli3n@pop.92-184-102-30.mobile.abo.orange.fr) has quit (Ping timeout: 265 seconds) +2020-08-08 23:43:27 --> lesterknome_ (~lesterkno@c-24-125-54-168.hsd1.ga.comcast.net) has joined #archlinux +2020-08-08 23:43:34 <-- sevu (~sevu@x4d0d8e0b.dyn.telefonica.de) has quit (Ping timeout: 256 seconds) +2020-08-08 23:45:50 <-- lesterknome (~lesterkno@196.247.50.108) has quit (Ping timeout: 256 seconds) +2020-08-08 23:46:01 <-- MarcinWieczorek (~marcin@afoe197.neoplus.adsl.tpnet.pl) has quit (Quit: ZNC 1.7.5 - https://znc.in) +2020-08-08 23:46:24 --> danielrparks (~danielrpa@2600:1700:3f7b:200::25) has joined #archlinux +2020-08-08 23:48:41 <-- Volgaar (~volgaar@alyon-652-1-189-82.w109-213.abo.wanadoo.fr) has quit (Ping timeout: 256 seconds) +2020-08-08 23:49:39 dreisner _Warl0ck: still makes no sense if you understand shells, *and* it contradicts the manual you linked. +2020-08-08 23:50:20 dreisner _Warl0ck: the rational explanation at this point would either be: appear to be a syntax error or some (further) absurdity of fish. +2020-08-08 23:50:41 bentglasstube does anyone know what packages are required to get ardour's general midi plugin to work? +2020-08-08 23:51:28 bentglasstube I got it to work by installing all of pro-audio but that seems a bit heavy handed +2020-08-08 23:52:23 dustvoice Gotta admit, this kind of stuff was why I dropped fish and switched to zsh. +2020-08-08 23:52:40 NetSysFire i like using zsh but i use bash for all my scripts +2020-08-08 23:53:23 danielrparks that's how I bet I would too. I've been using bash for way too long to not use its syntax +2020-08-08 23:53:42 <-- clone11 (~clone@072-189-253-117.res.spectrum.com) has quit (Read error: Connection reset by peer) +2020-08-08 23:54:05 dustvoice I have no problem with a different syntax. But it would be nice if it was a complete and coherent syntax instead of random shit like this +2020-08-08 23:54:47 danielrparks I actually missed it, but I can imagine, there's some pretty weird stuff in shell syntax +2020-08-08 23:54:54 --> Raptor_Mayhem (~bckempa@173-25-175-1.client.mchsi.com) has joined #archlinux +2020-08-08 23:55:11 <-- Raptor_Mayhem (~bckempa@173-25-175-1.client.mchsi.com) has quit (Client Quit) +2020-08-08 23:55:18 --> Szadek_ (~Szadek@185.213.155.164) has joined #archlinux +2020-08-08 23:55:42 --> wrycode (~user@cpe-98-26-105-140.nc.res.rr.com) has joined #archlinux +2020-08-08 23:55:51 dustvoice I use bash for scripts, bc of compatibility and stuff too. But zsh with autocompletion and oh-my-zsh shenanigans is the closest I got to fish's autocompletion which I have to admit is very good. +2020-08-08 23:56:27 <-- ilhanraja (~ilhanraja@104.37.129.153) has quit (Quit: My MacBook has gone to sleep. ZZZzzz…) +2020-08-08 23:56:59 --> ilhanraja (~ilhanraja@104.37.129.153) has joined #archlinux +2020-08-08 23:57:10 <-- Szadek (~Szadek@185.213.155.168) has quit (Ping timeout: 256 seconds) +2020-08-09 00:01:05 --> sudoforge (~sudoforge@cpepool8acmts1-40.sanbrunocable.com) has joined #archlinux +2020-08-09 00:01:08 <-- Szadek_ (~Szadek@185.213.155.164) has quit (Quit: WeeChat 2.9) +2020-08-09 00:01:39 <-- stoopkid (uid137696@gateway/web/irccloud.com/x-ovoenamfruuvvzfa) has quit (Quit: Connection closed for inactivity) +2020-08-09 00:01:40 mefistofeles dustvoice: I recommend dropping oh-my-zsh and using something like spaceship or starship +2020-08-09 00:01:43 mefistofeles :P +2020-08-09 00:01:46 mefistofeles you will never look back +2020-08-09 00:02:06 danielrparks noted for when I eventually switch to zsh +2020-08-09 00:02:56 <-- ramses (~ramses@nat-35.starnet.cz) has quit (Quit: ramses) +2020-08-09 00:03:26 NetSysFire i made my zshrc myself. 4/10 would not recommend. i still dont understand all the completion options +2020-08-09 00:03:28 dustvoice mefistofeles: O.o so... you... tell me that my completely individually crafted and configured, finally working zsh is not worthy enough >.> Guess I'll check this Star Wars shit out. You surely are the devil +2020-08-09 00:03:38 --> billybigrigger (~billybigr@S0106000c292e42fd.cg.shawcable.net) has joined #archlinux +2020-08-09 00:03:58 mefistofeles dustvoice: oh, maybe it is enough :) +2020-08-09 00:04:11 <-- pinpox (~pinpox@xdsl-87-79-223-244.nc.de) has quit (Ping timeout: 240 seconds) +2020-08-09 00:04:17 mefistofeles but oh-my-zsh is known for being slow, but if you have fiddle with it enough it may be good already +2020-08-09 00:04:28 <-- shiki (~sevu@2a01:c22:a851:7b00:781d:24ff:fed2:5c17) has quit (Ping timeout: 244 seconds) +2020-08-09 00:05:52 --> pinpox (~pinpox@xdsl-78-34-240-220.nc.de) has joined #archlinux +2020-08-09 00:08:09 --> leonjza (~user@unaffiliated/leonjza) has joined #archlinux +2020-08-09 00:09:02 --> sevu (~sevu@2a01:c23:6446:d800:781d:24ff:fed2:5c17) has joined #archlinux +2020-08-09 00:09:06 <-- ilhanraja (~ilhanraja@104.37.129.153) has quit (Quit: My MacBook has gone to sleep. ZZZzzz…) +2020-08-09 00:10:43 dustvoice Well it's alright. This is the rabbit hole of arch. Optimizing and tweaking all the time. And when you FINALLY think you FINALLY have it... BOOM something new enters the room... I tweak my dotfiles all the time. Especially since I'm trying to vim-bind everything. Ironically I'm also in the search for another IRC Client while typing this in WeeChat. The gods have no mercy +2020-08-09 00:10:43 <-- martian67 (~martian67@about/linux/regular/martian67) has quit (Ping timeout: 240 seconds) +2020-08-09 00:11:36 NetSysFire customizing things is fine. you are optimizing your machine for yourself basically. i recommend to automate your dotfile deployment and similar tasks +2020-08-09 00:13:15 <-- sevu (~sevu@2a01:c23:6446:d800:781d:24ff:fed2:5c17) has quit (Ping timeout: 244 seconds) +2020-08-09 00:13:38 --> martian67 (~martian67@about/linux/regular/martian67) has joined #archlinux +2020-08-09 00:13:51 --> sevu (~sevu@2a01:c22:3457:ae00:781d:24ff:fed2:5c17) has joined #archlinux +2020-08-09 00:13:56 <-- fweht (uid404746@gateway/web/irccloud.com/x-lwjaphdrpnykbaks) has quit (Quit: Connection closed for inactivity) +2020-08-09 00:14:29 dustvoice Well I've basically got a dotfiles repo with submodules that I can simply clone into my home and I'm ready to go. For everything else I've got a custom guide, which I'm knowing by heart by now. Automated dotfile deployment never kind of met all my expectations, so I'd rather do things manually +2020-08-09 00:14:47 --> darkstardevx (~darkstard@2601:1c2:300:c8a0::da15) has joined #archlinux +2020-08-09 00:15:25 --> emptiedsoul (~emptiedso@109.225.40.181) has joined #archlinux +2020-08-09 00:15:58 NetSysFire personally i hate settings things up manually. i dont trust my hands anymore, there will be typos. it will save me some time, especially because typos are frustrating and hard to debug +2020-08-09 00:16:56 <-- emptiedsoul (~emptiedso@109.225.40.181) has quit (Quit: WeeChat 2.9) +2020-08-09 00:17:04 danielrparks I love setting things up, but I agree typos can be little demons that come to bite you later +2020-08-09 00:17:33 dustvoice well, new install, git init, set remote with upstream and pull. And I'm off to a great start +2020-08-09 00:17:50 dustvoice well not entirely... git submodule update --recursive --init helps too +2020-08-09 00:18:04 <-- Szybet (b97f165f@gateway/web/cgi-irc/kiwiirc.com/ip.185.127.22.95) has quit (Quit: Connection closed) +2020-08-09 00:18:24 dustvoice And a smartcard, to have my keys. Portable af ':] +2020-08-09 00:18:45 <-- Carduus (~Carduus@pc199.phh.uni-kiel.de) has quit (Ping timeout: 240 seconds) +2020-08-09 00:19:17 <-- nkuld4 (~nkuld4@2601:447:8100:ce0:af7a:1c40:84f8:e6f7) has quit (Ping timeout: 260 seconds) +2020-08-09 00:19:57 --> zuntik (~thomas@2001:8a0:7f61:a300:2004:2f84:c7cc:e585) has joined #archlinux +2020-08-09 00:20:03 zuntik hieelo. +2020-08-09 00:20:07 NetSysFire !give zuntik welcome +2020-08-09 00:20:07 zuntik *Hello +2020-08-09 00:20:08 phrik zuntik: Welcome to #archlinux, tell us how you fucked up. +2020-08-09 00:20:32 zuntik haha thanks phrik +2020-08-09 00:20:34 NetSysFire i have a ton of custom stuff. selfmade conky widgets, hacky scripts and ugly configs. it would take me a long time to deploy them +2020-08-09 00:20:38 NetSysFire !give zuntik bot +2020-08-09 00:20:39 phrik zuntik: I'm a bot! ~does the binary solo~ 00001 000011 0000111 +2020-08-09 00:20:54 --> ilhanraja (~ilhanraja@104.37.129.153) has joined #archlinux +2020-08-09 00:21:07 --> nessonic (~nessonic@2601:247:c480:24e0::98dc) has joined #archlinux +2020-08-09 00:21:17 <-- desmu (~desmu@2a02:908:391:8260:3c1:9333:2bd5:4202) has quit (Remote host closed the connection) +2020-08-09 00:21:22 zuntik I have a question about fstab: I'm runnig archlinuxarm on my raspberrypi 4 +2020-08-09 00:21:31 NetSysFire !alarm +2020-08-09 00:21:32 phrik If you're here because of an issue with your Raspberry Pi or other ARM device, join #archlinux-arm. +2020-08-09 00:21:32 <-- rileyreid (~ugjka@m90-139-71-66.cust.tele2.lv) has quit (Ping timeout: 256 seconds) +2020-08-09 00:21:44 dustvoice I love that alarm xD +2020-08-09 00:21:47 zuntik ah nothing wrong with the pi +2020-08-09 00:21:58 Scimmia of course not +2020-08-09 00:22:14 Scimmia Arch just doesn't run on it, it's x86_64 only +2020-08-09 00:22:22 zuntik I just don't understand why the root partition is not listed in fstab +2020-08-09 00:22:27 zuntik only the boot partition +2020-08-09 00:22:35 zuntik that's all I want to know +2020-08-09 00:22:48 zuntik fstab has only one entry +2020-08-09 00:22:52 zuntik why is this? +2020-08-09 00:23:00 dustvoice Well you could always make your own entry? +2020-08-09 00:23:06 Scimmia ask your distro, since they're the ones that set it up +2020-08-09 00:23:12 <-- HuntsMan (~hunts@unaffiliated/huntsman) has quit (Quit: Konversation terminated!) +2020-08-09 00:23:16 danielrparks you're probably using the root= command-line argument to tell the kernel where the root filesystem is, so you don't need it in fstab? +2020-08-09 00:23:33 --> mluser-home (~mluser-ho@cpe-107-11-253-108.columbus.res.rr.com) has joined #archlinux +2020-08-09 00:23:40 NetSysFire !notarch +2020-08-09 00:23:41 phrik This channel is for Arch Linux support only. Also see https://wiki.archlinux.org/index.php/Code_of_conduct#Arch_Linux_distribution_support_.2Aonly.2A +2020-08-09 00:23:43 dustvoice It's not that we don't wonna help, it's just that with custom distros, in this case archlinux-arm do custom stuff +2020-08-09 00:24:11 dustvoice So we don't know what special quirks archlinux-arm might have cause we run x86_64 +2020-08-09 00:24:45 --> andril (~andril@2601:586:8400:a:488e:8cac:da17:904) has joined #archlinux +2020-08-09 00:24:56 <-- mluser-home (~mluser-ho@cpe-107-11-253-108.columbus.res.rr.com) has quit (Read error: Connection reset by peer) +2020-08-09 00:25:04 zuntik yes yes. I understand. I asked here because I expected the question to be general. I think the reply I got here is satisfactory: the bootloader booted it +2020-08-09 00:25:14 zuntik I just want to make sure that if I add my own entry there +2020-08-09 00:25:21 zuntik it will mount +2020-08-09 00:25:28 --> HuntsMan (~hunts@unaffiliated/huntsman) has joined #archlinux +2020-08-09 00:25:35 zuntik I'll ask the other channel then. thank you! +2020-08-09 00:26:13 dustvoice Yes. If you really need it, making an fstab entry is pretty easy +2020-08-09 00:26:14 --> mluser-home (~mluser-ho@cpe-107-11-253-108.columbus.res.rr.com) has joined #archlinux +2020-08-09 00:27:11 dustvoice You will have to do it many more times probably while running arch 'xO +2020-08-09 00:27:19 <-- Al3v (~arch@85-76-145-47-nat.elisa-mobile.fi) has quit (Quit: Leaving) +2020-08-09 00:27:26 zuntik dustvoice: I want to boot 2 partitions that are on a huge external hard drive: one that is exfat and the other will be btrfs (necessary packages are installed) +2020-08-09 00:27:43 zuntik auto mount I should say +2020-08-09 00:28:24 <-- aw1 (~aw1@unaffiliated/aw1) has quit (Quit: Leaving) +2020-08-09 00:28:27 zuntik thank you all! +2020-08-09 00:29:17 <-- purist (~purist@gateway/tor-sasl/purist) has quit (Remote host closed the connection) +2020-08-09 00:29:37 <-- alexherbo2 (~alexherbo@lmontsouris-659-1-2-186.w193-248.abo.wanadoo.fr) has quit (Ping timeout: 264 seconds) +2020-08-09 00:30:03 --> purist (~purist@gateway/tor-sasl/purist) has joined #archlinux +2020-08-09 00:32:11 <-- danielrparks (~danielrpa@2600:1700:3f7b:200::25) has quit (Quit: Leaving) +2020-08-09 00:32:17 j0hannes I still can't find any reason why my wifi isnt't working anymore; journalctl says rfkill1: found Wi-Fi radio killswitch, what does that mean? +2020-08-09 00:33:13 binTrl I'm getting "Cannot create atjob file /var/spool/atd/a0000601961f3a: Permission denied" while running at, /var/spool : http://ix.io/2tC8 any idea what's wrong ? +2020-08-09 00:33:37 --> ttyX_ (~ttyX@unaffiliated/ttyx) has joined #archlinux +2020-08-09 00:33:41 NetSysFire j0hannes: do you have a hw switch which toggles your wifi? also rfkill list +2020-08-09 00:33:52 dustvoice j0hannes: The message you posted shouldn't be the most unusual. +2020-08-09 00:34:33 <-- pnd (~un@104.221.66.247) has quit (Ping timeout: 265 seconds) +2020-08-09 00:34:44 NetSysFire they asked the question a few hours ago, i told them to do the rfkill stuff and to search for any relevant buttons that may do things +2020-08-09 00:35:06 NetSysFire what device is this? +2020-08-09 00:35:56 <-- ttyX (~ttyX@unaffiliated/ttyx) has quit (Ping timeout: 256 seconds) +2020-08-09 20:35:21 --> dustvoice (~dustvoice@89-201-184-177.dsl.optinet.hr) has joined #archlinux +2020-08-09 20:35:21 -- Topic for #archlinux is "Welcome to Arch Linux, Good Luck: https://archlinux.org | Rules: https://goo.gl/XWFreH | Pastebins: see !paste | status.archlinux.org | Installing? New `base` package; read the install guide carefully" +2020-08-09 20:35:21 -- Topic set by phrik (~phrik@archlinux/bot/phrik) on Fri, 24 Jul 2020 22:12:54 +2020-08-09 20:35:21 -- Channel #archlinux: 1725 nicks (2 ops, 0 voices, 1723 normals) +2020-08-09 20:35:24 -- Channel created on Sun, 15 Feb 2004 06:08:31 diff --git a/.weechat/logs/irc.freenode.#latex.weechatlog b/.weechat/logs/irc.freenode.#latex.weechatlog new file mode 100644 index 0000000..d7d2030 --- /dev/null +++ b/.weechat/logs/irc.freenode.#latex.weechatlog @@ -0,0 +1,48 @@ +2020-05-17 11:59:51 --> dustvoice (~dustvoice@200116b82055020098f1e36c648e2070.dip.versatel-1u1.de) has joined #latex +2020-05-17 11:59:51 -- Topic for #latex is "Please provide a minimal working example | FAQ: http://texfaq.org | Ask donald-bot about ,,lshort | For previews, ask donald-bot about ,,texbot | listings package for source code. Due to spam only registered users can speak" +2020-05-17 11:59:51 -- Topic set by mh_le (~Mads@unaffiliated/mhle/x-0173978) on Thu, 27 Feb 2020 19:38:49 +2020-05-17 11:59:51 -- Channel #latex: 268 nicks (1 op, 0 voices, 267 normals) +2020-05-17 11:59:51 -- PvNotice(ChanServ): Hi and Welcome to #LaTeX! Before you ask, please read the FAQ at http://faq.tug.org and the documentation at http://www.tug.org/begin.html +2020-05-17 11:59:53 -- Channel created on Sun, 26 Nov 2006 07:42:42 +2020-05-17 12:08:15 dustvoice Hope this is the right place to ask. I'm currently pretty happy with my latex document but one thing is really annoying me and I can't seem to find a solution on the internet. \texttt, as well as \mintedinline don't seem to do linebreaks correctly. The generated PDF can be found under https://git.dustvoice.de/DustVoice/DustArch/raw/branch/master/latex/Documentation.pdf. On page 26 an example of a +2020-05-17 12:08:15 dustvoice non occuring but needed linebreak in \mintedinline can be seen, on page 27 an example for \texttt. The source code can be found under https://git.dustvoice.de/DustVoice/DustArch/src/branch/master/latex/Documentation.tex with the page 26 example being on line 739 and the page 27 one on line 757. I would love to resolve this last issue I can't seem to get working. I am compiling using xelatex. Thanks +2020-05-17 12:08:15 dustvoice in advace +2020-05-17 12:08:51 dustvoice EDIT: Sorry its \mintinline not \mintedinline +2020-05-17 12:16:45 hrnz btw I use arch +2020-05-17 12:19:03 hrnz anyway, font selection does not change hyphenation, but I wouldn't know how to hyphenate /usr/share/zoneinfo either +2020-05-17 12:19:22 hrnz I don't know whether \mintinline is breakable but it's probably in the manual +2020-05-17 12:20:39 hrnz you can propose possible hyphenation points like this: /usr/\-share/\-zone\-info +2020-05-17 12:20:45 hrnz but seriously, don't break that. +2020-05-17 12:24:52 dustvoice Yeah thought about that too, but would it be possible somehow, to make latex put 'too long' texttt lines on the next line or smth? +2020-05-17 12:24:55 <-- Logical-Boysenbe (~Thunderbi@net-2-37-185-98.cust.vodafonedsl.it) has quit (Quit: Logical-Boysenbe) +2020-05-17 12:25:24 dustvoice Cause if I have to handle all those things manually, I feel more like working in Word than LaTeX +2020-05-17 12:27:03 dustvoice I also tried enabling an option of the 'hyphenat' package, but it just lead to a situation where half of the texttt worked like intended and the other half didn't +2020-05-17 12:27:12 dustvoice Thanks btw for the fast response +2020-05-17 12:27:40 hrnz \texttt just sets its argument in the tt font. +2020-05-17 12:28:35 dustvoice ah I see. Well how would one resolve such an issue in the LaTeX world ':) +2020-05-17 12:28:51 dustvoice Hyphenation really does seem to be a bad idea +2020-05-17 12:29:11 dustvoice but I don't know if a linebreak before such a long texttt would make sense either +2020-05-17 12:29:58 dustvoice In addition to it not being automatic. Or is there a way to make LaTeX break before the texttt automatically if it's "too long" +2020-05-17 12:30:16 dustvoice I'm lost x_X +2020-05-17 12:33:44 dustvoice Yeah I understand it now. Wouldn't work either if it wasn' +2020-05-17 12:33:48 dustvoice t in tt fon +2020-05-17 12:33:53 dustvoice *font +2020-05-17 12:35:05 dustvoice But the question still stands as to how one would normally resolve such an issue. Linebreak before the non-hyphenatable word would still be the most reasonable way to do it in my opinion, but I might be completely wrong... +2020-05-17 12:41:12 --> linux_dream (~isaac@unaffiliated/linux-dream/x-5839402) has joined #latex +2020-05-17 12:46:32 <-- sagax (~sagax_nb@213.138.71.146) has quit (Remote host closed the connection) +2020-05-17 12:48:24 --> greedom (~greedom@2001:16b8:2e72:df00:add6:6775:6cee:d440) has joined #latex +2020-05-17 12:59:50 dustvoice Alright so I tried using \allowbreak{} to allow a linebreak to occur within /usr/share/zoneinfo (/usr/\allowbreak{}share/\allowbreak{}zoneinfo) and it works ... kind of ... Cause one line below it, it looks ugly af. It breaks the word, but so "late" that it still overfills the line +2020-05-17 13:00:49 dustvoice See https://git.dustvoice.de/DustVoice/DustArch/raw/branch/master/latex/Documentation.pdf page 27 for the problem again. +2020-05-17 13:01:41 dustvoice And https://git.dustvoice.de/DustVoice/DustArch/src/branch/master/latex/Documentation.tex line 754 for the source +2020-05-17 13:01:55 dustvoice Thanks again for the help. Really appreciate it +2020-05-17 13:54:47 <-- jkwnki (~jkwnki@p200300CD472B60001E1BB5FFFE7A47F7.dip0.t-ipconnect.de) has quit (Ping timeout: 260 seconds) +2020-05-17 14:01:09 --> barteks2x (~barteks2x@c137-123.icpnet.pl) has joined #latex +2020-05-17 14:01:15 <-- linux_dream (~isaac@unaffiliated/linux-dream/x-5839402) has quit (Quit: WeeChat 2.8) +2020-05-17 14:03:12 <-- aliss (~ypm@238.red-88-22-57.staticip.rima-tde.net) has quit (Quit: WeeChat 2.8) +2020-05-17 14:03:41 --> aliss (~ypm@238.red-88-22-57.staticip.rima-tde.net) has joined #latex +2020-05-17 14:52:27 dustvoice exit +2020-05-17 14:52:32 dustvoice oops +2020-05-17 14:52:37 dustvoice \leave +2020-05-17 14:53:21 --> jkwnki (~jkwnki@p200300CD472B60001E1BB5FFFE7A47F7.dip0.t-ipconnect.de) has joined #latex +2020-05-17 14:53:27 <-- dustvoice (~dustvoice@200116b82055020098f1e36c648e2070.dip.versatel-1u1.de) has left #latex ("WeeChat 2.8") +2020-05-17 14:53:31 -- irc: disconnected from server diff --git a/.weechat/logs/irc.server.freenode.weechatlog b/.weechat/logs/irc.server.freenode.weechatlog new file mode 100644 index 0000000..71afb6e --- /dev/null +++ b/.weechat/logs/irc.server.freenode.weechatlog @@ -0,0 +1,528 @@ +2020-01-29 20:18:46 -- irc: connecting to server irc.freenode.net/6667... +2020-01-29 20:18:46 -- irc: connected to irc.freenode.net/6667 (2600:3c02::f03c:91ff:fe59:7d2e) +2020-01-29 20:18:46 -- moon.freenode.net: *** Looking up your hostname... +2020-01-29 20:18:46 -- moon.freenode.net: *** Checking Ident +2020-01-29 20:18:46 -- moon.freenode.net: *** Couldn't look up your hostname +2020-01-29 20:18:55 -- moon.freenode.net: *** No Ident response +2020-01-29 20:18:55 -- Welcome to the freenode Internet Relay Chat Network dustvoice +2020-01-29 20:18:55 -- Your host is moon.freenode.net[2600:3c02::f03c:91ff:fe59:7d2e/6667], running version ircd-seven-1.1.9 +2020-01-29 20:18:55 -- This server was created Thu Dec 19 2019 at 20:29:30 UTC +2020-01-29 20:18:55 -- moon.freenode.net ircd-seven-1.1.9 DOQRSZaghilopsuwz CFILMPQSbcefgijklmnopqrstuvz bkloveqjfI +2020-01-29 20:18:55 -- CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstuz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode STATUSMSG=@+ CALLERID=g CASEMAPPING=rfc1459 :are supported by this server +2020-01-29 20:18:55 -- CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 DEAF=D FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,ajrxz CLIENTVER=3.0 SAFELIST ELIST=CTU CPRIVMSG :are supported by this server +2020-01-29 20:18:55 -- CNOTICE WHOX ETRACE KNOCK :are supported by this server +2020-01-29 20:18:55 -- There are 103 users and 86883 invisible on 30 servers +2020-01-29 20:18:55 -- 33 :IRC Operators online +2020-01-29 20:18:55 -- 5 :unknown connection(s) +2020-01-29 20:18:55 -- 51395 :channels formed +2020-01-29 20:18:55 -- I have 6103 clients and 1 servers +2020-01-29 20:18:55 -- 6103 6267 :Current local users 6103, max 6267 +2020-01-29 20:18:55 -- 86986 87738 :Current global users 86986, max 87738 +2020-01-29 20:18:55 -- Highest connection count: 6268 (6267 clients) (195915 connections received) +2020-01-29 20:18:55 -- - moon.freenode.net Message of the Day - +2020-01-29 20:18:55 -- - Welcome to moon.freenode.net in Atlanta, GA, US! Thanks to +2020-01-29 20:18:55 -- - Linode for sponsoring this server! +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - MOON, ELIZABETH (1945-) Born in South Texas, USA, +2020-01-29 20:18:55 -- - Elizabeth Moon is an American science fiction and fantasy +2020-01-29 20:18:55 -- - author with over 20 published works. Her novel The Speed +2020-01-29 20:18:55 -- - Of Dark received the Arthur C. Clarke and Nebula Awards in 2003 +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - Welcome to freenode - supporting the free and open source +2020-01-29 20:18:55 -- - software communities since 1998. +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - By connecting to freenode you indicate that you have read and +2020-01-29 20:18:55 -- - accept our policies and guidelines as set out on https://freenode.net +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - In the event that you observe behaviour that contravenes our policies, +2020-01-29 20:18:55 -- - please notify a volunteer staff member via private message, or send us an +2020-01-29 20:18:55 -- - e-mail to complaints@freenode.net -- we will do our best to address the +2020-01-29 20:18:55 -- - situation within a reasonable period of time, and we may request further +2020-01-29 20:18:55 -- - information or, as appropriate, involve other parties such as channel operators +2020-01-29 20:18:55 -- - Group Contacts representing an on-topic group. +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - freenode runs an open proxy scanner. +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - If you are looking for assistance, you may be able to find a list of +2020-01-29 20:18:55 -- - volunteer staff on '/stats p' (shows only on-call staff) or by joining +2020-01-29 20:18:55 -- - #freenode and using the '/who freenode/staff/*' command. You may message +2020-01-29 20:18:55 -- - any of us at any time. Please note that freenode predominantly provides +2020-01-29 20:18:55 -- - assistance via private message, and while we have a network channel the +2020-01-29 20:18:55 -- - primary venue for support requests is via private message to a member +2020-01-29 20:18:55 -- - of the volunteer staff team. +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - From time to time, volunteer staff may send server-wide notices relating to +2020-01-29 20:18:55 -- - the project, or the communities that we host. The majority of such notices +2020-01-29 20:18:55 -- - will be sent as wallops, and you can '/mode +w' to ensure that you +2020-01-29 20:18:55 -- - do not miss them. Important messages relating to the freenode project, including +2020-01-29 20:18:55 -- - notices of upcoming maintenance and other scheduled downtime will be issued as +2020-01-29 20:18:55 -- - global notices. +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - Representing an on-topic project? Don't forget to register, more information +2020-01-29 20:18:55 -- - can be found on the https://freenode.net website under "Group Registration". +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - Thank you also to our server sponsors for the sustained support in keeping the +2020-01-29 20:18:55 -- - network going for close to two decades. +2020-01-29 20:18:55 -- - +2020-01-29 20:18:55 -- - Thank you for using freenode! +2020-01-29 20:18:55 -- End of /MOTD command. +2020-01-29 20:18:55 -- User mode [+i] by dustvoice +2020-01-29 20:18:55 -- NickServ (NickServ@services.): This nickname is registered. Please choose a different nickname, or identify via /msg NickServ identify . +2020-01-29 20:18:55 -- freenode-connect (frigg@freenode/utility-bot/frigg): Welcome to freenode. To protect the network all new connections will be scanned for vulnerabilities. This will not harm your computer, and vulnerable hosts will be notified. +2020-01-29 20:18:55 -- CTCP requested by freenode-connect: VERSION +2020-01-29 20:18:55 -- CTCP reply to freenode-connect: VERSION WeeChat 2.7 (Dec 26 2019 01:32:21) +2020-01-29 20:19:28 -- irc: disconnected from server +2020-01-29 20:20:53 -- irc: connecting to server irc.freenode.net/6667... +2020-01-29 20:20:53 -- irc: connected to irc.freenode.net/6667 (2600:3c02::f03c:91ff:fe59:7d2e) +2020-01-29 20:20:54 -- moon.freenode.net: *** Looking up your hostname... +2020-01-29 20:20:54 -- moon.freenode.net: *** Checking Ident +2020-01-29 20:20:54 -- moon.freenode.net: *** Couldn't look up your hostname +2020-01-29 20:21:00 -- moon.freenode.net: *** No Ident response +2020-01-29 20:21:00 -- Welcome to the freenode Internet Relay Chat Network dustvoice +2020-01-29 20:21:00 -- Your host is moon.freenode.net[2600:3c02::f03c:91ff:fe59:7d2e/6667], running version ircd-seven-1.1.9 +2020-01-29 20:21:00 -- This server was created Thu Dec 19 2019 at 20:29:30 UTC +2020-01-29 20:21:00 -- moon.freenode.net ircd-seven-1.1.9 DOQRSZaghilopsuwz CFILMPQSbcefgijklmnopqrstuvz bkloveqjfI +2020-01-29 20:21:00 -- CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstuz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode STATUSMSG=@+ CALLERID=g CASEMAPPING=rfc1459 :are supported by this server +2020-01-29 20:21:00 -- CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 DEAF=D FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,ajrxz CLIENTVER=3.0 SAFELIST ELIST=CTU CPRIVMSG :are supported by this server +2020-01-29 20:21:00 -- CNOTICE WHOX ETRACE KNOCK :are supported by this server +2020-01-29 20:21:00 -- There are 102 users and 86881 invisible on 30 servers +2020-01-29 20:21:00 -- 33 :IRC Operators online +2020-01-29 20:21:00 -- 3 :unknown connection(s) +2020-01-29 20:21:00 -- 51399 :channels formed +2020-01-29 20:21:00 -- I have 6104 clients and 1 servers +2020-01-29 20:21:00 -- 6104 6267 :Current local users 6104, max 6267 +2020-01-29 20:21:00 -- 86983 87738 :Current global users 86983, max 87738 +2020-01-29 20:21:00 -- Highest connection count: 6268 (6267 clients) (195919 connections received) +2020-01-29 20:21:00 -- - moon.freenode.net Message of the Day - +2020-01-29 20:21:00 -- - Welcome to moon.freenode.net in Atlanta, GA, US! Thanks to +2020-01-29 20:21:00 -- - Linode for sponsoring this server! +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - MOON, ELIZABETH (1945-) Born in South Texas, USA, +2020-01-29 20:21:00 -- - Elizabeth Moon is an American science fiction and fantasy +2020-01-29 20:21:00 -- - author with over 20 published works. Her novel The Speed +2020-01-29 20:21:00 -- - Of Dark received the Arthur C. Clarke and Nebula Awards in 2003 +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - Welcome to freenode - supporting the free and open source +2020-01-29 20:21:00 -- - software communities since 1998. +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - By connecting to freenode you indicate that you have read and +2020-01-29 20:21:00 -- - accept our policies and guidelines as set out on https://freenode.net +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - In the event that you observe behaviour that contravenes our policies, +2020-01-29 20:21:00 -- - please notify a volunteer staff member via private message, or send us an +2020-01-29 20:21:00 -- - e-mail to complaints@freenode.net -- we will do our best to address the +2020-01-29 20:21:00 -- - situation within a reasonable period of time, and we may request further +2020-01-29 20:21:00 -- - information or, as appropriate, involve other parties such as channel operators +2020-01-29 20:21:00 -- - Group Contacts representing an on-topic group. +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - freenode runs an open proxy scanner. +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - If you are looking for assistance, you may be able to find a list of +2020-01-29 20:21:00 -- - volunteer staff on '/stats p' (shows only on-call staff) or by joining +2020-01-29 20:21:00 -- - #freenode and using the '/who freenode/staff/*' command. You may message +2020-01-29 20:21:00 -- - any of us at any time. Please note that freenode predominantly provides +2020-01-29 20:21:00 -- - assistance via private message, and while we have a network channel the +2020-01-29 20:21:00 -- - primary venue for support requests is via private message to a member +2020-01-29 20:21:00 -- - of the volunteer staff team. +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - From time to time, volunteer staff may send server-wide notices relating to +2020-01-29 20:21:00 -- - the project, or the communities that we host. The majority of such notices +2020-01-29 20:21:00 -- - will be sent as wallops, and you can '/mode +w' to ensure that you +2020-01-29 20:21:00 -- - do not miss them. Important messages relating to the freenode project, including +2020-01-29 20:21:00 -- - notices of upcoming maintenance and other scheduled downtime will be issued as +2020-01-29 20:21:00 -- - global notices. +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - Representing an on-topic project? Don't forget to register, more information +2020-01-29 20:21:00 -- - can be found on the https://freenode.net website under "Group Registration". +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - Thank you also to our server sponsors for the sustained support in keeping the +2020-01-29 20:21:00 -- - network going for close to two decades. +2020-01-29 20:21:00 -- - +2020-01-29 20:21:00 -- - Thank you for using freenode! +2020-01-29 20:21:00 -- End of /MOTD command. +2020-01-29 20:21:00 -- User mode [+i] by dustvoice +2020-01-29 20:21:00 -- NickServ (NickServ@services.): This nickname is registered. Please choose a different nickname, or identify via /msg NickServ identify . +2020-01-29 20:21:01 -- freenode-connect (frigg@freenode/utility-bot/frigg): Welcome to freenode. To protect the network all new connections will be scanned for vulnerabilities. This will not harm your computer, and vulnerable hosts will be notified. +2020-01-29 20:21:01 -- CTCP requested by freenode-connect: VERSION +2020-01-29 20:21:01 -- CTCP reply to freenode-connect: VERSION WeeChat 2.7 (Dec 26 2019 01:32:21) +2020-01-29 20:21:07 -- MSG(NickServ): identify **************** +2020-01-29 20:21:07 -- NickServ (NickServ@services.): You are now identified for dustvoice. +2020-01-29 20:21:18 -- MSG(NickServ): help +2020-01-29 20:21:19 -- NickServ (NickServ@services.): ***** NickServ Help ***** +2020-01-29 20:21:19 -- NickServ (NickServ@services.): NickServ allows users to 'register' a nickname, and stop +2020-01-29 20:21:19 -- NickServ (NickServ@services.): others from using that nick. NickServ allows the owner of a +2020-01-29 20:21:19 -- NickServ (NickServ@services.): nickname to disconnect a user from the network that is using +2020-01-29 20:21:19 -- NickServ (NickServ@services.): their nickname. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): +2020-01-29 20:21:19 -- NickServ (NickServ@services.): For more information on a command, type: +2020-01-29 20:21:19 -- NickServ (NickServ@services.): /msg NickServ help +2020-01-29 20:21:19 -- NickServ (NickServ@services.): For a verbose listing of all commands, type: +2020-01-29 20:21:19 -- NickServ (NickServ@services.): /msg NickServ help commands +2020-01-29 20:21:19 -- NickServ (NickServ@services.): +2020-01-29 20:21:19 -- NickServ (NickServ@services.): The following commands are available: +2020-01-29 20:21:19 -- NickServ (NickServ@services.): GHOST Reclaims use of a nickname. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): GROUP Adds a nickname to your account. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): IDENTIFY Identifies to services for a nickname. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): INFO Displays information on registrations. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): LISTCHANS Lists channels that you have access to. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): REGISTER Registers a nickname. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): RELEASE Releases a services enforcer. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): SENDPASS Email registration passwords. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): SET Sets various control flags. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): UNGROUP Removes a nickname from your account. +2020-01-29 20:21:19 -- NickServ (NickServ@services.): +2020-01-29 20:21:19 -- NickServ (NickServ@services.): Other commands: ACC, ACCESS, CERT, DROP, HELP, LISTLOGINS, +2020-01-29 20:21:19 -- NickServ (NickServ@services.): LISTOWNMAIL, LOGOUT, REGAIN, SETPASS, STATUS, +2020-01-29 20:21:19 -- NickServ (NickServ@services.): TAXONOMY, VACATION, VERIFY +2020-01-29 20:21:19 -- NickServ (NickServ@services.): ***** End of Help ***** +2020-01-29 20:21:31 -- MSG(NickServ): SETPASS +2020-01-29 20:21:32 -- NickServ (NickServ@services.): Insufficient parameters for SETPASS. +2020-01-29 20:21:32 -- NickServ (NickServ@services.): Syntax: SETPASS +2020-01-29 20:21:51 -- MSG(NickServ): SET +2020-01-29 20:21:51 -- NickServ (NickServ@services.): Insufficient parameters for SET. +2020-01-29 20:21:52 -- NickServ (NickServ@services.): Syntax: SET +2020-01-29 20:21:55 -- MSG(NickServ): SET PASS +2020-01-29 20:21:55 -- NickServ (NickServ@services.): Invalid set command. Use /msg NickServ HELP SET for a command listing. +2020-01-29 20:22:00 -- MSG(NickServ): HELP SET +2020-01-29 20:22:00 -- NickServ (NickServ@services.): ***** NickServ Help ***** +2020-01-29 20:22:00 -- NickServ (NickServ@services.): Help for SET: +2020-01-29 20:22:00 -- NickServ (NickServ@services.): +2020-01-29 20:22:00 -- NickServ (NickServ@services.): SET allows you to set various control flags +2020-01-29 20:22:00 -- NickServ (NickServ@services.): for nicknames that change the way certain +2020-01-29 20:22:00 -- NickServ (NickServ@services.): operations are performed on them. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): +2020-01-29 20:22:00 -- NickServ (NickServ@services.): The following subcommands are available: +2020-01-29 20:22:00 -- NickServ (NickServ@services.): ACCOUNTNAME Changes your account name. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): EMAIL Changes your e-mail address. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): EMAILMEMOS Forwards incoming memos to your e-mail address. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): ENFORCE Enables or disables automatic protection of a nickname. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): HIDEMAIL Hides your e-mail address. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): NEVEROP Prevents you from being added to access lists. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): NOMEMO Disables the ability to receive memos. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): NOOP Prevents services from setting modes upon you automatically. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): PASSWORD Changes the password associated with your account. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): PRIVATE Hides information about you from other users. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): PROPERTY Manipulates metadata entries associated with an account. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): PUBKEY Changes your ECDSA-NIST256p-CHALLENGE public key. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): QUIETCHG Allows you to opt-out of channel change messages. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): +2020-01-29 20:22:00 -- NickServ (NickServ@services.): For more information, use /msg NickServ HELP SET command. +2020-01-29 20:22:00 -- NickServ (NickServ@services.): ***** End of Help ***** +2020-01-29 20:22:10 -- MSG(NickServ): SET PASSWORD ******** +2020-01-29 20:22:10 -- NickServ (NickServ@services.): The password for dustvoice has been changed to 53295564. +2020-01-29 20:22:15 -- irc: disconnected from server +2020-03-03 14:38:43 -- irc: connecting to server irc.freenode.net/6667... +2020-03-03 14:38:44 -- irc: connected to irc.freenode.net/6667 (130.185.232.126) +2020-03-03 14:38:44 -- hitchcock.freenode.net: *** Looking up your hostname... +2020-03-03 14:38:44 -- hitchcock.freenode.net: *** Checking Ident +2020-03-03 14:38:44 -- hitchcock.freenode.net: *** Found your hostname +2020-03-03 14:38:52 -- hitchcock.freenode.net: *** No Ident response +2020-03-03 14:38:52 -- Welcome to the freenode Internet Relay Chat Network dustvoice +2020-03-03 14:38:52 -- Your host is hitchcock.freenode.net[130.185.232.126/6667], running version ircd-seven-1.1.9 +2020-03-03 14:38:52 -- This server was created Wed Dec 18 2019 at 01:00:47 UTC +2020-03-03 14:38:52 -- hitchcock.freenode.net ircd-seven-1.1.9 DOQRSZaghilopsuwz CFILMPQSbcefgijklmnopqrstuvz bkloveqjfI +2020-03-03 14:38:52 -- CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstuz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode STATUSMSG=@+ CALLERID=g CASEMAPPING=rfc1459 :are supported by this server +2020-03-03 14:38:52 -- CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 DEAF=D FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,ajrxz CLIENTVER=3.0 WHOX SAFELIST ELIST=CTU :are supported by this server +2020-03-03 14:38:52 -- ETRACE CPRIVMSG CNOTICE KNOCK :are supported by this server +2020-03-03 14:38:52 -- There are 92 users and 85465 invisible on 30 servers +2020-03-03 14:38:52 -- 31 :IRC Operators online +2020-03-03 14:38:52 -- 66 :unknown connection(s) +2020-03-03 14:38:52 -- 42472 :channels formed +2020-03-03 14:38:52 -- I have 4578 clients and 1 servers +2020-03-03 14:38:52 -- 4578 5552 :Current local users 4578, max 5552 +2020-03-03 14:38:52 -- 85557 87738 :Current global users 85557, max 87738 +2020-03-03 14:38:52 -- Highest connection count: 5553 (5552 clients) (602247 connections received) +2020-03-03 14:38:52 -- - hitchcock.freenode.net Message of the Day - +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - Welcome to hitchcock.freenode.net in Sofia, Bulgaria, EU, kindly sponsored by +2020-03-03 14:38:52 -- - Elemental TV (www.elemental.tv) +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - HITCHCOCK, SIR ALFRED [1899 - 1980] Born in Essex, +2020-03-03 14:38:52 -- - England, Sir Alfred Hitchcock was a noted film director +2020-03-03 14:38:52 -- - and producer. Over a long career he pioneered many modern +2020-03-03 14:38:52 -- - techniques in film-making, made more than 50 feature films, +2020-03-03 14:38:52 -- - and influenced many present-day directors and producers. +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - Welcome to freenode - supporting the free and open source +2020-03-03 14:38:52 -- - software communities since 1998. +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - By connecting to freenode you indicate that you have read and +2020-03-03 14:38:52 -- - accept our policies and guidelines as set out on https://freenode.net +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - In the event that you observe behaviour that contravenes our policies, +2020-03-03 14:38:52 -- - please notify a volunteer staff member via private message, or send us an +2020-03-03 14:38:52 -- - e-mail to complaints@freenode.net -- we will do our best to address the +2020-03-03 14:38:52 -- - situation within a reasonable period of time, and we may request further +2020-03-03 14:38:52 -- - information or, as appropriate, involve other parties such as channel operators +2020-03-03 14:38:52 -- - Group Contacts representing an on-topic group. +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - freenode runs an open proxy scanner. +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - If you are looking for assistance, you may be able to find a list of +2020-03-03 14:38:52 -- - volunteer staff on '/stats p' (shows only on-call staff) or by joining +2020-03-03 14:38:52 -- - #freenode and using the '/who freenode/staff/*' command. You may message +2020-03-03 14:38:52 -- - any of us at any time. Please note that freenode predominantly provides +2020-03-03 14:38:52 -- - assistance via private message, and while we have a network channel the +2020-03-03 14:38:52 -- - primary venue for support requests is via private message to a member +2020-03-03 14:38:52 -- - of the volunteer staff team. +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - From time to time, volunteer staff may send server-wide notices relating to +2020-03-03 14:38:52 -- - the project, or the communities that we host. The majority of such notices +2020-03-03 14:38:52 -- - will be sent as wallops, and you can '/mode +w' to ensure that you +2020-03-03 14:38:52 -- - do not miss them. Important messages relating to the freenode project, including +2020-03-03 14:38:52 -- - notices of upcoming maintenance and other scheduled downtime will be issued as +2020-03-03 14:38:52 -- - global notices. +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - Representing an on-topic project? Don't forget to register, more information +2020-03-03 14:38:52 -- - can be found on the https://freenode.net website under "Group Registration". +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - Thank you also to our server sponsors for the sustained support in keeping the +2020-03-03 14:38:52 -- - network going for close to two decades. +2020-03-03 14:38:52 -- - +2020-03-03 14:38:52 -- - Thank you for using freenode! +2020-03-03 14:38:52 -- End of /MOTD command. +2020-03-03 14:38:52 -- User mode [+i] by dustvoice +2020-03-03 14:38:52 -- NickServ (NickServ@services.): This nickname is registered. Please choose a different nickname, or identify via /msg NickServ identify . +2020-03-03 14:39:02 -- MSG(NickServ): identify **************** +2020-03-03 14:39:02 -- NickServ (NickServ@services.): Invalid password for dustvoice. +2020-03-03 14:39:10 -- MSG(NickServ): identify ******** +2020-03-03 14:39:10 -- NickServ (NickServ@services.): You are now identified for dustvoice. +2020-03-03 14:39:11 -- NickServ (NickServ@services.): 1 failed login since last login. +2020-03-03 14:39:11 -- NickServ (NickServ@services.): Last failed attempt from: dustvoice!~dustvoice@p509754c8.dip0.t-ipconnect.de on Mar 03 13:39:01 2020. +2020-03-03 14:39:20 -- bspwm: No such channel +2020-03-03 14:39:31 -- bspwm: No such channel +2020-03-03 14:45:50 -- irc: disconnected from server +2020-05-17 11:59:30 -- irc: connecting to server irc.freenode.net/6667... +2020-05-17 11:59:30 -- irc: connected to irc.freenode.net/6667 (2001:6b0:e:2a18::119) +2020-05-17 11:59:30 -- leguin.freenode.net: *** Looking up your hostname... +2020-05-17 11:59:30 -- leguin.freenode.net: *** Checking Ident +2020-05-17 11:59:30 -- leguin.freenode.net: *** No Ident response +2020-05-17 11:59:30 -- leguin.freenode.net: *** Found your hostname +2020-05-17 11:59:30 -- Welcome to the freenode Internet Relay Chat Network dustvoice +2020-05-17 11:59:30 -- Your host is leguin.freenode.net[2001:6b0:e:2a18::119/6667], running version ircd-seven-1.1.9 +2020-05-17 11:59:30 -- This server was created Wed Feb 19 2020 at 12:18:38 UTC +2020-05-17 11:59:30 -- leguin.freenode.net ircd-seven-1.1.9 DOQRSZaghilopsuwz CFILMPQSbcefgijklmnopqrstuvz bkloveqjfI +2020-05-17 11:59:30 -- CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstuz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode STATUSMSG=@+ CALLERID=g CASEMAPPING=rfc1459 :are supported by this server +2020-05-17 11:59:30 -- CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 DEAF=D FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,ajrxz CLIENTVER=3.0 CPRIVMSG CNOTICE KNOCK :are supported by this server +2020-05-17 11:59:30 -- ETRACE SAFELIST ELIST=CTU WHOX MONITOR=100 :are supported by this server +2020-05-17 11:59:30 -- There are 98 users and 81201 invisible on 30 servers +2020-05-17 11:59:30 -- 38 :IRC Operators online +2020-05-17 11:59:30 -- 2 :unknown connection(s) +2020-05-17 11:59:30 -- 44433 :channels formed +2020-05-17 11:59:30 -- I have 4247 clients and 1 servers +2020-05-17 11:59:30 -- 4247 7957 :Current local users 4247, max 7957 +2020-05-17 11:59:30 -- 81299 89000 :Current global users 81299, max 89000 +2020-05-17 11:59:30 -- Highest connection count: 7958 (7957 clients) (362587 connections received) +2020-05-17 11:59:30 -- - leguin.freenode.net Message of the Day - +2020-05-17 11:59:30 -- - Welcome to leguin.freenode.net in Umeå, Sweden, EU! Thanks to +2020-05-17 11:59:30 -- - the Academic Computer Club at Umeå University for sponsoring +2020-05-17 11:59:30 -- - this server! +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - LE GUIN, URSULA K. (1929-2018) Born in Berkeley, California, +2020-05-17 11:59:30 -- - Ursula Le Guin was an American author primarily known for +2020-05-17 11:59:30 -- - her Science Fiction and Fantasy. She was awarded the Hugo +2020-05-17 11:59:30 -- - and Nebula awards, and was best known for her Earthsea +2020-05-17 11:59:30 -- - and Hainish series. +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - Welcome to freenode - supporting the free and open source +2020-05-17 11:59:30 -- - software communities since 1998. +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - By connecting to freenode you indicate that you have read and +2020-05-17 11:59:30 -- - accept our policies and guidelines as set out on https://freenode.net +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - In the event that you observe behaviour that contravenes our policies, +2020-05-17 11:59:30 -- - please notify a volunteer staff member via private message, or send us an +2020-05-17 11:59:30 -- - e-mail to complaints@freenode.net -- we will do our best to address the +2020-05-17 11:59:30 -- - situation within a reasonable period of time, and we may request further +2020-05-17 11:59:30 -- - information or, as appropriate, involve other parties such as channel operators +2020-05-17 11:59:30 -- - Group Contacts representing an on-topic group. +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - freenode runs an open proxy scanner. +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - If you are looking for assistance, you may be able to find a list of +2020-05-17 11:59:30 -- - volunteer staff on '/stats p' (shows only on-call staff) or by joining +2020-05-17 11:59:30 -- - #freenode and using the '/who freenode/staff/*' command. You may message +2020-05-17 11:59:30 -- - any of us at any time. Please note that freenode predominantly provides +2020-05-17 11:59:30 -- - assistance via private message, and while we have a network channel the +2020-05-17 11:59:30 -- - primary venue for support requests is via private message to a member +2020-05-17 11:59:30 -- - of the volunteer staff team. +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - From time to time, volunteer staff may send server-wide notices relating to +2020-05-17 11:59:30 -- - the project, or the communities that we host. The majority of such notices +2020-05-17 11:59:30 -- - will be sent as wallops, and you can '/mode +w' to ensure that you +2020-05-17 11:59:30 -- - do not miss them. Important messages relating to the freenode project, including +2020-05-17 11:59:30 -- - notices of upcoming maintenance and other scheduled downtime will be issued as +2020-05-17 11:59:30 -- - global notices. +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - Representing an on-topic project? Don't forget to register, more information +2020-05-17 11:59:30 -- - can be found on the https://freenode.net website under "Group Registration". +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - Thank you also to our server sponsors for the sustained support in keeping the +2020-05-17 11:59:30 -- - network going for close to two decades. +2020-05-17 11:59:30 -- - +2020-05-17 11:59:30 -- - Thank you for using freenode! +2020-05-17 11:59:30 -- End of /MOTD command. +2020-05-17 11:59:30 -- User mode [+i] by dustvoice +2020-05-17 11:59:30 -- NickServ (NickServ@services.): This nickname is registered. Please choose a different nickname, or identify via /msg NickServ identify . +2020-05-17 11:59:39 -- MSG(NickServ): identify ******** +2020-05-17 11:59:39 -- NickServ (NickServ@services.): You are now identified for dustvoice. +2020-05-17 14:53:31 -- irc: disconnected from server +2020-08-08 21:02:41 -- irc: connecting to server irc.freenode.net/6667... +2020-08-08 21:02:41 -- irc: connected to irc.freenode.net/6667 (38.229.70.22) +2020-08-08 21:02:41 -- card.freenode.net: *** Looking up your hostname... +2020-08-08 21:02:41 -- card.freenode.net: *** Checking Ident +2020-08-08 21:02:41 -- card.freenode.net: *** Found your hostname +2020-08-08 21:02:49 -- card.freenode.net: *** No Ident response +2020-08-08 21:02:49 -- Welcome to the freenode Internet Relay Chat Network dustvoice +2020-08-08 21:02:49 -- Your host is card.freenode.net[38.229.70.22/6667], running version ircd-seven-1.1.9 +2020-08-08 21:02:49 -- This server was created Sun Jul 12 2020 at 20:44:33 UTC +2020-08-08 21:02:49 -- card.freenode.net ircd-seven-1.1.9 DOQRSZaghilopsuwz CFILMPQSbcefgijklmnopqrstuvz bkloveqjfI +2020-08-08 21:02:49 -- CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstuz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode STATUSMSG=@+ CALLERID=g CASEMAPPING=rfc1459 :are supported by this server +2020-08-08 21:02:49 -- CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 DEAF=D FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,ajrxz CLIENTVER=3.0 KNOCK CPRIVMSG CNOTICE :are supported by this server +2020-08-08 21:02:49 -- MONITOR=100 WHOX SAFELIST ELIST=CTU ETRACE :are supported by this server +2020-08-08 21:02:49 -- There are 105 users and 79840 invisible on 30 servers +2020-08-08 21:02:49 -- 44 :IRC Operators online +2020-08-08 21:02:49 -- 45 :unknown connection(s) +2020-08-08 21:02:49 -- 45226 :channels formed +2020-08-08 21:02:49 -- I have 4096 clients and 1 servers +2020-08-08 21:02:49 -- 4096 4327 :Current local users 4096, max 4327 +2020-08-08 21:02:49 -- 79945 87480 :Current global users 79945, max 87480 +2020-08-08 21:02:49 -- Highest connection count: 4328 (4327 clients) (274342 connections received) +2020-08-08 21:02:49 -- - card.freenode.net Message of the Day - +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - Welcome to card.freenode.net in Washington, DC, US, kindly sponsored by +2020-08-08 21:02:49 -- - Team Cymru (http://www.team-cymru.org). +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - CARD, ORSON SCOTT [1951-]. Born in Richland, Washington, Card grew up in +2020-08-08 21:02:49 -- - California, Arizona, and Utah. He lived in Brazil for two years as an unpaid +2020-08-08 21:02:49 -- - missionary for the Mormon Church. Author of the Ender and Alvin Maker books, +2020-08-08 21:02:49 -- - Card's science fiction and fantasy work is strongly influenced by his Mormon +2020-08-08 21:02:49 -- - cultural background. The first author to win the Hugo and Nebula novel awards +2020-08-08 21:02:49 -- - two years in a row, Card currently lives in Greensboro, North Carolina, US. +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - Welcome to freenode - supporting the free and open source +2020-08-08 21:02:49 -- - software communities since 1998. +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - By connecting to freenode you indicate that you have read and +2020-08-08 21:02:49 -- - accept our policies and guidelines as set out on https://freenode.net +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - In the event that you observe behaviour that contravenes our policies, +2020-08-08 21:02:49 -- - please notify a volunteer staff member via private message, or send us an +2020-08-08 21:02:49 -- - e-mail to complaints@freenode.net -- we will do our best to address the +2020-08-08 21:02:49 -- - situation within a reasonable period of time, and we may request further +2020-08-08 21:02:49 -- - information or, as appropriate, involve other parties such as channel operators +2020-08-08 21:02:49 -- - Group Contacts representing an on-topic group. +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - freenode runs an open proxy scanner. +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - If you are looking for assistance, you may be able to find a list of +2020-08-08 21:02:49 -- - volunteer staff on '/stats p' (shows only on-call staff) or by joining +2020-08-08 21:02:49 -- - #freenode and using the '/who freenode/staff/*' command. You may message +2020-08-08 21:02:49 -- - any of us at any time. Please note that freenode predominantly provides +2020-08-08 21:02:49 -- - assistance via private message, and while we have a network channel the +2020-08-08 21:02:49 -- - primary venue for support requests is via private message to a member +2020-08-08 21:02:49 -- - of the volunteer staff team. +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - From time to time, volunteer staff may send server-wide notices relating to +2020-08-08 21:02:49 -- - the project, or the communities that we host. The majority of such notices +2020-08-08 21:02:49 -- - will be sent as wallops, and you can '/mode +w' to ensure that you +2020-08-08 21:02:49 -- - do not miss them. Important messages relating to the freenode project, including +2020-08-08 21:02:49 -- - notices of upcoming maintenance and other scheduled downtime will be issued as +2020-08-08 21:02:49 -- - global notices. +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - Representing an on-topic project? Don't forget to register, more information +2020-08-08 21:02:49 -- - can be found on the https://freenode.net website under "Group Registration". +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - Thank you also to our server sponsors for the sustained support in keeping the +2020-08-08 21:02:49 -- - network going for close to two decades. +2020-08-08 21:02:49 -- - +2020-08-08 21:02:49 -- - Thank you for using freenode! +2020-08-08 21:02:49 -- End of /MOTD command. +2020-08-08 21:02:49 -- User mode [+i] by dustvoice +2020-08-08 21:02:49 -- NickServ (NickServ@services.): This nickname is registered. Please choose a different nickname, or identify via /msg NickServ identify . +2020-08-08 21:02:50 -- freenode-connect (frigg@freenode/utility-bot/frigg): Welcome to freenode. To protect the network all new connections will be scanned for vulnerabilities. This will not harm your computer, and vulnerable hosts will be notified. +2020-08-08 21:02:50 -- CTCP requested by freenode-connect: VERSION +2020-08-08 21:02:50 -- CTCP reply to freenode-connect: VERSION WeeChat 2.9 (Jul 19 2020 06:32:47) +2020-08-08 21:03:01 -- MSG(NickServ): identify ******** +2020-08-08 21:03:02 -- NickServ (NickServ@services.): You are now identified for dustvoice. +2020-08-09 20:34:48 -- irc: connecting to server irc.freenode.net/6667... +2020-08-09 20:34:48 -- irc: connected to irc.freenode.net/6667 (162.213.39.42) +2020-08-09 20:34:48 -- weber.freenode.net: *** Looking up your hostname... +2020-08-09 20:34:49 -- weber.freenode.net: *** Checking Ident +2020-08-09 20:34:49 -- weber.freenode.net: *** Found your hostname +2020-08-09 20:34:54 -- weber.freenode.net: *** No Ident response +2020-08-09 20:34:54 -- Welcome to the freenode Internet Relay Chat Network dustvoice +2020-08-09 20:34:54 -- Your host is weber.freenode.net[162.213.39.42/6667], running version ircd-seven-1.1.9 +2020-08-09 20:34:54 -- This server was created Wed Dec 18 2019 at 21:37:52 UTC +2020-08-09 20:34:54 -- weber.freenode.net ircd-seven-1.1.9 DOQRSZaghilopsuwz CFILMPQSbcefgijklmnopqrstuvz bkloveqjfI +2020-08-09 20:34:54 -- CHANTYPES=# EXCEPTS INVEX CHANMODES=eIbq,k,flj,CFLMPQScgimnprstuz CHANLIMIT=#:120 PREFIX=(ov)@+ MAXLIST=bqeI:100 MODES=4 NETWORK=freenode STATUSMSG=@+ CALLERID=g CASEMAPPING=rfc1459 :are supported by this server +2020-08-09 20:34:54 -- CHARSET=ascii NICKLEN=16 CHANNELLEN=50 TOPICLEN=390 DEAF=D FNC TARGMAX=NAMES:1,LIST:1,KICK:1,WHOIS:1,PRIVMSG:4,NOTICE:4,ACCEPT:,MONITOR: EXTBAN=$,ajrxz CLIENTVER=3.0 SAFELIST ELIST=CTU KNOCK :are supported by this server +2020-08-09 20:34:54 -- CPRIVMSG CNOTICE WHOX ETRACE MONITOR=100 :are supported by this server +2020-08-09 20:34:54 -- There are 103 users and 79816 invisible on 30 servers +2020-08-09 20:34:54 -- 43 :IRC Operators online +2020-08-09 20:34:54 -- 28 :unknown connection(s) +2020-08-09 20:34:54 -- 45139 :channels formed +2020-08-09 20:34:54 -- I have 4098 clients and 1 servers +2020-08-09 20:34:54 -- 4098 7419 :Current local users 4098, max 7419 +2020-08-09 20:34:54 -- 79919 90930 :Current global users 79919, max 90930 +2020-08-09 20:34:54 -- Highest connection count: 7420 (7419 clients) (2083372 connections received) +2020-08-09 20:34:54 -- - weber.freenode.net Message of the Day - +2020-08-09 20:34:54 -- - Welcome to weber.freenode.net in California, USA. +2020-08-09 20:34:54 -- - Thanks to https://www.cloudsigma.com/ for sponsoring +2020-08-09 20:34:54 -- - this server! +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - WEBER, DAVID M. (1952-), an American fantasy and scifi +2020-08-09 20:34:54 -- - author. Best known for his 'Honor Harrington' series, his +2020-08-09 20:34:54 -- - works span several genres, including alternate history, +2020-08-09 20:34:54 -- - epic fantasy, military scifi and space opera. He's also +2020-08-09 20:34:54 -- - done wargame design mainly for the StarFire tabletop +2020-08-09 20:34:54 -- - boardgame series, a job which later evolved into the novel, +2020-08-09 20:34:54 -- - 'Insurrection' (collaboration with Steve White, published +2020-08-09 20:34:54 -- - in 1990). +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - Welcome to freenode - supporting the free and open source +2020-08-09 20:34:54 -- - software communities since 1998. +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - By connecting to freenode you indicate that you have read and +2020-08-09 20:34:54 -- - accept our policies and guidelines as set out on https://freenode.net +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - In the event that you observe behaviour that contravenes our policies, +2020-08-09 20:34:54 -- - please notify a volunteer staff member via private message, or send us an +2020-08-09 20:34:54 -- - e-mail to complaints@freenode.net -- we will do our best to address the +2020-08-09 20:34:54 -- - situation within a reasonable period of time, and we may request further +2020-08-09 20:34:54 -- - information or, as appropriate, involve other parties such as channel operators +2020-08-09 20:34:54 -- - Group Contacts representing an on-topic group. +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - freenode runs an open proxy scanner. +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - If you are looking for assistance, you may be able to find a list of +2020-08-09 20:34:54 -- - volunteer staff on '/stats p' (shows only on-call staff) or by joining +2020-08-09 20:34:54 -- - #freenode and using the '/who freenode/staff/*' command. You may message +2020-08-09 20:34:54 -- - any of us at any time. Please note that freenode predominantly provides +2020-08-09 20:34:54 -- - assistance via private message, and while we have a network channel the +2020-08-09 20:34:54 -- - primary venue for support requests is via private message to a member +2020-08-09 20:34:54 -- - of the volunteer staff team. +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - From time to time, volunteer staff may send server-wide notices relating to +2020-08-09 20:34:54 -- - the project, or the communities that we host. The majority of such notices +2020-08-09 20:34:54 -- - will be sent as wallops, and you can '/mode +w' to ensure that you +2020-08-09 20:34:54 -- - do not miss them. Important messages relating to the freenode project, including +2020-08-09 20:34:54 -- - notices of upcoming maintenance and other scheduled downtime will be issued as +2020-08-09 20:34:54 -- - global notices. +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - Representing an on-topic project? Don't forget to register, more information +2020-08-09 20:34:54 -- - can be found on the https://freenode.net website under "Group Registration". +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - Thank you also to our server sponsors for the sustained support in keeping the +2020-08-09 20:34:54 -- - network going for close to two decades. +2020-08-09 20:34:54 -- - +2020-08-09 20:34:54 -- - Thank you for using freenode! +2020-08-09 20:34:54 -- End of /MOTD command. +2020-08-09 20:34:54 -- User mode [+i] by dustvoice +2020-08-09 20:34:54 -- NickServ (NickServ@services.): This nickname is registered. Please choose a different nickname, or identify via /msg NickServ identify . +2020-08-09 20:34:54 -- freenode-connect (frigg@freenode/utility-bot/frigg): Welcome to freenode. To protect the network all new connections will be scanned for vulnerabilities. This will not harm your computer, and vulnerable hosts will be notified. +2020-08-09 20:34:54 -- CTCP requested by freenode-connect: VERSION +2020-08-09 20:34:54 -- CTCP reply to freenode-connect: VERSION WeeChat 2.9 (Jul 19 2020 06:32:47) +2020-08-09 20:34:58 -- MSG(NickServ): identify ******** +2020-08-09 20:35:01 -- NickServ (NickServ@services.): You are now identified for dustvoice. diff --git a/.weechat/lua.conf b/.weechat/lua.conf new file mode 100644 index 0000000..fa4966b --- /dev/null +++ b/.weechat/lua.conf @@ -0,0 +1,14 @@ +# +# weechat -- lua.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/perl.conf b/.weechat/perl.conf new file mode 100644 index 0000000..31924b9 --- /dev/null +++ b/.weechat/perl.conf @@ -0,0 +1,14 @@ +# +# weechat -- perl.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/plugins.conf b/.weechat/plugins.conf new file mode 100644 index 0000000..b8a80bb --- /dev/null +++ b/.weechat/plugins.conf @@ -0,0 +1,56 @@ +# +# weechat -- plugins.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[var] +python.vimode.copy_clipboard_cmd = "xclip -selection c" +python.vimode.imap_esc = "" +python.vimode.imap_esc_timeout = "1000" +python.vimode.line_number_prefix = "" +python.vimode.line_number_suffix = " " +python.vimode.mode_indicator_cmd_color = "white" +python.vimode.mode_indicator_cmd_color_bg = "cyan" +python.vimode.mode_indicator_insert_color = "white" +python.vimode.mode_indicator_insert_color_bg = "blue" +python.vimode.mode_indicator_normal_color = "white" +python.vimode.mode_indicator_normal_color_bg = "blue" +python.vimode.mode_indicator_prefix = "" +python.vimode.mode_indicator_replace_color = "white" +python.vimode.mode_indicator_replace_color_bg = "red" +python.vimode.mode_indicator_search_color = "white" +python.vimode.mode_indicator_search_color_bg = "magenta" +python.vimode.mode_indicator_suffix = "" +python.vimode.no_warn = "on" +python.vimode.paste_clipboard_cmd = "xclip -selection c -o" +python.vimode.search_vim = "on" +python.vimode.user_mappings = "" + +[desc] +python.vimode.copy_clipboard_cmd = "command used to copy to clipboard; must read input from stdin (default: "xclip -selection c")" +python.vimode.imap_esc = "use alternate mapping to enter Normal mode while in Insert mode; having it set to 'jk' is similar to `:imap jk ` in vim (default: "")" +python.vimode.imap_esc_timeout = "time in ms to wait for the imap_esc sequence to complete (default: "1000")" +python.vimode.line_number_prefix = "prefix for line numbers (default: "")" +python.vimode.line_number_suffix = "suffix for line numbers (default: " ")" +python.vimode.mode_indicator_cmd_color = "color for mode indicator in Command mode (default: "white")" +python.vimode.mode_indicator_cmd_color_bg = "background color for mode indicator in Command mode (default: "cyan")" +python.vimode.mode_indicator_insert_color = "color for mode indicator in Insert mode (default: "white")" +python.vimode.mode_indicator_insert_color_bg = "background color for mode indicator in Insert mode (default: "blue")" +python.vimode.mode_indicator_normal_color = "color for mode indicator in Normal mode (default: "white")" +python.vimode.mode_indicator_normal_color_bg = "background color for mode indicator in Normal mode (default: "gray")" +python.vimode.mode_indicator_prefix = "prefix for the bar item mode_indicator (default: "")" +python.vimode.mode_indicator_replace_color = "color for mode indicator in Replace mode (default: "white")" +python.vimode.mode_indicator_replace_color_bg = "background color for mode indicator in Replace mode (default: "red")" +python.vimode.mode_indicator_search_color = "color for mode indicator in Search mode (default: "white")" +python.vimode.mode_indicator_search_color_bg = "background color for mode indicator in Search mode (default: "magenta")" +python.vimode.mode_indicator_suffix = "suffix for the bar item mode_indicator (default: "")" +python.vimode.no_warn = "don't warn about problematic keybindings and tmux/screen (default: "off")" +python.vimode.paste_clipboard_cmd = "command used to paste clipboard; must output content to stdout (default: "xclip -selection c -o")" +python.vimode.search_vim = "allow n/N usage after searching (requires an extra to return to normal mode) (default: "off")" +python.vimode.user_mappings = "see the `:nmap` command in the README for more info; please do not modify this field manually unless you know what you're doing (default: "")" diff --git a/.weechat/python.conf b/.weechat/python.conf new file mode 100644 index 0000000..187b778 --- /dev/null +++ b/.weechat/python.conf @@ -0,0 +1,14 @@ +# +# weechat -- python.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/python/autoload/vimode.py b/.weechat/python/autoload/vimode.py new file mode 120000 index 0000000..c6303a5 --- /dev/null +++ b/.weechat/python/autoload/vimode.py @@ -0,0 +1 @@ +../vimode.py \ No newline at end of file diff --git a/.weechat/python/vimode.py b/.weechat/python/vimode.py new file mode 100644 index 0000000..873c5d7 --- /dev/null +++ b/.weechat/python/vimode.py @@ -0,0 +1,1882 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-2014 Germain Z. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# +# Add vi/vim-like modes to WeeChat. +# + + +import csv +import json +import os +import re +import subprocess +try: + from StringIO import StringIO +except ImportError: + from io import StringIO +import time + +import weechat + + +# Script info. +# ============ + +SCRIPT_NAME = "vimode" +SCRIPT_AUTHOR = "GermainZ " +SCRIPT_VERSION = "0.8" +SCRIPT_LICENSE = "GPL3" +SCRIPT_DESC = ("Add vi/vim-like modes and keybindings to WeeChat.") + + +# Global variables. +# ================= + +# General. +# -------- + +# Halp! Halp! Halp! +GITHUB_BASE = "https://github.com/GermainZ/weechat-vimode/blob/master/" +README_URL = GITHUB_BASE + "README.md" +FAQ_KEYBINDINGS = GITHUB_BASE + "FAQ.md#problematic-key-bindings" +FAQ_ESC = GITHUB_BASE + "FAQ.md#esc-key-not-being-detected-instantly" + +# Holds the text of the tab-completions for the command-line mode. +cmd_compl_text = "" +# Holds the original text of the command-line mode, used for completion. +cmd_text_orig = None +# Index of current suggestion, used for completion. +cmd_compl_pos = 0 +# Used for command-line mode history. +cmd_history = [] +cmd_history_index = 0 +# Used to store the content of the input line when going into COMMAND mode. +input_line_backup = {} +# Mode we're in. One of INSERT, NORMAL, REPLACE, COMMAND or SEARCH. +# SEARCH is only used if search_vim is enabled. +mode = "INSERT" +# Holds normal commands (e.g. "dd"). +vi_buffer = "" +# See `cb_key_combo_default()`. +esc_pressed = 0 +# See `cb_key_pressed()`. +last_signal_time = 0 +# See `start_catching_keys()` for more info. +catching_keys_data = {'amount': 0} +# Used for ; and , to store the last f/F/t/T motion. +last_search_motion = {'motion': None, 'data': None} +# Used for undo history. +undo_history = {} +undo_history_index = {} +# Holds mode colors (loaded from vimode_settings). +mode_colors = {} + +# Script options. +vimode_settings = { + 'no_warn': ("off", ("don't warn about problematic keybindings and " + "tmux/screen")), + 'copy_clipboard_cmd': ("xclip -selection c", + ("command used to copy to clipboard; must read " + "input from stdin")), + 'paste_clipboard_cmd': ("xclip -selection c -o", + ("command used to paste clipboard; must output " + "content to stdout")), + 'imap_esc': ("", ("use alternate mapping to enter Normal mode while in " + "Insert mode; having it set to 'jk' is similar to " + "`:imap jk ` in vim")), + 'imap_esc_timeout': ("1000", ("time in ms to wait for the imap_esc " + "sequence to complete")), + 'search_vim': ("off", ("allow n/N usage after searching (requires an extra" + " to return to normal mode)")), + 'user_mappings': ("", ("see the `:nmap` command in the README for more " + "info; please do not modify this field manually " + "unless you know what you're doing")), + 'mode_indicator_prefix': ("", "prefix for the bar item mode_indicator"), + 'mode_indicator_suffix': ("", "suffix for the bar item mode_indicator"), + 'mode_indicator_normal_color': ("white", + "color for mode indicator in Normal mode"), + 'mode_indicator_normal_color_bg': ("gray", + ("background color for mode indicator " + "in Normal mode")), + 'mode_indicator_insert_color': ("white", + "color for mode indicator in Insert mode"), + 'mode_indicator_insert_color_bg': ("blue", + ("background color for mode indicator " + "in Insert mode")), + 'mode_indicator_replace_color': ("white", + "color for mode indicator in Replace mode"), + 'mode_indicator_replace_color_bg': ("red", + ("background color for mode indicator " + "in Replace mode")), + 'mode_indicator_cmd_color': ("white", + "color for mode indicator in Command mode"), + 'mode_indicator_cmd_color_bg': ("cyan", + ("background color for mode indicator in " + "Command mode")), + 'mode_indicator_search_color': ("white", + "color for mode indicator in Search mode"), + 'mode_indicator_search_color_bg': ("magenta", + ("background color for mode indicator " + "in Search mode")), + 'line_number_prefix': ("", "prefix for line numbers"), + 'line_number_suffix': (" ", "suffix for line numbers") +} + + +# Regex patterns. +# --------------- + +WHITESPACE = re.compile(r"\s") +IS_KEYWORD = re.compile(r"[a-zA-Z0-9_@À-ÿ]") +REGEX_MOTION_LOWERCASE_W = re.compile(r"\b\S|(?<=\s)\S") +REGEX_MOTION_UPPERCASE_W = re.compile(r"(?<=\s)\S") +REGEX_MOTION_UPPERCASE_E = re.compile(r"\S(?!\S)") +REGEX_MOTION_UPPERCASE_B = REGEX_MOTION_UPPERCASE_E +REGEX_MOTION_G_UPPERCASE_E = REGEX_MOTION_UPPERCASE_W +REGEX_MOTION_CARRET = re.compile(r"\S") +REGEX_INT = r"[0-9]" +REGEX_MAP_KEYS_1 = { + re.compile("<([^>]*-)Left>", re.IGNORECASE): '<\\1\x01[[D>', + re.compile("<([^>]*-)Right>", re.IGNORECASE): '<\\1\x01[[C>', + re.compile("<([^>]*-)Up>", re.IGNORECASE): '<\\1\x01[[A>', + re.compile("<([^>]*-)Down>", re.IGNORECASE): '<\\1\x01[[B>', + re.compile("", re.IGNORECASE): '\x01[[D', + re.compile("", re.IGNORECASE): '\x01[[C', + re.compile("", re.IGNORECASE): '\x01[[A', + re.compile("", re.IGNORECASE): '\x01[[B' +} +REGEX_MAP_KEYS_2 = { + re.compile(r"]*)>", re.IGNORECASE): '\x01\\1', + re.compile(r"]*)>", re.IGNORECASE): '\x01[\\1' +} + +# Regex used to detect problematic keybindings. +# For example: meta-wmeta-s is bound by default to ``/window swap``. +# If the user pressed Esc-w, WeeChat will detect it as meta-w and will not +# send any signal to `cb_key_combo_default()` just yet, since it's the +# beginning of a known key combo. +# Instead, `cb_key_combo_default()` will receive the Esc-ws signal, which +# becomes "ws" after removing the Esc part, and won't know how to handle it. +REGEX_PROBLEMATIC_KEYBINDINGS = re.compile(r"meta-\w(meta|ctrl)") + + +# Vi commands. +# ------------ + +def cmd_nmap(args): + """Add a user-defined key mapping. + + Some (but not all) vim-like key codes are supported to simplify things for + the user: , , , , and . + + See Also: + `cmd_unmap()`. + """ + args = args.strip() + if not args: + mappings = vimode_settings['user_mappings'] + if mappings: + weechat.prnt("", "User-defined key mappings:") + for key, mapping in mappings.items(): + weechat.prnt("", "{} -> {}".format(key, mapping)) + else: + weechat.prnt("", "nmap: no mapping found.") + elif not " " in args: + weechat.prnt("", "nmap syntax -> :nmap {lhs} {rhs}") + else: + key, mapping = args.split(" ", 1) + # First pass of replacements. We perform two passes as a simple way to + # avoid incorrect replacements due to dictionaries not being + # insertion-ordered prior to Python 3.7. + for regex, repl in REGEX_MAP_KEYS_1.items(): + key = regex.sub(repl, key) + mapping = regex.sub(repl, mapping) + # Second pass of replacements. + for regex, repl in REGEX_MAP_KEYS_2.items(): + key = regex.sub(repl, key) + mapping = regex.sub(repl, mapping) + mappings = vimode_settings['user_mappings'] + mappings[key] = mapping + weechat.config_set_plugin('user_mappings', json.dumps(mappings)) + vimode_settings['user_mappings'] = mappings + +def cmd_nunmap(args): + """Remove a user-defined key mapping. + + See Also: + `cmd_map()`. + """ + args = args.strip() + if not args: + weechat.prnt("", "nunmap syntax -> :unmap {lhs}") + else: + key = args + for regex, repl in REGEX_MAP_KEYS_1.items(): + key = regex.sub(repl, key) + for regex, repl in REGEX_MAP_KEYS_2.items(): + key = regex.sub(repl, key) + mappings = vimode_settings['user_mappings'] + if key in mappings: + del mappings[key] + weechat.config_set_plugin('user_mappings', json.dumps(mappings)) + vimode_settings['user_mappings'] = mappings + else: + weechat.prnt("", "nunmap: No such mapping") + +# See Also: `cb_exec_cmd()`. +VI_COMMAND_GROUPS = {('h', 'help'): "/help", + ('qa', 'qall', 'quita', 'quitall'): "/exit", + ('q', 'quit'): "/close", + ('w', 'write'): "/save", + ('bN', 'bNext', 'bp', 'bprevious'): "/buffer -1", + ('bn', 'bnext'): "/buffer +1", + ('bd', 'bdel', 'bdelete'): "/close", + ('b#',): "/input jump_last_buffer_displayed", + ('b', 'bu', 'buf', 'buffer'): "/buffer", + ('sp', 'split'): "/window splith", + ('vs', 'vsplit'): "/window splitv", + ('nm', 'nmap'): cmd_nmap, + ('nun', 'nunmap'): cmd_nunmap} + +VI_COMMANDS = dict() +for T, v in VI_COMMAND_GROUPS.items(): + VI_COMMANDS.update(dict.fromkeys(T, v)) + + +# Vi operators. +# ------------- + +# Each operator must have a corresponding function, called "operator_X" where +# X is the operator. For example: `operator_c()`. +VI_OPERATORS = ["c", "d", "y"] + + +# Vi motions. +# ----------- + +# Vi motions. Each motion must have a corresponding function, called +# "motion_X" where X is the motion (e.g. `motion_w()`). +# See Also: `SPECIAL_CHARS`. +VI_MOTIONS = ["w", "e", "b", "^", "$", "h", "l", "W", "E", "B", "f", "F", "t", + "T", "ge", "gE", "0"] + +# Special characters for motions. The corresponding function's name is +# converted before calling. For example, "^" will call `motion_carret` instead +# of `motion_^` (which isn't allowed because of illegal characters). +SPECIAL_CHARS = {'^': "carret", + '$': "dollar"} + + +# Methods for vi operators, motions and key bindings. +# =================================================== + +# Documented base examples: +# ------------------------- + +def operator_base(buf, input_line, pos1, pos2, overwrite): + """Operator method example. + + Args: + buf (str): pointer to the current WeeChat buffer. + input_line (str): the content of the input line. + pos1 (int): the starting position of the motion. + pos2 (int): the ending position of the motion. + overwrite (bool, optional): whether the character at the cursor's new + position should be overwritten or not (for inclusive motions). + Defaults to False. + + Notes: + Should be called "operator_X", where X is the operator, and defined in + `VI_OPERATORS`. + Must perform actions (e.g. modifying the input line) on its own, + using the WeeChat API. + + See Also: + For additional examples, see `operator_d()` and + `operator_y()`. + """ + # Get start and end positions. + start = min(pos1, pos2) + end = max(pos1, pos2) + # Print the text the operator should go over. + weechat.prnt("", "Selection: %s" % input_line[start:end]) + +def motion_base(input_line, cur, count): + """Motion method example. + + Args: + input_line (str): the content of the input line. + cur (int): the position of the cursor. + count (int): the amount of times to multiply or iterate the action. + + Returns: + A tuple containing three values: + int: the new position of the cursor. + bool: True if the motion is inclusive, False otherwise. + bool: True if the motion is catching, False otherwise. + See `start_catching_keys()` for more info on catching motions. + + Notes: + Should be called "motion_X", where X is the motion, and defined in + `VI_MOTIONS`. + Must not modify the input line directly. + + See Also: + For additional examples, see `motion_w()` (normal motion) and + `motion_f()` (catching motion). + """ + # Find (relative to cur) position of next number. + pos = get_pos(input_line, REGEX_INT, cur, True, count) + # Return the new (absolute) cursor position. + # This motion is exclusive, so overwrite is False. + return cur + pos, False + +def key_base(buf, input_line, cur, count): + """Key method example. + + Args: + buf (str): pointer to the current WeeChat buffer. + input_line (str): the content of the input line. + cur (int): the position of the cursor. + count (int): the amount of times to multiply or iterate the action. + + Notes: + Should be called `key_X`, where X represents the key(s), and defined + in `VI_KEYS`. + Must perform actions on its own (using the WeeChat API). + + See Also: + For additional examples, see `key_a()` (normal key) and + `key_r()` (catching key). + """ + # Key was pressed. Go to Insert mode (similar to "i"). + set_mode("INSERT") + + +# Operators: +# ---------- + +def operator_d(buf, input_line, pos1, pos2, overwrite=False): + """Delete text from `pos1` to `pos2` from the input line. + + If `overwrite` is set to True, the character at the cursor's new position + is removed as well (the motion is inclusive). + + See Also: + `operator_base()`. + """ + start = min(pos1, pos2) + end = max(pos1, pos2) + if overwrite: + end += 1 + input_line = list(input_line) + del input_line[start:end] + input_line = "".join(input_line) + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, pos1) + +def operator_c(buf, input_line, pos1, pos2, overwrite=False): + """Delete text from `pos1` to `pos2` from the input and enter Insert mode. + + If `overwrite` is set to True, the character at the cursor's new position + is removed as well (the motion is inclusive.) + + See Also: + `operator_base()`. + """ + operator_d(buf, input_line, pos1, pos2, overwrite) + set_mode("INSERT") + +def operator_y(buf, input_line, pos1, pos2, _): + """Yank text from `pos1` to `pos2` from the input line. + + See Also: + `operator_base()`. + """ + start = min(pos1, pos2) + end = max(pos1, pos2) + cmd = vimode_settings['copy_clipboard_cmd'] + proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE) + proc.communicate(input=input_line[start:end].encode()) + + +# Motions: +# -------- + +def motion_0(input_line, cur, count): + """Go to the first character of the line. + + See Also; + `motion_base()`. + """ + return 0, False, False + +def motion_w(input_line, cur, count): + """Go `count` words forward and return position. + + See Also: + `motion_base()`. + """ + pos = get_pos(input_line, REGEX_MOTION_LOWERCASE_W, cur, True, count) + if pos == -1: + return len(input_line), False, False + return cur + pos, False, False + +def motion_W(input_line, cur, count): + """Go `count` WORDS forward and return position. + + See Also: + `motion_base()`. + """ + pos = get_pos(input_line, REGEX_MOTION_UPPERCASE_W, cur, True, count) + if pos == -1: + return len(input_line), False, False + return cur + pos, False, False + +def motion_e(input_line, cur, count): + """Go to the end of `count` words and return position. + + See Also: + `motion_base()`. + """ + for _ in range(max(1, count)): + found = False + pos = cur + for pos in range(cur + 1, len(input_line) - 1): + # Whitespace, keep going. + if WHITESPACE.match(input_line[pos]): + pass + # End of sequence made from 'iskeyword' characters only, + # or end of sequence made from non 'iskeyword' characters only. + elif ((IS_KEYWORD.match(input_line[pos]) and + (not IS_KEYWORD.match(input_line[pos + 1]) or + WHITESPACE.match(input_line[pos + 1]))) or + (not IS_KEYWORD.match(input_line[pos]) and + (IS_KEYWORD.match(input_line[pos + 1]) or + WHITESPACE.match(input_line[pos + 1])))): + found = True + cur = pos + break + # We're at the character before the last and we still found nothing. + # Go to the last character. + if not found: + cur = pos + 1 + return cur, True, False + +def motion_E(input_line, cur, count): + """Go to the end of `count` WORDS and return cusor position. + + See Also: + `motion_base()`. + """ + pos = get_pos(input_line, REGEX_MOTION_UPPERCASE_E, cur, True, count) + if pos == -1: + return len(input_line), False, False + return cur + pos, True, False + +def motion_b(input_line, cur, count): + """Go `count` words backwards and return position. + + See Also: + `motion_base()`. + """ + # "b" is just "e" on inverted data (e.g. "olleH" instead of "Hello"). + pos_inv = motion_e(input_line[::-1], len(input_line) - cur - 1, count)[0] + pos = len(input_line) - pos_inv - 1 + return pos, True, False + +def motion_B(input_line, cur, count): + """Go `count` WORDS backwards and return position. + + See Also: + `motion_base()`. + """ + new_cur = len(input_line) - cur + pos = get_pos(input_line[::-1], REGEX_MOTION_UPPERCASE_B, new_cur, + count=count) + if pos == -1: + return 0, False, False + pos = len(input_line) - (pos + new_cur + 1) + return pos, True, False + +def motion_ge(input_line, cur, count): + """Go to end of `count` words backwards and return position. + + See Also: + `motion_base()`. + """ + # "ge is just "w" on inverted data (e.g. "olleH" instead of "Hello"). + pos_inv = motion_w(input_line[::-1], len(input_line) - cur - 1, count)[0] + pos = len(input_line) - pos_inv - 1 + return pos, True, False + +def motion_gE(input_line, cur, count): + """Go to end of `count` WORDS backwards and return position. + + See Also: + `motion_base()`. + """ + new_cur = len(input_line) - cur - 1 + pos = get_pos(input_line[::-1], REGEX_MOTION_G_UPPERCASE_E, new_cur, + True, count) + if pos == -1: + return 0, False, False + pos = len(input_line) - (pos + new_cur + 1) + return pos, True, False + +def motion_h(input_line, cur, count): + """Go `count` characters to the left and return position. + + See Also: + `motion_base()`. + """ + return max(0, cur - max(count, 1)), False, False + +def motion_l(input_line, cur, count): + """Go `count` characters to the right and return position. + + See Also: + `motion_base()`. + """ + return cur + max(count, 1), False, False + +def motion_carret(input_line, cur, count): + """Go to first non-blank character of line and return position. + + See Also: + `motion_base()`. + """ + pos = get_pos(input_line, REGEX_MOTION_CARRET, 0) + return pos, False, False + +def motion_dollar(input_line, cur, count): + """Go to end of line and return position. + + See Also: + `motion_base()`. + """ + pos = len(input_line) + return pos, False, False + +def motion_f(input_line, cur, count): + """Go to `count`'th occurence of character and return position. + + See Also: + `motion_base()`. + """ + return start_catching_keys(1, "cb_motion_f", input_line, cur, count) + +def cb_motion_f(update_last=True): + """Callback for `motion_f()`. + + Args: + update_last (bool, optional): should `last_search_motion` be updated? + Set to False when calling from `key_semicolon()` or `key_comma()` + so that the last search motion isn't overwritten. + Defaults to True. + + See Also: + `start_catching_keys()`. + """ + global last_search_motion + pattern = catching_keys_data['keys'] + pos = get_pos(catching_keys_data['input_line'], re.escape(pattern), + catching_keys_data['cur'], True, + catching_keys_data['count']) + catching_keys_data['new_cur'] = max(0, pos) + catching_keys_data['cur'] + if update_last: + last_search_motion = {'motion': "f", 'data': pattern} + cb_key_combo_default(None, None, "") + +def motion_F(input_line, cur, count): + """Go to `count`'th occurence of char to the right and return position. + + See Also: + `motion_base()`. + """ + return start_catching_keys(1, "cb_motion_F", input_line, cur, count) + +def cb_motion_F(update_last=True): + """Callback for `motion_F()`. + + Args: + update_last (bool, optional): should `last_search_motion` be updated? + Set to False when calling from `key_semicolon()` or `key_comma()` + so that the last search motion isn't overwritten. + Defaults to True. + + See Also: + `start_catching_keys()`. + """ + global last_search_motion + pattern = catching_keys_data['keys'] + cur = len(catching_keys_data['input_line']) - catching_keys_data['cur'] + pos = get_pos(catching_keys_data['input_line'][::-1], + re.escape(pattern), + cur, + False, + catching_keys_data['count']) + catching_keys_data['new_cur'] = catching_keys_data['cur'] - max(0, pos + 1) + if update_last: + last_search_motion = {'motion': "F", 'data': pattern} + cb_key_combo_default(None, None, "") + +def motion_t(input_line, cur, count): + """Go to `count`'th occurence of char and return position. + + The position returned is the position of the character to the left of char. + + See Also: + `motion_base()`. + """ + return start_catching_keys(1, "cb_motion_t", input_line, cur, count) + +def cb_motion_t(update_last=True): + """Callback for `motion_t()`. + + Args: + update_last (bool, optional): should `last_search_motion` be updated? + Set to False when calling from `key_semicolon()` or `key_comma()` + so that the last search motion isn't overwritten. + Defaults to True. + + See Also: + `start_catching_keys()`. + """ + global last_search_motion + pattern = catching_keys_data['keys'] + pos = get_pos(catching_keys_data['input_line'], re.escape(pattern), + catching_keys_data['cur'] + 1, + True, catching_keys_data['count']) + pos += 1 + if pos > 0: + catching_keys_data['new_cur'] = pos + catching_keys_data['cur'] - 1 + else: + catching_keys_data['new_cur'] = catching_keys_data['cur'] + if update_last: + last_search_motion = {'motion': "t", 'data': pattern} + cb_key_combo_default(None, None, "") + +def motion_T(input_line, cur, count): + """Go to `count`'th occurence of char to the left and return position. + + The position returned is the position of the character to the right of + char. + + See Also: + `motion_base()`. + """ + return start_catching_keys(1, "cb_motion_T", input_line, cur, count) + +def cb_motion_T(update_last=True): + """Callback for `motion_T()`. + + Args: + update_last (bool, optional): should `last_search_motion` be updated? + Set to False when calling from `key_semicolon()` or `key_comma()` + so that the last search motion isn't overwritten. + Defaults to True. + + See Also: + `start_catching_keys()`. + """ + global last_search_motion + pattern = catching_keys_data['keys'] + pos = get_pos(catching_keys_data['input_line'][::-1], re.escape(pattern), + (len(catching_keys_data['input_line']) - + (catching_keys_data['cur'] + 1)) + 1, + True, catching_keys_data['count']) + pos += 1 + if pos > 0: + catching_keys_data['new_cur'] = catching_keys_data['cur'] - pos + 1 + else: + catching_keys_data['new_cur'] = catching_keys_data['cur'] + if update_last: + last_search_motion = {'motion': "T", 'data': pattern} + cb_key_combo_default(None, None, "") + + +# Keys: +# ----- + +def key_cc(buf, input_line, cur, count): + """Delete line and start Insert mode. + + See Also: + `key_base()`. + """ + weechat.command("", "/input delete_line") + set_mode("INSERT") + +def key_C(buf, input_line, cur, count): + """Delete from cursor to end of line and start Insert mode. + + See Also: + `key_base()`. + """ + weechat.command("", "/input delete_end_of_line") + set_mode("INSERT") + +def key_yy(buf, input_line, cur, count): + """Yank line. + + See Also: + `key_base()`. + """ + cmd = vimode_settings['copy_clipboard_cmd'] + proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE) + proc.communicate(input=input_line.encode()) + +def key_p(buf, input_line, cur, count): + """Paste text. + + See Also: + `key_base()`. + """ + cmd = vimode_settings['paste_clipboard_cmd'] + weechat.hook_process(cmd, 10 * 1000, "cb_key_p", weechat.current_buffer()) + +def cb_key_p(data, command, return_code, output, err): + """Callback for fetching clipboard text and pasting it.""" + buf = "" + this_buffer = data + if output != "": + buf += output.strip() + if return_code == 0: + my_input = weechat.buffer_get_string(this_buffer, "input") + pos = weechat.buffer_get_integer(this_buffer, "input_pos") + my_input = my_input[:pos] + buf + my_input[pos:] + pos += len(buf) + weechat.buffer_set(this_buffer, "input", my_input) + weechat.buffer_set(this_buffer, "input_pos", str(pos)) + return weechat.WEECHAT_RC_OK + +def key_i(buf, input_line, cur, count): + """Start Insert mode. + + See Also: + `key_base()`. + """ + set_mode("INSERT") + +def key_a(buf, input_line, cur, count): + """Move cursor one character to the right and start Insert mode. + + See Also: + `key_base()`. + """ + set_cur(buf, input_line, cur + 1, False) + set_mode("INSERT") + +def key_A(buf, input_line, cur, count): + """Move cursor to end of line and start Insert mode. + + See Also: + `key_base()`. + """ + set_cur(buf, input_line, len(input_line), False) + set_mode("INSERT") + +def key_I(buf, input_line, cur, count): + """Move cursor to first non-blank character and start Insert mode. + + See Also: + `key_base()`. + """ + pos, _, _ = motion_carret(input_line, cur, 0) + set_cur(buf, input_line, pos) + set_mode("INSERT") + +def key_G(buf, input_line, cur, count): + """Scroll to specified line or bottom of buffer. + + See Also: + `key_base()`. + """ + if count > 0: + # This is necessary to prevent weird scroll jumps. + weechat.command("", "/window scroll_top") + weechat.command("", "/window scroll %s" % (count - 1)) + else: + weechat.command("", "/window scroll_bottom") + +def key_r(buf, input_line, cur, count): + """Replace `count` characters under the cursor. + + See Also: + `key_base()`. + """ + start_catching_keys(1, "cb_key_r", input_line, cur, count, buf) + +def cb_key_r(): + """Callback for `key_r()`. + + See Also: + `start_catching_keys()`. + """ + global catching_keys_data + input_line = list(catching_keys_data['input_line']) + count = max(catching_keys_data['count'], 1) + cur = catching_keys_data['cur'] + if cur + count <= len(input_line): + for _ in range(count): + input_line[cur] = catching_keys_data['keys'] + cur += 1 + input_line = "".join(input_line) + weechat.buffer_set(catching_keys_data['buf'], "input", input_line) + set_cur(catching_keys_data['buf'], input_line, cur - 1) + catching_keys_data = {'amount': 0} + +def key_R(buf, input_line, cur, count): + """Start Replace mode. + + See Also: + `key_base()`. + """ + set_mode("REPLACE") + +def key_tilda(buf, input_line, cur, count): + """Switch the case of `count` characters under the cursor. + + See Also: + `key_base()`. + """ + input_line = list(input_line) + count = max(1, count) + while count and cur < len(input_line): + input_line[cur] = input_line[cur].swapcase() + count -= 1 + cur += 1 + input_line = "".join(input_line) + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, cur) + +def key_alt_j(buf, input_line, cur, count): + """Go to WeeChat buffer. + + Called to preserve WeeChat's alt-j buffer switching. + + This is only called when alt-j is pressed after pressing Esc, because + \x01\x01j is received in key_combo_default which becomes \x01j after + removing the detected Esc key. + If Esc isn't the last pressed key, \x01j is directly received in + key_combo_default. + """ + start_catching_keys(2, "cb_key_alt_j", input_line, cur, count) + +def cb_key_alt_j(): + """Callback for `key_alt_j()`. + + See Also: + `start_catching_keys()`. + """ + global catching_keys_data + weechat.command("", "/buffer " + catching_keys_data['keys']) + catching_keys_data = {'amount': 0} + +def key_semicolon(buf, input_line, cur, count, swap=False): + """Repeat last f, t, F, T `count` times. + + Args: + swap (bool, optional): if True, the last motion will be repeated in the + opposite direction (e.g. "f" instead of "F"). Defaults to False. + + See Also: + `key_base()`. + """ + global catching_keys_data, vi_buffer + catching_keys_data = ({'amount': 0, + 'input_line': input_line, + 'cur': cur, + 'keys': last_search_motion['data'], + 'count': count, + 'new_cur': 0, + 'buf': buf}) + # Swap the motion's case if called from key_comma. + if swap: + motion = last_search_motion['motion'].swapcase() + else: + motion = last_search_motion['motion'] + func = "cb_motion_%s" % motion + vi_buffer = motion + globals()[func](False) + +def key_comma(buf, input_line, cur, count): + """Repeat last f, t, F, T in opposite direction `count` times. + + See Also: + `key_base()`. + """ + key_semicolon(buf, input_line, cur, count, True) + +def key_u(buf, input_line, cur, count): + """Undo change `count` times. + + See Also: + `key_base()`. + """ + buf = weechat.current_buffer() + if buf not in undo_history: + return + for _ in range(max(count, 1)): + if undo_history_index[buf] > -len(undo_history[buf]): + undo_history_index[buf] -= 1 + input_line = undo_history[buf][undo_history_index[buf]] + weechat.buffer_set(buf, "input", input_line) + else: + break + +def key_ctrl_r(buf, input_line, cur, count): + """Redo change `count` times. + + See Also: + `key_base()`. + """ + if buf not in undo_history: + return + for _ in range(max(count, 1)): + if undo_history_index[buf] < -1: + undo_history_index[buf] += 1 + input_line = undo_history[buf][undo_history_index[buf]] + weechat.buffer_set(buf, "input", input_line) + else: + break + + +# Vi key bindings. +# ================ + +# String values will be executed as normal WeeChat commands. +# For functions, see `key_base()` for reference. +VI_KEYS = {'j': "/window scroll_down", + 'k': "/window scroll_up", + 'G': key_G, + 'gg': "/window scroll_top", + 'x': "/input delete_next_char", + 'X': "/input delete_previous_char", + 'dd': "/input delete_line", + 'D': "/input delete_end_of_line", + 'cc': key_cc, + 'C': key_C, + 'i': key_i, + 'a': key_a, + 'A': key_A, + 'I': key_I, + 'yy': key_yy, + 'p': key_p, + 'gt': "/buffer -1", + 'K': "/buffer -1", + 'gT': "/buffer +1", + 'J': "/buffer +1", + 'r': key_r, + 'R': key_R, + '~': key_tilda, + 'nt': "/bar scroll nicklist * -100%", + 'nT': "/bar scroll nicklist * +100%", + '\x01[[A': "/input history_previous", + '\x01[[B': "/input history_next", + '\x01[[C': "/input move_next_char", + '\x01[[D': "/input move_previous_char", + '\x01[[H': "/input move_beginning_of_line", + '\x01[[F': "/input move_end_of_line", + '\x01[[5~': "/window page_up", + '\x01[[6~': "/window page_down", + '\x01[[3~': "/input delete_next_char", + '\x01[[2~': key_i, + '\x01M': "/input return", + '\x01?': "/input move_previous_char", + ' ': "/input move_next_char", + '\x01[j': key_alt_j, + '\x01[1': "/buffer *1", + '\x01[2': "/buffer *2", + '\x01[3': "/buffer *3", + '\x01[4': "/buffer *4", + '\x01[5': "/buffer *5", + '\x01[6': "/buffer *6", + '\x01[7': "/buffer *7", + '\x01[8': "/buffer *8", + '\x01[9': "/buffer *9", + '\x01[0': "/buffer *10", + '\x01^': "/input jump_last_buffer_displayed", + '\x01D': "/window page_down", + '\x01U': "/window page_up", + '\x01Wh': "/window left", + '\x01Wj': "/window down", + '\x01Wk': "/window up", + '\x01Wl': "/window right", + '\x01W=': "/window balance", + '\x01Wx': "/window swap", + '\x01Ws': "/window splith", + '\x01Wv': "/window splitv", + '\x01Wq': "/window merge", + ';': key_semicolon, + ',': key_comma, + 'u': key_u, + '\x01R': key_ctrl_r} + +# Add alt-j bindings. +for i in range(10, 99): + VI_KEYS['\x01[j%s' % i] = "/buffer %s" % i + + +# Key handling. +# ============= + +def cb_key_pressed(data, signal, signal_data): + """Detect potential Esc presses. + + Alt and Esc are detected as the same key in most terminals. The difference + is that Alt signal is sent just before the other pressed key's signal. + We therefore use a timeout (50ms) to detect whether Alt or Esc was pressed. + """ + global last_signal_time + last_signal_time = time.time() + if signal_data == "\x01[": + # In 50ms, check if any other keys were pressed. If not, it's Esc! + weechat.hook_timer(50, 0, 1, "cb_check_esc", + "{:f}".format(last_signal_time)) + return weechat.WEECHAT_RC_OK + +def cb_check_esc(data, remaining_calls): + """Check if the Esc key was pressed and change the mode accordingly.""" + global esc_pressed, vi_buffer, catching_keys_data + # Not perfect, would be better to use direct comparison (==) but that only + # works for py2 and not for py3. + if abs(last_signal_time - float(data)) <= 0.000001: + esc_pressed += 1 + if mode == "SEARCH": + weechat.command("", "/input search_stop_here") + set_mode("NORMAL") + # Cancel any current partial commands. + vi_buffer = "" + catching_keys_data = {'amount': 0} + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK + +def cb_key_combo_default(data, signal, signal_data): + """Eat and handle key events when in Normal mode, if needed. + + The key_combo_default signal is sent when a key combo is pressed. For + example, alt-k will send the "\x01[k" signal. + + Esc is handled a bit differently to avoid delays, see `cb_key_pressed()`. + """ + global esc_pressed, vi_buffer, cmd_compl_text, cmd_text_orig, \ + cmd_compl_pos, cmd_history_index + + # If Esc was pressed, strip the Esc part from the pressed keys. + # Example: user presses Esc followed by i. This is detected as "\x01[i", + # but we only want to handle "i". + keys = signal_data + if esc_pressed or esc_pressed == -2: + if keys.startswith("\x01[" * esc_pressed): + # Multiples of 3 seem to "cancel" themselves, + # e.g. Esc-Esc-Esc-Alt-j-11 is detected as "\x01[\x01[\x01" + # followed by "\x01[j11" (two different signals). + if signal_data == "\x01[" * 3: + esc_pressed = -1 # `cb_check_esc()` will increment it to 0. + else: + esc_pressed = 0 + # This can happen if a valid combination is started but interrupted + # with Esc, such as Ctrl-W→Esc→w which would send two signals: + # "\x01W\x01[" then "\x01W\x01[w". + # In that case, we still need to handle the next signal ("\x01W\x01[w") + # so we use the special value "-2". + else: + esc_pressed = -2 + keys = keys.split("\x01[")[-1] # Remove the "Esc" part(s). + # Ctrl-Space. + elif keys == "\x01@": + set_mode("NORMAL") + return weechat.WEECHAT_RC_OK_EAT + + # Clear the undo history for this buffer on . + if keys == "\x01M": + buf = weechat.current_buffer() + clear_undo_history(buf) + + # Detect imap_esc presses if any. + if mode == "INSERT": + imap_esc = vimode_settings['imap_esc'] + if not imap_esc: + return weechat.WEECHAT_RC_OK + if (imap_esc.startswith(vi_buffer) and + imap_esc[len(vi_buffer):len(vi_buffer)+1] == keys): + vi_buffer += keys + weechat.bar_item_update("vi_buffer") + weechat.hook_timer(int(vimode_settings['imap_esc_timeout']), 0, 1, + "cb_check_imap_esc", vi_buffer) + elif (vi_buffer and imap_esc.startswith(vi_buffer) and + imap_esc[len(vi_buffer):len(vi_buffer)+1] != keys): + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + # imap_esc sequence detected -- remove the sequence keys from the + # Weechat input bar and enter Normal mode. + if imap_esc == vi_buffer: + buf = weechat.current_buffer() + input_line = weechat.buffer_get_string(buf, "input") + cur = weechat.buffer_get_integer(buf, "input_pos") + input_line = (input_line[:cur-len(imap_esc)+1] + + input_line[cur:]) + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, cur-len(imap_esc)+1, False) + set_mode("NORMAL") + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK_EAT + return weechat.WEECHAT_RC_OK + + # We're in Replace mode — allow "normal" key presses (e.g. "a") and + # overwrite the next character with them, but let the other key presses + # pass normally (e.g. backspace, arrow keys, etc). + if mode == "REPLACE": + if len(keys) == 1: + weechat.command("", "/input delete_next_char") + elif keys == "\x01?": + weechat.command("", "/input move_previous_char") + return weechat.WEECHAT_RC_OK_EAT + return weechat.WEECHAT_RC_OK + + # We're catching keys! Only "normal" key presses interest us (e.g. "a"), + # not complex ones (e.g. backspace). + if len(keys) == 1 and catching_keys_data['amount']: + catching_keys_data['keys'] += keys + catching_keys_data['amount'] -= 1 + # Done catching keys, execute the callback. + if catching_keys_data['amount'] == 0: + globals()[catching_keys_data['callback']]() + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK_EAT + + # We're in command-line mode. + if mode == "COMMAND": + buf = weechat.current_buffer() + cmd_text = weechat.buffer_get_string(buf, "input") + weechat.hook_timer(1, 0, 1, "cb_check_cmd_mode", "") + # Return key. + if keys == "\x01M": + weechat.hook_timer(1, 0, 1, "cb_exec_cmd", cmd_text) + if len(cmd_text) > 1 and (not cmd_history or + cmd_history[-1] != cmd_text): + cmd_history.append(cmd_text) + cmd_history_index = 0 + set_mode("NORMAL") + buf = weechat.current_buffer() + input_line = input_line_backup[buf]['input_line'] + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, input_line_backup[buf]['cur'], False) + # Up arrow. + elif keys == "\x01[[A": + if cmd_history_index > -len(cmd_history): + cmd_history_index -= 1 + cmd_text = cmd_history[cmd_history_index] + weechat.buffer_set(buf, "input", cmd_text) + set_cur(buf, cmd_text, len(cmd_text), False) + # Down arrow. + elif keys == "\x01[[B": + if cmd_history_index < -1: + cmd_history_index += 1 + cmd_text = cmd_history[cmd_history_index] + else: + cmd_history_index = 0 + cmd_text = ":" + weechat.buffer_set(buf, "input", cmd_text) + set_cur(buf, cmd_text, len(cmd_text), False) + # Tab key. No completion when searching ("/"). + elif keys == "\x01I" and cmd_text[0] == ":": + if cmd_text_orig is None: + input_ = list(cmd_text) + del input_[0] + cmd_text_orig = "".join(input_) + cmd_compl_list = [] + for cmd in VI_COMMANDS.keys(): + if cmd.startswith(cmd_text_orig): + cmd_compl_list.append(cmd) + if cmd_compl_list: + curr_suggestion = cmd_compl_list[cmd_compl_pos] + cmd_text = ":%s" % curr_suggestion + cmd_compl_list[cmd_compl_pos] = weechat.string_eval_expression( + "${color:bold}%s${color:-bold}" % curr_suggestion, + {}, {}, {}) + cmd_compl_text = ", ".join(cmd_compl_list) + cmd_compl_pos = (cmd_compl_pos + 1) % len(cmd_compl_list) + weechat.buffer_set(buf, "input", cmd_text) + set_cur(buf, cmd_text, len(cmd_text), False) + # Input. + else: + cmd_compl_text = "" + cmd_text_orig = None + cmd_compl_pos = 0 + weechat.bar_item_update("cmd_completion") + if keys in ["\x01M", "\x01[[A", "\x01[[B"]: + cmd_compl_text = "" + return weechat.WEECHAT_RC_OK_EAT + else: + return weechat.WEECHAT_RC_OK + # Enter command mode. + elif keys in [":", "/"]: + if keys == "/": + weechat.command("", "/input search_text_here") + if not weechat.config_string_to_boolean( + vimode_settings['search_vim']): + return weechat.WEECHAT_RC_OK + else: + buf = weechat.current_buffer() + cur = weechat.buffer_get_integer(buf, "input_pos") + input_line = weechat.buffer_get_string(buf, "input") + input_line_backup[buf] = {'input_line': input_line, 'cur': cur} + input_line = ":" + weechat.buffer_set(buf, "input", input_line) + set_cur(buf, input_line, 1, False) + set_mode("COMMAND") + cmd_compl_text = "" + cmd_text_orig = None + cmd_compl_pos = 0 + return weechat.WEECHAT_RC_OK_EAT + + # Add key to the buffer. + vi_buffer += keys + weechat.bar_item_update("vi_buffer") + if not vi_buffer: + return weechat.WEECHAT_RC_OK + + # Check if the keys have a (partial or full) match. If so, also get the + # keys without the count. (These are the actual keys we should handle.) + # After that, `vi_buffer` is only used for display purposes — only + # `vi_keys` is checked for all the handling. + # If no matches are found, the keys buffer is cleared. + matched, vi_keys, count = get_keys_and_count(vi_buffer) + if not matched: + vi_buffer = "" + return weechat.WEECHAT_RC_OK_EAT + # Check if it's a command (user defined key mapped to a :cmd). + if vi_keys.startswith(":"): + weechat.hook_timer(1, 0, 1, "cb_exec_cmd", "{} {}".format(vi_keys, + count)) + vi_buffer = "" + return weechat.WEECHAT_RC_OK_EAT + # It's a WeeChat command (user defined key mapped to a /cmd). + if vi_keys.startswith("/"): + weechat.command("", vi_keys) + vi_buffer = "" + return weechat.WEECHAT_RC_OK_EAT + + buf = weechat.current_buffer() + input_line = weechat.buffer_get_string(buf, "input") + cur = weechat.buffer_get_integer(buf, "input_pos") + + # It's a default mapping. If the corresponding value is a string, we assume + # it's a WeeChat command. Otherwise, it's a method we'll call. + if vi_keys in VI_KEYS: + if vi_keys not in ['u', '\x01R']: + add_undo_history(buf, input_line) + if isinstance(VI_KEYS[vi_keys], str): + for _ in range(max(count, 1)): + # This is to avoid crashing WeeChat on script reloads/unloads, + # because no hooks must still be running when a script is + # reloaded or unloaded. + if (VI_KEYS[vi_keys] == "/input return" and + input_line.startswith("/script ")): + return weechat.WEECHAT_RC_OK + weechat.command("", VI_KEYS[vi_keys]) + current_cur = weechat.buffer_get_integer(buf, "input_pos") + set_cur(buf, input_line, current_cur) + else: + VI_KEYS[vi_keys](buf, input_line, cur, count) + # It's a motion (e.g. "w") — call `motion_X()` where X is the motion, then + # set the cursor's position to what that function returned. + elif vi_keys in VI_MOTIONS: + if vi_keys in SPECIAL_CHARS: + func = "motion_%s" % SPECIAL_CHARS[vi_keys] + else: + func = "motion_%s" % vi_keys + end, _, _ = globals()[func](input_line, cur, count) + set_cur(buf, input_line, end) + # It's an operator + motion (e.g. "dw") — call `motion_X()` (where X is + # the motion), then we call `operator_Y()` (where Y is the operator) + # with the position `motion_X()` returned. `operator_Y()` should then + # handle changing the input line. + elif (len(vi_keys) > 1 and + vi_keys[0] in VI_OPERATORS and + vi_keys[1:] in VI_MOTIONS): + add_undo_history(buf, input_line) + if vi_keys[1:] in SPECIAL_CHARS: + func = "motion_%s" % SPECIAL_CHARS[vi_keys[1:]] + else: + func = "motion_%s" % vi_keys[1:] + pos, overwrite, catching = globals()[func](input_line, cur, count) + # If it's a catching motion, we don't want to call the operator just + # yet -- this code will run again when the motion is complete, at which + # point we will. + if not catching: + oper = "operator_%s" % vi_keys[0] + globals()[oper](buf, input_line, cur, pos, overwrite) + # The combo isn't completed yet (e.g. just "d"). + else: + return weechat.WEECHAT_RC_OK_EAT + + # We've already handled the key combo, so clear the keys buffer. + if not catching_keys_data['amount']: + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK_EAT + +def cb_check_imap_esc(data, remaining_calls): + """Clear the imap_esc sequence after some time if nothing was pressed.""" + global vi_buffer + if vi_buffer == data: + vi_buffer = "" + weechat.bar_item_update("vi_buffer") + return weechat.WEECHAT_RC_OK + +def cb_key_combo_search(data, signal, signal_data): + """Handle keys while search mode is active (if search_vim is enabled).""" + if not weechat.config_string_to_boolean(vimode_settings['search_vim']): + return weechat.WEECHAT_RC_OK + if mode == "COMMAND": + if signal_data == "\x01M": + set_mode("SEARCH") + return weechat.WEECHAT_RC_OK_EAT + elif mode == "SEARCH": + if signal_data == "\x01M": + set_mode("NORMAL") + else: + if signal_data == "n": + weechat.command("", "/input search_next") + elif signal_data == "N": + weechat.command("", "/input search_previous") + # Start a new search. + elif signal_data == "/": + weechat.command("", "/input search_stop_here") + set_mode("NORMAL") + weechat.command("", "/input search_text_here") + return weechat.WEECHAT_RC_OK_EAT + return weechat.WEECHAT_RC_OK + +# Callbacks. +# ========== + +# Bar items. +# ---------- + +def cb_vi_buffer(data, item, window): + """Return the content of the vi buffer (pressed keys on hold).""" + return vi_buffer + +def cb_cmd_completion(data, item, window): + """Return the text of the command line.""" + return cmd_compl_text + +def cb_mode_indicator(data, item, window): + """Return the current mode (INSERT/NORMAL/REPLACE/...).""" + return "{}{}{}{}{}".format( + weechat.color(mode_colors[mode]), + vimode_settings['mode_indicator_prefix'], mode, + vimode_settings['mode_indicator_suffix'], weechat.color("reset")) + +def cb_line_numbers(data, item, window): + """Fill the line numbers bar item.""" + bar_height = weechat.window_get_integer(window, "win_chat_height") + content = "" + for i in range(1, bar_height + 1): + content += "{}{}{}\n".format(vimode_settings['line_number_prefix'], i, + vimode_settings['line_number_suffix']) + return content + +# Callbacks for the line numbers bar. +# ................................... + +def cb_update_line_numbers(data, signal, signal_data): + """Call `cb_timer_update_line_numbers()` when switching buffers. + + A timer is required because the bar item is refreshed before the new buffer + is actually displayed, so ``win_chat_height`` would refer to the old + buffer. Using a timer refreshes the item after the new buffer is displayed. + """ + weechat.hook_timer(10, 0, 1, "cb_timer_update_line_numbers", "") + return weechat.WEECHAT_RC_OK + +def cb_timer_update_line_numbers(data, remaining_calls): + """Update the line numbers bar item.""" + weechat.bar_item_update("line_numbers") + return weechat.WEECHAT_RC_OK + + +# Config. +# ------- + +def cb_config(data, option, value): + """Script option changed, update our copy.""" + option_name = option.split(".")[-1] + if option_name in vimode_settings: + vimode_settings[option_name] = value + if option_name == 'user_mappings': + load_user_mappings() + if "_color" in option_name: + load_mode_colors() + return weechat.WEECHAT_RC_OK + +def load_mode_colors(): + mode_colors.update({ + 'NORMAL': "{},{}".format( + vimode_settings['mode_indicator_normal_color'], + vimode_settings['mode_indicator_normal_color_bg']), + 'INSERT': "{},{}".format( + vimode_settings['mode_indicator_insert_color'], + vimode_settings['mode_indicator_insert_color_bg']), + 'REPLACE': "{},{}".format( + vimode_settings['mode_indicator_replace_color'], + vimode_settings['mode_indicator_replace_color_bg']), + 'COMMAND': "{},{}".format( + vimode_settings['mode_indicator_cmd_color'], + vimode_settings['mode_indicator_cmd_color_bg']), + 'SEARCH': "{},{}".format( + vimode_settings['mode_indicator_search_color'], + vimode_settings['mode_indicator_search_color_bg']) + }) + +def load_user_mappings(): + """Load user-defined mappings.""" + mappings = {} + if vimode_settings['user_mappings']: + mappings.update(json.loads(vimode_settings['user_mappings'])) + vimode_settings['user_mappings'] = mappings + + +# Command-line execution. +# ----------------------- + +def cb_exec_cmd(data, remaining_calls): + """Translate and execute our custom commands to WeeChat command.""" + # Process the entered command. + data = list(data) + del data[0] + data = "".join(data) + # s/foo/bar command. + if data.startswith("s/"): + cmd = data + parsed_cmd = next(csv.reader(StringIO(cmd), delimiter="/", + escapechar="\\")) + pattern = re.escape(parsed_cmd[1]) + repl = parsed_cmd[2] + repl = re.sub(r"([^\\])&", r"\1" + pattern, repl) + flag = None + if len(parsed_cmd) == 4: + flag = parsed_cmd[3] + count = 1 + if flag == "g": + count = 0 + buf = weechat.current_buffer() + input_line = weechat.buffer_get_string(buf, "input") + input_line = re.sub(pattern, repl, input_line, count) + weechat.buffer_set(buf, "input", input_line) + # Shell command. + elif data.startswith("!"): + weechat.command("", "/exec -buffer shell %s" % data[1:]) + # Commands like `:22`. This should start cursor mode (``/cursor``) and take + # us to the relevant line. + elif data.isdigit(): + line_number = int(data) + hdata_window = weechat.hdata_get("window") + window = weechat.current_window() + x = weechat.hdata_integer(hdata_window, window, "win_chat_x") + y = (weechat.hdata_integer(hdata_window, window, "win_chat_y") + + (line_number - 1)) + weechat.command("", "/cursor go {},{}".format(x, y)) + # Check againt defined commands. + elif data: + raw_data = data + data = data.split(" ", 1) + cmd = data[0] + args = "" + if len(data) == 2: + args = data[1] + if cmd in VI_COMMANDS: + if isinstance(VI_COMMANDS[cmd], str): + weechat.command("", "%s %s" % (VI_COMMANDS[cmd], args)) + else: + VI_COMMANDS[cmd](args) + else: + # Check for commands not sepearated by space (e.g. "b2") + for i in range(1, len(raw_data)): + tmp_cmd = raw_data[:i] + tmp_args = raw_data[i:] + if tmp_cmd in VI_COMMANDS and tmp_args.isdigit(): + weechat.command("", "%s %s" % (VI_COMMANDS[tmp_cmd], + tmp_args)) + return weechat.WEECHAT_RC_OK + # No vi commands found, run the command as WeeChat command + weechat.command("", "/{} {}".format(cmd, args)) + return weechat.WEECHAT_RC_OK + +def cb_vimode_go_to_normal(data, buf, args): + set_mode("NORMAL") + return weechat.WEECHAT_RC_OK + +# Script commands. +# ---------------- + +def cb_vimode_cmd(data, buf, args): + """Handle script commands (``/vimode ``).""" + # ``/vimode`` or ``/vimode help`` + if not args or args == "help": + weechat.prnt("", "[vimode.py] %s" % README_URL) + # ``/vimode bind_keys`` or ``/vimode bind_keys --list`` + elif args.startswith("bind_keys"): + infolist = weechat.infolist_get("key", "", "default") + weechat.infolist_reset_item_cursor(infolist) + commands = ["/key unbind ctrl-W", + "/key bind ctrl-W /input delete_previous_word", + "/key bind ctrl-^ /input jump_last_buffer_displayed", + "/key bind ctrl-Wh /window left", + "/key bind ctrl-Wj /window down", + "/key bind ctrl-Wk /window up", + "/key bind ctrl-Wl /window right", + "/key bind ctrl-W= /window balance", + "/key bind ctrl-Wx /window swap", + "/key bind ctrl-Ws /window splith", + "/key bind ctrl-Wv /window splitv", + "/key bind ctrl-Wq /window merge"] + while weechat.infolist_next(infolist): + key = weechat.infolist_string(infolist, "key") + if re.match(REGEX_PROBLEMATIC_KEYBINDINGS, key): + commands.append("/key unbind %s" % key) + if args == "bind_keys": + weechat.prnt("", "Running commands:") + for command in commands: + weechat.command("", command) + weechat.prnt("", "Done.") + elif args == "bind_keys --list": + weechat.prnt("", "Listing commands we'll run:") + for command in commands: + weechat.prnt("", " %s" % command) + weechat.prnt("", "Done.") + return weechat.WEECHAT_RC_OK + + +# Helpers. +# ======== + +# Motions/keys helpers. +# --------------------- + +def get_pos(data, regex, cur, ignore_cur=False, count=0): + """Return the position of `regex` match in `data`, starting at `cur`. + + Args: + data (str): the data to search in. + regex (pattern): regex pattern to search for. + cur (int): where to start the search. + ignore_cur (bool, optional): should the first match be ignored if it's + also the character at `cur`? + Defaults to False. + count (int, optional): the index of the match to return. Defaults to 0. + + Returns: + int: position of the match. -1 if no matches are found. + """ + # List of the *positions* of the found patterns. + matches = [m.start() for m in re.finditer(regex, data[cur:])] + pos = -1 + if count: + if len(matches) > count - 1: + if ignore_cur and matches[0] == 0: + if len(matches) > count: + pos = matches[count] + else: + pos = matches[count - 1] + elif matches: + if ignore_cur and matches[0] == 0: + if len(matches) > 1: + pos = matches[1] + else: + pos = matches[0] + return pos + +def set_cur(buf, input_line, pos, cap=True): + """Set the cursor's position. + + Args: + buf (str): pointer to the current WeeChat buffer. + input_line (str): the content of the input line. + pos (int): the position to set the cursor to. + cap (bool, optional): if True, the `pos` will shortened to the length + of `input_line` if it's too long. Defaults to True. + """ + if cap: + pos = min(pos, len(input_line) - 1) + weechat.buffer_set(buf, "input_pos", str(pos)) + +def start_catching_keys(amount, callback, input_line, cur, count, buf=None): + """Start catching keys. Used for special commands (e.g. "f", "r"). + + amount (int): amount of keys to catch. + callback (str): name of method to call once all keys are caught. + input_line (str): input line's content. + cur (int): cursor's position. + count (int): count, e.g. "2" for "2fs". + buf (str, optional): pointer to the current WeeChat buffer. + Defaults to None. + + `catching_keys_data` is a dict with the above arguments, as well as: + keys (str): pressed keys will be added under this key. + new_cur (int): the new cursor's position, set in the callback. + + When catching keys is active, normal pressed keys (e.g. "a" but not arrows) + will get added to `catching_keys_data` under the key "keys", and will not + be handled any further. + Once all keys are caught, the method defined in the "callback" key is + called, and can use the data in `catching_keys_data` to perform its action. + """ + global catching_keys_data + if "new_cur" in catching_keys_data: + new_cur = catching_keys_data['new_cur'] + catching_keys_data = {'amount': 0} + return new_cur, True, False + catching_keys_data = ({'amount': amount, + 'callback': callback, + 'input_line': input_line, + 'cur': cur, + 'keys': "", + 'count': count, + 'new_cur': 0, + 'buf': buf}) + return cur, False, True + +def get_keys_and_count(combo): + """Check if `combo` is a valid combo and extract keys/counts if so. + + Args: + combo (str): pressed keys combo. + + Returns: + matched (bool): True if the combo has a (partial or full) match, False + otherwise. + combo (str): `combo` with the count removed. These are the actual keys + we should handle. User mappings are also expanded. + count (int): count for `combo`. + """ + # Look for a potential match (e.g. "d" might become "dw" or "dd" so we + # accept it, but "d9" is invalid). + matched = False + # Digits are allowed at the beginning (counts or "0"). + count = 0 + if combo.isdigit(): + matched = True + elif combo and combo[0].isdigit(): + count = "" + for char in combo: + if char.isdigit(): + count += char + else: + break + combo = combo.replace(count, "", 1) + count = int(count) + # It's a user defined key. Expand it. + if combo in vimode_settings['user_mappings']: + combo = vimode_settings['user_mappings'][combo] + # It's a WeeChat command. + if not matched and combo.startswith("/"): + matched = True + # Check against defined keys. + if not matched: + for key in VI_KEYS: + if key.startswith(combo): + matched = True + break + # Check against defined motions. + if not matched: + for motion in VI_MOTIONS: + if motion.startswith(combo): + matched = True + break + # Check against defined operators + motions. + if not matched: + for operator in VI_OPERATORS: + if combo.startswith(operator): + # Check for counts before the motion (but after the operator). + vi_keys_no_op = combo[len(operator):] + # There's no motion yet. + if vi_keys_no_op.isdigit(): + matched = True + break + # Get the motion count, then multiply the operator count by + # it, similar to vim's behavior. + elif vi_keys_no_op and vi_keys_no_op[0].isdigit(): + motion_count = "" + for char in vi_keys_no_op: + if char.isdigit(): + motion_count += char + else: + break + # Remove counts from `vi_keys_no_op`. + combo = combo.replace(motion_count, "", 1) + motion_count = int(motion_count) + count = max(count, 1) * motion_count + # Check against defined motions. + for motion in VI_MOTIONS: + if motion.startswith(combo[1:]): + matched = True + break + return matched, combo, count + + +# Other helpers. +# -------------- + +def set_mode(arg): + """Set the current mode and update the bar mode indicator.""" + global mode + buf = weechat.current_buffer() + input_line = weechat.buffer_get_string(buf, "input") + if mode == "INSERT" and arg == "NORMAL": + add_undo_history(buf, input_line) + mode = arg + # If we're going to Normal mode, the cursor must move one character to the + # left. + if mode == "NORMAL": + cur = weechat.buffer_get_integer(buf, "input_pos") + set_cur(buf, input_line, cur - 1, False) + weechat.bar_item_update("mode_indicator") + +def cb_check_cmd_mode(data, remaining_calls): + """Exit command mode if user erases the leading ':' character.""" + buf = weechat.current_buffer() + cmd_text = weechat.buffer_get_string(buf, "input") + if not cmd_text: + set_mode("NORMAL") + return weechat.WEECHAT_RC_OK + +def add_undo_history(buf, input_line): + """Add an item to the per-buffer undo history.""" + if buf in undo_history: + if not undo_history[buf] or undo_history[buf][-1] != input_line: + undo_history[buf].append(input_line) + undo_history_index[buf] = -1 + else: + undo_history[buf] = ['', input_line] + undo_history_index[buf] = -1 + +def clear_undo_history(buf): + """Clear the undo history for a given buffer.""" + undo_history[buf] = [''] + undo_history_index[buf] = -1 + +def print_warning(text): + """Print warning, in red, to the current buffer.""" + weechat.prnt("", ("%s[vimode.py] %s" % (weechat.color("red"), text))) + +def check_warnings(): + """Warn the user about problematic key bindings and tmux/screen.""" + user_warned = False + # Warn the user about problematic key bindings that may conflict with + # vimode. + # The solution is to remove these key bindings, but that's up to the user. + infolist = weechat.infolist_get("key", "", "default") + problematic_keybindings = [] + while weechat.infolist_next(infolist): + key = weechat.infolist_string(infolist, "key") + command = weechat.infolist_string(infolist, "command") + if re.match(REGEX_PROBLEMATIC_KEYBINDINGS, key): + problematic_keybindings.append("%s -> %s" % (key, command)) + if problematic_keybindings: + user_warned = True + print_warning("Problematic keybindings detected:") + for keybinding in problematic_keybindings: + print_warning(" %s" % keybinding) + print_warning("These keybindings may conflict with vimode.") + print_warning("You can remove problematic key bindings and add" + " recommended ones by using /vimode bind_keys, or only" + " list them with /vimode bind_keys --list") + print_warning("For help, see: %s" % FAQ_KEYBINDINGS) + del problematic_keybindings + # Warn tmux/screen users about possible Esc detection delays. + if "STY" in os.environ or "TMUX" in os.environ: + if user_warned: + weechat.prnt("", "") + user_warned = True + print_warning("tmux/screen users, see: %s" % FAQ_ESC) + if (user_warned and not + weechat.config_string_to_boolean(vimode_settings['no_warn'])): + if user_warned: + weechat.prnt("", "") + print_warning("To force disable warnings, you can set" + " plugins.var.python.vimode.no_warn to 'on'") + + +# Main script. +# ============ + +if __name__ == "__main__": + weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, + SCRIPT_LICENSE, SCRIPT_DESC, "", "") + # Warn the user if he's using an unsupported WeeChat version. + VERSION = weechat.info_get("version_number", "") + if int(VERSION) < 0x01000000: + print_warning("Please upgrade to WeeChat ≥ 1.0.0. Previous versions" + " are not supported.") + # Set up script options. + for option, value in list(vimode_settings.items()): + if weechat.config_is_set_plugin(option): + vimode_settings[option] = weechat.config_get_plugin(option) + else: + weechat.config_set_plugin(option, value[0]) + vimode_settings[option] = value[0] + weechat.config_set_desc_plugin(option, + "%s (default: \"%s\")" % (value[1], + value[0])) + load_user_mappings() + load_mode_colors() + # Warn the user about possible problems if necessary. + if not weechat.config_string_to_boolean(vimode_settings['no_warn']): + check_warnings() + # Create bar items and setup hooks. + weechat.bar_item_new("mode_indicator", "cb_mode_indicator", "") + weechat.bar_item_new("cmd_completion", "cb_cmd_completion", "") + weechat.bar_item_new("vi_buffer", "cb_vi_buffer", "") + weechat.bar_item_new("line_numbers", "cb_line_numbers", "") + if int(VERSION) >= 0x02090000: + weechat.bar_new("vi_line_numbers", "on", "0", "window", "", "left", + "vertical", "vertical", "0", "0", "default", "default", + "default", "default", "0", "line_numbers") + else: + weechat.bar_new("vi_line_numbers", "on", "0", "window", "", "left", + "vertical", "vertical", "0", "0", "default", "default", + "default", "0", "line_numbers") + weechat.hook_config("plugins.var.python.%s.*" % SCRIPT_NAME, "cb_config", + "") + weechat.hook_signal("key_pressed", "cb_key_pressed", "") + weechat.hook_signal("key_combo_default", "cb_key_combo_default", "") + weechat.hook_signal("key_combo_search", "cb_key_combo_search", "") + weechat.hook_signal("buffer_switch", "cb_update_line_numbers", "") + weechat.hook_command("vimode", SCRIPT_DESC, "[help | bind_keys [--list]]", + " help: show help\n" + "bind_keys: unbind problematic keys, and bind" + " recommended keys to use in WeeChat\n" + " --list: only list changes", + "help || bind_keys |--list", + "cb_vimode_cmd", "") + weechat.hook_command("vimode_go_to_normal", + ("This command can be used for key bindings to go to " + "normal mode."), + "", "", "", "cb_vimode_go_to_normal", "") + # Remove obsolete bar. + vi_cmd_bar = weechat.bar_search("vi_cmd") + weechat.bar_remove(vi_cmd_bar) diff --git a/.weechat/relay.conf b/.weechat/relay.conf new file mode 100644 index 0000000..341b811 --- /dev/null +++ b/.weechat/relay.conf @@ -0,0 +1,59 @@ +# +# weechat -- relay.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +auto_open_buffer = on +raw_messages = 256 + +[color] +client = cyan +status_active = lightblue +status_auth_failed = lightred +status_connecting = yellow +status_disconnected = lightred +status_waiting_auth = brown +text = default +text_bg = default +text_selected = white + +[network] +allow_empty_password = off +allowed_ips = "" +auth_timeout = 60 +bind_address = "" +clients_purge_delay = 0 +compression_level = 6 +ipv6 = on +max_clients = 5 +nonce_size = 16 +password = "" +password_hash_algo = "*" +password_hash_iterations = 100000 +ssl_cert_key = "%h/ssl/relay.pem" +ssl_priorities = "NORMAL:-VERS-SSL3.0" +totp_secret = "" +totp_window = 0 +websocket_allowed_origins = "" + +[irc] +backlog_max_minutes = 1440 +backlog_max_number = 256 +backlog_since_last_disconnect = on +backlog_since_last_message = off +backlog_tags = "irc_privmsg" +backlog_time_format = "[%H:%M] " + +[weechat] +commands = "" + +[port] + +[path] diff --git a/.weechat/ruby.conf b/.weechat/ruby.conf new file mode 100644 index 0000000..f6de7fb --- /dev/null +++ b/.weechat/ruby.conf @@ -0,0 +1,14 @@ +# +# weechat -- ruby.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/script.conf b/.weechat/script.conf new file mode 100644 index 0000000..121f189 --- /dev/null +++ b/.weechat/script.conf @@ -0,0 +1,56 @@ +# +# weechat -- script.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +columns = "%s %n %V %v %u | %d | %t" +diff_color = on +diff_command = "auto" +display_source = on +quiet_actions = on +sort = "i,p,n" +translate_description = on +use_keys = on + +[color] +status_autoloaded = cyan +status_held = white +status_installed = lightcyan +status_obsolete = lightmagenta +status_popular = yellow +status_running = lightgreen +status_unknown = lightred +text = default +text_bg = default +text_bg_selected = red +text_date = default +text_date_selected = white +text_delimiters = default +text_description = default +text_description_selected = white +text_extension = default +text_extension_selected = white +text_name = cyan +text_name_selected = lightcyan +text_selected = white +text_tags = brown +text_tags_selected = yellow +text_version = magenta +text_version_loaded = default +text_version_loaded_selected = white +text_version_selected = lightmagenta + +[scripts] +autoload = on +cache_expire = 1440 +download_timeout = 30 +hold = "" +path = "%h/script" +url = "https://weechat.org/files/plugins.xml.gz" diff --git a/.weechat/script/plugins.xml.gz b/.weechat/script/plugins.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..7521e691714ccac74ee97fd1291f7764b477b8d8 GIT binary patch literal 128539 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

*PjUo7~ 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 literal 0 HcmV?d00001 diff --git a/.weechat/sec.conf b/.weechat/sec.conf new file mode 100644 index 0000000..8c60d03 --- /dev/null +++ b/.weechat/sec.conf @@ -0,0 +1,18 @@ +# +# weechat -- sec.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[crypt] +cipher = aes256 +hash_algo = sha256 +passphrase_file = "" +salt = on + +[data] diff --git a/.weechat/spell.conf b/.weechat/spell.conf new file mode 100644 index 0000000..f65348d --- /dev/null +++ b/.weechat/spell.conf @@ -0,0 +1,33 @@ +# +# weechat -- spell.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[color] +misspelled = lightred +suggestion = default +suggestion_delimiter_dict = cyan +suggestion_delimiter_word = cyan + +[check] +commands = "away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic" +default_dict = "" +during_search = off +enabled = off +real_time = off +suggestions = -1 +word_min_length = 2 + +[dict] + +[look] +suggestion_delimiter_dict = " / " +suggestion_delimiter_word = "," + +[option] diff --git a/.weechat/tcl.conf b/.weechat/tcl.conf new file mode 100644 index 0000000..4c0e389 --- /dev/null +++ b/.weechat/tcl.conf @@ -0,0 +1,14 @@ +# +# weechat -- tcl.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +check_license = off +eval_keep_context = on diff --git a/.weechat/trigger.conf b/.weechat/trigger.conf new file mode 100644 index 0000000..2424666 --- /dev/null +++ b/.weechat/trigger.conf @@ -0,0 +1,67 @@ +# +# weechat -- trigger.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +enabled = on +monitor_strip_colors = off + +[color] +flag_command = lightgreen +flag_conditions = yellow +flag_post_action = lightblue +flag_regex = lightcyan +flag_return_code = lightmagenta +regex = white +replace = cyan +trigger = green +trigger_disabled = red + +[trigger] +beep.arguments = "" +beep.command = "/print -beep" +beep.conditions = "${tg_displayed} && (${tg_highlight} || ${tg_msg_pv})" +beep.enabled = on +beep.hook = print +beep.post_action = none +beep.regex = "" +beep.return_code = ok +cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" +cmd_pass.command = "" +cmd_pass.conditions = "" +cmd_pass.enabled = on +cmd_pass.hook = modifier +cmd_pass.post_action = none +cmd_pass.regex = "==^((/(msg|m|quote) +(-server +[^ ]+ +)?nickserv +(id|identify|set +password|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)|/oper +[^ ]+ +|/quote +pass +|/set +[^ ]*password[^ ]* +|/secure +(passphrase|decrypt|set +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" +cmd_pass.return_code = ok +cmd_pass_register.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" +cmd_pass_register.command = "" +cmd_pass_register.conditions = "" +cmd_pass_register.enabled = on +cmd_pass_register.hook = modifier +cmd_pass_register.post_action = none +cmd_pass_register.regex = "==^(/(msg|m|quote) +nickserv +register +)([^ ]+)(.*)==${re:1}${hide:*,${re:3}}${re:4}" +cmd_pass_register.return_code = ok +msg_auth.arguments = "5000|irc_message_auth" +msg_auth.command = "" +msg_auth.conditions = "" +msg_auth.enabled = on +msg_auth.hook = modifier +msg_auth.post_action = none +msg_auth.regex = "==^(.*(id|identify|set +password|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+|recover +[^ ]+) +)(.*)==${re:1}${hide:*,${re:+}}" +msg_auth.return_code = ok +server_pass.arguments = "5000|input_text_display;5000|history_add" +server_pass.command = "" +server_pass.conditions = "" +server_pass.enabled = on +server_pass.hook = modifier +server_pass.post_action = none +server_pass.regex = "==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==${re:1}${hide:*,${re:4}}${re:5}" +server_pass.return_code = ok diff --git a/.weechat/weechat.conf b/.weechat/weechat.conf new file mode 100644 index 0000000..15d8029 --- /dev/null +++ b/.weechat/weechat.conf @@ -0,0 +1,685 @@ +# +# weechat -- weechat.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[debug] + +[startup] +command_after_plugins = "" +command_before_plugins = "" +display_logo = on +display_version = on +sys_rlimit = "" + +[look] +align_end_of_lines = message +align_multiline_words = on +bar_more_down = "++" +bar_more_left = "<<" +bar_more_right = ">>" +bar_more_up = "--" +bare_display_exit_on_input = on +bare_display_time_format = "%H:%M" +buffer_auto_renumber = on +buffer_notify_default = all +buffer_position = end +buffer_search_case_sensitive = off +buffer_search_force_default = off +buffer_search_regex = off +buffer_search_where = prefix_message +buffer_time_format = "%H:%M:%S" +buffer_time_same = "" +color_basic_force_bold = off +color_inactive_buffer = on +color_inactive_message = on +color_inactive_prefix = on +color_inactive_prefix_buffer = on +color_inactive_time = off +color_inactive_window = on +color_nick_offline = off +color_pairs_auto_reset = 5 +color_real_white = off +command_chars = "" +command_incomplete = off +confirm_quit = off +confirm_upgrade = off +day_change = on +day_change_message_1date = "-- %a, %d %b %Y --" +day_change_message_2dates = "-- %%a, %%d %%b %%Y (%a, %d %b %Y) --" +eat_newline_glitch = off +emphasized_attributes = "" +highlight = "" +highlight_regex = "" +highlight_tags = "" +hotlist_add_conditions = "${away} || ${buffer.num_displayed} == 0 || ${info:relay_client_count,weechat,connected} > 0" +hotlist_buffer_separator = ", " +hotlist_count_max = 2 +hotlist_count_min_msg = 2 +hotlist_names_count = 3 +hotlist_names_length = 0 +hotlist_names_level = 12 +hotlist_names_merged_buffers = off +hotlist_prefix = "H: " +hotlist_remove = merged +hotlist_short_names = on +hotlist_sort = group_time_asc +hotlist_suffix = "" +hotlist_unique_numbers = on +input_cursor_scroll = 20 +input_share = none +input_share_overwrite = off +input_undo_max = 32 +item_away_message = on +item_buffer_filter = "*" +item_buffer_zoom = "!" +item_mouse_status = "M" +item_time_format = "%H:%M" +jump_current_to_previous_buffer = on +jump_previous_buffer_when_closing = on +jump_smart_back_to_buffer = on +key_bind_safe = on +key_grab_delay = 800 +mouse = off +mouse_timer_delay = 100 +nick_color_force = "" +nick_color_hash = djb2 +nick_color_hash_salt = "" +nick_color_stop_chars = "_|[" +nick_prefix = "" +nick_suffix = "" +paste_auto_add_newline = on +paste_bracketed = on +paste_bracketed_timer_delay = 10 +paste_max_lines = 1 +prefix_action = " *" +prefix_align = right +prefix_align_max = 0 +prefix_align_min = 0 +prefix_align_more = "+" +prefix_align_more_after = on +prefix_buffer_align = right +prefix_buffer_align_max = 0 +prefix_buffer_align_more = "+" +prefix_buffer_align_more_after = on +prefix_error = "=!=" +prefix_join = "-->" +prefix_network = "--" +prefix_quit = "<--" +prefix_same_nick = "" +prefix_same_nick_middle = "" +prefix_suffix = "|" +quote_nick_prefix = "<" +quote_nick_suffix = ">" +quote_time_format = "%H:%M:%S" +read_marker = line +read_marker_always_show = off +read_marker_string = "- " +save_config_on_exit = on +save_config_with_fsync = off +save_layout_on_exit = none +scroll_amount = 3 +scroll_bottom_after_switch = off +scroll_page_percent = 100 +search_text_not_found_alert = on +separator_horizontal = "-" +separator_vertical = "" +tab_width = 1 +time_format = "%a, %d %b %Y %T" +window_auto_zoom = off +window_separator_horizontal = on +window_separator_vertical = on +window_title = "" +word_chars_highlight = "!\u00A0,-,_,|,alnum" +word_chars_input = "!\u00A0,-,_,|,alnum" + +[palette] + +[color] +bar_more = lightmagenta +chat = default +chat_bg = default +chat_buffer = white +chat_channel = white +chat_day_change = cyan +chat_delimiters = green +chat_highlight = yellow +chat_highlight_bg = magenta +chat_host = cyan +chat_inactive_buffer = default +chat_inactive_window = default +chat_nick = lightcyan +chat_nick_colors = "cyan,magenta,green,brown,lightblue,default,lightcyan,lightmagenta,lightgreen,blue" +chat_nick_offline = default +chat_nick_offline_highlight = default +chat_nick_offline_highlight_bg = blue +chat_nick_other = cyan +chat_nick_prefix = green +chat_nick_self = white +chat_nick_suffix = green +chat_prefix_action = white +chat_prefix_buffer = brown +chat_prefix_buffer_inactive_buffer = default +chat_prefix_error = yellow +chat_prefix_join = lightgreen +chat_prefix_more = lightmagenta +chat_prefix_network = magenta +chat_prefix_quit = lightred +chat_prefix_suffix = green +chat_read_marker = magenta +chat_read_marker_bg = default +chat_server = brown +chat_tags = red +chat_text_found = yellow +chat_text_found_bg = lightmagenta +chat_time = default +chat_time_delimiters = brown +chat_value = cyan +chat_value_null = blue +emphasized = yellow +emphasized_bg = magenta +input_actions = lightgreen +input_text_not_found = red +item_away = yellow +nicklist_away = cyan +nicklist_group = green +separator = blue +status_count_highlight = magenta +status_count_msg = brown +status_count_other = default +status_count_private = green +status_data_highlight = lightmagenta +status_data_msg = yellow +status_data_other = default +status_data_private = lightgreen +status_filter = green +status_more = yellow +status_mouse = green +status_name = white +status_name_ssl = lightgreen +status_nicklist_count = default +status_number = yellow +status_time = default + +[completion] +base_word_until_cursor = on +command_inline = on +default_template = "%(nicks)|%(irc_channels)" +nick_add_space = on +nick_case_sensitive = off +nick_completer = ": " +nick_first_only = off +nick_ignore_chars = "[]`_-^" +partial_completion_alert = on +partial_completion_command = off +partial_completion_command_arg = off +partial_completion_count = on +partial_completion_other = off +partial_completion_templates = "config_options" + +[history] +display_default = 5 +max_buffer_lines_minutes = 0 +max_buffer_lines_number = 4096 +max_commands = 100 +max_visited_buffers = 50 + +[proxy] + +[network] +connection_timeout = 60 +gnutls_ca_file = "/etc/ssl/certs/ca-certificates.crt" +gnutls_handshake_timeout = 30 +proxy_curl = "" + +[plugin] +autoload = "*" +debug = off +extension = ".so,.dll" +path = "%h/plugins" +save_config_on_unload = on + +[bar] +buflist.color_bg = default +buflist.color_bg_inactive = default +buflist.color_delim = default +buflist.color_fg = default +buflist.conditions = "" +buflist.filling_left_right = vertical +buflist.filling_top_bottom = columns_vertical +buflist.hidden = off +buflist.items = "buflist" +buflist.position = left +buflist.priority = 0 +buflist.separator = on +buflist.size = 0 +buflist.size_max = 0 +buflist.type = root +fset.color_bg = default +fset.color_bg_inactive = default +fset.color_delim = cyan +fset.color_fg = default +fset.conditions = "${buffer.full_name} == fset.fset" +fset.filling_left_right = vertical +fset.filling_top_bottom = horizontal +fset.hidden = off +fset.items = "fset" +fset.position = top +fset.priority = 0 +fset.separator = on +fset.size = 3 +fset.size_max = 3 +fset.type = window +input.color_bg = default +input.color_bg_inactive = default +input.color_delim = cyan +input.color_fg = default +input.conditions = "" +input.filling_left_right = vertical +input.filling_top_bottom = horizontal +input.hidden = off +input.items = "mode_indicator+[input_prompt]+(away),[input_search],[input_paste],input_text,[vi_buffer]" +input.position = bottom +input.priority = 1000 +input.separator = off +input.size = 1 +input.size_max = 0 +input.type = window +nicklist.color_bg = default +nicklist.color_bg_inactive = default +nicklist.color_delim = cyan +nicklist.color_fg = default +nicklist.conditions = "${nicklist}" +nicklist.filling_left_right = vertical +nicklist.filling_top_bottom = columns_vertical +nicklist.hidden = off +nicklist.items = "buffer_nicklist" +nicklist.position = right +nicklist.priority = 200 +nicklist.separator = on +nicklist.size = 0 +nicklist.size_max = 0 +nicklist.type = window +status.color_bg = blue +status.color_bg_inactive = default +status.color_delim = cyan +status.color_fg = default +status.conditions = "" +status.filling_left_right = vertical +status.filling_top_bottom = horizontal +status.hidden = off +status.items = "[time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[hotlist],completion,cmd_completion" +status.position = bottom +status.priority = 500 +status.separator = off +status.size = 1 +status.size_max = 0 +status.type = window +title.color_bg = blue +title.color_bg_inactive = default +title.color_delim = cyan +title.color_fg = default +title.conditions = "" +title.filling_left_right = vertical +title.filling_top_bottom = horizontal +title.hidden = off +title.items = "buffer_title" +title.position = top +title.priority = 500 +title.separator = off +title.size = 1 +title.size_max = 0 +title.type = window +vi_line_numbers.color_bg = default +vi_line_numbers.color_bg_inactive = default +vi_line_numbers.color_delim = default +vi_line_numbers.color_fg = default +vi_line_numbers.conditions = "" +vi_line_numbers.filling_left_right = vertical +vi_line_numbers.filling_top_bottom = vertical +vi_line_numbers.hidden = on +vi_line_numbers.items = "line_numbers" +vi_line_numbers.position = left +vi_line_numbers.priority = 0 +vi_line_numbers.separator = off +vi_line_numbers.size = 0 +vi_line_numbers.size_max = 0 +vi_line_numbers.type = window + +[layout] + +[notify] + +[filter] + +[key] +ctrl-? = "/input delete_previous_char" +ctrl-A = "/input move_beginning_of_line" +ctrl-B = "/input move_previous_char" +ctrl-C_ = "/input insert \x1F" +ctrl-Cb = "/input insert \x02" +ctrl-Cc = "/input insert \x03" +ctrl-Ci = "/input insert \x1D" +ctrl-Co = "/input insert \x0F" +ctrl-Cv = "/input insert \x16" +ctrl-D = "/input delete_next_char" +ctrl-E = "/input move_end_of_line" +ctrl-F = "/input move_next_char" +ctrl-H = "/input delete_previous_char" +ctrl-I = "/input complete_next" +ctrl-J = "/input return" +ctrl-K = "/input delete_end_of_line" +ctrl-L = "/window refresh" +ctrl-M = "/input return" +ctrl-N = "/buffer +1" +ctrl-P = "/buffer -1" +ctrl-R = "/input search_text_here" +ctrl-Sctrl-U = "/input set_unread" +ctrl-T = "/input transpose_chars" +ctrl-U = "/input delete_beginning_of_line" +ctrl-W = "/input delete_previous_word" +ctrl-W= = "/window balance" +ctrl-Wh = "/window left" +ctrl-Wj = "/window down" +ctrl-Wk = "/window up" +ctrl-Wl = "/window right" +ctrl-Wq = "/window merge" +ctrl-Ws = "/window splith" +ctrl-Wv = "/window splitv" +ctrl-Wx = "/window swap" +ctrl-X = "/input switch_active_buffer" +ctrl-Y = "/input clipboard_paste" +meta-meta-OP = "/bar scroll buflist * b" +meta-meta-OQ = "/bar scroll buflist * e" +meta-meta2-11~ = "/bar scroll buflist * b" +meta-meta2-12~ = "/bar scroll buflist * e" +meta-meta2-1~ = "/window scroll_top" +meta-meta2-23~ = "/bar scroll nicklist * b" +meta-meta2-24~ = "/bar scroll nicklist * e" +meta-meta2-4~ = "/window scroll_bottom" +meta-meta2-5~ = "/window scroll_up" +meta-meta2-6~ = "/window scroll_down" +meta-meta2-7~ = "/window scroll_top" +meta-meta2-8~ = "/window scroll_bottom" +meta-meta2-A = "/buffer -1" +meta-meta2-B = "/buffer +1" +meta-meta2-C = "/buffer +1" +meta-meta2-D = "/buffer -1" +meta-- = "/filter toggle @" +meta-/ = "/input jump_last_buffer_displayed" +meta-0 = "/buffer *10" +meta-1 = "/buffer *1" +meta-2 = "/buffer *2" +meta-3 = "/buffer *3" +meta-4 = "/buffer *4" +meta-5 = "/buffer *5" +meta-6 = "/buffer *6" +meta-7 = "/buffer *7" +meta-8 = "/buffer *8" +meta-9 = "/buffer *9" +meta-< = "/input jump_previously_visited_buffer" +meta-= = "/filter toggle" +meta-> = "/input jump_next_visited_buffer" +meta-B = "/buflist toggle" +meta-OA = "/input history_global_previous" +meta-OB = "/input history_global_next" +meta-OC = "/input move_next_word" +meta-OD = "/input move_previous_word" +meta-OF = "/input move_end_of_line" +meta-OH = "/input move_beginning_of_line" +meta-OP = "/bar scroll buflist * -100%" +meta-OQ = "/bar scroll buflist * +100%" +meta-Oa = "/input history_global_previous" +meta-Ob = "/input history_global_next" +meta-Oc = "/input move_next_word" +meta-Od = "/input move_previous_word" +meta2-11^ = "/bar scroll buflist * -100%" +meta2-11~ = "/bar scroll buflist * -100%" +meta2-12^ = "/bar scroll buflist * +100%" +meta2-12~ = "/bar scroll buflist * +100%" +meta2-15~ = "/buffer -1" +meta2-17~ = "/buffer +1" +meta2-18~ = "/window -1" +meta2-19~ = "/window +1" +meta2-1;3A = "/buffer -1" +meta2-1;3B = "/buffer +1" +meta2-1;3C = "/buffer +1" +meta2-1;3D = "/buffer -1" +meta2-1;3F = "/window scroll_bottom" +meta2-1;3H = "/window scroll_top" +meta2-1;3P = "/bar scroll buflist * b" +meta2-1;3Q = "/bar scroll buflist * e" +meta2-1;5A = "/input history_global_previous" +meta2-1;5B = "/input history_global_next" +meta2-1;5C = "/input move_next_word" +meta2-1;5D = "/input move_previous_word" +meta2-1;5P = "/bar scroll buflist * -100%" +meta2-1;5Q = "/bar scroll buflist * +100%" +meta2-1~ = "/input move_beginning_of_line" +meta2-200~ = "/input paste_start" +meta2-201~ = "/input paste_stop" +meta2-20~ = "/bar scroll title * -30%" +meta2-21~ = "/bar scroll title * +30%" +meta2-23;3~ = "/bar scroll nicklist * b" +meta2-23;5~ = "/bar scroll nicklist * -100%" +meta2-23^ = "/bar scroll nicklist * -100%" +meta2-23~ = "/bar scroll nicklist * -100%" +meta2-24;3~ = "/bar scroll nicklist * e" +meta2-24;5~ = "/bar scroll nicklist * +100%" +meta2-24^ = "/bar scroll nicklist * +100%" +meta2-24~ = "/bar scroll nicklist * +100%" +meta2-3~ = "/input delete_next_char" +meta2-4~ = "/input move_end_of_line" +meta2-5;3~ = "/window scroll_up" +meta2-5~ = "/window page_up" +meta2-6;3~ = "/window scroll_down" +meta2-6~ = "/window page_down" +meta2-7~ = "/input move_beginning_of_line" +meta2-8~ = "/input move_end_of_line" +meta2-A = "/input history_previous" +meta2-B = "/input history_next" +meta2-C = "/input move_next_char" +meta2-D = "/input move_previous_char" +meta2-F = "/input move_end_of_line" +meta2-G = "/window page_down" +meta2-H = "/input move_beginning_of_line" +meta2-I = "/window page_up" +meta2-Z = "/input complete_previous" +meta2-[E = "/buffer -1" +meta-_ = "/input redo" +meta-a = "/input jump_smart" +meta-b = "/input move_previous_word" +meta-d = "/input delete_next_word" +meta-f = "/input move_next_word" +meta-h = "/input hotlist_clear" +meta-j01 = "/buffer *1" +meta-j02 = "/buffer *2" +meta-j03 = "/buffer *3" +meta-j04 = "/buffer *4" +meta-j05 = "/buffer *5" +meta-j06 = "/buffer *6" +meta-j07 = "/buffer *7" +meta-j08 = "/buffer *8" +meta-j09 = "/buffer *9" +meta-j10 = "/buffer *10" +meta-j11 = "/buffer *11" +meta-j12 = "/buffer *12" +meta-j13 = "/buffer *13" +meta-j14 = "/buffer *14" +meta-j15 = "/buffer *15" +meta-j16 = "/buffer *16" +meta-j17 = "/buffer *17" +meta-j18 = "/buffer *18" +meta-j19 = "/buffer *19" +meta-j20 = "/buffer *20" +meta-j21 = "/buffer *21" +meta-j22 = "/buffer *22" +meta-j23 = "/buffer *23" +meta-j24 = "/buffer *24" +meta-j25 = "/buffer *25" +meta-j26 = "/buffer *26" +meta-j27 = "/buffer *27" +meta-j28 = "/buffer *28" +meta-j29 = "/buffer *29" +meta-j30 = "/buffer *30" +meta-j31 = "/buffer *31" +meta-j32 = "/buffer *32" +meta-j33 = "/buffer *33" +meta-j34 = "/buffer *34" +meta-j35 = "/buffer *35" +meta-j36 = "/buffer *36" +meta-j37 = "/buffer *37" +meta-j38 = "/buffer *38" +meta-j39 = "/buffer *39" +meta-j40 = "/buffer *40" +meta-j41 = "/buffer *41" +meta-j42 = "/buffer *42" +meta-j43 = "/buffer *43" +meta-j44 = "/buffer *44" +meta-j45 = "/buffer *45" +meta-j46 = "/buffer *46" +meta-j47 = "/buffer *47" +meta-j48 = "/buffer *48" +meta-j49 = "/buffer *49" +meta-j50 = "/buffer *50" +meta-j51 = "/buffer *51" +meta-j52 = "/buffer *52" +meta-j53 = "/buffer *53" +meta-j54 = "/buffer *54" +meta-j55 = "/buffer *55" +meta-j56 = "/buffer *56" +meta-j57 = "/buffer *57" +meta-j58 = "/buffer *58" +meta-j59 = "/buffer *59" +meta-j60 = "/buffer *60" +meta-j61 = "/buffer *61" +meta-j62 = "/buffer *62" +meta-j63 = "/buffer *63" +meta-j64 = "/buffer *64" +meta-j65 = "/buffer *65" +meta-j66 = "/buffer *66" +meta-j67 = "/buffer *67" +meta-j68 = "/buffer *68" +meta-j69 = "/buffer *69" +meta-j70 = "/buffer *70" +meta-j71 = "/buffer *71" +meta-j72 = "/buffer *72" +meta-j73 = "/buffer *73" +meta-j74 = "/buffer *74" +meta-j75 = "/buffer *75" +meta-j76 = "/buffer *76" +meta-j77 = "/buffer *77" +meta-j78 = "/buffer *78" +meta-j79 = "/buffer *79" +meta-j80 = "/buffer *80" +meta-j81 = "/buffer *81" +meta-j82 = "/buffer *82" +meta-j83 = "/buffer *83" +meta-j84 = "/buffer *84" +meta-j85 = "/buffer *85" +meta-j86 = "/buffer *86" +meta-j87 = "/buffer *87" +meta-j88 = "/buffer *88" +meta-j89 = "/buffer *89" +meta-j90 = "/buffer *90" +meta-j91 = "/buffer *91" +meta-j92 = "/buffer *92" +meta-j93 = "/buffer *93" +meta-j94 = "/buffer *94" +meta-j95 = "/buffer *95" +meta-j96 = "/buffer *96" +meta-j97 = "/buffer *97" +meta-j98 = "/buffer *98" +meta-j99 = "/buffer *99" +meta-k = "/input grab_key_command" +meta-l = "/window bare" +meta-m = "/mute mouse toggle" +meta-n = "/window scroll_next_highlight" +meta-p = "/window scroll_previous_highlight" +meta-r = "/input delete_line" +meta-s = "/mute spell toggle" +meta-u = "/window scroll_unread" +meta-x = "/input zoom_merged_buffer" +meta-z = "/window zoom" +ctrl-^ = "/input jump_last_buffer_displayed" +ctrl-_ = "/input undo" + +[key_search] +ctrl-I = "/input search_switch_where" +ctrl-J = "/input search_stop_here" +ctrl-M = "/input search_stop_here" +ctrl-Q = "/input search_stop" +ctrl-R = "/input search_switch_regex" +meta2-A = "/input search_previous" +meta2-B = "/input search_next" +meta-c = "/input search_switch_case" + +[key_cursor] +ctrl-J = "/cursor stop" +ctrl-M = "/cursor stop" +meta-meta2-A = "/cursor move area_up" +meta-meta2-B = "/cursor move area_down" +meta-meta2-C = "/cursor move area_right" +meta-meta2-D = "/cursor move area_left" +meta2-1;3A = "/cursor move area_up" +meta2-1;3B = "/cursor move area_down" +meta2-1;3C = "/cursor move area_right" +meta2-1;3D = "/cursor move area_left" +meta2-A = "/cursor move up" +meta2-B = "/cursor move down" +meta2-C = "/cursor move right" +meta2-D = "/cursor move left" +@item(buffer_nicklist):K = "/window ${_window_number};/kickban ${nick}" +@item(buffer_nicklist):b = "/window ${_window_number};/ban ${nick}" +@item(buffer_nicklist):k = "/window ${_window_number};/kick ${nick}" +@item(buffer_nicklist):q = "/window ${_window_number};/query ${nick};/cursor stop" +@item(buffer_nicklist):w = "/window ${_window_number};/whois ${nick}" +@chat:Q = "hsignal:chat_quote_time_prefix_message;/cursor stop" +@chat:m = "hsignal:chat_quote_message;/cursor stop" +@chat:q = "hsignal:chat_quote_prefix_message;/cursor stop" + +[key_mouse] +@bar(buflist):ctrl-wheeldown = "hsignal:buflist_mouse" +@bar(buflist):ctrl-wheelup = "hsignal:buflist_mouse" +@bar(input):button2 = "/input grab_mouse_area" +@bar(nicklist):button1-gesture-down = "/bar scroll nicklist ${_window_number} +100%" +@bar(nicklist):button1-gesture-down-long = "/bar scroll nicklist ${_window_number} e" +@bar(nicklist):button1-gesture-up = "/bar scroll nicklist ${_window_number} -100%" +@bar(nicklist):button1-gesture-up-long = "/bar scroll nicklist ${_window_number} b" +@chat(fset.fset):button1 = "/window ${_window_number};/fset -go ${_chat_line_y}" +@chat(fset.fset):button2* = "hsignal:fset_mouse" +@chat(fset.fset):wheeldown = "/fset -down 5" +@chat(fset.fset):wheelup = "/fset -up 5" +@chat(script.scripts):button1 = "/window ${_window_number};/script go ${_chat_line_y}" +@chat(script.scripts):button2 = "/window ${_window_number};/script go ${_chat_line_y};/script installremove -q ${script_name_with_extension}" +@chat(script.scripts):wheeldown = "/script down 5" +@chat(script.scripts):wheelup = "/script up 5" +@item(buffer_nicklist):button1 = "/window ${_window_number};/query ${nick}" +@item(buffer_nicklist):button1-gesture-left = "/window ${_window_number};/kick ${nick}" +@item(buffer_nicklist):button1-gesture-left-long = "/window ${_window_number};/kickban ${nick}" +@item(buffer_nicklist):button2 = "/window ${_window_number};/whois ${nick}" +@item(buffer_nicklist):button2-gesture-left = "/window ${_window_number};/ban ${nick}" +@item(buflist):button1* = "hsignal:buflist_mouse" +@item(buflist):button2* = "hsignal:buflist_mouse" +@item(buflist2):button1* = "hsignal:buflist_mouse" +@item(buflist2):button2* = "hsignal:buflist_mouse" +@item(buflist3):button1* = "hsignal:buflist_mouse" +@item(buflist3):button2* = "hsignal:buflist_mouse" +@bar:wheeldown = "/bar scroll ${_bar_name} ${_window_number} +20%" +@bar:wheelup = "/bar scroll ${_bar_name} ${_window_number} -20%" +@chat:button1 = "/window ${_window_number}" +@chat:button1-gesture-left = "/window ${_window_number};/buffer -1" +@chat:button1-gesture-left-long = "/window ${_window_number};/buffer 1" +@chat:button1-gesture-right = "/window ${_window_number};/buffer +1" +@chat:button1-gesture-right-long = "/window ${_window_number};/input jump_last_buffer" +@chat:ctrl-wheeldown = "/window scroll_horiz -window ${_window_number} +10%" +@chat:ctrl-wheelup = "/window scroll_horiz -window ${_window_number} -10%" +@chat:wheeldown = "/window scroll_down -window ${_window_number}" +@chat:wheelup = "/window scroll_up -window ${_window_number}" +@*:button3 = "/cursor go ${_x},${_y}" diff --git a/.weechat/xfer.conf b/.weechat/xfer.conf new file mode 100644 index 0000000..551316f --- /dev/null +++ b/.weechat/xfer.conf @@ -0,0 +1,49 @@ +# +# weechat -- xfer.conf +# +# WARNING: It is NOT recommended to edit this file by hand, +# especially if WeeChat is running. +# +# Use /set or similar command to change settings in WeeChat. +# +# For more info, see: https://weechat.org/doc/quickstart +# + +[look] +auto_open_buffer = on +progress_bar_size = 20 +pv_tags = "notify_private" + +[color] +status_aborted = lightred +status_active = lightblue +status_connecting = yellow +status_done = lightgreen +status_failed = lightred +status_waiting = lightcyan +text = default +text_bg = default +text_selected = white + +[network] +blocksize = 65536 +fast_send = on +own_ip = "" +port_range = "" +send_ack = on +speed_limit_recv = 0 +speed_limit_send = 0 +timeout = 300 + +[file] +auto_accept_chats = off +auto_accept_files = off +auto_accept_nicks = "" +auto_check_crc32 = off +auto_rename = on +auto_resume = on +convert_spaces = on +download_path = "%h/xfer" +download_temporary_suffix = ".part" +upload_path = "~" +use_nick_in_filename = on