Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
My always up-to-date WeeChat configuration (weechat-dev)

WeeChat Screenshot

You need at least WeeChat 3.0-dev

Enable mouse

/mouse enable

Secured data

/secure passphrase <pass>
/secure set bitlbeepass <pass>
/secure set freenodepass <pass>
/secure set snoonetpass <pass>
/secure set tildepass <pass>
/secure set undernet_userpass <user> <pass>
/secure set undernet_secret <TOTP secret>
/secure set relaypass <pass>

Network

Default settings

/set irc.server_default.sasl_mechanism PLAIN
/set irc.server_default.sasl_username r3m
/set irc.server_default.nicks r3m
/set irc.server_default.capabilities "account-notify,away-notify,cap-notify,multi-prefix,server-time,znc.in/self-message"

the last line request some IRCv3 capabilities. Capabilities supported by WeeChat are: account-notify, away-notify, cap-notify, extended-join, multi-prefix, server-time, userhost-in-names. See IRCv3 Specifications to learn more about IRCv3 capabilities.

Network-specific settings

/server add bitlbee localhost -autoconnect
/set irc.server.bitlbee.sasl_password ${sec.data.bitlbeepass}

/server add freenode chat.freenode.net/6697 -ssl -autoconnect
/set irc.server.freenode.sasl_password ${sec.data.freenodepass}

/server add oftc irc.oftc.net/6697 -ssl -autoconnect
/set irc.server.oftc.ssl_cert "%h/ssl/nick.pem"
/set irc.server.oftc.command_delay 5

/server add oragono_testnet testnet.oragono.io/6697 -ssl

/connect -auto

Plugins

Load at startup

/set weechat.plugin.autoload "*,!guile,!javascript,!lua,!php,!tcl,!perl,!ruby,!fifo,!xfer"

this will load all modules except guile, javascript, lua, php, tcl, perl, ruby, fifo and xfer

spell

/set spell.check.default_dict en,fr
/set spell.check.suggestions 3
/set spell.color.suggestion *green
/spell enable

Set the dictionary order to fr,en

/trigger addreplace setdict signal irc_channel_opened;irc_pv_opened;irc_server_opened
/trigger set setdict conditions "(${buffer[${tg_signal_data}].full_name} =* irc.undernet.* || (${buffer[${tg_signal_data}].full_name} =~ fr$ && ${buffer[${tg_signal_data}].local_variables.type} == channel)) && ${info:spell_dict,${buffer[${tg_signal_data}].full_name}} !~ ^fr"
/trigger set setdict command "/command -buffer ${buffer[${tg_signal_data}].full_name} * /mute /spell setdict fr,en"

This trigger set spell checker to fr,en when we join a channel with a name ending in 'fr' or when we join any channel or open any query on undernet.

Note: we will add the spell_dict and spell_suggest item to the status bar later on.

Relay

/relay sslcertkey
/relay add ssl.irc <port>
/relay add ssl.weechat <port>
/set relay.network.password ${sec.data.relaypass}

If you want a trusted certificate, use let's encrypt! with weechat relay.

Logger

/set logger.level.irc 4
/set logger.mask.irc %Y/$server/$channel.%m-%d.log

fset

≥ WeeChat 3.0 for add an option to disable refreshing fset for some option name

/set fset.color.line_selected_bg1 default
/set fset.color.name_changed 229
/set fset.color.name_changed_selected *229
/set fset.color.type 121
/set fset.color.type_selected *121
/set fset.color.value 31
/set fset.color.value_changed 229
/set fset.color.value_changed_selected *229
/set fset.color.value_selected *31
/set fset.look.auto_refresh "*,!weechat.bar.buflist.size,!plugins.var.buflist_section_*,!plugins.var.python.text_item.conky_*"
/set fset.format.option1 "${if:${selected_line}?${color:*white}>>:  } ${marked} ${name}  ${type}  ${value2}"
/set weechat.bar.fset.conditions "${buffer.full_name} == fset.fset && ${window.win_height} > 7"

After plugins and exec now

/set weechat.startup.command_after_plugins "/exec -norc -noln -buffer conky conky;/buffer add chanmon;/buffer add highmon"
/eval /eval -s ${weechat.startup.command_after_plugins}

Scripts

/script install autojoin.py buffer_autoset.py autosort.py

autosort.py (require setdict trigger)

/autosort helpers set french_channels_pvs_first ${if:${type}=~(channel|private)&&${info:spell_dict,${buffer.full_name}}!~^fr}
/autosort rules insert 6 ${french_channels_pvs_first}

/trigger addreplace autosort_refresh_on_setdict config "spell.dict.*;spell.check.default_dict" "" "" "/mute /autosort"

sort french channels before other channels. A french channel, in my configuration, is one with a french dictionnary as main dictionnary. This autosort rule sort channels using the main dictionnary. So you also need the trigger setdict which set the dictionnary based on channel's name (channels ending in fr). This also sort french private before other private. A french private, in my configuration, is one with a french dictionnary as main dictionnary. However, the setdict trigger do not set the french dictionnary when a private name end in fr (cause this does not make sense for private). So the only way to set a private as french is to type /spell setdict fr on a private. And if you type this command (on a private or on a channel, for example one not ending in fr) you will need the autosort_refresh_on_setdict trigger to resort the buffers.

buffer_autoset.py

/buffer_autoset add core.weechat notify 3
/buffer_autoset add irc.server.* notify 3
/buffer_autoset add relay.relay.list short_name relay
/buffer_autoset add irc.freenode.##news short_name newsmon

Conky

/buffer_autoset add exec.exec.conky short_name sys

notify level

/set weechat.notify.exec.exec.conky none

change the title of the conky buffer

/buffer_autoset add exec.exec.conky title Conky - the light-weight system monitor

Change the title Executed commands to Conky - the light-weight system monitor

beautify the output

/trigger addreplace conky modifier weechat_print
/trigger set conky conditions "${tg_buffer} == exec.exec.conky && ${tg_tags} =~ ,exec_stdout, && ${tg_message_nocolor} =~ ^[^:]+: *[^ ]"
/trigger set conky regex "/^ \t([^:]+):(.*)/ ${color:_31}${re:1}\t${color:reset}${re:2}/ /.*/${tg_message_nocolor}/my_field /.*/${tg_message_nocolor}/my_value /^([^:]+):.*/${re:1}/my_field / /_/my_field /^[^:]+: */${re:1}/my_value"
#/trigger set conky command "/mute /set plugins.var.python.text_item.conky_${my_field} all \${if:${buffer.num_displayed}==?${my_field} ${color:white}${my_value}${\x7D}"

This trigger does two things. First (the regex line), it change the look of the ouput to be easier to read and to match the look of the rest of the config. Second (the command line), it create a text_item option for all line and if the conky buffer is not displayed on screen, the items created by text_item will become visibile in the status bar (go to the status bar section to add it to the bar). If you have weechat < 3.0 you should not use the last line because if you open fset at the same time your cpu will reach 100% (see this. If you have weechat ≥ 3.0 it is safe but you must set the option fset.look.auto_refresh value as mine (see the fset section)

my .conkyrc

background no
cpu_avg_samples 2
net_avg_samples 2
no_buffers yes
out_to_stderr no
update_interval 1.0
uppercase no
use_spacer none

TEXT
Uptime: $uptime
CPU: $cpu%
RAM: $memperc%
Swap: $swapperc%
Up: ${upspeed venet0}
Down: ${downspeed venet0}

Note: you need the conky-cli package on Debian

Weather with wttr.in

≥ WeeChat 2.9 for !- operator

/buffer_autoset add exec.exec.weather short_name weather
/set spell.dict.exec.exec.weather fr

/trigger addreplace weather_cmd_weather command "weather;show the weather, using wttr.in, in a new buffer;<location>;;${plugins.var.weather_place}"
/trigger set weather_cmd_weather conditions "${tg_argv_eol1}"
/trigger set weather_cmd_weather regex "/ /+/tg_argv_eol1 /.*/${info:spell_dict,exec.exec.weather}/my_lang /^([^,]+).*/${re:1}/my_lang /^$/en/my_lang"
/trigger set weather_cmd_weather command "/exec -noflush -norc -noln -buffer weather curl -s http://wttr.in/${tg_argv_eol1}?lang=${my_lang}"

/trigger addreplace weather_recreate_cmd config plugins.var.weather_place
/trigger set weather_recreate_cmd regex "/ /+/"
/trigger set weather_recreate_cmd command "/trigger restart weather_cmd_weather"

/set plugins.var.weather_place "montreal|longueuil|quebec|paris"

I found something very similar on the alias wiki page of WeeChat on GitHub. The first trigger allows you to type /weather followed by a location. A new buffer will open and display the weather using wttr.in. The second trigger will call /trigger restart weather_cmd_weather whenever you modify the option plugins.var.weather_place (because the hook must be recreated). The option plugins.var.weather_place is a list of cities for the completion mechanism (when you press tab after /weather ). Put the locations you want in it.

/trigger addreplace weather_set_weather_buffer_title print "exec.exec.weather;exec_stdout;;1"
/trigger set weather_set_weather_buffer_title conditions "${tg_message} =~ ^\w && ${tg_message} !~ wttr\.in|@igor_chubin"
/trigger set weather_set_weather_buffer_title regex "/^[^:]+:(.*)/${re:1}/tg_message_nocolor"
/trigger set weather_set_weather_buffer_title command "/buffer set title ${tg_message};/buffer set localvar_set_extra ${tg_message_nocolor}"

I created this trigger to change the title of the buffer from Executed commands to Weather for City: Montreal, Canada.

/trigger addreplace weather_get_weather_by_shortcut modifier input_text_for_buffer
/trigger set weather_get_weather_by_shortcut conditions "${buffer[${tg_modifier_data}].full_name} == exec.exec.weather && /${weechat.look.command_chars} !- ${cut:1,,${tg_string_nocolor}}"
/trigger set weather_get_weather_by_shortcut regex "==.*==/weather ${re:0}"

This trigger will allow you to enter only the city name (without /weather) in the weather buffer.

Bars

Bar buflist and control_buffers

≥ WeeChat 2.9 for evaluation of arguments and only return trigger's return code when condition evaluates to true

For those of you using an old version of my buflist

/bar del buflist_hotlist
/unset plugins.var.buflist_name
/unset plugins.var.real_net_name
/trigger del control_buffers_add_del_buffer

if you plan to upgrade the buflist with my latest change, you can run these four commands. The first one delete the obsolete buflist_hotlist bar (the hotlist is now in the buflist bar). The second one remove an obsolete option. The third one remove an option that has been renamed and the last on delete an obsolete trigger.

unmerge servers buffers from core and indent

/set irc.look.server_buffer independent

Note: show channels and privates buffers under their respective server instead of mixing them all.

/trigger addreplace buflist_tools command "buflist_tools;manage pascalpoitras's custom buflist (https://gist.github.com/pascalpoitras/8406501);resize <buflist_size> <1st_section_size>|? [<2nd_section_size>] || hide|show|toggle|showonly|hideonly <subsection>|-old|-new|-all [<subsection>|-old|-new|-all...];          resize: resize the buflist size and the two sections${\n}            hide: hide one or more subsection(s)${\n}            show: show one or more subsection(s)${\n}          toggle: toggle one or more subsection(s)${\n}        showonly: hide all subsections except...${\n}        hideonly: show all subsections except...${\n}    buflist_size: new size for the buflist${\n}1st_section_size: size of first section${\n}2nd_section_size: size of second section${\n}      subsection: a subsection (buffer_number, fold, indent, nick_prefix, buffer_name, lag, filter, relay_count, extra, hotlist)${\n}            -old: only the old buflist subsections (buffer_number, indent, buffer_name, filter, relay_count, extra, hotlist)${\n}            -new: only the new buflist subsections (fold, nick_prefix, lag)${\n}            -all: do action on all subsections${\n}${\n}The buflist is composed of two sections. The first one is composed of nine subsections. The buffer number, the fold symbol (servers only), the indentation, the nick prefix (channels only), the buffer name, the lag (servers only), the filter (on some buffer like fset, scripts...), the relay count (for the relay buffer) and extra infos about a buffer. The second section is only composed of hotlist. The two sections can be resized independently. If you want to hide a subsection, for example, buffer_number, the bar will not be resized and the section will not be resized too. So you will have more space for the other subsection of the first section. If you want to hide the hotlist, you can use the hide command but then the second subsection will be empty and use space for nothing, space that cant be used by the first section. So if you want to hide the hotlist, you'd be better off using resize and give all the spaces to the first section. TLDR if you're not gonna use the hotlist, do not reserve space for it in the first place.${\n}${\n}Exemples:${\n}  Resize the bar to 20 with the size 15 for first section and 5 for second section:${\n}    /buflist_tools resize 20 15${\n}  Show only the subsections that was available in the old buflist:${\n}    /buflist_tools showonly -old;resize 25 || show|hide|toggle|hideonly|showonly buffer_number|fold|indent|nick_prefix|buffer_name|lag|filter|relay_count|extra|hotlist|-old|-new|-all|%*"
/trigger set buflist_tools conditions "${tg_argv1} =~ ^(hide|show|toggle|showonly|hideonly)$ && ${tg_argv_eol2} =~ ^((buffer_number|fold|indent|nick_prefix|buffer_name|lag|filter|relay_count|extra|hotlist|-old|-new|-all)( +|$))+$ || ${tg_argv1} == resize && ${tg_argv2} =~ ^[0-9]+$ && (${tg_argv3} =~ ^[0-9]+$ && ${tg_argv4} =~ ^[0-9]*$ || ${tg_argv3} == ? && ${tg_argv4} =~ ^[0-9]+$)"
/trigger set buflist_tools regex "/.*/${tg_argv1}/my_action /\?/${calc:${tg_argv2}-${tg_argv4}}/tg_argv3 /^$/${if:${my_action}==resize?${calc:${tg_argv2}-${tg_argv3}}}/tg_argv4 /-all/-new -old/tg_argv_eol2 /-old/buffer_number indent buffer_name filter relay_count extra hotlist/tg_argv_eol2 /-new/fold nick_prefix lag/tg_argv_eol2 /.*/${if:${my_action}=~^(hide|show)only$?buffer_number fold indent nick_prefix buffer_name lag filter relay_count extra hotlist}/my_hide_or_show_everything ===buffer_number|fold|indent|nick_prefix|buffer_name|lag|filter|relay_count|extra|hotlist===/mute /set plugins.var.buflist_subsection_${re:0} ${if:${my_action}==hideonly};===my_hide_or_show_everything ===buffer_number|fold|indent|nick_prefix|buffer_name|lag|filter|relay_count|extra|hotlist===/mute /set plugins.var.buflist_subsection_${re:0} ${if:${my_action}=~^hide?0:${if:${my_action}=~^show?1:\x5c${if:\x5c${plugins.var.buflist_subsection_${re:0}${\x5cx7d}?0:1${\x5cx7d}}};===tg_argv_eol2 /.*/${my_hide_or_show_everything}${tg_argv_eol2}/my_cmds_to_run"
/trigger set buflist_tools command "/eval -s ${if:${my_action}==resize?/mute /set plugins.var.buflist_section_1st ${tg_argv3}\;/mute /set plugins.var.buflist_section_2nd ${tg_argv4}\;/bar set buflist size ${tg_argv2}:${my_cmds_to_run}}"

This trigger create the command buflist_tools. With this command you can resize the buflist and the sections and show or hide subsections. Type /help buflist_tools for more. You need WeeChat 2.9 for this trigger because the arguments need to be evaulated when the hook is created and previous version of WeeChat don't do that. Do not modify the buflist size and section size without using this command. You can also use alt+wheelup/down in the buflist.

Note on resizing: If the buflist bar is slow to resize, the fset buffer is probably opened. If you have weechat ≥ 3.0 you can fix that by setting the option fset.look.auto_refresh as mine (see the fset section). Otherwise, you will have to either close the fset buffer prior to resizing or be patient.

/buflist_tools resize 20 15

The buflist will be resized to 20. 15 columns for the 1st section and 5 columns for 2nd section

/buflist_tools showonly -old fold
/set plugins.var.buflist_look_real_net_name 1
/set plugins.var.buflist_look_indent_tree 1

I want to show all the old subsections (so the buflist looks like before) but also add fold (a triangle to expand/collapse channels/privates under their servers). I want to display real network name (not the one used in /server add). Instead of spaces for the indent subsection, I want tree symbols.

/bar add control_buffers window top 1 1 buflist3
/bar set control_buffers priority 499
/bar set control_buffers conditions ${window.number} == ${if:${plugins.var.control_buffers_window}?${plugins.var.control_buffers_window}:2}

Create the control_buffers bar with buflist3 for items and display this bar only on the window with the same number as the number in the option plugins.var.control_buffers_window (or 2 if this options doesn't exist)

/set buflist.format.hotlist_highlight "${color:163}"
/set buflist.format.hotlist_message "${color:229}"
/set buflist.format.hotlist_private "${color:121}"

/set buflist.format.buffer "${if:${bar_item.name}==buflist?${if:${type}==server?${color:,31}:${color:default}}${if:${lengthscr:${format_number}${eval:${plugins.var.buflist_format_fold}}${indent}${format_nick_prefix}${format_name}${format_lag}${eval:${plugins.var.buflist_format_filter}${plugins.var.buflist_format_relay_count}${plugins.var.buflist_format_extra}}} > ${plugins.var.buflist_section_1st}?${cutscr:+${plugins.var.buflist_section_1st},${if:${type}==server?${color:white}:${color:${weechat.color.chat_prefix_more}}}${weechat.look.prefix_align_more},${format_number}${eval:${plugins.var.buflist_format_fold}}${indent}${format_nick_prefix}${format_name}${format_lag}${eval:${plugins.var.buflist_format_filter}${plugins.var.buflist_format_relay_count}${plugins.var.buflist_format_extra}}}:${format_number}${eval:${plugins.var.buflist_format_fold}}${indent}${format_nick_prefix}${format_name}${format_lag}${eval:${plugins.var.buflist_format_filter}${plugins.var.buflist_format_relay_count}${plugins.var.buflist_format_extra}}${repeat:${calc:${plugins.var.buflist_section_1st} - ${lengthscr:${format_number}${eval:${plugins.var.buflist_format_fold}}${indent}${format_nick_prefix}${format_name}${format_lag}${eval:${plugins.var.buflist_format_filter}${plugins.var.buflist_format_relay_count}${plugins.var.buflist_format_extra}}}}, }}${if:${lengthscr:${format_hotlist}} > ${plugins.var.buflist_section_2nd}?${cutscr:+${plugins.var.buflist_section_2nd},${if:${type}==server?${color:white}:${color:${weechat.color.chat_prefix_more}}}${weechat.look.prefix_align_more},${format_hotlist}}:${repeat:${calc:${plugins.var.buflist_section_2nd} - ${lengthscr:${format_hotlist}}}, }${format_hotlist}}:${if:${bar_item.name}==buflist3?${if:${window.buffer}==${buffer}?${color:31}${\ue0be}${color:white,31} ${cutscr:7,${\u2026},${name}} ${color:reset}${color:31}${\ue0bc}:${color:24}${\ue0be}${color:darkgray,24} ${cutscr:7,${\u2026},${name}} ${color:reset}${color:24}${\ue0bc}}:${color_hotlist}${name}}}"
/set buflist.format.buffer_current "${format_buffer}"
/set buflist.format.number "${if:${plugins.var.buflist_subsection_buffer_number}!=?${if:${current_buffer}?${color:*white}${hide:>,${number}} :${if:${type}==server?${color:black}:${color:239}}${number}${if:${number_displayed}?.: }}}"
/set buflist.format.indent "${if:${plugins.var.buflist_subsection_indent}!=?${if:${plugins.var.buflist_look_indent_tree}!=?${color:31}├─:  }}"
/set buflist.format.name "${if:${plugins.var.buflist_subsection_buffer_name}!=?${if:${type}==server?${color:white}${if:${plugins.var.buflist_look_real_net_name}!=&&${info:irc_server_isupport_value,${name},NETWORK}?${info:irc_server_isupport_value,${name},NETWORK}:${name}}:${eval:${color_hotlist}}${name}}}"
/set buflist.format.hotlist "${if:${plugins.var.buflist_subsection_hotlist}!=?${if:${plugins.var.buflist_section_2nd}==1? :${hotlist}}}"
/set buflist.format.nick_prefix "${if:${plugins.var.buflist_subsection_nick_prefix}!=&&${buflist.look.nick_prefix}!=?${color:31}${nick_prefix}}"
/set buflist.format.lag "${if:${plugins.var.buflist_subsection_lag}!=?${color:white} [${lag}]}"
/set plugins.var.buflist_format_fold "${if:${plugins.var.buflist_subsection_fold}!=&&${type}==server?${color:black}${if:${buffer.local_variables.fold}==?▼:▲} }"
/set plugins.var.buflist_format_filter "${if:${plugins.var.buflist_subsection_filter}!=&&${buffer.local_variables.filter}!=? ${if:${type}==server?${color:black}:${color:31}}${buffer.local_variables.filter}}"
/set plugins.var.buflist_format_relay_count "${if:${plugins.var.buflist_subsection_relay_count}!=&&${buffer.full_name}==relay.relay.list&&${info:relay_client_count,*,connected}!=? ${color:31}Total${\x3A}${info:relay_client_count,*,connected} IRC${\x3A}${info:relay_client_count,irc,connected} WeeChat${\x3A}${info:relay_client_count,weechat,connected}}"
/set plugins.var.buflist_format_extra "${if:${plugins.var.buflist_subsection_extra}!=&&${buffer.local_variables.extra}!=? ${if:${type}==server?${color:black}:${color:31}}${buffer.local_variables.extra}}"

This was the format options which changed the look of each buflist items

/set buflist.look.signals_refresh "irc_server_connected,relay_client_connected,relay_client_disconnected"

Add additionnals signals to refresh the buflist

/set buflist.look.display_conditions "${buffer.hidden}==0 && ((${bar_item.name} == buflist && (${type} !~ ^(channel|private)$ || ${type} =~ ^(channel|private)$ && ${buffer[${if:${plugin}==irc?${info:irc_buffer,${irc_server.name}}:${info:slack_matrix_server_search,${buffer}}}].local_variables.fold}==)) || (${bar_item.name}==buflist3 && ${buffer.local_variables.control_buffer}))"

The conditions to display a buffer in the buflist items.

/trigger addreplace buflist_refresh_options config "weechat.bar.buflist.size*;plugins.var.buflist_*"
/trigger set buflist_refresh_options command "/buflist refresh"

when the buflist is resized, the buflist is refresh. Same for all the plugins.var.buflist_* options

/trigger addreplace control_buffers_change_control_window config "plugins.var.control_buffers_window"
/trigger set control_buffers_change_control_window command "/window refresh"

Refresh window when options plugins.var.control_buffers_window is changed

/trigger add slack_matrix_server_search info slack_matrix_server_search
/trigger set slack_matrix_server_search conditions "${info:python_version} != && ${tg_arguments} != && ${buffer[${tg_arguments}].local_variables.script_name} =~ ^(slack|matrix)$"
/trigger set slack_matrix_server_search regex "/.*/${buffer[${tg_arguments}].local_variables.script_name}/my_script /.*/${buffer[${tg_arguments}].local_variables.plugin}/my_plugin /.*/${buffer[${tg_arguments}].local_variables.server}/my_server /.*/${my_plugin}.${if:${my_script}==matrix?server.}${my_server}/my_server_full_name ==\x5c\x5c==\x5c\x5c==my_server_full_name =='==\'==my_server_full_name /.*/${info:python_eval,print(weechat.buffer_search('==', '${my_server_full_name}'))}/tg_info"

This trigger is needed if you want to be able to expand/collapse slack and matrix servers not just irc

/key bindctxt mouse @item(buflist)>bar(control_buffers):button1* hsignal:toggle_property
/key bindctxt mouse @chat(*)>bar(control_buffers):button1* hsignal:toggle_property
/key bindctxt mouse @bar(control_buffers)>chat(*):button1* /mute /set plugins.var.control_buffers_window ${_window_number2}
/key bindctxt mouse @bar(buflist):alt-wheel* hsignal:buflist_resize
/key bindctxt mouse @item(buflist3):button1* /mute /set plugins.var.control_buffers_previous_active_window ${window.number};/window ${_window_number};hsignal:buflist_mouse;/window ${plugins.var.control_buffers_previous_active_window}
/key bindctxt cursor @item(buflist*):c hsignal:toggle_property;/cursor stop
/key bindctxt cursor @item(buflist*):f hsignal:toggle_property;/cursor stop
/key bindctxt cursor @item(buflist*):r /server raw c:\${${if:${localvar_type}==private?nick:${localvar_type}}}==${localvar_channel};/cursor stop
/key bindctxt cursor @item(buflist*):o /fset c:\${name}=*buffer_autoset.buffer.${full_name}.* ${if:${localvar_type}==server?|| \${name${\x7D}=*${full_name}.*};/cursor stop
/key bindctxt cursor @item(buflist*):C hsignal:toggle_property;/cursor stop
/key bindctxt cursor @item(buflist*):h hsignal:toggle_property;/cursor stop

/trigger addreplace toggle_bufautoset command "toggle_bufautoset;toggle bufautoset options;<buffer_property> <buffer_fullname>;buffer_property: name of the property${\n}buffer_fullname: name of the buffer${\n}${\n}The buffer_autoset.py script has no toggle mechanism so this command bring this functionality. Also, the script does not reset a property or localvar after deleting them. For example, if you type /buffer_autoset add irc.freenode.#weechat localvar_set_something 1, and then, /buffer_autoset del irc.freenode.#weechat.localvar_set_something, the localvar will still appears in /buffer localvar until you close and reoppen the buffer. This command will remove the localvar and hidden property upon deletion. You should use this command only for properties that take 0 or 1 as value or localvar that take 0 or 1.;;"
/trigger set toggle_bufautoset conditions "${tg_argv2} !="
/trigger set toggle_bufautoset regex "/.*/${tg_argv1}/my_property /.*/${tg_argv2}/my_full_name /.*/${if:${buffer_autoset.buffer.${my_full_name}.${my_property}}!=?del:add}/my_action /.*/${if:${my_action}==add? ${my_full_name} ${my_property} 1: ${my_full_name}.${my_property}}/my_params"
/trigger set toggle_bufautoset command "/mute /buffer_autoset ${my_action} ${my_params};/command -buffer ${my_full_name} * /buffer set ${my_property} ${if:${my_action}==add?1:0}"

/trigger addreplace toggle_property hsignal toggle_property
/trigger set toggle_property regex "/.*/${if:${_chat}!=?${_buffer_full_name}:${full_name}}/my_full_name /.*/${if:${_chat}!=?${_buffer_plugin}:${plugin}}/my_plugin /.*/${if:${_chat}!=?${_buffer_localvar_server}:${localvar_server}}/my_server /.*/${buffer[${pointer}].local_variables.script_name}/my_script_name /.*/${if:${_key}==f?${my_plugin}.${if:${my_plugin}==irc||${my_script_name}==matrix?server.}${my_server}:${re:0}}/my_full_name /.*/${_key}/my_property /^button1.*/localvar_set_control_buffer/my_property /(?-i)^c$/localvar_set_control_buffer/my_property /(?-i)^C$/localvar_set_no_chanmon_like/my_property /(?-i)^f$/localvar_set_fold/my_property /(?-i)^h$/hidden/my_property"
/trigger set toggle_property command "/toggle_bufautoset ${my_property} ${my_full_name}"

/trigger addreplace buflist_resize hsignal buflist_resize
/trigger set buflist_resize conditions "${_key}=~down || ${_key}=~up && (${_bar_item_col} < ${plugins.var.buflist_section_1st} && ${plugins.var.buflist_section_1st} > 1 || ${_bar_item_col} >= ${plugins.var.buflist_section_1st} && ${plugins.var.buflist_section_2nd} > 1)"
/trigger set buflist_resize regex "/.*/${if:${_key}=~up$?-:+}/my_action /.*/${if:${_bar_item_col}<${plugins.var.buflist_section_1st}?1st:2nd}/my_modified_section /.*/${calc:${plugins.var.buflist_section_${my_modified_section}} ${my_action} 1}/my_modified_section_size /.*/${if:${weechat.bar.${_bar_name}.size}!=?${calc:${weechat.bar.${_bar_name}.size} ${my_action} 1}:0}/my_new_bar_size"
/trigger set buflist_resize command "/mute /set plugins.var.buflist_section_${my_modified_section} ${my_modified_section_size};/bar set ${_bar_name} size ${my_new_bar_size}"

/trigger addreplace buflist_fold_symbol_click hsignal 1001|buflist_mouse
/trigger set buflist_fold_symbol_click conditions "${localvar_type} == server && ${plugins.var.buflist_subsection_fold} != && (${plugins.var.buflist_subsection_buffer_number} != && ${_bar_item_col} == ${lengthscr:${buffer[last_gui_buffer].number}.} || ${plugins.var.buflist_subsection_buffer_number} == && ${_bar_item_col} == 0)"
/trigger set buflist_fold_symbol_click command "/toggle_bufautoset localvar_set_fold ${full_name}"
/trigger set buflist_fold_symbol_click return_code "ok_eat"
  1. This bind allow drag and drop from the buflist item (in bar buflist) to the bar control_buffers. This will add or del the buffer to the control_buffers bar.
  2. This bind allow drag and drop from a chat area to the control_buffers bar. This will add or del the buffer to the control_buffers bar.
  3. This bind allows drag and drop from the control_buffers bar to a chat area. This will move the control_buffers bar to another window.
  4. This bind allows you to resize the buflist bar by pressing alt and using the wheel at the same time.
  5. This bind will switch to the control window and display the buffer you clicked on and then switch back to the previous window.
  6. This bind allow you to press 'c' in cursor mode on any buflist items to add or del the buffer to the control_buffers bar.
  7. This bind will hide the channels and private buffer of a network.
  8. This bind will show server raw messages for server/channel/private depending on the buffer.
  9. This bind will show options, in fset, related to the buffer.
  10. This bind allow you to press 'C' in cursor mode on any buflist items to add or remove buffer in chanmon
  11. This bind allow you to press 'h' in cursor mode on any buflist items to hide a buffer

The last trigger need WeeChat 2.9 for this: only return trigger's return code when condition evaluates to true

/set plugins.var.control_buffers_window 2

/buffer_autoset add core.weechat localvar_set_control_buffer 1
/buffer_autoset add core.highmon localvar_set_control_buffer 1
/buffer_autoset add core.chanmon localvar_set_control_buffer 1
/buffer_autoset add irc.freenode.##news localvar_set_control_buffer 1

set window number 2 as the control window (the window with the control_buffers bar). Add core.weechat, core.highmon, core.chanmon and irc.freenode.##news in the control_buffers bar.

Bar titlenosep

/bar del title
/bar add titlenosep window top 1 0 [#window_number],buffer_title
/bar set titlenosep priority 500
/bar set titlenosep conditions ${window.number} == ${if:${plugins.var.control_buffers_window}?${plugins.var.control_buffers_window}:2}
/bar set titlenosep color_fg white
/bar set titlenosep color_bg 31
/bar set titlenosep color_bg_inactive 31

A window bar to display the title, with no separator. Used on the window with the number corresponding to the option plugins.var.control_buffers_window

Bar titlesep

/bar add titlesep window top 1 1 [#window_number],buffer_title
/bar set titlesep priority 500
/bar set titlesep conditions ${window.number} != ${if:${plugins.var.control_buffers_window}?${plugins.var.control_buffers_window}:2}
/bar set titlesep color_fg white
/bar set titlesep color_bg 31
/bar set titlesep color_bg_inactive 31

A window bar to display the title with a separator. All window except the one with a number corresponding to the option plugins.var.control_buffers_window.

Bar status

/bar set status items [time],[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,scroll,[lag],[spell_dict],[spell_suggest],completion
/bar set status conditions ${window.number} == 1
/bar set status color_fg 31
/bar set status color_bg 234
/bar set status color_bg_inactive 234
/bar set status separator 1
#/eval /set weechat.bar.status.items ${weechat.bar.status.items},conky_CPU,conky_RAM,conky_Swap,conky_Up,conky_Down

Uncomment the last line if you want to show system info using conky when the conky buffer is not displayed. You will need the conky trigger and the script text_item.py

Bar input

/bar set input conditions ${window.number} == 1

Bar Nicklist

/bar set nicklist color_fg 229
/bar set nicklist separator 1
/bar set nicklist conditions ${nicklist} && ${window.number} == 1 && ${buffer.full_name} !~ ^irc.freenode.(#newsbin|##news)$
/bar set nicklist size_max 14
/bar set nicklist size 14

Note: I changed the conditions to display the nicklist only on buffer of type channels ${nicklist} and on the window number 1, which is my chat window (2 being my highlight window and 3 my conky window). In my case, I could remove ${window.numer} == 1 because the highmon and exec buffer (conky) are not of type channels so ${nicklist} is enough.

Layouts

Layout highlight-or-news

/eval /window splith ${calc:9 / ${window[gui_current_window].win_height} * 100 // 1}
/buffer highmon
/window 1
/layout store highlight-or-news

Note: Instead of having only one window, we split it to create another one that we will use to show all highlights.

Layout highlight-or-news-and-conky

/window 2
/window splitv 85
/buffer exec.conky
/window 1
/layout store highlight-or-news-and-conky

Note: split the highlight monitor window in 2 and show conky in the new one

Channel Monitor

/buffer_autoset add core.chanmon notify none
/buffer_autoset add core.chanmon title Channels Monitor

/trigger addreplace chanmon_like print "*;irc_privmsg,matrix_message"
/trigger set chanmon_like conditions "${buffer.local_variables.type} == channel && ${buffer.local_variables.no_chanmon_like} =="
/trigger set chanmon_like command "/print -newbuffer chanmon -tags ${tg_tags} ${cutscr:4,${color:${weechat.color.chat_prefix_more}}${weechat.look.prefix_buffer_align_more},${color:${info:nick_color_name,${server}}}${server}}${color:${info:nick_color_name,${channel}}}${channel}\t${if:${tg_tags} !~ ,irc_action,?${weechat.look.quote_nick_prefix}${tg_prefix}${color:reset}${weechat.look.quote_nick_suffix}:${tg_prefix}${color:reset}} ${tg_message}"

This trigger create a new buffer named chanmon. This buffer will contain all the messages from all the channels you are on. This is almost identical to the scripts chanmon.pl but without any options.

Highlight Monitor

/eval /set weechat.startup.command_after_plugins "${weechat.startup.command_after_plugins};/buffer add highmon"

/buffer_autoset add core.highmon title Highlight Monitor

/set plugins.var.highmon_context 1
/set plugins.var.highmon_context_max_msg 2
/set plugins.var.highmon_context_max_seconds 20

/trigger addreplace utils_date_calc_seconds_two_given_datetime info date_calc_seconds_two_given_datetime
/trigger set utils_date_calc_seconds_two_given_datetime conditions "${tg_arguments} =~ ^[0-9]{4}-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9]) ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9],[0-9]{4}-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9]) ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$ && ${info:python_version} !="
/trigger set utils_date_calc_seconds_two_given_datetime regex "/.*/${tg_arguments}/my_date1 /.*/${tg_arguments}/my_date2 /(.*),.*/${re:1}/my_date1 /.*,(.*)/${re:1}/my_date2 /.*/${info:python_eval,from datetime import datetime; date1 = datetime.strptime('${my_date1}', '%Y-%m-%d %H:%M:%S'); date2 = datetime.strptime('${my_date2}', '%Y-%m-%d %H:%M:%S'); delta = date1 - date2; print(int(abs(delta.total_seconds())))}/tg_info"

/trigger addreplace highmon_like print "*;irc_privmsg,matrix_message"
/trigger set highmon_like conditions "${tg_highlight} == 1 && ${tg_displayed} == 1 && ${buffer.local_variables.type} == channel || ${plugins.var.highmon_context} != && ${buffer.local_variables.highmon_context_number} =~ ^[0-9]+$ && ${buffer.local_variables.highmon_context_number} >= 1 && ${buffer.local_variables.highmon_context_number} <= ${if:${plugins.var.highmon_context_max_msg}!=?${plugins.var.highmon_context_max_msg}:3} && ${buffer.local_variables.highmon_context_datetime} != && ${info:python_version} != && ${info:date_calc_seconds_two_given_datetime,${tg_date},${buffer.local_variables.highmon_context_datetime}} <= ${if:${plugins.var.highmon_context_max_seconds}!=?${plugins.var.highmon_context_max_seconds}:60}"
/trigger set highmon_like regex "/.*/${if:${tg_highlight}!=?1:${calc:${buffer.local_variables.highmon_context_number}+1}}/my_context_number /.*/${if:${tg_highlight}!=?${tg_date}:${buffer.local_variables.highmon_context_datetime}}/my_context_datetime"
/trigger set highmon_like command "/buffer set localvar_set_highmon_context_datetime ${my_context_datetime};/buffer set localvar_set_highmon_context_number ${my_context_number};/print -newbuffer highmon -tags ${tg_tags} ${cutscr:4,${color:${weechat.color.chat_prefix_more}}${weechat.look.prefix_buffer_align_more},${color:${info:nick_color_name,${server}}}${server}}${color:${info:nick_color_name,${channel}}}${channel}\t${if:${tg_tags} !~ ,irc_action,?${weechat.look.quote_nick_prefix}${tg_prefix}${color:reset}${weechat.look.quote_nick_suffix}:${tg_prefix}${color:reset}} ${tg_message}"

The last trigger add highlighted message to the highmon buffer. If you also want to add a few messages after an highlight, enable context, by setting the option plugins.var.highmon_context to 1, then the next three privmsg messages received on the same buffer in the next 60 seconds will be added to highmon. You can override these values by settings the options plugins.var.highmon_context_max_msg and plugins.var.highmon_context_max_seconds

News

≥ WeeChat 2.9 for base_encode/base_decode

WeeChat Screenshot

/filter add news irc.freenode.##news !host_yano@unaffiliated/yano/bot/rssly+!irc_privmsg *
/filter addreplace news_interest irc.freenode.##news nick_newsly*+irc_privmsg,host_yano@unaffiliated/yano/bot/rssly+irc_privmsg !^(\s|\[)(Reddit [-] /r/netsec|Wired|freenode|EFF Updates|erry's blog|techdirt|TorrentFreak|Science Daily|Hacker News|CNET|phoronix|Ars Technica|The Intercept|france24|Radio-Canada Nouvelles|Canoe|Huffington Post [-] Weird News|Journal du hacker|Futura Sciences)( \-| | |\])

##news is a channel on Freenode with a bot named newsly that display news from various sources. The first /filter command hides everything that happends on the channel except PRIVMSG from newsly. The second /filter hides every news except those from the given list.

/trigger addreplace news_transform line *;irc.freenode.##news;irc_privmsg+nick_newsly*
/trigger set news_transform regex "/.*/${tg_message_nocolor}/my_site_name /^\[([^]]+)\].*/${re:1}/my_site_name /.*/${tg_message_nocolor}/my_title /^\[[^]]+\](.*)/${re:1}/my_title / - /${color:-underline}  /my_site_name /.*/${my_site_name}/my_site_color /^([^]+).*/${info:nick_color_name,${re:1}}/my_site_color /.*/${my_title}/my_date /.* ([0-9]{4}-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])/${re:1}/my_date /(.*) [0-9]{4}-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]/${re:1}/my_title /.*/${my_title}/my_url ==.* (https?://[^ ]+)==${re:1}==my_url /.*/${my_url}/my_url_encode /.*/${base_encode:64,${my_url_encode}}/my_url_encode /\+/#/my_url_encode /$/url_${my_url_encode}/tags ==(.*) https?://[^ ]+==${re:1}==my_title /.*/${color:black,${my_site_color}} ${color:underline}${my_site_name}${color:-underline} ${color:${my_site_color},default}${color:reset}${my_title}${if:${plugins.var.news_keep_url}!=? ${my_url}}${if:${plugins.var.news_keep_date}!=? ${my_date}}/message /.*//prefix"

This trigger will do a couple of thing. The URL will be removed from the message (except if the option plugins.var.news_keep_url is set). The date will also be removed from the message (except if the option plugins.var.news_keep_date is set). The url will be added as a tag on the line (encoded in base64).

Note: The url and the date will not appears in log. This is a consequence of using a modifier or a line trigger.

/trigger addreplace news_click hsignal news_click
/trigger set news_click regex "/(^|.*,)url_([^,]+)(,.*|$)/${re:2}/_chat_line_tags /#/+/_chat_line_tags /.*/${base_decode:64,${re:0}}/_chat_line_tags"
/trigger set news_click command "/command -buffer ${buffer.full_name} core /input insert ${_chat_line_tags}\x20"

/key bindctxt cursor @chat(irc.freenode.##news):i hsignal:news_click;/cursor stop
/key bindctxt cursor @chat(irc.freenode.##news):m hsignal:news_click;/cursor stop

/buffer_autoset add irc.freenode.##news highlight_words_del $nick

This trigger will be triggered when we press 'i' on a news in cursor mode (in general we invoke this with the middle mouse button). 'i' insert the URL in the input bar. If the URL is too long to view it all, simply press return to send it to the channel, which anyway is +m so nobody will see it, and press alt+l to go in bare mode (so you can click on the URL).

The last line disable highlight for your nick on this channel.

nullpointer (https://0x0.st)

WeeChat Screenshot

/alias add nullpointer /exec -sh -hsignal nullpointer $* 2>&1 | curl -sfSF file=@- https://0x0.st
/trigger addreplace nullpointer hsignal nullpointer
/trigger set nullpointer regex "/\n//out"
/trigger set nullpointer command "/command -buffer ${buffer.full_name} core /input delete_line;/command -buffer ${buffer.full_name} core /input insert ${out}"

This allow you to type /nullpointer uptime for example, to send the output of the uptime command to 0x0.st. Your input bar content will be replaced by the url of the paste. This way you can visit the URL to see if there is sensitive information before giving the url to everyone. You may wonder why I didn't used something like: _/exec -sh -pipe "/input delete_line;/input insert " $* 2>&1 | curl -sF c=@- https://0x0.st Well If we use this, the input bar will be filled with the command and not the url.

Dev info

≥ WeeChat 3.0 because of a bug in prior version bug when using an info created with a trigger inside the regex option of another trigger

WeeChat Screenshot

/alias add devinfo /exec -norc -timeout 5 -hsignal devinfo url:https://weechat.org/dev/info/all/

/trigger addreplace utils_date_calc_days info date_calc_days
/trigger set utils_date_calc_days conditions "${tg_arguments} =~ ^[0-9]{4}-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])$ && ${info:python_version} !="
/trigger set utils_date_calc_days regex "/.*/${info:python_eval,from datetime import datetime; date1 = datetime.today(); date2 = datetime.strptime('${tg_arguments}', '%Y-%m-%d'); delta = date1 - date2; print(abs(delta.days))}/tg_info"

/trigger addreplace utils_date_preferred info date_preferred
/trigger set utils_date_preferred conditions "${tg_arguments} =~ ^[0-9]{4}-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])$ && ${info:python_version} !="
/trigger set utils_date_preferred regex "/.*/${info:python_eval,from datetime import datetime; print(datetime.strptime('${tg_arguments}', '%Y-%m-%d').strftime('%x'))}/tg_info"

/trigger addreplace devinfo hsignal devinfo
/trigger set devinfo conditions "${err} == && ${info:python_version} !="
/trigger set devinfo regex "/(?n)^stable:(.*)/${re:0}${if:${info:version}!~-(dev|rc[0-9]+)? ${if:${re:1}==${info:version}?${color:121}(as mine!):${color:163}(mine is ${info:version})}}/out /(?n)^devel:(.*)/${re:0}${if:${info:version}=~-(dev|rc[0-9]+)? ${if:${re:1}==${info:version}?${color:121}(as mine!):${color:163}(mine is ${info:version})}}/out /.*/${info:version_git}/my_git /^[^g]+g(.*)/${re:1}/my_git /(?n)^git:(.*)/${re:0}${if:${info:version}=~-(dev|rc[0-9]+)? ${if:${cut:${length:${my_git}},,${re:1}}==${my_git}?${color:121}(as mine!):${color:163}(mine is ${info:version_git})}}/out /(?n)^(stable_date:)(.*)/${re:1}${info:date_preferred,${re:2}} (since ${info:date_calc_days,${re:2}} days)/out /(?n)^(next_stable_date:)(.*)/${re:1}${info:date_preferred,${re:2}} (${info:date_calc_days,${re:2}} days left)/out /_/ /out /(?n)^([^:]+:)(.*)/${color:31}${re:1} ${color:default}${re:2}/out /\n/\x5cn/out"
/trigger set devinfo command "/print -current -escape ${out}"

This alias retrieve info from https://weechat.org/dev/info/all/ and tell you if you're up-to-date and in how many days the next stable will be released

translate with translate-shell

WeeChat Screenshot

/buffer_autoset add exec.exec.translated_dict short_name dictionary
/set plugins.var.translate_lang fr
/buffer_autoset add irc.*.*fr localvar_set_translate_lang en

/trigger addreplace translate modifier weechat_print
/trigger set translate conditions "${tg_tags} =~ ,exec_cmd_translated_(text|lang),"
/trigger set translate regex "/.*/${color:*_31}${if:${tg_tags}=~,exec_cmd_translated_text,?Translation:Language}${color:reset}\t${tg_message_nocolor}/"

/trigger add translate_target_lang hsignal translate_target_lang
/trigger set translate_target_lang regex "/.*/${info:spell_dict,${_buffer}}/my_main_spell_dict /,.*//my_main_spell_dict /.*/${env:LANG}/my_env_lang /_.*//my_env_lang /.*/${_buffer_localvar_translate_lang},${if:${_buffer_plugin}==irc&&${_buffer_localvar_type}=~^(channel|private)$?${buffer[${info:irc_buffer,${_buffer_localvar_server}}].local_variables.translate_lang}},${plugins.var.translate_lang},${my_main_spell_dict},${my_env_lang}/my_lang /.*/${my_lang}/my_debug /^,+//my_lang /([^,]+).*/${re:1}/my_lang /'/'\''/my_lang /.*/${_chat_line_message}/my_chat_line_message /'/'\''/my_chat_line_message"
/trigger set translate_target_lang command "/command -buffer ${_buffer_full_name} * /exec -norc -name translated_text trans -brief -target '${my_lang}' -no-auto '${my_chat_line_message}'"

/key bindctxt cursor @chat:t /window ${_window_number};hsignal:translate_target_lang;/cursor stop
/key bindctxt cursor @chat:l /window ${_window_number};/command -buffer ${_buffer_full_name} * /exec -norc -name translated_lang trans -brief -no-auto -id '${modifier:escape_shell_single_quote,,${_chat_line_message}}';/cursor stop
/key bindctxt cursor @chat:d /window ${_window_number};/command -buffer ${_buffer_full_name} * /exec -norc -name translated_dict -n trans -dictionary -no-auto '${modifier:escape_shell_single_quote,,${_chat_word}}';/cursor stop

This let you translate text with the translate-shell program (package has the same name, at least for Debian). If you want to translate something someone said, press the middle mouse button on the message then press 't'. If you want to know the language of the text, press 'l' instead. Finally, you can press 'd' this will open a buffer and call translate-shell in dictionary mode. For the key 't', the target language is choosed like this: if there is a translate_lang localvar for the buffer, use the langage specified by this localvar. If not, check if the buffer is a channel or private and if so, check if there is a translate_lang localvar for the corresponding server buffer. If not, check if the option plugins.var.translate_lang exist. Otherwhise, check if there is a main spell dict set and if not use the LANG env. So, 1) buffer localvar 2) server buffer localvar 3) option 4) main spell dict 5) LANG environment variable

Highlight

/set weechat.look.highlight *pascalpoitras*

Triggers

Upgrade Scripts

/trigger addreplace day_changed_upgrade_scripts signal day_changed
/trigger set day_changed_upgrade_scripts command "/script update;/wait 10s /script upgrade"

This trigger will update the local script cache and then upgrade all the installed scripts at midnight.

Nick Validation

WeeChat Screenshot

/trigger addreplace modifier_is_nick_valid modifier input_text_display 
/trigger set modifier_is_nick_valid conditions "${tg_string_nocolor} =~ ^/nick . && ${buffer.plugin.name} == irc"
/trigger set modifier_is_nick_valid regex "===.*===${tg_string_nocolor}===my_nick ===^/nick (.+)===${re:1}===my_nick ===^-all (.+)===${re:1}===my_nick ===.*===${if:${tg_string_nocolor}=~^/nick -all[ ]?${info:python_eval,infolist = weechat.infolist_get('irc_server', '', '')\nwhile weechat.infolist_next(infolist):\n if weechat.infolist_integer(infolist, 'is_connected'): print(weechat.infolist_string(infolist, 'name') + ' ')\nweechat.infolist_free(infolist)}:${server}} ===my_servers ===[^ ]+===${re:0} ${info:irc_server_isupport_value,${re:0},NICKLEN} ${info:irc_server_isupport_value,${re:0},CASEMAPPING} ${if:${info:irc_server_isupport_value,${re:0},UTF8MAPPING}!=?${info:irc_server_isupport_value,${re:0},UTF8MAPPING}:no}===my_servers ===([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)===${re:0} ${if:${info:irc_is_nick,${re:1},${my_nick}}!=?valid:invalid}===my_servers ===([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)===\n${if:${re:5}==valid?${color:016,046}:${color:016,163}}${re:1} ${color:reverse} NICKLEN = ${calc:${re:2} - ${length:${my_nick}}}/${re:2}  CASEMAPPING = ${re:3}  UTF8MAPPING = ${re:4}${color:016,default}===my_servers ===.*===${re:0} ${my_servers}===tg_string"

This trigger will give you hint about max nickname length and available character in nickname and will also tell you if the nick is valid or not. Also note that weechat has limited support for the rfc8265. For example, on an oragono server with utf8 nickname enabled, weechat correctly report the nickname é as valid but incorrectly report │ as valid.

No notify for duck hunt commands

/trigger addreplace no_notify_duck_command line *;irc.*;irc_privmsg
/trigger set no_notify_duck_command conditions "${tg_message_nocolor} =~ ^[!,.](bef|bang|reload|shop|duckstats|friends|killers)(\s|$) && ${buffer.local_variables.type} == channel"
/trigger set no_notify_duck_command regex "/.*/-1/notify_level"

Disable notify for duck hunt commands like bef, bang, reload and so on. This way I know there is nothing worth reading on a channel so I don't switch to that buffer.

escape

/trigger addreplace utils_escape info escape
/trigger set utils_escape conditions "${tg_arguments} !="
/trigger set utils_escape regex "==\x5c\x5c==\x5c\x5c==tg_arguments =='==\'==tg_arguments /.*/${tg_arguments}/tg_info"

This info is used to escape single quote and backslash before giving a single quoted string to python. I prefer to reuse the regex in other trigger instead of using this info, this way the other trigger works even if you dont have this one. But sometimes I need to use this, for example in the buflist.

example: /eval -n ${info:python_eval,print('${info:escape,Hi' Everyone}')} will result in Hi' Everyone

escape shell single quote

/trigger addreplace utils_escape_shell_single_quote modifier escape_shell_single_quote
/trigger set utils_escape_shell_single_quote conditions "${tg_string}"
/trigger set utils_escape_shell_single_quote regex "/'/'\''/"

if you use /exec with -sh and the option exec_command_shell is set to bash, escape sequence like \n will not be interpreted as a new line. This is what I want so I configured this option to bash (if you use my configuration you should do the same). In zsh, the \n will be interpreted as a new line in a single quoted string. By default the option is set to sh but on my system /bin/sh is a symbolic link to dash and dash behave like zsh. You need to keep this in mind! And don't forget, this only works for single quote string, if you want to use it in a double quote string you need to create another modifier or modify this one.

example: /eval /exec -norc -sh echo '${modifier:escape_shell_single_quote,,${plugins.var.text}}' | cowsay will display a cow saying the content of plugins.var.text option

holiday

/trigger addreplace utils_holiday info holiday
/trigger set utils_holiday conditions "${tg_arguments} =~ ^(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])$"
/trigger set utils_holiday regex "/.*/${tg_arguments}/ /01-01/HAPPY NEW YEAR!/ /25-12/MERRY CHRISTMAS!/ /[0-9][0-9]-[0-9][0-9]//"

this info is useful for the weechat.look.day_change_message_1_date and _2dates. See these options at the bottom of my configuration. This trigger is also used from the day_changed_holiday_friend trigger.

Keys

/key bindctxt cursor @item(buffer_nicklist):v /window ${_window_number};/voice ${nick}
/key bindctxt cursor @item(buffer_nicklist):o /window ${_window_number};/op ${nick}
/key bindctxt cursor @item(buffer_nicklist):V /window ${_window_number};/devoice ${nick}
/key bindctxt cursor @item(buffer_nicklist):O /window ${_window_number};/deop ${nick}
/key bindctxt cursor @chat:s /window ${_window_number};/slap ${_chat_line_nick};/cursor stop
/key bindctxt cursor @item(buffer_nicklist):s /window ${_window_number};/slap ${nick};/cursor stop

/key bindctxt cursor @chat:a /command -buffer ${buffer.full_name} core /input insert ${_chat_bol}\x20;/cursor stop
/key bindctxt cursor @chat:e /command -buffer ${buffer.full_name} core /input insert ${_chat_eol}\x20;/cursor stop
/key bindctxt cursor @chat:w /command -buffer ${buffer.full_name} core /input insert ${_chat_word}\x20;/cursor stop

Others Keyboard shortcuts

/key bind meta-meta2-A /bar scroll nicklist * -100%
/key bind meta-meta2-B /bar scroll nicklist * +100%
/key bind meta2-A /input history_global_previous
/key bind meta2-B /input history_global_next

Alias

/alias add ame allchan -current /me
/alias add amsg allchan -current /msg *
/alias add cq allpv /buffer close
/alias add slap /me slaps $1- around a bit with a large trout
/alias add znc /quote znc
/alias add fu /say (╹◡╹)凸 $*
/alias addcompletion %(weechat_commands) multicomm /alias add temp $*;/temp
/alias add change-color /fset c:${type_en} == color && ${value} == $1;/command -buffer fset.fset core /input send m:*;/fset -add -$1;/fset -add $2
/alias add irc_stats /set plugins.var.total_irc_servers 0;/set plugins.var.total_irc_channels 0;/set plugins.var.total_irc_privates 0;/allserv /eval /set plugins.var.total_irc_servers ${calc:${plugins.var.total_irc_servers}+1};/allchan /eval /set plugins.var.total_irc_channels ${calc:${plugins.var.total_irc_channels}+1};/allpv /eval /set plugins.var.total_irc_privates ${calc:${plugins.var.total_irc_privates}+1};/eval I am currently on ${plugins.var.total_irc_servers} server${if:${plugins.var.total_irc_servers}>1?s}, ${plugins.var.total_irc_channels} channel${if:${plugins.var.total_irc_channels}>1?s} and I have ${plugins.var.total_irc_privates} quer${if:${plugins.var.total_irc_privates}>1?ies:y}.;/unset -mask plugins.var.total_irc_*

The multicomm alias is an alternative to /eval -s, but more "secure". If you use eval -s for this purpose (execute more than one command) but you forget that thing like secure variables will be evaluate this can be very bad. The change-color alias allow you to change all colors options corresponding to a certain value with another one.

Filters

/set irc.look.smart_filter on
/filter add irc_smart * irc_smart_filter *

Custom join color

/set weechat.color.chat_prefix_join 121
/set weechat.color.chat_host 31
/set irc.color.message_join 121

The weechat.color.chat_host option will also set this color for part and quit. To have a different color, for example, a host in red for parts and quits and green for joins, see this.

Custom part and quit

/set weechat.color.chat_prefix_quit 131
/set irc.color.message_quit 131

exec options

/set exec.command.shell bash

The remaining IRC options

/set irc.server_default.away_check 5
/set irc.server_default.away_check_max_nicks 25
/set irc.color.nick_prefixes "q:lightred;a:lightcyan;o:121;h:lightmagenta;v:229;*:lightblue"
/set irc.network.ban_mask_default "*!*@$host"
/set irc.look.buffer_switch_autojoin off
/set irc.look.buffer_switch_join off
/set irc.look.color_nicks_in_nicklist on
/set irc.look.part_closes_buffer on

The remaining Weechat options

/set weechat.look.bar_more_down ""
/set weechat.look.bar_more_up ""
/set weechat.look.bar_more_left "◀"
/set weechat.look.bar_more_right "▶"
/set weechat.look.buffer_notify_default message
/set weechat.look.buffer_time_format "${color:245}%H${color:253}%M"
/set weechat.look.color_inactive_message off
/set weechat.look.color_inactive_prefix off
/set weechat.look.color_inactive_prefix_buffer off
/set weechat.look.color_inactive_window off
/set weechat.look.day_change_message_1date "▬▬▶ ${if:${info:holiday,%d-%m}?${info:holiday,%d-%m}:%a, %d %b %Y} ◀▬▬"
/set weechat.look.day_change_message_2dates "▬▬▶ ${if:${info:holiday,%%d-%%m}?${info:holiday,%%d-%%m}:%%a, %%d %%b %%Y} (%a, %d %b %Y) ◀▬▬"
/set weechat.look.hotlist_add_conditions "${away} || ${buffer.num_displayed} == 0"
/set weechat.look.item_buffer_filter "•"
/set weechat.look.prefix_align_min 0
/set weechat.look.prefix_align_max 10
/set weechat.look.prefix_join "▬▬▶"
/set weechat.look.prefix_quit "◀▬▬"
/set weechat.look.prefix_suffix "│"
/set weechat.look.read_marker_string "─"
/set weechat.look.separator_horizontal ""


/set weechat.color.bar_more 229
/set weechat.color.chat_highlight lightred
/set weechat.color.chat_highlight_bg default
/set weechat.color.chat_nick_colors "cyan,magenta,green,brown,lightblue,lightcyan,lightmagenta,lightgreen,blue"
/set weechat.color.chat_prefix_more 31
/set weechat.color.chat_prefix_suffix 31
/set weechat.color.chat_read_marker 31
/set weechat.color.chat_time 239
/set weechat.color.chat_delimiters 31
/set weechat.color.separator 31
/set weechat.color.status_data_highlight 163
/set weechat.color.status_data_msg 229
/set weechat.color.status_data_private 121
/set weechat.color.status_more 229
/set weechat.color.status_name 121
/set weechat.color.status_name_ssl 121

The following command will let you run all the commands of my configuration (not really recommended, you should take only what you want and understand)

First, type the following

/secure passphrase <pass>
/secure set bitlbeepass <pass>
/secure set freenodepass <pass>
/secure set snoonetpass <pass>
/secure set tildepass <pass>
/secure set undernet_userpass <user> <pass>
/secure set undernet_secret <TOTP secret>
/secure set relaypass <pass>
/script install autojoin.py buffer_autoset.py autosort.py

Once scripts are installed

/exec -sh -oc curl -sfS https://gist.githubusercontent.com/pascalpoitras/8406501/raw/myweechat.md | sed -E 's/^\s+//;/^(\/secure|\/script)/d;/^\//!d'
@jmcbee

This comment has been minimized.

Copy link

@jmcbee jmcbee commented Nov 5, 2014

r3m/freenode:${sec.data.bncpass} what does this mean?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Nov 6, 2014

This is my encrypted ZNC password in sec.conf

@Axighi

This comment has been minimized.

Copy link

@Axighi Axighi commented Apr 17, 2015

how to run this script?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 19, 2015

Just copy all the line and paste it in weechat and press ctrl+y
dont forget : some lines need change

@jcvfen

This comment has been minimized.

Copy link

@jcvfen jcvfen commented Jul 26, 2015

nothing happens in buffer when i do /buffer exec.conky
I do have conky installed with ur conkyrc

@cyberviking

This comment has been minimized.

Copy link

@cyberviking cyberviking commented Mar 13, 2016

Look awesome, but why not share your .weechat folder ? Everything is inside, am i wrong ?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Mar 15, 2016

@jcvfen you need to enable transparency to see the conky. (the conky is on the desktop not in weechat)
@cyberviking you're right but I think it is more useful to know how to use the commands

@Grogglex

This comment has been minimized.

Copy link

@Grogglex Grogglex commented Apr 18, 2017

@pascalpoitras Is pushover working in the latest WeeChat Dev? I've copied your config but push notifications don't seem to be working.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 19, 2017

@Grogglex yes it works here with the latest dev

WeeChat 1.8-dev (git: v1.7-147-g084f9d7) [compiled on Apr 18 2017 14:44:47]
I also upgrade all script at midnight

do you use pushbullet?

@ralphee

This comment has been minimized.

Copy link

@ralphee ralphee commented Apr 23, 2017

@pascalpoitras i had to do a fresh install....i copied my .weechat folder ...installed weechat and copied my folder back....unfortunately weechat just opens as a fresh start....any pointers form you or anyone welocme!!!

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 23, 2017

@ralpheeee88 you did the right steps, are you sure you didn't put the .weechat backup inside .weechat like so ~/.weechat/.weechat ?

@PowerSchill

This comment has been minimized.

Copy link

@PowerSchill PowerSchill commented May 11, 2017

Is there a way to hide inactive buffers? I've used the buffer_autoclose script in the past but it doesn't appear to work with buflist. Sometimes I want to be able to focus on only the buffers that have had activity.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented May 12, 2017

@PowerSchill
There's probably a better way (like really using the API) but you can do this way:

This trigger will unhide hidden buffers whenever a message is received

/trigger addreplace reattach print "" "${buffer.hidden} == 1 && ${tg_tag_notify} == message" "" "/command -buffer irc.$server.$channel core /buffer unhide"

replace message by all or highlight if you want

then you can create another trigger (type timer) that will check each ten seconds (10000) if any of the channels had no activity since 100 seconds

/trigger addreplace detach timer 10000;0;0 "" "" "/allchan /eval /perlexec weechat::command('', '/command -buffer irc.\${server}.\${channel} core /buffer hide') if ((${date:%s} - \${buffer[\${info:irc_buffer,\${server},\${channel}}].lines.last_line.data.date}) > 100)"

it works here on the dev version, but use it at your own risk, I dont tested it a lot

@StarlitGhost

This comment has been minimized.

Copy link

@StarlitGhost StarlitGhost commented May 19, 2017

I made a small modification so it doesn't hide the buffer you currently have focused:

/trigger addreplace detach timer 10000;0;0 "" "" "/allchan /eval /perlexec weechat::command('', '/command -buffer irc.\${server}.\${channel} core /buffer hide') if ((${date:%s} - \${buffer[\${info:irc_buffer,\${server},\${channel}}].lines.last_line.data.date}) > 100 && '\${window.buffer.full_name}' !~ 'irc.\${server}.\${channel}')

(I just added && '\${window.buffer.full_name}' !~ 'irc.\${server}.\${channel}' to the condition)

I'd like to stop it hiding buffers which are in the hotlist, too, but I haven't figured that out yet.

@StarlitGhost

This comment has been minimized.

Copy link

@StarlitGhost StarlitGhost commented May 19, 2017

Got the hotlist via perlexec:

/perlexec my $h = weechat::infolist_get('hotlist', '', ''); my $hotlist; while(weechat::infolist_next($h)) { $hotlist.=weechat::infolist_string($h, "buffer_name")." "; } weechat::infolist_free($h); weechat::print($buffer, $hotlist);

Attempting to use this in the trigger via && index($hotlist, '\${server}.\${channel}') == -1 isn't working though - buffers on the hotlist are still being hidden.

Full attempt:
/trigger addreplace detach timer 10000;0;0 "" "" "/allchan /eval /perlexec my $hotlist = weechat::infolist_get('hotlist', '', '')\; my $h\; while(weechat::infolist_next($hotlist)) { $h.=weechat::infolist_string($hotlist, 'buffer_name').' '\; } weechat::infolist_free($hotlist)\; weechat::command('', '/command -buffer irc.\${server}.\${channel} core /buffer hide') if ((${date:%s} - \${buffer[\${info:irc_buffer,\${server},\${channel}}].lines.last_line.data.date}) > 100 && '\${window.buffer.full_name}' !~ 'irc.\${server}.\${channel}' && index($h, '\${server}.\${channel}') == -1)"

Getting a little unwieldy now, heh.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented May 19, 2017

@matthewcox nice works, for the hotlist you can use this

'${buffer[${info:irc_buffer,${server},${channel}}].hotlist}' ne '0x0')

to test if the buffer is in the hotlist

@StarlitGhost

This comment has been minimized.

Copy link

@StarlitGhost StarlitGhost commented May 19, 2017

Well now, that's much simpler. Thanks!

Final complete trigger, which hides buffers after 100 seconds of inactivity if they both aren't the current buffer and are not in the hotlist:

/trigger addreplace detach timer 10000;0;0 "" "" "/allchan /eval /perlexec weechat::command('', '/command -buffer irc.\${server}.\${channel} core /buffer hide') if ((${date:%s} - \${buffer[\${info:irc_buffer,\${server},\${channel}}].lines.last_line.data.date}) > 100 && '\${window.buffer.full_name}' !~ 'irc.\${server}.\${channel}' && '\${buffer[\${info:irc_buffer,\${server},\${channel}}].hotlist}' eq '0x0')"

And I look forward to jettisoning all of this once buflist supports it natively :)

@PentSec

This comment has been minimized.

Copy link

@PentSec PentSec commented Jun 11, 2017

i can see your color conf. i put all command, but i can see the same colors of my terminal, I hope can you help me.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 11, 2017

@PentSec are you talking about the background color? it's the background color of my terminal (urxvt), I use the famous solarized dark color scheme, otherwise I always use these color : 31, 121, 229 in weechat

@Drowze

This comment has been minimized.

Copy link

@Drowze Drowze commented Nov 14, 2017

/set irc.look.server_buffer independent

Why isn't this the default?! Thank you for your gist! Was really helpful 👍

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Nov 14, 2017

@Drowze Thanks! When servers buffers are merged with core you can use CTRL+X to cycle through them, which may be useful, there is probably other reason that I'm not aware of

@felipemeamaral

This comment has been minimized.

Copy link

@felipemeamaral felipemeamaral commented Nov 16, 2017

@pascalpoitras I'm trying to do the same as you but just with the users nicks in every channel.

E.g. Take the user nick color as the background of the message and insert a powerline glyph at the end.
Like you did with the #news buffer.

If you could help I'll be very glad, my friend.
Thank you for sharing your knowledge with us.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Nov 16, 2017

@pulgalipe thanks! here is a minimal solution just to help you get started:

/trigger add plsymbol_nick modifier weechat_print
/trigger set plsymbol_nick conditions "${tg_tags} =~ ,irc_privmsg,"
/trigger set plsymbol_nick regex "/.*/${color:black,${info:nick_color_name,${tg_prefix_nocolor}}}${tg_prefix_nocolor} ${color:reverse} ${color:reset}${tg_message}/"
@felipemeamaral

This comment has been minimized.

Copy link

@felipemeamaral felipemeamaral commented Dec 3, 2017

@pascalpoitras This is just what I was looking for.
Thank you very much. :)

@cbodden

This comment has been minimized.

Copy link

@cbodden cbodden commented Dec 4, 2017

This is always a great reference. Thanks for sharing.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Dec 10, 2017

@cbodden thanks!

@blazingnode

This comment has been minimized.

Copy link

@blazingnode blazingnode commented Jan 4, 2018

Can you explain how to fix the conky? its displaying double eth0 and double ram on weechat.

thanks

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jan 4, 2018

@blazingnode I Have no idea. you should go to #conky on freenode. My config is almost identical to the default one, I just put my interface name

@vasyl83

This comment has been minimized.

Copy link

@vasyl83 vasyl83 commented Feb 6, 2018

did a fresh install of weechat on ubuntu 16.04 (weechat version 2.0.1)
/set aspell.color.suggestions *green fails needs to be replaced with /set aspell.color.suggestion *green
next, /autosort replacements add ## # doesn't work anymore
also /buffer add -switch highmon errors out with Error with command "/buffer add -switch highmon" (help on command: /help buffer)

any idea how to correct that?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Feb 6, 2018

@vasyl83 Hi, I am using the devel version of weechat, this is the reason you get an error with /buffer add (you need 2.1)
you're right for suggestion without an s, thanks I will fix that, and for autosort you,re also right, I need to change that!

so for the highmon, you can use the script highmon.pl or use the devel version of weechat

@vasyl83

This comment has been minimized.

Copy link

@vasyl83 vasyl83 commented Feb 6, 2018

@pascalpoitras Thanks Ill switch to devel then :)

@vasyl83

This comment has been minimized.

Copy link

@vasyl83 vasyl83 commented Feb 6, 2018

@pascalpoitras Would you mind explaining the news section a little bit?
I just want to understand how to correctly filter then news I want to see.

Also the whole coloring thing. If I want powerline colors, do I only paste last lines?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Feb 6, 2018

@vasyl83 you need to modify the filter to choose which sites to hides
if you want the powerline symbol you can use (you also need a fonts that support these symbols)

/trigger add news_modifier modifier weechat_print
/trigger set news_modifier conditions "${tg_tag_nick} =~ ^newsly_? && ${tg_tags} =~ ,irc_privmsg, && ${tg_buffer} == irc.freenode.##news"
/trigger set news_modifier regex "/.*// /.*/${tg_message_nocolor}/tg_prefix /.*/${tg_message_nocolor}/tg_message /^\[[^]]+\]//tg_message /^\[([^]]+)\].*/${re:1}/tg_prefix /^([^\-]+)/${color:_black,${info:nick_color_name,${re:1}}} ${re:1}/tg_prefix / - / ${color:-underline} /tg_prefix /$/ ${color:!}/tg_prefix ==\(?https?://.*====tg_message ==.*(https?://\S+).*==${re:1}==tg_message_nocolor /\+/%2B/tg_message_nocolor /,/%2C/tg_message_nocolor /\!/%21/tg_message_nocolor /\*/%2A/tg_message_nocolor"
/trigger set news_modifier command "/print -buffer ${tg_buffer} -tags ${tg_tags},url_${tg_message_nocolor} \t${tg_prefix}${color:reset}${tg_message}"

for the filter you should look at the list of sites the bot displays news for
here

and then modify the second filter and keep the first one like it is

/filter add news irc.freenode.##news !nick_newsly+!host_yano@unaffiliated/yano/bot/rssly,!irc_privmsg *
/filter add news_interest irc.freenode.##news nick_newsly+irc_privmsg,host_yano@unaffiliated/yano/bot/rssly+irc_privmsg !^(\s|\[)(Reddit [-] /r/netsec|Wired|freenode|EFF Updates|erry's blog|techdirt|TorrentFreak|Science Daily|Hacker News|CNET|phoronix|Ars Technica|The Intercept|france24|Radio Canada|Canoe|Huffington Post [-] Weird News)( \-| | |\])

so here the second filter hide everything except the sites that are mentioned (/r/netsec/wired/freenode) and so on

@vasyl83

This comment has been minimized.

Copy link

@vasyl83 vasyl83 commented Feb 10, 2018

@pascalpoitras
DO I need to join ##news?

@vasyl83

This comment has been minimized.

Copy link

@vasyl83 vasyl83 commented Feb 10, 2018

also should news appear in highlight monitor? cause they don't

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Feb 10, 2018

@vasyl83 yes you need to join ##news
no it will not appears in highlight monitor

@weilbith

This comment has been minimized.

Copy link

@weilbith weilbith commented Feb 17, 2018

Hey @pascalpoitras
First: ty very much for this awesome guide!
I've the problem, that buffers in the buflist get shorten and marked with a + char at the end. Of course I've increased the window size of the buflist, but it doesn't help. C the screenshot. How can I solve this? In fact how can I increase the number of chars used for a buffers name?

weechat_buffername_bug

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Feb 17, 2018

@weilbith Hi!
Yes my config do not scale very well, In fact the buffer name max length is hardcoded. You would need to change the value 8 with another number. But, in case you change the value more than once, here is a better way:

If you want to try with, for example, 12, do this

/set plugins.var.buflist_buf_max_len 12
then, we will replace the hardcoded number to ${plugins.var.buflist_buf_max_len}

/set buflist.format.name "${if:${type}==server?${color:white}:${color_hotlist}}${if:${type}==server||${type}==channel||${type}==private?${if:${cutscr:${plugins.var.buflist_buf_max_len},+,${name}}!=${name}?${cutscr:${plugins.var.buflist_buf_max_len},${color:${weechat.color.chat_prefix_more}}+,${if:${type}==server&&${info:irc_server_isupport_value,${name},NETWORK}?${info:irc_server_isupport_value,${name},NETWORK}:${name}}}:${cutscr:${plugins.var.buflist_buf_max_len}, ,${if:${type}==server&&${info:irc_server_isupport_value,${name},NETWORK}?${info:irc_server_isupport_value,${name},NETWORK} :${name} }}}:${name}}"

then, if 12 is not what you want you just have to try another value with

/set plugins.var.buflist_buf_max_len another_value

I will upgrade my buflist soon to be scalable

@weilbith

This comment has been minimized.

Copy link

@weilbith weilbith commented Feb 17, 2018

@pascalpoitras

Awesome! Thank you very much.
It will need some time till I rly understand these complete format expressions. ^^

@weilbith

This comment has been minimized.

Copy link

@weilbith weilbith commented Feb 17, 2018

@pascalpoitras
Hey again. Sry for being annoying, but I also adjust the nick names like u wrote for @felipemeamaral. I have some bug, where the nick name is simply empty. It seems not to correlate with specific users. For example in the screenshot this is just a bot which show messages for a GitHub repo. Means that is there no other "nick".

Furthermore I used a transparent background in my terminal (in the area of the screenshot not rly apparently, but the contrast is visible). Unfortunately the area after the arrow is black, what looks not so nice. I already tried to play with the /trigger set plsymbol_nick regex value, but don't get it working. Using the color value default to refer the command line colors, just selecting the color of the default foreground and not the background. Any idea?

weechat_nicks_missing

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Feb 17, 2018

@weilbith
Hi,

Could you try this for the black arrow

/trigger set plsymbol_nick regex "/.*/${color:black,${info:nick_color_name,${tg_prefix_nocolor}}}${tg_prefix_nocolor} ${color:${info:nick_color_name,${tg_prefix_nocolor}},default} ${color:reset}${tg_message}/"

For the nick, did you change something to the trigger? if so can I see the trigger? And what is the nick of the bot, I would try with a nick with similar character

@weilbith

This comment has been minimized.

Copy link

@weilbith weilbith commented Feb 18, 2018

@pascalpoitras
Wow, it works! Looks quite nice now. 👍

I think it is more a problem of the Slack plugin. Sry for that.

Which documentation u could recommend, if I wan't to get on the level u r?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Feb 18, 2018

@weilbith
The user guide and the plugin API reference guide available on https://weechat.org/doc/
And especially /eval and /trigger!
Also, if you use the devel version, you can use /python eval code (or perl, ruby..)

In my config, almost everything is done with /trigger, /eval and /ruby eval

@remlap

This comment has been minimized.

Copy link

@remlap remlap commented Mar 1, 2018

Hi been trying to add the powerline for nick but I would like it in the area where the quit and joins are shown as default but I am not smart enough to figure out how.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Mar 1, 2018

@remlap try the example I gave to @weilbith in this comment

@remlap

This comment has been minimized.

Copy link

@remlap remlap commented Mar 1, 2018

@pascalpoitras I did and they appear after the quit and join arrow location not same place.

screenshot at 2018-03-01 13-48-34

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Mar 1, 2018

@remlap oh I see

First, remove the separator (the line) between prefix and message

/set weechat.look.prefix_suffix ""

Then, remove right alignment

/set weechat.look.prefix_align none

Then

/trigger set plsymbol_nick regex "/.*/${color:black,${info:nick_color_name,${tg_prefix_nocolor}}}${tg_prefix_nocolor} ${color:${info:nick_color_name,${tg_prefix_nocolor}},default}\t ${color:reset}${tg_message}/"

let me now if it works like you want

@remlap

This comment has been minimized.

Copy link

@remlap remlap commented Mar 1, 2018

That's what I needed.

Thanks for everything!

@derfalx

This comment has been minimized.

Copy link

@derfalx derfalx commented Apr 17, 2018

Hi,
is there a way to use the urlselect script even if the Input-Bar is not channel-buffer specific? At the moment I am only able to select the url of the topic, but nothing from within the chat-buffer.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 18, 2018

@derfalx
Hi,
I never used that script, for url I use bare display
maybe the readme may help you

@derfalx

This comment has been minimized.

Copy link

@derfalx derfalx commented Apr 18, 2018

@pascalpoitras
Hi,
got it :)
/urlselect activate merged does the trick.

@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 20, 2018

How to display the number of unread private messages on the buffer list ?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 21, 2018

@MatijaTerzic

if you use the buflist you need to put either ${hotlist} or ${format_hotlist} in the options:


buflist.format.buffer 
buflist.format.buffer_current

But I suppose you're using the buffers.pl script as hotlist is already included in the default buflist format. I highly recommend using buflist because it's faster and a lot more flexible

EDIT: I'm wrong, the default format do not include the hotlist

for buffers.pl

/set buffers.look.hotlist_counter on

@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 27, 2018

Is it possible to put the buddylist under the buflist. So let's say, buflist height middle and then under buddylist ?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 27, 2018

@MatijaTerzic

try /bar set buflist items buflist,buddylist

@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 27, 2018

@pascalpoitras
Tnx super !

But any change of getting a seperator in between ? ;)

@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 27, 2018

Thanks,

Is it possible to get a separtor in between ? ;)

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 28, 2018

@MatijaTerzic
Yes!

/script install text_item.py
/set plugins.var.python.text_item.sep_buflist_buddylist all --------
/bar set buflist items buflist,sep_buflist_buddylist,buddylist
@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 28, 2018

@pascalpoitras

Fantastic, you are my hero ;) !!

Enjoying weechat so much

@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 28, 2018

@pascalpoitras

Can i also put the buddylist at the bottom of the buflist ?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 28, 2018

@MatijaTerzic

you're welcome

Do you mean put the buddylist bar below the buflist bar instead of puting buddylist inside buflist?

If so, note that buflist is a rootbar so it take all the place as far as I know, so I would put buddylist inside buflist as I show you earlier

@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 28, 2018

@pascalpoitras

No i mean position the buddylist at the bottom of the buflist. So channels/servers/private messages on top of the buflist and the buddylist on the bottom of the buflist

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 28, 2018

@MatijaTerzic

That's what
/bar set buflist items buflist,buddylist
does no?

@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 28, 2018

@pascalpoitras

the /bar set ... is fine but i would like to see server/channles/private messages aligned on top of buflist and rihgt below the buddylist. What i would like if to align servers/channeles/... to to top of buflist and buddylist allign to the bottom. If you get what i am saying...

@MatijaTerzic

This comment has been minimized.

Copy link

@MatijaTerzic MatijaTerzic commented Apr 28, 2018

image

I would like the buddylist on the bottom of thr buflst

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Apr 28, 2018

@MatijaTerzic

Oh ok!
WeeChat do not support alignement yet, it is planned for a future release

@io7m

This comment has been minimized.

Copy link

@io7m io7m commented May 8, 2018

This is impressive work!

One thing I can't work out: How is it that the settings you give for the buflist change the background color? I see plenty of references like ${color:white} and so on, but nothing that would appear to change the background...

I'm trying to set background colors for server names in the buflist.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented May 8, 2018

@io7m

thanks!
I am using this for server buffer ${color:*white,31}
so the fg color then a comma then the bg color (the * is not related, this is for bold)

@LUEshi42

This comment has been minimized.

Copy link

@LUEshi42 LUEshi42 commented May 10, 2018

merci !

@weilbith

This comment has been minimized.

Copy link

@weilbith weilbith commented Jun 26, 2018

@pascalpoitras do have an idea how I can scroll or possible fold the buflist? Cause using several Slack groups, this heavily fill the list.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 27, 2018

@weilbith yes if you use my configuration you can middle click on a server buffer and press h to hide all channels and pm, then to unfold, do the same (middle click) but press H

here is the two /key command


/key bindctxt cursor @item(buflist):h /command -buffer ${full_name} irc /allchan -current buffer hide;/command -buffer ${full_name} irc /allpv -current buffer hide;/cursor stop
/key bindctxt cursor @item(buflist):H /command -buffer ${full_name} irc /allchan -current buffer unhide;/command -buffer ${full_name} irc /allpv -current buffer unhide;/cursor stop
@duckpuppy

This comment has been minimized.

Copy link

@duckpuppy duckpuppy commented Jun 27, 2018

I think there may be an error with the news regex. When I apply that I get an error for each message (though it LOOKS ok in the channel).

12:24 =!= Error with command "/print -buffer irc.freenode.##news -tags ,irc_privmsg,notify_message,prefix_nick_2,nick_newsly,host_~newsly@unaffiliated/yano/bot/rssly,log1,,url_[Reddit - /r/politics] A reading from the Book of St. Don. https://www.newyorker.com/magazine/2018/07/02/little-st-don 2018-06-27T16:23:18 \t[Reddit - /r/politics] A reading from the Book of St. Don." (help on command: /help print)

Or did I miss some other config? It seems to not be capturing the URL and adding it as a tag properly.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 27, 2018

@duckpuppy

everything works fine here, sometimes, maybe once a month one message fails because the links is invalid like (tp instead of http) but except that I am unable to reproduce the problem you got.

what is your version of weechat (if you have version 1.0 (like on debian jessie) you can't use ${re:1} to refer to capture group one you need another syntax)? and do you have any modifier trigger or any script that modify the messages?

@duckpuppy

This comment has been minimized.

Copy link

@duckpuppy duckpuppy commented Jun 28, 2018

It's pretty much every message for me. I'm running 2.1 on both OSX (installed and updated via Homebrew) and Debian Stretch (installed from weechat repo) with the same results. The weechat buffer is filled with a steady stream of errors on both OSs.

The only triggers I've ever created in weechat I took from the above config - it's new territory for me.

@duckpuppy

This comment has been minimized.

Copy link

@duckpuppy duckpuppy commented Jun 28, 2018

This is my trigger list:

09:31
09:31 Triggers enabled
09:31 List of triggers:
09:31   beep: print =? /1
09:31   chanmon_like: print =? /1
09:31   cmd_pass: modifier(5000|input_text_display;5000|history_add;5000|irc_command_auth) ~1
09:31   highmon_like: print =? /1
09:31   hsignal_news_click: hsignal(news_click) ~1 /1
09:31   msg_auth: modifier(5000|irc_message_auth) ~1
09:31   news_modifier: modifier(weechat_print) =? ~7 /1
09:31   server_pass: modifier(5000|input_text_display;5000|history_add) ~1

There's nothing but the default triggers and the ones from this config as far as I can see.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 28, 2018

@duckpuppy well, chanmon_like and highmon_like are from this config, hsignal_news_click too. But as I said I can't reproduce the problem here, it works perfectly. Can you show me the trigger? /trigger input news_modifier and paste here the result. Also, in the news section in my config, there is 4 differents news output, could you try one without powerline symbol?

@weilbith

This comment has been minimized.

Copy link

@weilbith weilbith commented Jul 3, 2018

I try to implement some kinda unread message counter for my statusline. My idea is to provide a python script that hooks into WeeChat and count. I found a lot about how to catch new messages and to parse them. But this would only increase the counter. Are you aware about an hook to get event that the user has read a/some message(s) to decrease the coutner?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jul 3, 2018

@weilbith there is a signal named hotlist_changed. I will give you an exemple with a trigger

/trigger add test_hotlist signal hotlist_changed "" "" "/print -core ${buffer[${tg_signal_data}].full_name}: low msg: ${buffer[${tg_signal_data}].hotlist.count}, message msg: ${buffer[${tg_signal_data}].hotlist.1|count}, highlight msg: ${buffer[${tg_signal_data}].hotlist.3|count}"

Now if you change the active buffer to one with unread messages, then look in the core buffer you should see 0 for everything, because the hotlist get clear as soon as you change to a buffer with unread messages. No way to know the previous number the buffer had so you can substract this way.

another way will be to catch the same signal and then for all channels in the infolist hotlist to look for the count and add all them together.

I'm not very good with the API, I'm more into trigger, there's probably tons of better way.

Please let me now if you find a solution!

@kalasni

This comment has been minimized.

Copy link

@kalasni kalasni commented Jul 21, 2018

@pascalpoitras a lot of valuable information here.
It may not be the right place to ask this, but I would like to know what I need to have a channel in each window, something like this:
https://weechat.org/about/screenshots/weechat/weechat_2009-08-26_daemon.png/

Thanks in advance!

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jul 22, 2018

@kalasni

hi and thanks!
you can do it this way

/window merge all
/buffer name_of_buffer_that_go_in_bottom_left_window
/window splitv
/buffer name_of_buffer_that_go_in_bottom_right_window
/window splith
/buffer name_of_buffer_that_go_in_middle_right_window
/window left
/window splith
/buffer name_of_buffer_that_go_in_middle_left_window
/window splith
/buffer name_of_buffer_that_go_in_top_left_window
/window right
/window splith
/buffer name_of_buffer_that_go_in_top_right_window
/window balance
/layout store six-windows

maybe there is a script or a better way to do it, honestly I always had a bit of difficulty with window splitting.

Here is the number of each window


5 | 6

4 | 3

1 | 2

@kalasni

This comment has been minimized.

Copy link

@kalasni kalasni commented Jul 23, 2018

@pascalpoitras
I will try it. Thanks again.

@Soundtoxin

This comment has been minimized.

Copy link

@Soundtoxin Soundtoxin commented Aug 1, 2018

Can you tell me how I tweak the conditions for weechat beeping at me? I'm using an english word as my nickname, so I get a bunch of beeps when people use it in a sentence. I want to turn that off or make it so it only beeps when it's at the start of a line. I also want to make certain channels not notify me of new messages, for the ones I just idle in and don't read all of. The way it is now is pretty distracting.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Aug 2, 2018

@Soundtoxin
You can either disable the beep trigger
/trigger disable beep

Or you can change the conditions
/set trigger.trigger.beep.conditions "new condition here"

@oldsouless

This comment has been minimized.

Copy link

@oldsouless oldsouless commented Aug 15, 2018

@duckpuppy did you ever resolve your issue with the news trigger; I had the exact same.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Aug 16, 2018

@oldsouless
It seems on some system like FreeBSD, \S don't work, so you need to change \S+ to [^ ]+ and the trigger should works. I will upgrade the config in 2 minutes to use [^ ]+. Please, let me know if it works!

@oldsouless

This comment has been minimized.

Copy link

@oldsouless oldsouless commented Aug 28, 2018

@pascalpoitras unfortunately updating to \S+ to [^ ]+ doesn't resolve (it actually disables/invalidates the print entirely. Not sure if this came across from the OG issue. The properly formatted print is actually included in the error message. For example here is my latest print from your news trigger:

screen shot 2018-08-28 at 1 16 19 pm

Note that the print regex seems to be working and even includes the Powerline fonts but also contains the error message; changing the regex as you directed causes it to stop working. Thanks in advance for posting your config and helping with troubleshooting.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Aug 28, 2018

@oldsouless

could you type

/trigger input news_modifier

and paste the result here

@oldsouless

This comment has been minimized.

Copy link

@oldsouless oldsouless commented Sep 5, 2018

/trigger add news_modifier modifier "weechat_print" "${tg_tag_nick} =~ ^newsly_? && ${tg_tags} =~ ,irc_privmsg, && ${tg_buffer} == irc.freenode.##news" "/.// /./${tg_message_nocolor}/tg_prefix /./${tg_message_nocolor}/tg_message /^[[^]]+]//tg_message /^[([^]]+)]./${re:1}/tg_prefix /^([^-]+)/${color:black,${info:nick_color_name,${re:1}}} ${re:1}/tg_prefix / - / ${color:-underline} /tg_prefix /$/ ${color:!}/tg_prefix ==(?https?://.====tg_message ==.(https?://\S+).*==${re:1}==tg_message_nocolor /+/%2B/tg_message_nocolor /,/%2C/tg_message_nocolor /!/%21/tg_message_nocolor /*/%2A/tg_message_nocolor" "/print -buffer ${tg_buffer} -tags ${tg_tags},url${tg_message_nocolor} \t${tg_prefix}${color:reset}${tg_message}" "" "none"/trigger add news_modifier modifier "weechat_print" "${tg_tag_nick} =~ ^newsly_? && ${tg_tags} =~ ,irc_privmsg, && ${tg_buffer} == irc.freenode.##news" "/.// /./${tg_message_nocolor}/tg_prefix /./${tg_message_nocolor}/tg_message /^[[^]]+]//tg_message /^[([^]]+)]./${re:1}/tg_prefix /^([^-]+)/${color:black,${info:nick_color_name,${re:1}}} ${re:1}/tg_prefix / - / ${color:-underline} /tg_prefix /$/ ${color:!}/tg_prefix ==(?https?://.====tg_message ==.(https?://\S+).*==${re:1}==tg_message_nocolor /+/%2B/tg_message_nocolor /,/%2C/tg_message_nocolor /!/%21/tg_message_nocolor /*/%2A/tg_message_nocolor" "/print -buffer ${tg_buffer} -tags ${tg_tags},url${tg_message_nocolor} \t${tg_prefix}${color:reset}${tg_message}" "" "none"

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 6, 2018

@oldsouless you're still using \S+

type this

/trigger set news_modifier regex "/.*// /.*/${tg_message_nocolor}/tg_prefix /.*/${tg_message_nocolor}/tg_message /^\[[^]]+\]//tg_message /^\[([^]]+)\].*/${re:1}/tg_prefix /.*/${tg_prefix}/tg_prefix_nocolor /^([^\-]+).*/${info:nick_color_name,${re:1}}/tg_prefix_nocolor /^([^\-]+)/${color:_black,${info:nick_color_name,${re:1}}} ${re:1}/tg_prefix / - / ${color:-underline} /tg_prefix /$/ ${color:${tg_prefix_nocolor},default}/tg_prefix ==\(?https?://.*====tg_message ==.*(https?://[^ ]+).*==${re:1}==tg_message_nocolor /\+/%2B/tg_message_nocolor /,/%2C/tg_message_nocolor /\!/%21/tg_message_nocolor /\*/%2A/tg_message_nocolor"

@oldsouless

This comment has been minimized.

Copy link

@oldsouless oldsouless commented Sep 7, 2018

Yes; I tried updating to [^ ]+ but this disables the news trigger entirely; the former at least prints something. No visible error messages it just fails silently.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 7, 2018

@oldsouless

What is your OS and what is your WeeChat version?
Sometimes the regex need to be adjusted depending on the OS.

@oldsouless

This comment has been minimized.

Copy link

@oldsouless oldsouless commented Sep 11, 2018

exact same as OG issue; macosx, weechat 2.2 from brew.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 13, 2018

@oldsouless

Sorry, I'm out of idea :(

@112RG

This comment has been minimized.

Copy link

@112RG 112RG commented Sep 17, 2018

Hi! I am loving the script it is working great and making my WeeChat look very nice. I am just having a little trouble with the news.

I have the news filtering to the sources I want but how do I get it display as seen in https://user-images.githubusercontent.com/5862986/44739040-ad251280-aac4-11e8-99da-1e3d6b7f1c15.png

Or is there a way I can get it printing in a channel like highmon?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 18, 2018

@112madgamer

please type this in your weechat, this will change the regex from using \S+ to [^ ]+ which seems to fix the issue for freebsd users and maybe people from other OS

/trigger set news_modifier regex "/.*// /.*/${tg_message_nocolor}/tg_prefix /.*/${tg_message_nocolor}/tg_message /^\[[^]]+\]//tg_message /^\[([^]]+)\].*/${re:1}/tg_prefix /.*/${tg_prefix}/tg_prefix_nocolor /^([^\-]+).*/${info:nick_color_name,${re:1}}/tg_prefix_nocolor /^([^\-]+)/${color:_black,${info:nick_color_name,${re:1}}} ${re:1}/tg_prefix / - / ${color:-underline} /tg_prefix /$/ ${color:${tg_prefix_nocolor},default}/tg_prefix ==\(?https?://.*====tg_message ==.*(https?://[^ ]+).*==${re:1}==tg_message_nocolor /\+/%2B/tg_message_nocolor /,/%2C/tg_message_nocolor /\!/%21/tg_message_nocolor /\*/%2A/tg_message_nocolor"

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 18, 2018

some people seems to have issue with the "old" "news" triggers, it was working fine here and I was unable to reproduce the problem(on my debian system), seems to be happening on mac os. On FreeBSD, replacing \S+ by [^ ]+ seems to fix this (as noted on the weechat github wiki). Please also make sure to change "/print -buffer irc.freenode.##news" if you're freenode buffer is named differently. Otherwise, you could upgrade to weechat 2.3-dev to use my "new" "news" trigger but it use the same kind of regex so I guess this will still be a problem.

@112RG

This comment has been minimized.

Copy link

@112RG 112RG commented Sep 18, 2018

The trouble I am having is I am not getting ##news printed into the. Buffer above the main chat buffer as seen in the first image of the gist. I should have said this in my first message but I am running Arch + WeeChat2.3-dev. I basically just want ##news printed into the buffer highmon buffer or its own news buffer.

==EDIT==

I understand the issue. Silly me in the image I am looking at the news channel is being shown in the window above.

I fixed the issue. Thank you for the awesome gist!

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 18, 2018

@112madgamer no problem!

@112RG

This comment has been minimized.

Copy link

@112RG 112RG commented Sep 18, 2018

Just one more question is the ##news stuff meant to print inside the highmon buffer?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 18, 2018

@112madgamer no, I just switch between ##news and highmon in the top window, I should rename the layout to reflect that. Most of the time, ##news is the active buffer in the top window, I do not have lots of highlight so I prefer to see the news there!

@112RG

This comment has been minimized.

Copy link

@112RG 112RG commented Sep 19, 2018

Yeah, that was a bit confusing. I just switch the window to news also

@rgillette

This comment has been minimized.

Copy link

@rgillette rgillette commented Feb 7, 2019

Hello, I first would like to think you for this guide. I have it all setup and configured. Took me a bit to get conky to compile with out X11 support on Fedora. I am running in to an issue that I cannot seem to resolve, or if it just works that way. When conky refreshes it blinks and jumps a couple lines. Its really distracting.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Feb 8, 2019

hi @rgillette
No it's not supposed to do that, maybe its a terminal issue. Could you post an image I can't really visualize it

@dpeeps74

This comment has been minimized.

Copy link

@dpeeps74 dpeeps74 commented May 11, 2019

i figured out where that color was
Thanks for sharing this. I have implemented a bit of it. Didn't want to deal with solarized so i had to figure out some colors and I didn't like a lot of the changes to the bufferlist regarding hotlist (and i could never get moving the separator to happen.

My question though is this...in the buffer list the current buffer is now marked with '>>'. where is that set at? I need to make them a color or anything. i can't even figure out what buffer i'm in half the time. yes, i know i could look in the status bar but then i still have to find it in the list.

@japersson

This comment has been minimized.

Copy link

@japersson japersson commented May 30, 2019

Running weechat-devel on my rpi3b+ on raspbian and I'm trying to set this up inside a screen and im using Putty to connect to it. I've also removed conky part. But the big major things like the look and colors. I'm not having any luck with that. I have checked /color and $TERM says 256 and ALT+C inside that buffer displays basicly 256 colors.

Is it even possible to get a result like you Pascalpoitras with screen and putty? Also, is it possible to have working hyperlinks with mouse mode?

https://i.imgur.com/s6TFXVY.png

Any pointers or am I doomed to try to get your excellent look and feel?

/John

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented May 30, 2019

@japersson

my terminal is configured to use the dark solarized scheme This scheme is also available for putty here

Let me know if this works well I never tested it personally

my TERM is set to screen-256color

for the hyperlinks, you can go in bare mode either with the default key bind alt+l or the /window bare command. Click the link then press any key to come back to normal mode. You can also use scripts (/script search url) but I prefer bare mode

@japersson

This comment has been minimized.

Copy link

@japersson japersson commented May 31, 2019

Thanks Pascalpoitras, I will try it out. I had alt+l scripted before on my old config to just be for 3 seconds and then switch it of.

/key bind meta-l /window bare 3

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 1, 2019

@japersson I was not aware that we can put second there, WeeChat is incredibly smart
thanks for the tip!

@Strykar

This comment has been minimized.

Copy link

@Strykar Strykar commented Dec 3, 2019

@pascalpiotras I've used this except for the conky bits, I prefer conky on my desktop. It looks great, except I'm unable to scroll the network/channel list on the left with my mouse wheel. Scroll works fine on the nicklist, what could have I missed?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Dec 3, 2019

@Strykar
Hi,
I have not changed anything to the default configuration for the scrolling, except a trigger to scroll the buflist bar when buflist_hotlist is scrolled and vice versa, so they scroll by the same amount (because in reality I use two bar but they are side by side without separator so it looks like just one bar). But even if you don't have this trigger you should be able to scroll.
@bar:wheeldown and @bar:wheelup are bind to which command ? type the following to find out
/key list mouse
and also what is your weechat version ?

@bar

This comment has been minimized.

Copy link

@bar bar commented Dec 3, 2019

@pascalpoitras me what?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Dec 3, 2019

@bar I am sorry the syntax in weechat use @bar hehe (next time I will escape @)!

@bar

This comment has been minimized.

Copy link

@bar bar commented Dec 4, 2019

:) thanks!

@gngrn1nja

This comment has been minimized.

Copy link

@gngrn1nja gngrn1nja commented Mar 29, 2020

@pascalpoitras I'm trying to add "BBC - US & Canada" to the newsmon filter, how do I write the & symbol?
-Thanks

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Mar 29, 2020

@gngrn1nja you can put & as is. just replace the filter news_interest as follow

/filter addreplace news_interest irc.freenode.##news nick_newsly*+irc_privmsg,host_yano@unaffiliated/yano/bot/rssly+irc_privmsg !^(\s|\[)(Reddit [-] /r/netsec|Wired|freenode|EFF Updates|erry's blog|techdirt|TorrentFreak|Science Daily|Hacker News|CNET|phoronix|Ars Technica|The Intercept|france24|Radio-Canada Nouvelles|Canoe|Huffington Post [-] Weird News|Journal du hacker|Futura Sciences|BBC [-] US & Canada)( \-| | |\])

@gngrn1nja

This comment has been minimized.

Copy link

@gngrn1nja gngrn1nja commented Mar 30, 2020

many thanks!

@janemba

This comment has been minimized.

Copy link

@janemba janemba commented May 19, 2020

Hello,

is there a way to reset the interface like the one in the screenshot ? (where the same windows, buffers and bars)

I unfortunately made some wrong click and it look different now.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented May 19, 2020

@janemba

try this:

/layout apply highlight-or-news-and-conky
/autosort sort
@janemba

This comment has been minimized.

Copy link

@janemba janemba commented May 20, 2020

Hi again,

@pascalpoitras

Thank you for your answer.

I typed the command you provided and it's a bit better but I think I messed up too much with the interface. I've made a screenshot to make it easier to see the issue(s).
stuff

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented May 20, 2020

@janemba

type this

/window merge all
/eval /window splith ${calc:9 / ${window[gui_current_window].win_height} * 100 // 1}
/buffer highmon
/window 1
/layout store highlight-or-news
/window 2
/window splitv 85
/buffer exec.conky
/window 1
/layout store highlight-or-news-and-conky

and for conky you need to use the cli version (sudo apt install conky-cli)

@janemba

This comment has been minimized.

Copy link

@janemba janemba commented May 21, 2020

@pascalpoitras

This is great !! Thank you a mil ! Everything works beautifully now.

Also thank you for conky.

@itsdeadguy

This comment has been minimized.

Copy link

@itsdeadguy itsdeadguy commented Jun 5, 2020

@pascalpoitras do you know how to make it so that all /me action text is italicized?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 6, 2020

@CadaverLab you want all action (/me) from everyone to be italicized or just yours ?

@itsdeadguy

This comment has been minimized.

Copy link

@itsdeadguy itsdeadguy commented Jun 6, 2020

@pascalpoitras, everyone's if that's at all possible

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 6, 2020

@CadaverLab

Here I choose to desactivate any color and attributes (bold, underline, italic, reset...) in the original message because otherwise someone can turn off the italic, but the nickname of the user will still be colored

/trigger add action_italicized modifier weechat_print
/trigger set action_italicized conditions "${tg_tags} =~ ,irc_action,"
/trigger set action_italicized regex "/^[^ ]+//tg_message_nocolor ==.*==${tg_prefix}\t${color:/${info:nick_color_name,${tg_tag_nick}}}${tg_tag_nick}${color:resetcolor}${tg_message_nocolor}=="
@itsdeadguy

This comment has been minimized.

Copy link

@itsdeadguy itsdeadguy commented Jun 6, 2020

@pascalpoitras great stuff, thank you

@shellowl

This comment has been minimized.

Copy link

@shellowl shellowl commented Jun 17, 2020

@pascalpoitras Could you tell me what is necessary to make the Server/Channel buffer sorted like yours? I'm not interested in the language sorting but the clean Server ---> Channels | Server ---> Channels format.

@virus-found

This comment has been minimized.

Copy link

@virus-found virus-found commented Jun 17, 2020

Hi, nice config here, mate.

Will you tell me how to solve my problem?
I have 5-10 servers, autoconnection on. There are lots of buffers with something new going on, and I love using alt+a to jump to unread buffers. Problems is, right now I'm interested, for example, only in freenode server and would like to hide/conceal all other servers, so that they are not visible with their belonging buffers AND alt-a would go only through the freenode server.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 17, 2020

@shellowl

type this /set irc.look.server_buffer independent
and install autosort.py

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Jun 17, 2020

@virus-found thanks, this is an interesting idea, the configuration is already able to expand/collapse servers buffers but it will be hard without scripting to reproduce alt+a to work only with servers that are expanded, what you can do is create an issue on github to ask for a jump_smart (alt+a) that do exactly the same thing as jump_smart but only with buffer that are currently displayed in the buflist.

@shellowl

This comment has been minimized.

Copy link

@shellowl shellowl commented Jun 17, 2020

@shellowl

type this /set irc.look.server_buffer independent
and install autosort.py

Big thank you. This is what I was looking for.

@Phedre

This comment has been minimized.

Copy link

@Phedre Phedre commented Aug 17, 2020

I can't seem to be able to fold my matrix channels, even with your new triggers. Any idea why? I can fold everything else fine with a middle click and f.

The only thing I've done after installing matrix.py is set the buffer to be independent so matrix_org wouldn't sit at the top. As it is now, everything shows up correctly, but I can't fold.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Aug 17, 2020

@Phedre you were right, 'f' was not working, I did not test with 'f' but only with the mouse on the arrow, it is fixed now thanks for reporting the bug! Type the following line in weechat and it should works

/trigger set toggle_property regex "/.*/${if:${_chat}?${_buffer_full_name}:${full_name}}/my_full_name /.*/${buffer[${pointer}].local_variables.script_name}/script_name /.*/${if:${_key}==f?${plugin}.${if:${plugin}==irc||${script_name}==matrix?server.}${localvar_server}:${re:0}}/my_full_name /.*/${_key}/my_property /^button1.*/localvar_set_control_buffer/my_property /(?-i)^c$/localvar_set_control_buffer/my_property /(?-i)^C$/localvar_set_no_chanmon_like/my_property /(?-i)^f$/localvar_set_fold/my_property /(?-i)^h$/hidden/my_property"

@Phedre

This comment has been minimized.

Copy link

@Phedre Phedre commented Aug 17, 2020

@Phedre you were right, 'f' was not working, I did not test with 'f' but only with the mouse on the arrow, it is fixed now thanks for reporting the bug! Type the following line in weechat and it should works

/trigger set toggle_property regex "/.*/${if:${_chat}?${_buffer_full_name}:${full_name}}/my_full_name /.*/${buffer[${pointer}].local_variables.script_name}/script_name /.*/${if:${_key}==f?${plugin}.${if:${plugin}==irc||${script_name}==matrix?server.}${localvar_server}:${re:0}}/my_full_name /.*/${_key}/my_property /^button1.*/localvar_set_control_buffer/my_property /(?-i)^c$/localvar_set_control_buffer/my_property /(?-i)^C$/localvar_set_no_chanmon_like/my_property /(?-i)^f$/localvar_set_fold/my_property /(?-i)^h$/hidden/my_property"

Thank you! It works perfectly now.

@borbosha

This comment has been minimized.

Copy link

@borbosha borbosha commented Aug 21, 2020

First off, love this guide and setup! It is working great on my system. I do have one issue that appears to be with Unicode possibly and haven't been able to fix it. In the control_buffers area I am seeing question marks in squares instead of the angled sides to the buttons. Functionally it's fine, but would like to get these fixed for visual purposes. Any idea how that can be accomplished?

For what it's worth, I am SSH'd into my Ubuntu server from a Mac using the built in terminal program and using screen to run Weechat.

I attached a screenshot to show you what I am seeing.

Thanks!

Screen Shot 2020-08-21 at 11 44 56 AM

EDIT: Turns out I was missing the unicode fonts that I needed. Ended up downloading this font and set my terminal to use that. All good now!

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Aug 22, 2020

@borbosha thanks for the kind words !

@hyperreal64

This comment has been minimized.

Copy link

@hyperreal64 hyperreal64 commented Aug 22, 2020

@weilbith Hi!
Yes my config do not scale very well, In fact the buffer name max length is hardcoded. You would need to change the value 8 with another number. But, in case you change the value more than once, here is a better way:

If you want to try with, for example, 12, do this

/set plugins.var.buflist_buf_max_len 12
then, we will replace the hardcoded number to ${plugins.var.buflist_buf_max_len}

/set buflist.format.name "${if:${type}==server?${color:white}:${color_hotlist}}${if:${type}==server||${type}==channel||${type}==private?${if:${cutscr:${plugins.var.buflist_buf_max_len},+,${name}}!=${name}?${cutscr:${plugins.var.buflist_buf_max_len},${color:${weechat.color.chat_prefix_more}}+,${if:${type}==server&&${info:irc_server_isupport_value,${name},NETWORK}?${info:irc_server_isupport_value,${name},NETWORK}:${name}}}:${cutscr:${plugins.var.buflist_buf_max_len}, ,${if:${type}==server&&${info:irc_server_isupport_value,${name},NETWORK}?${info:irc_server_isupport_value,${name},NETWORK} :${name} }}}:${name}}"

then, if 12 is not what you want you just have to try another value with

/set plugins.var.buflist_buf_max_len another_value

I will upgrade my buflist soon to be scalable

@pascalpoitras: I want to get the buffer names in the buflist to show the full name instead of truncating them. I used the method you described in the comments above but it didn't work. /set buflist.format.name doesn't produce the correct ouput here.

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Aug 22, 2020

@hyperreal42 hi

this is not possible without modifying the current format heavily
for now, you should put back the new buflist.format.name content because the one you used will break the buflist (because the buflist changed a lot since the comment you refer to)
my buflist is composed of two sections, the first section is composed of many subsections that are all optionals and the name of the buffer can be followed by other optionals subsections, this will be a big change, what I would advice is to start from scratch and create your own buflist and if you have any question feel free to reach me on freenode in private message, my nick is r3m

@hyperreal64

This comment has been minimized.

Copy link

@hyperreal64 hyperreal64 commented Aug 22, 2020

@hyperreal42 hi

this is not possible without modifying the current format heavily
for now, you should put back the new buflist.format.name content because the one you used will break the buflist (because the buflist changed a lot since the comment you refer to)
my buflist is composed of two sections, the first section is composed of many subsections that are all optionals and the name of the buffer can be suffixed by other optionals subsections, this is will be a big change, what I would advice is to start from scratch and create your own buflist and if you have any question feel free to reach me on freenode in private message, my nick is r3m

I figured it out. All I needed to do was /set plugins.var.buflist_section_1st to a higher value, like 30.

Excellent work, by the way!

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Aug 22, 2020

@hyperreal42

yes this is the best way to achieve what you want but you will have to adjust it manually when you open a buffer with a longer name or close the buffer with the longest name

thanks for the kind words!

EDIT: by the way you should modify the option using /buflist_tools resize, this way this resize the bar not just the section but if your bar is size 0 (automatic) this should be ok! (or use the mouse, alt+scrollup/scrolldown on a section)

@gngrn1nja

This comment has been minimized.

Copy link

@gngrn1nja gngrn1nja commented Sep 7, 2020

How could I modify the news filter to keep the Powerline formatting but display the URL with the news headline?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 8, 2020

@gngrn1nja hi

I updated the trigger to allow people to keep url if they want

go to the news section and rerun the two lines for the news_transform trigger

then set the option to keep url

/set plugins.var.news_keep_url 1

@gngrn1nja

This comment has been minimized.

Copy link

@gngrn1nja gngrn1nja commented Sep 11, 2020

@gngrn1nja hi

I updated the trigger to allow people to keep url if they want

go to the news section and rerun the two lines for the news_transform trigger

then set the option to keep url

/set plugins.var.news_keep_url 1

Many thanks! I owe you a beer!

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 11, 2020

@gngrn1nja you're welcome :)

@taftsanders

This comment has been minimized.

Copy link

@taftsanders taftsanders commented Sep 17, 2020

First, thank you for all these amazing settings. You made transitioning to weechat a lot easier for me.

Getting into this a little. I have implemented minimal settings from your guide to get what I want. One of them was the bit about conky. I also set up the script notify.py. I've noticed that if I get a notification on my weechat then try to "/quit" weechat, the application hangs. Getting further into it, I found that conky is still holding a flock on the ~/.weechat/weechat.log file:

↪ ps awfux | grep -i wee
taft  358068  0.8  0.2 473184 85596 pts/2    Sl+  23:26   0:02  |   |   \_ weechat
taft  358610  0.0  0.0 216084   644 pts/7    S+   23:30   0:00  |       \_ grep --color=auto -i wee

↪ kill -9 358068

↪ lsof weechat.log
COMMAND    PID     USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
conky   358081 taft    3w   REG  253,3     1923 21367351 weechat.log

Because of this I am unable to open weechat again until this conky pid is killed or the file is deleted/recreated. I figure the issue is with the notify.py script but I was hoping you might have a suggestion to execute a kill on conky with the termination of weechat from an exec command or a feature in weechat?

And yes, removing notify.py also resolves the issue. I'm open to alternative system notification options if you have any.

@taftsanders

This comment has been minimized.

Copy link

@taftsanders taftsanders commented Sep 17, 2020

I was able to find a script that worked to my liking and didn't break the whole application, called lnotify.py.

Sidebar question, I would like to add another conky instance on to weechat to display global times in various locations. Any idea of how I would create another conky service through weechat?

EDIT: I was able to figure it out. Basically I created an alternate configuration file and pointed another instance of conky at it with an alternate name. Here is the configs if anyone is looking for the same:

/set weechat.startup.command_after_plugins "/exec -norc -noln -buffer conky conky;/exec -norc -noln -buffer conky-times conky -c /etc/conky/conky-times.conf;"
/buffer_autoset add exec.exec.conky short_name sys
/buffer_autoset add exec.exec.conky-times short_name time
/set weechat.notify.exec.exec.conky none
/set weechat.notify.exec.exec.conky-times none
/buffer_autoset add exec.exec.conky title Conky - the light-weight system monitor
/buffer_autoset add exec.exec.conky-times title TimeZones
@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 17, 2020

@taftsanders

hi! you can either modify the current .conkyrc and add new line to it or you can launch another one by modifying:

/set weechat.startup.command_after_plugins "/exec -norc -noln -buffer conky conky;/exec -norc -noln -buffer conky2 conky -c ~/.conkyrc2;/buffer add chanmon;/buffer add highmon"
/exec -norc -noln -buffer conky2 conky -c ~/.conkyrc2

then you just need to create the ~/.conkyrc2 file

does that answer your question?

@taftsanders

This comment has been minimized.

Copy link

@taftsanders taftsanders commented Sep 18, 2020

@taftsanders

hi! you can either modify the current .conkyrc and add new line to it or you can launch another one by modifying:

/set weechat.startup.command_after_plugins "/exec -norc -noln -buffer conky conky;/exec -norc -noln -buffer conky2 conky -c ~/.conkyrc2;/buffer add chanmon;/buffer add highmon"
/exec -norc -noln -buffer conky2 conky -c ~/.conkyrc2

then you just need to create the ~/.conkyrc2 file

does that answer your question?

Yep, nailed it. Thanks for all the useful configurations!

@sbh7600

This comment has been minimized.

Copy link

@sbh7600 sbh7600 commented Sep 25, 2020

Hello,

great guide. I love it. but i have some issues in getting the bg color as on your image, i like the color.
did all your settings. didn't change any color codes?

Can you maybe explain why?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 25, 2020

@sbh7600

Hi! the bg color is not specified by weechat but by the terminal, if you want the same colors as mine, use the dark solarized color scheme for your terminal

@sbh7600

This comment has been minimized.

Copy link

@sbh7600 sbh7600 commented Sep 26, 2020

@pascalpoitras

Thanks, and how and where do i find what i need. im on my server via putty and tmux?

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 26, 2020

@sbh7600

Check this out https://github.com/altercation/solarized/tree/master/putty-colors-solarized it should works, never tested on putty personally

@sbh7600

This comment has been minimized.

Copy link

@sbh7600 sbh7600 commented Sep 26, 2020

@pascalpoitras

It worked, thanks :)

@sbh7600

This comment has been minimized.

Copy link

@sbh7600 sbh7600 commented Sep 26, 2020

@pascalpoitras

Hello again, another thing is when i create the -> https://prnt.sc/uo6ewf they dont look like the one on the picture, mine has like "?chanmon?" / "?highmon?"

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 26, 2020

@sbh7600

yes you need a font with support for both powerline and extra powerline symbol, see https://www.nerdfonts.com/font-downloads for fonts that support both. If you want to use the same as mine, pick Inconsolata Nerd Font

@sbh7600

This comment has been minimized.

Copy link

@sbh7600 sbh7600 commented Sep 26, 2020

@pascalpoitras

Looking good, once again thank you 👍

One more thing, what about resizing the window like you do with the mouse.

i have just removed the '.weechat' folder, so starting fresh one more ting :)

@pascalpoitras

This comment has been minimized.

Copy link
Owner Author

@pascalpoitras pascalpoitras commented Sep 26, 2020