🔥
This commit is contained in:
82
.Xresources
Normal file
82
.Xresources
Normal file
@@ -0,0 +1,82 @@
|
||||
! Xft settings
|
||||
Xft.dpi: 96
|
||||
Xft.antialias: true
|
||||
Xft.rgba: rgb
|
||||
Xft.hinting: true
|
||||
Xft.hintstyle: hintslight
|
||||
|
||||
! URxvt settings
|
||||
URxvt.termName: rxvt-256color
|
||||
URxvt.depth: 32
|
||||
URxvt.geometry: 90x30
|
||||
URxvt.transparent: false
|
||||
URxvt.fading: 0
|
||||
! URxvt.urgentOnBell: true
|
||||
! URxvt.visualBell: true
|
||||
URxvt.loginShell: true
|
||||
URxvt.saveLines: 50
|
||||
URxvt.internalBorder: 3
|
||||
URxvt.lineSpace: 0
|
||||
|
||||
! Fonts
|
||||
URxvt.allow_bold: false
|
||||
URxvt*font: xft:Inconsolata:size=14
|
||||
! URxvt*boldFont: xft:Inconsolata:pixelsize=14
|
||||
|
||||
! Fix font space
|
||||
URxvt.letterSpace: -1
|
||||
|
||||
! Scrollbar
|
||||
URxvt.scrollStyle: rxvt
|
||||
URxvt.scrollBar: false
|
||||
|
||||
! Perl extensions
|
||||
URxvt.perl-ext-common: default,matcher
|
||||
URxvt.matcher.button: 1
|
||||
URxvt.urlLauncher: /usr/bin/xdg-open
|
||||
|
||||
! Cursor
|
||||
URxvt.cursorBlink: true
|
||||
URxvt.cursorColor: #657b83
|
||||
URxvt.cursorUnderline: false
|
||||
|
||||
! Pointer
|
||||
URxvt.pointerBlank: true
|
||||
|
||||
! Colours
|
||||
*.foreground: #daba8b
|
||||
*.background: #191716
|
||||
*.cursorColor: #daba8b
|
||||
|
||||
! black
|
||||
*.color0: #0f0e0d
|
||||
*.color8: #383332
|
||||
|
||||
! red
|
||||
*.color1: #845336
|
||||
*.color9: #8c4f4a
|
||||
|
||||
! green
|
||||
*.color2: #57553c
|
||||
*.color10: #898471
|
||||
|
||||
! yellow
|
||||
*.color3: #a17e3e
|
||||
*.color11: #c8b491
|
||||
|
||||
! blue
|
||||
*.color4: #43454f
|
||||
*.color12: #65788f
|
||||
|
||||
! magenta
|
||||
*.color5: #604848
|
||||
*.color13: #755e4a
|
||||
|
||||
! cyan
|
||||
*.color6: #5c6652
|
||||
*.color14: #718062
|
||||
|
||||
! white
|
||||
*.color7: #a18b62
|
||||
*.color15: #bc9d66
|
||||
|
||||
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
__pycache__/
|
||||
*.swp
|
||||
6
.tern-project
Normal file
6
.tern-project
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"libs": [
|
||||
"browser",
|
||||
"jquery"
|
||||
]
|
||||
}
|
||||
9
bin/mediakeys-play
Executable file
9
bin/mediakeys-play
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
status=$(cmus-remote -C status | grep ^status | awk '{print $2}')
|
||||
if [ "$status" == "playing" ]; then
|
||||
exec cmus-remote -u
|
||||
else
|
||||
exec cmus-remote -p
|
||||
fi
|
||||
exit 0
|
||||
28
bin/vpn
Executable file
28
bin/vpn
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
OVPNURL=https://nordvpn.com/api/files/zip
|
||||
OVPNPATH=/home/dan/.openvpn
|
||||
OVPNAUTH=/home/dan/.nordvpnauth
|
||||
PROTO=tcp
|
||||
|
||||
if [ "$1" == "--update" ] || [ "$1" == "-u" ]; then
|
||||
echo "Updating..."
|
||||
curl $OVPNURL > /tmp/nordvpn.zip
|
||||
rm -f $OVPNPATH/*
|
||||
unzip -qq /tmp/nordvpn.zip -d $OVPNPATH/
|
||||
rm /tmp/nordvpn.zip
|
||||
sed -i 's,auth-user-pass,auth-user-pass '"$OVPNAUTH"',g' $OVPNPATH/*
|
||||
echo "Done."
|
||||
exit 0
|
||||
elif [ "$1" == "--kill" ] || [ "$1" == "-k" ]; then
|
||||
sudo killall openvpn
|
||||
else
|
||||
find $OVPNPATH -name $1
|
||||
find $OVPNPATH -name "*$1*$PROTO*" | sort -R | tail -1 | while read file; do
|
||||
sudo killall openvpn
|
||||
echo "Connecting to: $file"
|
||||
sudo /usr/sbin/openvpn --config $file &
|
||||
done
|
||||
fi
|
||||
|
||||
exit 0
|
||||
186
i3/desktop.config
Normal file
186
i3/desktop.config
Normal file
@@ -0,0 +1,186 @@
|
||||
# This file has been auto-generated by i3-config-wizard(1).
|
||||
# It will not be overwritten, so edit it as you like.
|
||||
#
|
||||
# Should you change your keyboard layout some time, delete
|
||||
# this file and re-run i3-config-wizard(1).
|
||||
#
|
||||
|
||||
# i3 config file (v4)
|
||||
#
|
||||
# Please see http://i3wm.org/docs/userguide.html for a complete reference!
|
||||
|
||||
set $mod Mod4
|
||||
|
||||
# Font for window titles. Will also be used by the bar unless a different font
|
||||
# is used in the bar {} block below.
|
||||
#font pango:Inconsolata 10
|
||||
|
||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
||||
font pango:DejaVu Sans Mono 8
|
||||
|
||||
# Before i3 v4.8, we used to recommend this one as the default:
|
||||
# font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
|
||||
# The font above is very space-efficient, that is, it looks good, sharp and
|
||||
# clear in small sizes. However, its unicode glyph coverage is limited, the old
|
||||
# X core fonts rendering does not support right-to-left and this being a bitmap
|
||||
# font, it doesn’t scale on retina/hidpi displays.
|
||||
|
||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||
floating_modifier $mod
|
||||
|
||||
# start a terminal
|
||||
bindsym $mod+Return exec termite
|
||||
|
||||
# kill focused window
|
||||
bindsym $mod+Shift+q kill
|
||||
|
||||
# start dmenu (a program launcher)
|
||||
bindsym $mod+d exec dmenu_run
|
||||
# There also is the (new) i3-dmenu-desktop which only displays applications
|
||||
# shipping a .desktop file. It is a wrapper around dmenu, so you need that
|
||||
# installed.
|
||||
# bindsym $mod+d exec --no-startup-id i3-dmenu-desktop
|
||||
|
||||
# change focus
|
||||
bindsym $mod+j focus left
|
||||
bindsym $mod+k focus down
|
||||
bindsym $mod+l focus up
|
||||
bindsym $mod+semicolon focus right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
|
||||
# move focused window
|
||||
bindsym $mod+Shift+j move left
|
||||
bindsym $mod+Shift+k move down
|
||||
bindsym $mod+Shift+l move up
|
||||
bindsym $mod+Shift+semicolon move right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
bindsym $mod+Shift+Left move left
|
||||
bindsym $mod+Shift+Down move down
|
||||
bindsym $mod+Shift+Up move up
|
||||
bindsym $mod+Shift+Right move right
|
||||
|
||||
# split in horizontal orientation
|
||||
bindsym $mod+h split h
|
||||
|
||||
# split in vertical orientation
|
||||
bindsym $mod+v split v
|
||||
|
||||
# enter fullscreen mode for the focused container
|
||||
bindsym $mod+f fullscreen toggle
|
||||
|
||||
# change container layout (stacked, tabbed, toggle split)
|
||||
bindsym $mod+s layout stacking
|
||||
bindsym $mod+w layout tabbed
|
||||
bindsym $mod+e layout toggle split
|
||||
|
||||
# toggle tiling / floating
|
||||
bindsym $mod+Shift+space floating toggle
|
||||
|
||||
# change focus between tiling / floating windows
|
||||
bindsym $mod+space focus mode_toggle
|
||||
|
||||
# focus the parent container
|
||||
bindsym $mod+a focus parent
|
||||
|
||||
# focus the child container
|
||||
#bindsym $mod+d focus child
|
||||
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace 1
|
||||
bindsym $mod+2 workspace 2
|
||||
bindsym $mod+3 workspace 3
|
||||
bindsym $mod+4 workspace 4
|
||||
bindsym $mod+5 workspace 5
|
||||
bindsym $mod+6 workspace 6
|
||||
bindsym $mod+7 workspace 7
|
||||
bindsym $mod+8 workspace 8
|
||||
bindsym $mod+9 workspace 9
|
||||
bindsym $mod+0 workspace 10
|
||||
|
||||
# move focused container to workspace
|
||||
bindsym $mod+Shift+1 move container to workspace 1
|
||||
bindsym $mod+Shift+2 move container to workspace 2
|
||||
bindsym $mod+Shift+3 move container to workspace 3
|
||||
bindsym $mod+Shift+4 move container to workspace 4
|
||||
bindsym $mod+Shift+5 move container to workspace 5
|
||||
bindsym $mod+Shift+6 move container to workspace 6
|
||||
bindsym $mod+Shift+7 move container to workspace 7
|
||||
bindsym $mod+Shift+8 move container to workspace 8
|
||||
bindsym $mod+Shift+9 move container to workspace 9
|
||||
bindsym $mod+Shift+0 move container to workspace 10
|
||||
|
||||
# reload the configuration file
|
||||
bindsym $mod+Shift+c reload
|
||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||
bindsym $mod+Shift+r restart
|
||||
# exit i3 (logs you out of your X session)
|
||||
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"
|
||||
|
||||
# resize window (you can also use the mouse for that)
|
||||
mode "resize" {
|
||||
# These bindings trigger as soon as you enter the resize mode
|
||||
|
||||
# Pressing left will shrink the window’s width.
|
||||
# Pressing right will grow the window’s width.
|
||||
# Pressing up will shrink the window’s height.
|
||||
# Pressing down will grow the window’s height.
|
||||
bindsym j resize shrink width 10 px or 10 ppt
|
||||
bindsym k resize grow height 10 px or 10 ppt
|
||||
bindsym l resize shrink height 10 px or 10 ppt
|
||||
bindsym semicolon resize grow width 10 px or 10 ppt
|
||||
|
||||
# same bindings, but for the arrow keys
|
||||
bindsym Left resize shrink width 10 px or 10 ppt
|
||||
bindsym Down resize grow height 10 px or 10 ppt
|
||||
bindsym Up resize shrink height 10 px or 10 ppt
|
||||
bindsym Right resize grow width 10 px or 10 ppt
|
||||
|
||||
# back to normal: Enter or Escape
|
||||
bindsym Return mode "default"
|
||||
bindsym Escape mode "default"
|
||||
}
|
||||
|
||||
bindsym $mod+r mode "resize"
|
||||
|
||||
# Start i3bar to display a workspace bar (plus the system information i3status
|
||||
# finds out, if available)
|
||||
bar {
|
||||
output DVI-D-1
|
||||
status_command i3blocks -c ~/.dotfiles/i3blocks/desktop.config
|
||||
position bottom
|
||||
mode dock
|
||||
workspace_buttons yes
|
||||
tray_output none
|
||||
|
||||
font pango:DejaVu Sans Mono 10
|
||||
|
||||
colors {
|
||||
background #191716
|
||||
statusline #ffffff
|
||||
|
||||
focused_workspace #ffffff #285577
|
||||
active_workspace #ffffff #333333
|
||||
inactive_workspace #888888 #222222
|
||||
urgent_workspace #ffffff #900000
|
||||
}
|
||||
}
|
||||
|
||||
exec "setxkbmap gb"
|
||||
|
||||
# Pulse Audio controls
|
||||
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 +5% #increase sound volume
|
||||
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -5% #decrease sound volume
|
||||
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute 0 toggle # mute sound
|
||||
|
||||
# Media keys
|
||||
bindsym XF86AudioPlay exec ~/.dotfiles/bin/mediakeys-play
|
||||
bindsym XF86AudioPause exec ~/.dotfiles/bin/mediakeys-play
|
||||
|
||||
exec xrandr --output DVI-D-1 --primary --mode 1920x1200 --pos 1200x390 --output DVI-I-1 --mode 1920x1200 --rotate left --pos 0x0
|
||||
54
i3blocks/desktop.config
Normal file
54
i3blocks/desktop.config
Normal file
@@ -0,0 +1,54 @@
|
||||
command=/usr/lib/i3blocks/$BLOCK_NAME
|
||||
separator_block_width=12
|
||||
|
||||
[iface]
|
||||
label=IPs:
|
||||
interval=10
|
||||
separator=false
|
||||
|
||||
[ip]
|
||||
command=$HOME/.dotfiles/i3blocks/ipaddress.py
|
||||
interval=60
|
||||
separator=false
|
||||
|
||||
[ping]
|
||||
command=$HOME/.dotfiles/i3blocks/ping.py
|
||||
interval=10
|
||||
separator=false
|
||||
|
||||
[vpn]
|
||||
command=$HOME/.dotfiles/i3blocks/openvpn.py
|
||||
interval=10
|
||||
|
||||
[load_average]
|
||||
interval=10
|
||||
|
||||
[disk]
|
||||
label=/
|
||||
instance=/
|
||||
interval=30
|
||||
separator=false
|
||||
|
||||
[disk]
|
||||
label=/home
|
||||
interval=30
|
||||
separator=false
|
||||
|
||||
[disk]
|
||||
label=/tmp
|
||||
instance=/tmp
|
||||
interval=30
|
||||
|
||||
[memory]
|
||||
label=RAM
|
||||
interval=30
|
||||
|
||||
[volume]
|
||||
label=Vol:
|
||||
interval=1
|
||||
signal=12
|
||||
|
||||
[time]
|
||||
command=date '+%d-%m-%Y %H:%M:%S'
|
||||
interval=1
|
||||
|
||||
16
i3blocks/ipaddress.py
Executable file
16
i3blocks/ipaddress.py
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/python
|
||||
from urllib.request import urlopen
|
||||
from xml.etree import ElementTree as ET
|
||||
|
||||
url = 'http://freegeoip.net/xml/'
|
||||
|
||||
with urlopen(url) as res:
|
||||
s = res.read()
|
||||
|
||||
root = ET.fromstring(s)
|
||||
|
||||
ip = root.find('IP').text
|
||||
country = root.find('CountryName').text
|
||||
|
||||
print('/ %s (%s)' % (ip, country))
|
||||
print('/ %s (%s)' % (ip, country))
|
||||
25
i3blocks/openvpn.py
Executable file
25
i3blocks/openvpn.py
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/python
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
ps = subprocess.Popen('ps ax | grep openvpn | grep -v grep | tail -l | rev | cut -d \'/\' -f 1 | rev', shell=True, stdout=subprocess.PIPE)
|
||||
line = str(ps.stdout.readline())
|
||||
process = str(ps.stdout.readline())[1:]
|
||||
status = None
|
||||
connected = False
|
||||
if len(process) > 5:
|
||||
connection = re.sub(r'[^0-9A-Za-z.]', '', process[1:])
|
||||
server = connection.upper().split('.')[0]
|
||||
proto = re.sub(r'[^A-Z]', '', connection.upper().split('.')[3])
|
||||
status = '%s.%s' % (server, proto)
|
||||
connected = True
|
||||
else:
|
||||
status = 'down'
|
||||
|
||||
print('VPN: %s' % status)
|
||||
print('VPN: %s' % status)
|
||||
|
||||
if connected:
|
||||
print('#00FF00')
|
||||
else:
|
||||
print('#FF0000')
|
||||
17
i3blocks/ping.py
Executable file
17
i3blocks/ping.py
Executable file
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/python
|
||||
import subprocess
|
||||
import re
|
||||
url = 'google.co.uk'
|
||||
|
||||
ps = subprocess.Popen('ping -c 1 %s | tail -1 | awk \'{print $4}\' | cut -d \'/\' -f 2' % url, shell=True, stdout=subprocess.PIPE)
|
||||
ping = re.sub(r'[^0-9.]', '', str(ps.stdout.read()))
|
||||
|
||||
print('Ping %sms' % ping)
|
||||
print('Ping %sms' % ping)
|
||||
|
||||
if float(ping) > 100:
|
||||
print('#FF0000')
|
||||
elif float(ping) > 50:
|
||||
print('#DDDD00')
|
||||
else:
|
||||
print('#00FF00')
|
||||
20
i3blocks/wifi.sh
Executable file
20
i3blocks/wifi.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
INTERFACE="wlo1"
|
||||
|
||||
SSID=$(iw dev $INTERFACE link | grep 'SSID' | awk -F: '/SSID/ { print $NF }')
|
||||
|
||||
QUALITY=$(grep $INTERFACE /proc/net/wireless | awk '{ print int($3 * 100 / 70) }')
|
||||
|
||||
echo "$SSID ($QUALITY%)" # full text
|
||||
echo "$SSID ($QUALITY%)" # short text
|
||||
|
||||
# color
|
||||
if [[ $QUALITY -ge 80 ]]; then
|
||||
echo "#00FF00"
|
||||
elif [[ $QUALITY -lt 80 ]]; then
|
||||
echo "#FFF600"
|
||||
elif [[ $QUALITY -lt 60 ]]; then
|
||||
echo "#FFAE00"
|
||||
elif [[ $QUALITY -lt 40 ]]; then
|
||||
echo "#FF0000"
|
||||
fi
|
||||
294
irssi/default.theme
Normal file
294
irssi/default.theme
Normal file
@@ -0,0 +1,294 @@
|
||||
# When testing changes, the easiest way to reload the theme is with /RELOAD.
|
||||
# This reloads the configuration file too, so if you did any changes remember
|
||||
# to /SAVE it first. Remember also that /SAVE overwrites the theme file with
|
||||
# old data so keep backups :)
|
||||
|
||||
# TEMPLATES:
|
||||
|
||||
# The real text formats that irssi uses are the ones you can find with
|
||||
# /FORMAT command. Back in the old days all the colors and texts were mixed
|
||||
# up in those formats, and it was really hard to change the colors since you
|
||||
# might have had to change them in tens of different places. So, then came
|
||||
# this templating system.
|
||||
|
||||
# Now the /FORMATs don't have any colors in them, and they also have very
|
||||
# little other styling. Most of the stuff you need to change is in this
|
||||
# theme file. If you can't change something here, you can always go back
|
||||
# to change the /FORMATs directly, they're also saved in these .theme files.
|
||||
|
||||
# So .. the templates. They're those {blahblah} parts you see all over the
|
||||
# /FORMATs and here. Their usage is simply {name parameter1 parameter2}.
|
||||
# When irssi sees this kind of text, it goes to find "name" from abstracts
|
||||
# block below and sets "parameter1" into $0 and "parameter2" into $1 (you
|
||||
# can have more parameters of course). Templates can have subtemplates.
|
||||
# Here's a small example:
|
||||
# /FORMAT format hello {colorify {underline world}}
|
||||
# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; }
|
||||
# When irssi expands the templates in "format", the final string would be:
|
||||
# hello %G%Uworld%U%n
|
||||
# ie. underlined bright green "world" text.
|
||||
# and why "$0-", why not "$0"? $0 would only mean the first parameter,
|
||||
# $0- means all the parameters. With {underline hello world} you'd really
|
||||
# want to underline both of the words, not just the hello (and world would
|
||||
# actually be removed entirely).
|
||||
|
||||
# COLORS:
|
||||
|
||||
# You can find definitions for the color format codes in docs/formats.txt.
|
||||
|
||||
# There's one difference here though. %n format. Normally it means the
|
||||
# default color of the terminal (white mostly), but here it means the
|
||||
# "reset color back to the one it was in higher template". For example
|
||||
# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would
|
||||
# print yellow "foo" (as set with %Y) but "bar" would be green, which was
|
||||
# set at the beginning before the {foo} template. If there wasn't the %g
|
||||
# at start, the normal behaviour of %n would occur. If you _really_ want
|
||||
# to use the terminal's default color, use %N.
|
||||
|
||||
#############################################################################
|
||||
|
||||
# default foreground color (%N) - -1 is the "default terminal color"
|
||||
default_color = "-1";
|
||||
|
||||
# print timestamp/servertag at the end of line, not at beginning
|
||||
info_eol = "false";
|
||||
|
||||
# these characters are automatically replaced with specified color
|
||||
# (dark grey by default)
|
||||
replaces = { "[]=" = "%K$*%n"; };
|
||||
|
||||
abstracts = {
|
||||
##
|
||||
## generic
|
||||
##
|
||||
|
||||
# text to insert at the beginning of each non-message line
|
||||
line_start = "%B-%n!%B-%n ";
|
||||
|
||||
# timestamp styling, nothing by default
|
||||
timestamp = "$*";
|
||||
|
||||
# any kind of text that needs hilighting, default is to bold
|
||||
hilight = "%_$*%_";
|
||||
|
||||
# any kind of error message, default is bright red
|
||||
error = "%R$*%n";
|
||||
|
||||
# channel name is printed
|
||||
channel = "%_$*%_";
|
||||
|
||||
# nick is printed
|
||||
nick = "%_$*%_";
|
||||
|
||||
# nick host is printed
|
||||
nickhost = "[$*]";
|
||||
|
||||
# server name is printed
|
||||
server = "%_$*%_";
|
||||
|
||||
# some kind of comment is printed
|
||||
comment = "[$*]";
|
||||
|
||||
# reason for something is printed (part, quit, kick, ..)
|
||||
reason = "{comment $*}";
|
||||
|
||||
# mode change is printed ([+o nick])
|
||||
mode = "{comment $*}";
|
||||
|
||||
##
|
||||
## channel specific messages
|
||||
##
|
||||
|
||||
# highlighted nick/host is printed (joins)
|
||||
channick_hilight = "%C$*%n";
|
||||
chanhost_hilight = "{nickhost %c$*%n}";
|
||||
|
||||
# nick/host is printed (parts, quits, etc.)
|
||||
channick = "%c$*%n";
|
||||
chanhost = "{nickhost $*}";
|
||||
|
||||
# highlighted channel name is printed
|
||||
channelhilight = "%c$*%n";
|
||||
|
||||
# ban/ban exception/invite list mask is printed
|
||||
ban = "%c$*%n";
|
||||
|
||||
##
|
||||
## messages
|
||||
##
|
||||
|
||||
# the basic styling of how to print message, $0 = nick mode, $1 = nick
|
||||
msgnick = "%K<%n$0$1-%K>%n %|";
|
||||
|
||||
# message from you is printed. "ownnick" specifies the styling of the
|
||||
# nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
|
||||
# whole line.
|
||||
|
||||
# Example1: You want the message text to be green:
|
||||
# ownmsgnick = "{msgnick $0 $1-}%g";
|
||||
# Example2.1: You want < and > chars to be yellow:
|
||||
# ownmsgnick = "%Y{msgnick $0 $1-%Y}%n";
|
||||
# (you'll also have to remove <> from replaces list above)
|
||||
# Example2.2: But you still want to keep <> grey for other messages:
|
||||
# pubmsgnick = "%K{msgnick $0 $1-%K}%n";
|
||||
# pubmsgmenick = "%K{msgnick $0 $1-%K}%n";
|
||||
# pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n";
|
||||
# ownprivmsgnick = "%K{msgnick $*%K}%n";
|
||||
# privmsgnick = "%K{msgnick %R$*%K}%n";
|
||||
|
||||
# $0 = nick mode, $1 = nick
|
||||
ownmsgnick = "{msgnick $0 $1-}";
|
||||
ownnick = "%_$*%n";
|
||||
|
||||
# public message in channel, $0 = nick mode, $1 = nick
|
||||
pubmsgnick = "{msgnick $0 $1-}";
|
||||
pubnick = "%N$*%n";
|
||||
|
||||
# public message in channel meant for me, $0 = nick mode, $1 = nick
|
||||
pubmsgmenick = "{msgnick $0 $1-}";
|
||||
menick = "%Y$*%n";
|
||||
|
||||
# public highlighted message in channel
|
||||
# $0 = highlight color, $1 = nick mode, $2 = nick
|
||||
pubmsghinick = "{msgnick $1 $0$2-%n}";
|
||||
|
||||
# channel name is printed with message
|
||||
msgchannel = "%K:%c$*%n";
|
||||
|
||||
# private message, $0 = nick, $1 = host
|
||||
privmsg = "[%R$0%K(%r$1-%K)%n] ";
|
||||
|
||||
# private message from you, $0 = "msg", $1 = target nick
|
||||
ownprivmsg = "[%r$0%K(%R$1-%K)%n] ";
|
||||
|
||||
# own private message in query
|
||||
ownprivmsgnick = "{msgnick $*}";
|
||||
ownprivnick = "%_$*%n";
|
||||
|
||||
# private message in query
|
||||
privmsgnick = "{msgnick %R$*%n}";
|
||||
|
||||
##
|
||||
## Actions (/ME stuff)
|
||||
##
|
||||
|
||||
# used internally by this theme
|
||||
action_core = "%_ * $*%n";
|
||||
|
||||
# generic one that's used by most actions
|
||||
action = "{action_core $*} ";
|
||||
|
||||
# own action, both private/public
|
||||
ownaction = "{action $*}";
|
||||
|
||||
# own action with target, both private/public
|
||||
ownaction_target = "{action_core $0}%K:%c$1%n ";
|
||||
|
||||
# private action sent by others
|
||||
pvtaction = "%_ (*) $*%n ";
|
||||
pvtaction_query = "{action $*}";
|
||||
|
||||
# public action sent by others
|
||||
pubaction = "{action $*}";
|
||||
|
||||
|
||||
##
|
||||
## other IRC events
|
||||
##
|
||||
|
||||
# whois
|
||||
whois = "%# $[8]0 : $1-";
|
||||
|
||||
# notices
|
||||
ownnotice = "[%r$0%K(%R$1-%K)]%n ";
|
||||
notice = "%K-%M$*%K-%n ";
|
||||
pubnotice_channel = "%K:%m$*";
|
||||
pvtnotice_host = "%K(%m$*%K)";
|
||||
servernotice = "%g!$*%n ";
|
||||
|
||||
# CTCPs
|
||||
ownctcp = "[%r$0%K(%R$1-%K)] ";
|
||||
ctcp = "%g$*%n";
|
||||
|
||||
# wallops
|
||||
wallop = "%_$*%n: ";
|
||||
wallop_nick = "%n$*";
|
||||
wallop_action = "%_ * $*%n ";
|
||||
|
||||
# netsplits
|
||||
netsplit = "%R$*%n";
|
||||
netjoin = "%C$*%n";
|
||||
|
||||
# /names list
|
||||
names_prefix = "";
|
||||
names_nick = "[%_$0%_$1-] ";
|
||||
names_nick_op = "{names_nick $*}";
|
||||
names_nick_halfop = "{names_nick $*}";
|
||||
names_nick_voice = "{names_nick $*}";
|
||||
names_users = "[%g$*%n]";
|
||||
names_channel = "%G$*%n";
|
||||
|
||||
# DCC
|
||||
dcc = "%g$*%n";
|
||||
dccfile = "%_$*%_";
|
||||
|
||||
# DCC chat, own msg/action
|
||||
dccownmsg = "[%r$0%K($1-%K)%n] ";
|
||||
dccownnick = "%R$*%n";
|
||||
dccownquerynick = "%_$*%n";
|
||||
dccownaction = "{action $*}";
|
||||
dccownaction_target = "{action_core $0}%K:%c$1%n ";
|
||||
|
||||
# DCC chat, others
|
||||
dccmsg = "[%G$1-%K(%g$0%K)%n] ";
|
||||
dccquerynick = "%G$*%n";
|
||||
dccaction = "%_ (*dcc*) $*%n %|";
|
||||
|
||||
##
|
||||
## statusbar
|
||||
##
|
||||
|
||||
# default background for all statusbars. You can also give
|
||||
# the default foreground color for statusbar items.
|
||||
sb_background = "%4%w";
|
||||
|
||||
# default backround for "default" statusbar group
|
||||
#sb_default_bg = "%4";
|
||||
# background for prompt / input line
|
||||
sb_prompt_bg = "%n";
|
||||
# background for info statusbar
|
||||
sb_info_bg = "%8";
|
||||
# background for topicbar (same default)
|
||||
#sb_topic_bg = "%4";
|
||||
|
||||
# text at the beginning of statusbars. sb-item already puts
|
||||
# space there,so we don't use anything by default.
|
||||
sbstart = "";
|
||||
# text at the end of statusbars. Use space so that it's never
|
||||
# used for anything.
|
||||
sbend = " ";
|
||||
|
||||
topicsbstart = "{sbstart $*}";
|
||||
topicsbend = "{sbend $*}";
|
||||
|
||||
prompt = "[$*] ";
|
||||
|
||||
sb = " %c[%n$*%c]%n";
|
||||
sbmode = "(%c+%n$*)";
|
||||
sbaway = " (%GzZzZ%n)";
|
||||
sbservertag = ":$0 (change with ^X)";
|
||||
sbnickmode = "$0";
|
||||
|
||||
# activity in statusbar
|
||||
|
||||
# ',' separator
|
||||
sb_act_sep = "%c$*";
|
||||
# normal text
|
||||
sb_act_text = "%c$*";
|
||||
# public message
|
||||
sb_act_msg = "%W$*";
|
||||
# hilight
|
||||
sb_act_hilight = "%M$*";
|
||||
# hilight with specified color, $0 = color, $1 = text
|
||||
sb_act_hilight_color = "$0$1-%n";
|
||||
};
|
||||
43
irssi/scripts/awaybar.pl
Executable file
43
irssi/scripts/awaybar.pl
Executable file
@@ -0,0 +1,43 @@
|
||||
# awaybar.pl -- initially built for Irssi 0.8.9
|
||||
# thanks to mood.pl for practically allowing me
|
||||
# to copy the approach..
|
||||
use strict;
|
||||
use Irssi;
|
||||
use Irssi::TextUI;
|
||||
use vars qw($VERSION %IRSSI);
|
||||
|
||||
$VERSION = "0.1.1";
|
||||
%IRSSI = (
|
||||
authors => 'Simon Shine',
|
||||
contact => 'http://shine.eu.org/',
|
||||
name => 'awaybar',
|
||||
description => 'Provides a menubar item with away message',
|
||||
license => 'Public domain',
|
||||
);
|
||||
|
||||
Irssi::statusbar_item_register('awaybar', 0, 'awaybar');
|
||||
Irssi::signal_add('away mode changed', 'awaybar_redraw');
|
||||
|
||||
sub awaybar {
|
||||
my ($item, $get_size_only) = @_;
|
||||
my $away_reason = !Irssi::active_server() ? undef : Irssi::active_server()->{away_reason};
|
||||
|
||||
if (defined $away_reason && length $away_reason) {
|
||||
my %r = ('\{' => '(',
|
||||
'\}' => ')',
|
||||
'%' => '%%',);
|
||||
$away_reason =~ s/$_/$r{$_}/g for (keys %r);
|
||||
|
||||
#my $format = $theme->format_expand("{sb_awaybar Olet AWAY. Syy: $away_reason}");
|
||||
my $format = "{sb_awaybar $away_reason}.";
|
||||
|
||||
$item->{min_size} = $item->{max_size} = length($away_reason);
|
||||
$item->default_handler($get_size_only, $format, 0, 1);
|
||||
} else {
|
||||
$item->{min_size} = $item->{max_size} = 0;
|
||||
}
|
||||
}
|
||||
|
||||
sub awaybar_redraw {
|
||||
Irssi::statusbar_items_redraw('awaybar');
|
||||
}
|
||||
2478
irssi/scripts/awl.pl
Executable file
2478
irssi/scripts/awl.pl
Executable file
File diff suppressed because it is too large
Load Diff
145
irssi/scripts/nickcolor.pl
Executable file
145
irssi/scripts/nickcolor.pl
Executable file
@@ -0,0 +1,145 @@
|
||||
use strict;
|
||||
use Irssi 20020101.0250 ();
|
||||
use vars qw($VERSION %IRSSI);
|
||||
$VERSION = "2";
|
||||
%IRSSI = (
|
||||
authors => "Timo Sirainen, Ian Peters, David Leadbeater",
|
||||
contact => "tss\@iki.fi",
|
||||
name => "Nick Color",
|
||||
description => "assign a different color for each nick",
|
||||
license => "Public Domain",
|
||||
url => "http://irssi.org/",
|
||||
changed => "Sun 15 Jun 19:10:44 BST 2014",
|
||||
);
|
||||
|
||||
# Settings:
|
||||
# nickcolor_colors: List of color codes to use.
|
||||
# e.g. /set nickcolor_colors 2 3 4 5 6 7 9 10 11 12 13
|
||||
# (avoid 8, as used for hilights in the default theme).
|
||||
|
||||
my %saved_colors;
|
||||
my %session_colors = {};
|
||||
|
||||
sub load_colors {
|
||||
open my $color_fh, "<", "$ENV{HOME}/.irssi/saved_colors";
|
||||
while (<$color_fh>) {
|
||||
chomp;
|
||||
my($nick, $color) = split ":";
|
||||
$saved_colors{$nick} = $color;
|
||||
}
|
||||
}
|
||||
|
||||
sub save_colors {
|
||||
open COLORS, ">", "$ENV{HOME}/.irssi/saved_colors";
|
||||
|
||||
foreach my $nick (keys %saved_colors) {
|
||||
print COLORS "$nick:$saved_colors{$nick}\n";
|
||||
}
|
||||
|
||||
close COLORS;
|
||||
}
|
||||
|
||||
# If someone we've colored (either through the saved colors, or the hash
|
||||
# function) changes their nick, we'd like to keep the same color associated
|
||||
# with them (but only in the session_colors, ie a temporary mapping).
|
||||
|
||||
sub sig_nick {
|
||||
my ($server, $newnick, $nick, $address) = @_;
|
||||
my $color;
|
||||
|
||||
$newnick = substr ($newnick, 1) if ($newnick =~ /^:/);
|
||||
|
||||
if ($color = $saved_colors{$nick}) {
|
||||
$session_colors{$newnick} = $color;
|
||||
} elsif ($color = $session_colors{$nick}) {
|
||||
$session_colors{$newnick} = $color;
|
||||
}
|
||||
}
|
||||
|
||||
# This gave reasonable distribution values when run across
|
||||
# /usr/share/dict/words
|
||||
|
||||
sub simple_hash {
|
||||
my ($string) = @_;
|
||||
chomp $string;
|
||||
my @chars = split //, $string;
|
||||
my $counter;
|
||||
|
||||
foreach my $char (@chars) {
|
||||
$counter += ord $char;
|
||||
}
|
||||
|
||||
my @colors = split / /, Irssi::settings_get_str('nickcolor_colors');
|
||||
$counter = $colors[$counter % @colors];
|
||||
|
||||
return $counter;
|
||||
}
|
||||
|
||||
sub sig_public {
|
||||
my ($server, $msg, $nick, $address, $target) = @_;
|
||||
|
||||
# Has the user assigned this nick a color?
|
||||
my $color = $saved_colors{$nick};
|
||||
|
||||
# Have -we- already assigned this nick a color?
|
||||
if (!$color) {
|
||||
$color = $session_colors{$nick};
|
||||
}
|
||||
|
||||
# Let's assign this nick a color
|
||||
if (!$color) {
|
||||
$color = simple_hash $nick;
|
||||
$session_colors{$nick} = $color;
|
||||
}
|
||||
|
||||
$color = sprintf "\003%02d", $color;
|
||||
$server->command('/^format pubmsg {pubmsgnick $2 {pubnick '.chr(3).$color.'$[-10]0}}$1');
|
||||
}
|
||||
|
||||
sub cmd_color {
|
||||
my ($data, $server, $witem) = @_;
|
||||
my ($op, $nick, $color) = split " ", $data;
|
||||
|
||||
$op = lc $op;
|
||||
|
||||
if (!$op) {
|
||||
Irssi::print ("No operation given (save/set/clear/list/preview)");
|
||||
} elsif ($op eq "save") {
|
||||
save_colors;
|
||||
} elsif ($op eq "set") {
|
||||
if (!$nick) {
|
||||
Irssi::print ("Nick not given");
|
||||
} elsif (!$color) {
|
||||
Irssi::print ("Color not given");
|
||||
} elsif ($color < 2 || $color > 14) {
|
||||
Irssi::print ("Color must be between 2 and 14 inclusive");
|
||||
} else {
|
||||
$saved_colors{$nick} = $color;
|
||||
}
|
||||
} elsif ($op eq "clear") {
|
||||
if (!$nick) {
|
||||
Irssi::print ("Nick not given");
|
||||
} else {
|
||||
delete ($saved_colors{$nick});
|
||||
}
|
||||
} elsif ($op eq "list") {
|
||||
Irssi::print ("\nSaved Colors:");
|
||||
foreach my $nick (keys %saved_colors) {
|
||||
Irssi::print (chr (3) . "$saved_colors{$nick}$nick" .
|
||||
chr (3) . "1 ($saved_colors{$nick})");
|
||||
}
|
||||
} elsif ($op eq "preview") {
|
||||
Irssi::print ("\nAvailable colors:");
|
||||
foreach my $i (2..14) {
|
||||
Irssi::print (chr (3) . "$i" . "Color #$i");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
load_colors;
|
||||
|
||||
Irssi::settings_add_str('misc', 'nickcolor_colors', '2 3 4 5 6 7 9 10 11 12 13');
|
||||
Irssi::command_bind('color', 'cmd_color');
|
||||
|
||||
Irssi::signal_add('message public', 'sig_public');
|
||||
Irssi::signal_add('event nick', 'sig_nick');
|
||||
805
irssi/scripts/nicklist.pl
Executable file
805
irssi/scripts/nicklist.pl
Executable file
@@ -0,0 +1,805 @@
|
||||
# This script adds a nicklist to the right of irssi
|
||||
# for documentation: see http://wouter.coekaerts.be/site/irssi/nicklist
|
||||
|
||||
# Copyright (C) 2002-2007 Wouter Coekaerts <coekie@irssi.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
use Irssi;
|
||||
use strict;
|
||||
use IO::Handle; # for (auto)flush
|
||||
use Fcntl; # for sysopen
|
||||
use vars qw($VERSION %IRSSI);
|
||||
$VERSION = '0.4.6+';
|
||||
%IRSSI = (
|
||||
authors => 'Wouter Coekaerts',
|
||||
contact => 'coekie@irssi.org',
|
||||
name => 'nicklist',
|
||||
description => 'draws a nicklist to another terminal, or at the right of your irssi in the same terminal',
|
||||
license => 'GPLv2+',
|
||||
url => 'http://wouter.coekaerts.be/irssi',
|
||||
changed => '05/05/2007'
|
||||
);
|
||||
|
||||
sub cmd_help {
|
||||
print ( <<EOF
|
||||
Commands:
|
||||
NICKLIST HELP
|
||||
NICKLIST SCROLL <nr of lines>
|
||||
NICKLIST SCREEN
|
||||
NICKLIST FIFO
|
||||
NICKLIST OFF
|
||||
NICKLIST UPDATE
|
||||
|
||||
For help see: http://wouter.coekaerts.be/site/irssi/nicklist
|
||||
|
||||
in short:
|
||||
|
||||
1. FIFO MODE
|
||||
- in irssi: /NICKLIST FIFO (only the first time, to create the fifo)
|
||||
- in a shell, in a window where you want the nicklist: cat ~/.irssi/nicklistfifo
|
||||
- back in irssi:
|
||||
/SET nicklist_heigth <height of nicklist>
|
||||
/SET nicklist_width <width of nicklist>
|
||||
/NICKLIST FIFO
|
||||
|
||||
2. SCREEN MODE
|
||||
- start irssi inside screen ("screen irssi")
|
||||
- /NICKLIST SCREEN
|
||||
EOF
|
||||
);
|
||||
}
|
||||
|
||||
my $prev_lines = 0; # number of lines in previous written nicklist
|
||||
my $scroll_pos = 0; # scrolling position
|
||||
my $cursor_line; # line the cursor is currently on
|
||||
my ($OFF, $SCREEN, $FIFO) = (0,1,2); # modes
|
||||
my $mode = $OFF; # current mode
|
||||
my $need_redraw = 0; # nicklist needs redrawing
|
||||
my $screen_resizing = 0; # terminal is being resized
|
||||
my $active_channel; # (REC)
|
||||
|
||||
my @nicklist=(); # array of hashes, containing the internal nicklist of the active channel
|
||||
# nick => realnick
|
||||
# modeflag => '@', '%', '+', or other mode char
|
||||
# modepos => number representing the position in which to sort nicks with that mode
|
||||
# status => (not used yet...)
|
||||
#my ($STATUS_NORMAL, $STATUS_JOINING, $STATUS_PARTING, $STATUS_QUITING, $STATUS_KICKED, $STATUS_SPLIT) = (0,1,2,3,4,5);
|
||||
# text => text to be printed
|
||||
# cmp => text used to compare (sort) nicks
|
||||
|
||||
|
||||
# 'cached' settings
|
||||
my ($screen_prefix, $irssi_width, %prefix_mode, @prefix_status, $height, $nicklist_width, $check_friends, @prefix_friends);
|
||||
|
||||
sub read_settings {
|
||||
($screen_prefix = Irssi::settings_get_str('nicklist_screen_prefix')) =~ s/\\e/\033/g;
|
||||
|
||||
($prefix_mode{'@'} = Irssi::settings_get_str('nicklist_prefix_mode_op')) =~ s/\\e/\033/g;
|
||||
($prefix_mode{'%'} = Irssi::settings_get_str('nicklist_prefix_mode_halfop')) =~ s/\\e/\033/g;
|
||||
($prefix_mode{'+'} = Irssi::settings_get_str('nicklist_prefix_mode_voice')) =~ s/\\e/\033/g;
|
||||
($prefix_mode{' '} = Irssi::settings_get_str('nicklist_prefix_mode_normal')) =~ s/\\e/\033/g;
|
||||
|
||||
(my $prefix_mode_other = Irssi::settings_get_str('nicklist_prefix_mode_other')) =~ s/\\e/\033/g;
|
||||
foreach my $p (split (/ /, $prefix_mode_other)) {
|
||||
next if $p eq '';
|
||||
if ($p !~ /(.)=(.*)/) {
|
||||
Irssi::print("Could not parse nicklist_prefix_mode_other part '$p'. Expected space separated list of <mode character>=<prefix>");
|
||||
last;
|
||||
} else {
|
||||
$prefix_mode{$1} = $2;
|
||||
}
|
||||
}
|
||||
|
||||
(my $prefix_friends = Irssi::settings_get_str('nicklist_prefix_friends')) =~ s/\\e/\033/g;
|
||||
foreach my $p (split (/ /, $prefix_friends)) {
|
||||
next if $p eq '';
|
||||
if ($p !~ /(.+?)=(.*)/) {
|
||||
Irssi::print("Could not parse nicklist_prefix_friends part '$p'. Expected space separated list of <flags>=<prefix>");
|
||||
last;
|
||||
} else {
|
||||
push @prefix_friends, {'flags' => $1, 'prefix' => $2};
|
||||
}
|
||||
}
|
||||
|
||||
$check_friends = ($prefix_friends ne '');
|
||||
|
||||
if ($mode != $SCREEN) {
|
||||
$height = Irssi::settings_get_int('nicklist_height');
|
||||
}
|
||||
my $new_nicklist_width = Irssi::settings_get_int('nicklist_width');
|
||||
if ($new_nicklist_width != $nicklist_width && $mode == $SCREEN) {
|
||||
sig_terminal_resized();
|
||||
}
|
||||
$nicklist_width = $new_nicklist_width;
|
||||
}
|
||||
|
||||
sub update {
|
||||
read_settings();
|
||||
make_nicklist();
|
||||
}
|
||||
|
||||
##################
|
||||
##### OUTPUT #####
|
||||
##################
|
||||
|
||||
### off ###
|
||||
|
||||
sub cmd_off {
|
||||
if ($mode == $SCREEN) {
|
||||
screen_stop();
|
||||
} elsif ($mode == $FIFO) {
|
||||
fifo_stop();
|
||||
}
|
||||
}
|
||||
|
||||
### fifo ###
|
||||
|
||||
sub cmd_fifo_start {
|
||||
read_settings();
|
||||
my $path = Irssi::settings_get_str('nicklist_fifo_path');
|
||||
unless (-p $path) { # not a pipe
|
||||
if (-e _) { # but a something else
|
||||
die "$0: $path exists and is not a pipe, please remove it\n";
|
||||
} else {
|
||||
require POSIX;
|
||||
POSIX::mkfifo($path, 0666) or die "can\'t mkfifo $path: $!";
|
||||
Irssi::print("Fifo created. Start reading it (\"cat $path\") and try again.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!sysopen(FIFO, $path, O_WRONLY | O_NONBLOCK)) { # or die "can't write $path: $!";
|
||||
Irssi::print("Couldn\'t write to the fifo ($!). Please start reading the fifo (\"cat $path\") and try again.");
|
||||
return;
|
||||
}
|
||||
FIFO->autoflush(1);
|
||||
print FIFO "\033[2J\033[1;1H"; # erase screen & jump to 0,0
|
||||
$cursor_line = 0;
|
||||
if ($mode == $SCREEN) {
|
||||
screen_stop();
|
||||
}
|
||||
$mode = $FIFO;
|
||||
make_nicklist();
|
||||
}
|
||||
|
||||
sub fifo_stop {
|
||||
close FIFO;
|
||||
$mode = $OFF;
|
||||
Irssi::print("Fifo closed.");
|
||||
}
|
||||
|
||||
### screen ###
|
||||
|
||||
sub cmd_screen_start {
|
||||
if (!defined($ENV{'STY'})) {
|
||||
Irssi::print 'screen not detected, screen mode only works inside screen';
|
||||
return;
|
||||
}
|
||||
read_settings();
|
||||
if ($mode == $SCREEN) {return;}
|
||||
if ($mode == $FIFO) {
|
||||
fifo_stop();
|
||||
}
|
||||
$mode = $SCREEN;
|
||||
Irssi::signal_add_last('gui print text finished', \&sig_gui_print_text_finished);
|
||||
Irssi::signal_add_last('gui page scrolled', \&sig_page_scrolled);
|
||||
Irssi::signal_add('terminal resized', \&sig_terminal_resized);
|
||||
screen_size();
|
||||
make_nicklist();
|
||||
}
|
||||
|
||||
sub screen_stop {
|
||||
$mode = $OFF;
|
||||
Irssi::signal_remove('gui print text finished', \&sig_gui_print_text_finished);
|
||||
Irssi::signal_remove('gui page scrolled', \&sig_page_scrolled);
|
||||
Irssi::signal_remove('terminal resized', \&sig_terminal_resized);
|
||||
system 'screen -x '.$ENV{'STY'}.' -X fit';
|
||||
}
|
||||
|
||||
sub screen_size {
|
||||
if ($mode != $SCREEN) {
|
||||
return;
|
||||
}
|
||||
$screen_resizing = 1;
|
||||
# fit screen
|
||||
system 'screen -x '.$ENV{'STY'}.' -X fit';
|
||||
# we wait a second to make sure the fit command was processed
|
||||
Irssi::timeout_add_once(1000, \&screen_size_real, []);
|
||||
}
|
||||
|
||||
sub screen_size_real {
|
||||
# get size (from perldoc -q size)
|
||||
my ($winsize, $row, $col, $xpixel, $ypixel);
|
||||
eval 'use Term::ReadKey; ($col, $row, $xpixel, $ypixel) = GetTerminalSize';
|
||||
# require Term::ReadKey 'GetTerminalSize';
|
||||
# ($col, $row, $xpixel, $ypixel) = Term::ReadKey::GetTerminalSize;
|
||||
#};
|
||||
if ($@) { # no Term::ReadKey, try the ugly way
|
||||
eval {
|
||||
require 'sys/ioctl.ph';
|
||||
# without this reloading doesn't work. workaround for some unknown bug
|
||||
do 'asm/ioctls.ph';
|
||||
};
|
||||
|
||||
# ugly way not working, let's try something uglier, the dg-hack(tm) (constant for linux only?)
|
||||
if($@) { no strict 'refs'; *TIOCGWINSZ = sub { return 0x5413 } }
|
||||
|
||||
unless (defined &TIOCGWINSZ) {
|
||||
die "Term::ReadKey not found, and ioctl 'workaround' failed. Install the Term::ReadKey perl module to use screen mode.\n";
|
||||
}
|
||||
open(TTY, "+</dev/tty") or die "No tty: $!";
|
||||
unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
|
||||
die "Term::ReadKey not found, and ioctl 'workaround' failed ($!). Install the Term::ReadKey perl module to use screen mode.\n";
|
||||
}
|
||||
close(TTY);
|
||||
($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
|
||||
}
|
||||
|
||||
# set screen width
|
||||
$irssi_width = $col-$nicklist_width-1;
|
||||
$height = $row-1;
|
||||
|
||||
system 'screen -x '.$ENV{'STY'}.' -X width -w ' . $irssi_width;
|
||||
# wait another second for the resizing, and then redraw.
|
||||
Irssi::timeout_add_once(1000,sub {$screen_resizing = 0; redraw()}, []);
|
||||
}
|
||||
|
||||
sub sig_terminal_resized {
|
||||
if ($screen_resizing) {
|
||||
return;
|
||||
}
|
||||
$screen_resizing = 1;
|
||||
Irssi::timeout_add_once(1000,\&screen_size,[]);
|
||||
}
|
||||
|
||||
|
||||
### both ###
|
||||
|
||||
sub nicklist_write_start {
|
||||
if ($mode == $SCREEN) {
|
||||
print STDERR "\033P\033[s\033\\"; # save cursor
|
||||
}
|
||||
}
|
||||
|
||||
sub nicklist_write_end {
|
||||
if ($mode == $SCREEN) {
|
||||
print STDERR "\033P\033[u\033\\"; # restore cursor
|
||||
}
|
||||
}
|
||||
|
||||
sub nicklist_write_line {
|
||||
my ($line, $data) = @_;
|
||||
if ($mode == $SCREEN) {
|
||||
print STDERR "\033P\033[" . ($line+1) . ';'. ($irssi_width+1) .'H'. $screen_prefix . $data . "\033\\";
|
||||
} elsif ($mode == $FIFO) {
|
||||
$data = "\033[m$data"; # reset color
|
||||
if ($line == $cursor_line+1) {
|
||||
$data = "\n$data"; # next line
|
||||
} elsif ($line == $cursor_line) {
|
||||
$data = "\033[1G".$data; # back to beginning of line
|
||||
} else {
|
||||
$data = "\033[".($line+1).";0H".$data; # jump
|
||||
}
|
||||
$cursor_line=$line;
|
||||
print(FIFO $data) or fifo_stop();
|
||||
}
|
||||
}
|
||||
|
||||
sub calc_prefix_friends {
|
||||
my ($nick) = @_;
|
||||
|
||||
return '' unless $check_friends
|
||||
&& $nick->{'host'}
|
||||
&& is_friend($active_channel->{'server'}->{'chatnet'}, $active_channel->{'name'}, $nick->{'nick'}, $nick->{'host'});
|
||||
|
||||
my $flags = get_flags($active_channel->{'server'}->{'chatnet'}, $active_channel->{'name'}, $nick->{'nick'}, $nick->{'host'});
|
||||
|
||||
my $prefix;
|
||||
foreach my $prefix_friend (@prefix_friends) {
|
||||
if ($prefix_friend->{'flags'} eq 'noflag') {
|
||||
if ($flags eq '') {
|
||||
$prefix = $prefix_friend->{'prefix'};
|
||||
last;
|
||||
}
|
||||
} elsif (check_modes($flags, $prefix_friend->{'flags'})) {
|
||||
$prefix = $prefix_friend->{'prefix'};
|
||||
}
|
||||
}
|
||||
|
||||
return $prefix ? $prefix : '';
|
||||
}
|
||||
|
||||
# recalc the text of the nicklist item
|
||||
sub calc_text {
|
||||
my ($nick) = @_;
|
||||
my $tmp = $nicklist_width-3;
|
||||
(my $text = $nick->{'nick'}) =~ s/^(.{$tmp})..+$/$1\033[34m~/; # strip nick if too long
|
||||
|
||||
my $prefix_mode = $prefix_mode{$nick->{'modeflag'}};
|
||||
if (! defined($prefix_mode) ) {
|
||||
$prefix_mode = $nick->{'modeflag'};
|
||||
}
|
||||
|
||||
my $prefix_friends = calc_prefix_friends($nick);
|
||||
|
||||
$nick->{'text'} =
|
||||
$prefix_mode .
|
||||
$prefix_friends .
|
||||
$text .
|
||||
(' ' x ($nicklist_width-length($nick->{'nick'})-1)) .
|
||||
"\033[m"; # reset
|
||||
$nick->{'cmp'} = $nick->{'modepos'}.lc($nick->{'nick'});
|
||||
}
|
||||
|
||||
# redraw the given nick (nr) if it is visible
|
||||
sub redraw_nick_nr {
|
||||
my ($nr) = @_;
|
||||
my $line = $nr - $scroll_pos;
|
||||
if ($line >= 0 && $line < $height) {
|
||||
nicklist_write_line($line, $nicklist[$nr]->{'text'});
|
||||
}
|
||||
}
|
||||
|
||||
# nick was inserted, redraw area if necessary
|
||||
sub draw_insert_nick_nr {
|
||||
my ($nr) = @_;
|
||||
my $line = $nr - $scroll_pos;
|
||||
if ($line < 0) { # nick is inserted above visible area
|
||||
$scroll_pos++; # 'scroll' down :)
|
||||
} elsif ($line < $height) { # line is visible
|
||||
if ($mode == $SCREEN) {
|
||||
need_redraw();
|
||||
} elsif ($mode == $FIFO) {
|
||||
my $data = "\033[m\033[L". $nicklist[$nr]->{'text'}; # reset color & insert line & write nick
|
||||
if ($line == $cursor_line) {
|
||||
$data = "\033[1G".$data; # back to beginning of line
|
||||
} else {
|
||||
$data = "\033[".($line+1).";1H".$data; # jump
|
||||
}
|
||||
$cursor_line=$line;
|
||||
print(FIFO $data) or fifo_stop();
|
||||
if ($prev_lines < $height) {
|
||||
$prev_lines++; # the nicklist has one line more
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub draw_remove_nick_nr {
|
||||
my ($nr) = @_;
|
||||
my $line = $nr - $scroll_pos;
|
||||
if ($line < 0) { # nick removed above visible area
|
||||
$scroll_pos--; # 'scroll' up :)
|
||||
} elsif ($line < $height) { # line is visible
|
||||
if ($mode == $SCREEN) {
|
||||
need_redraw();
|
||||
} elsif ($mode == $FIFO) {
|
||||
#my $data = "\033[m\033[L[i$line]". $nicklist[$nr]->{'text'}; # reset color & insert line & write nick
|
||||
my $data = "\033[M"; # delete line
|
||||
if ($line != $cursor_line) {
|
||||
$data = "\033[".($line+1)."d".$data; # jump
|
||||
}
|
||||
$cursor_line=$line;
|
||||
print(FIFO $data) or fifo_stop();
|
||||
if (@nicklist-$scroll_pos >= $height) {
|
||||
redraw_nick_nr($scroll_pos+$height-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# redraw the whole nicklist
|
||||
sub redraw {
|
||||
$need_redraw = 0;
|
||||
#make_nicklist();
|
||||
nicklist_write_start();
|
||||
my $line = 0;
|
||||
### draw nicklist ###
|
||||
for (my $i=$scroll_pos;$line < $height && $i < @nicklist; $i++) {
|
||||
nicklist_write_line($line++, $nicklist[$i]->{'text'});
|
||||
}
|
||||
|
||||
### clean up other lines ###
|
||||
my $real_lines = $line;
|
||||
while($line < $prev_lines) {
|
||||
nicklist_write_line($line++,' ' x $nicklist_width);
|
||||
}
|
||||
$prev_lines = $real_lines;
|
||||
nicklist_write_end();
|
||||
}
|
||||
|
||||
# redraw (with little delay to avoid redrawing to much)
|
||||
sub need_redraw {
|
||||
if(!$need_redraw) {
|
||||
$need_redraw = 1;
|
||||
Irssi::timeout_add_once(10,\&redraw,[]);
|
||||
}
|
||||
}
|
||||
|
||||
sub sig_page_scrolled {
|
||||
$prev_lines = $height; # we'll need to redraw everything if he scrolled up
|
||||
need_redraw;
|
||||
}
|
||||
|
||||
# redraw (with delay) if the window is visible (only in screen mode)
|
||||
sub sig_gui_print_text_finished {
|
||||
if ($need_redraw) { # there's already a redraw 'queued'
|
||||
return;
|
||||
}
|
||||
my $window = @_[0];
|
||||
if ($window->{'refnum'} == Irssi::active_win->{'refnum'} || Irssi::settings_get_str('nicklist_screen_split_windows') eq '*') {
|
||||
need_redraw;
|
||||
return;
|
||||
}
|
||||
foreach my $win (split(/[ ,]/, Irssi::settings_get_str('nicklist_screen_split_windows'))) {
|
||||
if ($window->{'refnum'} == $win || $window->{'name'} eq $win) {
|
||||
need_redraw;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
###################
|
||||
##### FRIENDS #####
|
||||
###################
|
||||
|
||||
# checks if $has_modes is in $need_modes, copied from trigger.pl
|
||||
sub check_modes {
|
||||
my ($has_modes, $need_modes) = @_;
|
||||
my $matches;
|
||||
my $switch = 1; # if a '-' if found, will be 0 (meaning the modes should not be set)
|
||||
foreach my $need_mode (split /&/,$need_modes) {
|
||||
$matches = 0;
|
||||
foreach my $char (split //,$need_mode) {
|
||||
if ($char eq '-') {
|
||||
$switch = 0;
|
||||
} elsif ($char eq '+') {
|
||||
$switch = 1;
|
||||
} elsif ((index($has_modes,$char) != -1) == $switch) {
|
||||
$matches = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
if (!$matches) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
# get someones flags from people.pl or friends(_shasta).pl, copied from trigger.pl
|
||||
sub get_flags {
|
||||
my ($chatnet, $channel, $nick, $address) = @_;
|
||||
my $flags;
|
||||
no strict 'refs';
|
||||
if (defined %{ 'Irssi::Script::people::' }) {
|
||||
if (defined ($channel)) {
|
||||
$flags = (&{ 'Irssi::Script::people::find_local_flags' }($chatnet,$channel,$nick,$address));
|
||||
} else {
|
||||
$flags = (&{ 'Irssi::Script::people::find_global_flags' }($chatnet,$nick,$address));
|
||||
}
|
||||
$flags = join('',keys(%{$flags}));
|
||||
} else {
|
||||
my $shasta;
|
||||
if (defined %{ 'Irssi::Script::friends_shasta::' }) {
|
||||
$shasta = 'friends_shasta';
|
||||
} elsif (defined &{ 'Irssi::Script::friends::get_idx' }) {
|
||||
$shasta = 'friends';
|
||||
}
|
||||
if (!$shasta) {
|
||||
return undef;
|
||||
}
|
||||
my $idx = (&{ 'Irssi::Script::'.$shasta.'::get_idx' }($nick,$address));
|
||||
if ($idx == -1) {
|
||||
return '';
|
||||
}
|
||||
$flags = (&{ 'Irssi::Script::'.$shasta.'::get_friends_flags' }($idx,undef));
|
||||
if ($channel) {
|
||||
$flags .= (&{ 'Irssi::Script::'.$shasta.'::get_friends_flags' }($idx,$channel));
|
||||
}
|
||||
}
|
||||
return $flags;
|
||||
}
|
||||
|
||||
sub is_friend {
|
||||
my ($chatnet, $channel, $nick, $address) = @_;
|
||||
no strict 'refs';
|
||||
if (defined %{ 'Irssi::Script::people::' }) {
|
||||
return (() != &{'Irssi::Script::people::find_users'}($chatnet, $nick, $address));
|
||||
my $flags;
|
||||
if (defined ($channel)) {
|
||||
$flags = (&{ 'Irssi::Script::people::find_local_flags' }($chatnet,$channel,$nick,$address));
|
||||
} else {
|
||||
$flags = (&{ 'Irssi::Script::people::find_global_flags' }($chatnet,$nick,$address));
|
||||
}
|
||||
return ($flags ne ''); # TODO: test this
|
||||
} else {
|
||||
my $shasta;
|
||||
if (defined %{ 'Irssi::Script::friends_shasta::' }) {
|
||||
$shasta = 'friends_shasta';
|
||||
} elsif (defined &{ 'Irssi::Script::friends::get_idx' }) {
|
||||
$shasta = 'friends';
|
||||
}
|
||||
if (!$shasta) {
|
||||
return undef;
|
||||
}
|
||||
my $idx = (&{ 'Irssi::Script::'.$shasta.'::get_idx' }($nick,$address));
|
||||
return ($idx != -1);
|
||||
}
|
||||
}
|
||||
|
||||
####################
|
||||
##### NICKLIST #####
|
||||
####################
|
||||
|
||||
# returns the position of the given nick(as string) in the (internal) nicklist
|
||||
sub find_nick {
|
||||
my ($nick) = @_;
|
||||
for (my $i=0;$i < @nicklist; $i++) {
|
||||
if ($nicklist[$i]->{'nick'} eq $nick) {
|
||||
return $i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
# find position where nick should be inserted into the list
|
||||
sub find_insert_pos {
|
||||
my ($cmp)= @_;
|
||||
for (my $i=0;$i < @nicklist; $i++) {
|
||||
if ($nicklist[$i]->{'cmp'} gt $cmp) {
|
||||
return $i;
|
||||
}
|
||||
}
|
||||
return scalar(@nicklist); #last
|
||||
}
|
||||
|
||||
# make the (internal) nicklist (@nicklist)
|
||||
sub make_nicklist {
|
||||
@nicklist = ();
|
||||
$scroll_pos = 0;
|
||||
|
||||
### get & check channel ###
|
||||
my $channel = Irssi::active_win->{active};
|
||||
|
||||
if (!$channel || (ref($channel) ne 'Irssi::Irc::Channel' && ref($channel) ne 'Irssi::Silc::Channel') || $channel->{'type'} ne 'CHANNEL' || ($channel->{chat_type} ne 'SILC' && !$channel->{'names_got'}) ) {
|
||||
$active_channel = undef;
|
||||
# no nicklist
|
||||
} else {
|
||||
$active_channel = $channel;
|
||||
### make nicklist ###
|
||||
foreach my $nick ($channel->nicks()) {
|
||||
my $thisnick = {'nick' => $nick->{'nick'}};
|
||||
recalc_nick($thisnick, $nick);
|
||||
push @nicklist, $thisnick;
|
||||
}
|
||||
@nicklist = sort {$a->{'cmp'} cmp $b->{'cmp'}} @nicklist;
|
||||
}
|
||||
need_redraw();
|
||||
}
|
||||
|
||||
# insert nick(as hash) into nicklist
|
||||
# pre: cmp has to be calculated
|
||||
sub insert_nick {
|
||||
my ($nick) = @_;
|
||||
my $nr = find_insert_pos($nick->{'cmp'});
|
||||
splice @nicklist, $nr, 0, $nick;
|
||||
draw_insert_nick_nr($nr);
|
||||
}
|
||||
|
||||
# remove nick(as nr) from nicklist
|
||||
sub remove_nick {
|
||||
my ($nr) = @_;
|
||||
splice @nicklist, $nr, 1;
|
||||
draw_remove_nick_nr($nr);
|
||||
}
|
||||
|
||||
# update the mode and cmp of a nick, based on a nickrec from irssi
|
||||
sub recalc_nick {
|
||||
my ($nick, $nickrec) = @_;
|
||||
if (! $nickrec) {
|
||||
$nickrec = $active_channel->nick_find($nick->{'nick'});
|
||||
}
|
||||
|
||||
my $nickflags = $active_channel->{'server'}->get_nick_flags() . ' ';
|
||||
|
||||
my $flag = (
|
||||
$nickrec->{'op'} ? '@' :
|
||||
$nickrec->{'halfop'} ? '%' :
|
||||
$nickrec->{'voice'} ? '+' :
|
||||
' '
|
||||
);
|
||||
|
||||
if ($nickrec->{'other'} && index($nickflags, $nick->{'other'}) < index($nickflags, $flag)) {
|
||||
$flag = chr($nickrec->{'other'});
|
||||
}
|
||||
|
||||
$nick->{'modepos'} = index($nickflags, $flag);
|
||||
$nick->{'modeflag'} = $flag;
|
||||
|
||||
$nick->{'host'} = $nickrec->{'host'};
|
||||
calc_text($nick);
|
||||
}
|
||||
|
||||
###################
|
||||
##### ACTIONS #####
|
||||
###################
|
||||
|
||||
# scroll the nicklist, arg = number of lines to scroll, positive = down, negative = up
|
||||
sub cmd_scroll {
|
||||
if (!$active_channel) { # not a channel active
|
||||
return;
|
||||
}
|
||||
my @nicks=Irssi::active_win->{active}->nicks;
|
||||
my $nick_count = scalar(@nicks)+0;
|
||||
my $channel = Irssi::active_win->{active};
|
||||
if (!$channel || $channel->{type} ne 'CHANNEL' || !$channel->{names_got} || $nick_count <= Irssi::settings_get_int('nicklist_height')) {
|
||||
return;
|
||||
}
|
||||
$scroll_pos += @_[0];
|
||||
|
||||
if ($scroll_pos > $nick_count - $height) {
|
||||
$scroll_pos = $nick_count - $height;
|
||||
}
|
||||
if ($scroll_pos <= 0) {
|
||||
$scroll_pos = 0;
|
||||
}
|
||||
need_redraw();
|
||||
}
|
||||
|
||||
sub is_active_channel {
|
||||
my ($server,$channel) = @_; # (channel as string)
|
||||
return ($server && $server->{'tag'} eq $active_channel->{'server'}->{'tag'} && $server->channel_find($channel) && $active_channel && $server->channel_find($channel)->{'name'} eq $active_channel->{'name'});
|
||||
}
|
||||
|
||||
sub sig_channel_wholist { # this is actualy a little late, when the names are received would be better
|
||||
my ($channel) = @_;
|
||||
if (Irssi::active_win->{'active'} && Irssi::active_win->{'active'}->{'name'} eq $channel->{'name'}) { # the channel joined is active
|
||||
make_nicklist
|
||||
}
|
||||
}
|
||||
|
||||
sub sig_join {
|
||||
my ($server,$channel,$nick,$address) = @_;
|
||||
if (!is_active_channel($server,$channel)) {
|
||||
return;
|
||||
}
|
||||
my $newnick = {'nick' => $nick};
|
||||
recalc_nick($newnick);
|
||||
insert_nick($newnick);
|
||||
}
|
||||
|
||||
sub sig_kick {
|
||||
my ($server, $channel, $nick, $kicker, $address, $reason) = @_;
|
||||
if (!is_active_channel($server,$channel)) {
|
||||
return;
|
||||
}
|
||||
my $nr = find_nick($nick);
|
||||
if ($nr == -1) {
|
||||
Irssi::print("nicklist warning: $nick was kicked from $channel, but not found in nicklist");
|
||||
} else {
|
||||
remove_nick($nr);
|
||||
}
|
||||
}
|
||||
|
||||
sub sig_part {
|
||||
my ($server,$channel,$nick,$address, $reason) = @_;
|
||||
if (!is_active_channel($server,$channel)) {
|
||||
return;
|
||||
}
|
||||
my $nr = find_nick($nick);
|
||||
if ($nr == -1) {
|
||||
Irssi::print("nicklist warning: $nick has parted $channel, but was not found in nicklist");
|
||||
} else {
|
||||
remove_nick($nr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
sub sig_quit {
|
||||
my ($server,$nick,$address, $reason) = @_;
|
||||
if ($server->{'tag'} ne $active_channel->{'server'}->{'tag'}) {
|
||||
return;
|
||||
}
|
||||
my $nr = find_nick($nick);
|
||||
if ($nr != -1) {
|
||||
remove_nick($nr);
|
||||
}
|
||||
}
|
||||
|
||||
sub sig_nick {
|
||||
my ($server, $newnick, $oldnick, $address) = @_;
|
||||
if ($server->{'tag'} ne $active_channel->{'server'}->{'tag'}) {
|
||||
return;
|
||||
}
|
||||
my $nr = find_nick($oldnick);
|
||||
if ($nr != -1) { # if nick was found (nickchange is in current channel)
|
||||
my $nick = $nicklist[$nr];
|
||||
remove_nick($nr);
|
||||
$nick->{'nick'} = $newnick;
|
||||
calc_text($nick);
|
||||
insert_nick($nick);
|
||||
}
|
||||
}
|
||||
|
||||
sub sig_mode {
|
||||
my ($channel, $nick, $setby, $mode, $type) = @_; # (nick and channel as rec)
|
||||
if ($channel->{'server'}->{'tag'} ne $active_channel->{'server'}->{'tag'} || $channel->{'name'} ne $active_channel->{'name'}) {
|
||||
return;
|
||||
}
|
||||
my $nr = find_nick($nick->{'nick'});
|
||||
if ($nr == -1) {
|
||||
Irssi::print("nicklist warning: $nick->{'nick'} had mode set on $channel->{'name'}, but was not found in nicklist");
|
||||
} else {
|
||||
my $nicklist_item = $nicklist[$nr];
|
||||
remove_nick($nr);
|
||||
recalc_nick($nicklist_item, $nick);
|
||||
insert_nick($nicklist_item);
|
||||
}
|
||||
}
|
||||
|
||||
##### command binds #####
|
||||
Irssi::command_bind 'nicklist' => sub {
|
||||
my ( $data, $server, $item ) = @_;
|
||||
$data =~ s/\s+$//g;
|
||||
Irssi::command_runsub ('nicklist', $data, $server, $item ) ;
|
||||
};
|
||||
Irssi::signal_add_first 'default command nicklist' => sub {
|
||||
# gets triggered if called with unknown subcommand
|
||||
cmd_help();
|
||||
};
|
||||
Irssi::command_bind('nicklist update',\&update);
|
||||
Irssi::command_bind('nicklist help',\&cmd_help);
|
||||
Irssi::command_bind('nicklist scroll',\&cmd_scroll);
|
||||
Irssi::command_bind('nicklist fifo',\&cmd_fifo_start);
|
||||
Irssi::command_bind('nicklist screen',\&cmd_screen_start);
|
||||
Irssi::command_bind('nicklist screensize',\&screen_size);
|
||||
Irssi::command_bind('nicklist off',\&cmd_off);
|
||||
|
||||
##### signals #####
|
||||
Irssi::signal_add_last('window item changed', \&make_nicklist);
|
||||
Irssi::signal_add_last('window changed', \&make_nicklist);
|
||||
Irssi::signal_add_last('channel wholist', \&sig_channel_wholist);
|
||||
Irssi::signal_add_first('message join', \&sig_join); # first, to be before ignores
|
||||
Irssi::signal_add_first('message part', \&sig_part);
|
||||
Irssi::signal_add_first('message kick', \&sig_kick);
|
||||
Irssi::signal_add_first('message quit', \&sig_quit);
|
||||
Irssi::signal_add_first('message nick', \&sig_nick);
|
||||
Irssi::signal_add_first('message own_nick', \&sig_nick);
|
||||
Irssi::signal_add_first('nick mode changed', \&sig_mode);
|
||||
|
||||
Irssi::signal_add('setup changed', \&read_settings);
|
||||
|
||||
##### settings #####
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_screen_prefix', '\e[m ');
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_op', '\e[32m@\e[39m');
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_halfop', '\e[34m%\e[39m');
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_voice', '\e[33m+\e[39m');
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_normal', ' ');
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_prefix_mode_other', '&=\e[31m&\e[39m ~=\e[35m~\e[39m');
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_prefix_friends', 'o=\e[32m v=\e[33m noflag=\e[1m');
|
||||
|
||||
Irssi::settings_add_int('nicklist', 'nicklist_width',11);
|
||||
Irssi::settings_add_int('nicklist', 'nicklist_height',24);
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_fifo_path', Irssi::get_irssi_dir . '/nicklistfifo');
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_screen_split_windows', '');
|
||||
Irssi::settings_add_str('nicklist', 'nicklist_automode', '');
|
||||
|
||||
read_settings();
|
||||
if (uc(Irssi::settings_get_str('nicklist_automode')) eq 'SCREEN') {
|
||||
cmd_screen_start();
|
||||
} elsif (uc(Irssi::settings_get_str('nicklist_automode')) eq 'FIFO') {
|
||||
cmd_fifo_start();
|
||||
}
|
||||
425
irssi/scripts/tmux-nicklist-portable.pl
Normal file
425
irssi/scripts/tmux-nicklist-portable.pl
Normal file
@@ -0,0 +1,425 @@
|
||||
# based on the nicklist.pl script
|
||||
################################################################################
|
||||
# tmux_nicklist.pl
|
||||
# This script integrates tmux and irssi to display a list of nicks in a
|
||||
# vertical right pane with 20% width. Right now theres no configuration
|
||||
# or setup, simply initialize the script with irssi and by default you
|
||||
# will get the nicklist for every channel(customize by altering
|
||||
# the regex in /set nicklist_channel_re)
|
||||
#
|
||||
# /set nicklist_channel_re <regex>
|
||||
# * only show on channels matching this regular expression
|
||||
#
|
||||
# /set nicklist_max_users <num>
|
||||
# * only show when the channel has so many users or less (0 = always)
|
||||
#
|
||||
# /set nicklist_smallest_main <num>
|
||||
# * only show when main window is larger than this (0 = always)
|
||||
#
|
||||
# /set nicklist_pane_width <num>
|
||||
# * width of the nicklist pane
|
||||
#
|
||||
# /set nicklist_color <ON|OFF>
|
||||
# * colourise the nicks in the nicklist (required nickcolor script
|
||||
# with get_nick_color2 and debug_ansicolour functions)
|
||||
#
|
||||
# /set nicklist_gone_sort <ON|OFF>
|
||||
# * sort away people below
|
||||
#
|
||||
# It supports mouse scrolling and the following keys:
|
||||
# k/up arrow: up one line
|
||||
# j/down arrow: down one line
|
||||
# pageup: up 20 lines
|
||||
# pagedown: down 20 lines
|
||||
# gg: go to top
|
||||
# G: go to bottom
|
||||
#
|
||||
# For better integration, unrecognized sequences will be sent to irssi and
|
||||
# its pane will be focused.
|
||||
#
|
||||
# to toggle the nicklist if it is in the way you can make a key binding:
|
||||
# /bind meta-Z /script exec Irssi::Script::tmux_nicklist_portable::toggle_nicklist
|
||||
################################################################################
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use IO::Handle;
|
||||
use IO::Select;
|
||||
use POSIX;
|
||||
use File::Temp qw/ :mktemp /;
|
||||
use File::Basename;
|
||||
our $VERSION = '0.1.6'; # aea329934f6a48c
|
||||
our %IRSSI = (
|
||||
authors => 'Thiago de Arruda',
|
||||
contact => 'tpadilha84@gmail.com',
|
||||
name => 'tmux-nicklist',
|
||||
description => 'displays a list of nicks in a separate tmux pane',
|
||||
license => 'WTFPL',
|
||||
);
|
||||
|
||||
# "other" prefixes by danielg4 <daniel@gimpelevich.san-francisco.ca.us>
|
||||
|
||||
{ package Irssi::Nick }
|
||||
|
||||
if ($#ARGV == -1) {
|
||||
require Irssi;
|
||||
|
||||
my $enabled = 0;
|
||||
my $nicklist_toggle = 1;
|
||||
my $script_path = __FILE__;
|
||||
my $tmpdir;
|
||||
my $fifo_path;
|
||||
my $fifo;
|
||||
my $just_launched;
|
||||
my $resize_timer;
|
||||
|
||||
sub enable_nicklist {
|
||||
return if ($enabled);
|
||||
$tmpdir = mkdtemp Irssi::get_irssi_dir()."/nicklist-XXXXXXXX";
|
||||
$fifo_path = "$tmpdir/fifo";
|
||||
POSIX::mkfifo($fifo_path, 0600) or die "can't mkfifo $fifo_path: $!";
|
||||
my $cmd = "perl $script_path $fifo_path $ENV{TMUX_PANE}";
|
||||
my $width = Irssi::settings_get_int('nicklist_pane_width');
|
||||
system('tmux', 'split-window', '-dh', '-l', $width, '-t', $ENV{TMUX_PANE}, $cmd);
|
||||
open_fifo();
|
||||
Irssi::timeout_remove($just_launched) if defined $just_launched;
|
||||
$just_launched = Irssi::timeout_add_once(300, sub { $just_launched = undef; }, '');
|
||||
}
|
||||
|
||||
sub open_fifo {
|
||||
# The next system call will block until the other pane has opened the pipe
|
||||
# for reading, so synchronization is not an issue here.
|
||||
open $fifo, ">", $fifo_path or do {
|
||||
if ($! == 4) {
|
||||
Irssi::timeout_add_once(300, \&open_fifo, '');
|
||||
$enabled = -1 unless $enabled;
|
||||
return;
|
||||
}
|
||||
die "can't open $fifo_path: $!";
|
||||
};
|
||||
$fifo->autoflush(1);
|
||||
if ($enabled < -1) {
|
||||
$enabled = 1;
|
||||
disable_nicklist();
|
||||
} elsif ($enabled == -1) {
|
||||
$enabled = 1;
|
||||
reset_nicklist("enabled");
|
||||
} else {
|
||||
$enabled = 1;
|
||||
}
|
||||
}
|
||||
|
||||
sub disable_nicklist {
|
||||
return unless ($enabled);
|
||||
if ($enabled > 0) {
|
||||
print $fifo "EXIT\n";
|
||||
close $fifo;
|
||||
$fifo = undef;
|
||||
unlink $fifo_path;
|
||||
rmdir $tmpdir;
|
||||
}
|
||||
$enabled--;
|
||||
}
|
||||
|
||||
sub reset_nicklist {
|
||||
my $event = shift;
|
||||
my $active = Irssi::active_win();
|
||||
my $channel = $active->{active};
|
||||
return disable_nicklist unless $channel && ref $channel;
|
||||
if ($event =~ /^nick/) {
|
||||
# check if that nick event is for the current channel/nicklist
|
||||
my ($event_channel) = @_;
|
||||
return unless $channel->{_irssi} == $event_channel->{_irssi};
|
||||
}
|
||||
my ($colourer, $ansifier);
|
||||
if (Irssi::settings_get_bool('nicklist_color')) {
|
||||
for my $script (sort map { my $z = $_; $z =~ s/::$//; $z } grep { /^nickcolor|nm/ } keys %Irssi::Script::) {
|
||||
if ($colourer = "Irssi::Script::$script"->can('get_nick_color2')) {
|
||||
$ansifier = "Irssi::Script::$script"->can('debug_ansicolour');
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
my $channel_pattern = Irssi::settings_get_str('nicklist_channel_re');
|
||||
{ local $@;
|
||||
$channel_pattern = eval { qr/$channel_pattern/ };
|
||||
$channel_pattern = qr/(?!)/ if $@;
|
||||
}
|
||||
my $smallest_main = Irssi::settings_get_int('nicklist_smallest_main');
|
||||
if (!$nicklist_toggle
|
||||
|| !$channel || !ref($channel)
|
||||
|| !$channel->isa('Irssi::Channel')
|
||||
|| !$channel->{'names_got'}
|
||||
|| $channel->{'name'} !~ $channel_pattern
|
||||
|| ($smallest_main && $channel->window->{width} < $smallest_main)) {
|
||||
disable_nicklist;
|
||||
} else {
|
||||
my %colour;
|
||||
my @nicks = $channel->nicks();
|
||||
my $max_nicks = Irssi::settings_get_int('nicklist_max_users');
|
||||
if ($max_nicks && @nicks > $max_nicks) {
|
||||
disable_nicklist;
|
||||
} else {
|
||||
enable_nicklist;
|
||||
return unless $enabled > 0;
|
||||
foreach my $nick (sort { $a->{_irssi} <=> $b->{_irssi} } @nicks) {
|
||||
$colour{$nick->{nick}} = ($ansifier && $colourer) ? $ansifier->($colourer->($active->{active}{server}{tag}, $channel->{name}, $nick->{nick}, 0)) : '';
|
||||
}
|
||||
print($fifo "BEGIN\n");
|
||||
my $gone_sort = Irssi::settings_get_bool('nicklist_gone_sort');
|
||||
my $prefer_real;
|
||||
if (exists $Irssi::Script::{'realnames::'}) {
|
||||
my $code = "Irssi::Script::realnames"->can('use_realnames');
|
||||
$prefer_real = $code && $code->($channel);
|
||||
}
|
||||
my $_real = sub {
|
||||
my $nick = shift;
|
||||
$prefer_real && length $nick->{'realname'} ? $nick->{'realname'} : $nick->{'nick'}
|
||||
};
|
||||
foreach my $nick (sort {($a->{'op'}?'1':$a->{'halfop'}?'2':$a->{'voice'}?'3':$a->{'other'}>32?'0':'4').($gone_sort?($a->{'gone'}?1:0):'').lc($_real->($a))
|
||||
cmp ($b->{'op'}?'1':$b->{'halfop'}?'2':$b->{'voice'}?'3':$b->{'other'}>32?'0':'4').($gone_sort?($b->{'gone'}?1:0):'').lc($_real->($b))} @nicks) {
|
||||
my $colour = $colour{$nick->{nick}} || "\e[39m";
|
||||
$colour = "\e[37m" if $nick->{'gone'};
|
||||
print($fifo "NICK");
|
||||
if ($nick->{'op'}) {
|
||||
print($fifo "\e[32m\@$colour".$_real->($nick)."\e[39m");
|
||||
} elsif ($nick->{'halfop'}) {
|
||||
print($fifo "\e[34m%$colour".$_real->($nick)."\e[39m");
|
||||
} elsif ($nick->{'voice'}) {
|
||||
print($fifo "\e[33m+$colour".$_real->($nick)."\e[39m");
|
||||
} elsif ($nick->{'other'}>32) {
|
||||
print($fifo "\e[31m".(chr $nick->{'other'})."$colour".$_real->($nick)."\e[39m");
|
||||
} else {
|
||||
print($fifo " $colour".$_real->($nick)."\e[39m");
|
||||
}
|
||||
print($fifo "\n");
|
||||
}
|
||||
print($fifo "END\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub toggle_nicklist {
|
||||
if ($enabled) {
|
||||
$nicklist_toggle = undef
|
||||
} else {
|
||||
$nicklist_toggle = 1;
|
||||
}
|
||||
reset_nicklist("toggle");
|
||||
}
|
||||
|
||||
sub switch_channel {
|
||||
print $fifo "SWITCH_CHANNEL\n" if $fifo;
|
||||
&reset_nicklist;
|
||||
}
|
||||
|
||||
sub resized_timed {
|
||||
Irssi::timeout_remove($resize_timer) if defined $resize_timer;
|
||||
return if defined $just_launched;
|
||||
$resize_timer = Irssi::timeout_add_once(1100, \&resized, '');
|
||||
#resized();
|
||||
}
|
||||
sub resized {
|
||||
$resize_timer = undef;
|
||||
return if defined $just_launched;
|
||||
return unless $enabled >= 0;
|
||||
disable_nicklist;
|
||||
Irssi::timeout_add_once(200, sub{reset_nicklist("terminal resized")}, '');
|
||||
}
|
||||
sub UNLOAD {
|
||||
disable_nicklist;
|
||||
}
|
||||
|
||||
Irssi::settings_add_str('tmux_nicklist', 'nicklist_channel_re', '.*');
|
||||
Irssi::settings_add_int('tmux_nicklist', 'nicklist_max_users', 0);
|
||||
Irssi::settings_add_int('tmux_nicklist', 'nicklist_smallest_main', 0);
|
||||
Irssi::settings_add_int('tmux_nicklist', 'nicklist_pane_width', 13);
|
||||
Irssi::settings_add_bool('tmux_nicklist', 'nicklist_color', 1);
|
||||
Irssi::settings_add_bool('tmux_nicklist', 'nicklist_gone_sort', 0);
|
||||
Irssi::signal_add_last('window item changed', sub{switch_channel("window item changed",@_)});
|
||||
Irssi::signal_add_last('window changed', sub{switch_channel("window changed",@_)});
|
||||
Irssi::signal_add_last('channel joined', sub{switch_channel("channel joined",@_)});
|
||||
Irssi::signal_add('nicklist new', sub{reset_nicklist("nicklist new",@_)});
|
||||
Irssi::signal_add('nicklist remove', sub{reset_nicklist("nicklist remove",@_)});
|
||||
Irssi::signal_add('nicklist changed', sub{reset_nicklist("nicklist changed",@_)});
|
||||
Irssi::signal_add_first('nick mode changed', sub{reset_nicklist("nick mode changed",@_)});
|
||||
Irssi::signal_add('gui exit', \&disable_nicklist);
|
||||
Irssi::signal_add_last('terminal resized', \&resized_timed);
|
||||
|
||||
} else {
|
||||
my $fifo_path = $ARGV[0];
|
||||
my $irssi_pane = $ARGV[1];
|
||||
# array to store the current channel nicknames
|
||||
my @nicknames = ();
|
||||
|
||||
# helper functions for manipulating the terminal
|
||||
# escape sequences taken from
|
||||
# http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html
|
||||
sub enable_mouse { print "\e[?1000h"; }
|
||||
# recognized sequences
|
||||
my $MOUSE_SCROLL_DOWN="\e[Ma";
|
||||
my $MOUSE_SCROLL_UP="\e[M`";
|
||||
my $ARROW_DOWN="\e[B";
|
||||
my $ARROW_UP="\e[A";
|
||||
my $UP="k";
|
||||
my $DOWN="j";
|
||||
my $PAGE_DOWN="\e[6~";
|
||||
my $PAGE_UP="\e[5~";
|
||||
my $GO_TOP="gg";
|
||||
my $GO_BOTTOM="G";
|
||||
|
||||
my $current_line = 0;
|
||||
my $sequence = '';
|
||||
my ($rows, $cols);
|
||||
|
||||
sub term_size {
|
||||
split ' ', `stty size`;
|
||||
}
|
||||
|
||||
sub redraw {
|
||||
my $last_nick_idx = @nicknames;
|
||||
my $last_idx = $current_line + $rows;
|
||||
# normalize last visible index
|
||||
if ($last_idx > ($last_nick_idx)) {
|
||||
$last_idx = $last_nick_idx;
|
||||
}
|
||||
# redraw visible nicks
|
||||
for my $i (reverse 1..$rows) {
|
||||
print "\e[$i;1H\e[K";
|
||||
my $idx = $current_line + $i - 1;
|
||||
if ($idx < $last_idx) {
|
||||
my $z = 0; my $col = $cols;
|
||||
for (split /(\e\[(?:\d|;|:|\?|\s)*.)/, $nicknames[$idx]) {
|
||||
if ($z ^= 1) {
|
||||
print +(substr $_, 0, $col) if $col > 0;
|
||||
$col -= length;
|
||||
} else {
|
||||
print
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub move_down {
|
||||
$sequence = '';
|
||||
my $count = int $_[0];
|
||||
my $nickcount = $#nicknames;
|
||||
return if ($nickcount <= $rows);
|
||||
if ($count == -1) {
|
||||
$current_line = $nickcount - $rows - 1;
|
||||
redraw;
|
||||
return;
|
||||
}
|
||||
my $visible = $nickcount - $current_line - $count;
|
||||
if ($visible > $rows) {
|
||||
$current_line += $count;
|
||||
redraw;
|
||||
} elsif (($visible + $count) > $rows) {
|
||||
# scroll the maximum we can
|
||||
$current_line = $nickcount - $rows - 1;
|
||||
redraw;
|
||||
}
|
||||
}
|
||||
|
||||
sub move_up {
|
||||
$sequence = '';
|
||||
my $count = int $_[0];
|
||||
if ($count == -1) {
|
||||
$current_line = 0;
|
||||
redraw;
|
||||
return;
|
||||
}
|
||||
return if ($current_line == 0);
|
||||
$count = 1 if $count == 0;
|
||||
$current_line -= $count;
|
||||
$current_line = 0 if $current_line < 0;
|
||||
redraw;
|
||||
}
|
||||
|
||||
$SIG{INT} = 'IGNORE';
|
||||
|
||||
STDOUT->autoflush(1);
|
||||
# setup terminal so we can listen for individual key presses without echo
|
||||
`stty -icanon -echo`;
|
||||
|
||||
# open named pipe and setup the 'select' wrapper object for listening on both
|
||||
# fds(fifo and sdtin)
|
||||
open my $fifo, "<", $fifo_path or die "can't open $fifo_path: $!";
|
||||
my $select = IO::Select->new();
|
||||
my @ready;
|
||||
$select->add($fifo);
|
||||
$select->add(\*STDIN);
|
||||
|
||||
enable_mouse;
|
||||
system('tput', 'smcup');
|
||||
print "\e[?7l"; #system('tput', 'rmam');
|
||||
system('tput', 'civis');
|
||||
MAIN: {
|
||||
while (@ready = $select->can_read) {
|
||||
foreach my $fd (@ready) {
|
||||
($rows, $cols) = term_size;
|
||||
if ($fd == $fifo) {
|
||||
while (<$fifo>) {
|
||||
my $line = $_;
|
||||
if ($line =~ /^BEGIN/) {
|
||||
@nicknames = ();
|
||||
} elsif ($line =~ /^SWITCH_CHANNEL/) {
|
||||
$current_line = 0;
|
||||
} elsif ($line =~ /^NICK(.+)$/) {
|
||||
push @nicknames, $1;
|
||||
} elsif ($line =~ /^END$/) {
|
||||
redraw;
|
||||
last;
|
||||
} elsif ($line =~ /^EXIT$/) {
|
||||
last MAIN;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
my $key = '';
|
||||
sysread(STDIN, $key, 1);
|
||||
$sequence .= $key;
|
||||
if ($MOUSE_SCROLL_DOWN =~ /^\Q$sequence\E/) {
|
||||
if ($MOUSE_SCROLL_DOWN eq $sequence) {
|
||||
move_down 3;
|
||||
# mouse scroll has two more bytes that I dont use here
|
||||
# so consume them now to avoid sending unwanted bytes to
|
||||
# irssi
|
||||
sysread(STDIN, $key, 2);
|
||||
}
|
||||
} elsif ($MOUSE_SCROLL_UP =~ /^\Q$sequence\E/) {
|
||||
if ($MOUSE_SCROLL_UP eq $sequence) {
|
||||
move_up 3;
|
||||
sysread(STDIN, $key, 2);
|
||||
}
|
||||
} elsif ($ARROW_DOWN =~ /^\Q$sequence\E/) {
|
||||
move_down 1 if ($ARROW_DOWN eq $sequence);
|
||||
} elsif ($ARROW_UP =~ /^\Q$sequence\E/) {
|
||||
move_up 1 if ($ARROW_UP eq $sequence);
|
||||
} elsif ($DOWN =~ /^\Q$sequence\E/) {
|
||||
move_down 1 if ($DOWN eq $sequence);
|
||||
} elsif ($UP =~ /^\Q$sequence\E/) {
|
||||
move_up 1 if ($UP eq $sequence);
|
||||
} elsif ($PAGE_DOWN =~ /^\Q$sequence\E/) {
|
||||
move_down $rows/2 if ($PAGE_DOWN eq $sequence);
|
||||
} elsif ($PAGE_UP =~ /^\Q$sequence\E/) {
|
||||
move_up $rows/2 if ($PAGE_UP eq $sequence);
|
||||
} elsif ($GO_BOTTOM =~ /^\Q$sequence\E/) {
|
||||
move_down -1 if ($GO_BOTTOM eq $sequence);
|
||||
} elsif ($GO_TOP =~ /^\Q$sequence\E/) {
|
||||
move_up -1 if ($GO_TOP eq $sequence);
|
||||
} else {
|
||||
# Unrecognized sequences will be send to irssi and its pane
|
||||
# will be focused
|
||||
system('tmux', 'send-keys', '-t', $irssi_pane, $sequence);
|
||||
system('tmux', 'select-pane', '-t', $irssi_pane);
|
||||
$sequence = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close $fifo;
|
||||
|
||||
}
|
||||
304
irssi/scripts/tmux-nicklist.pl
Normal file
304
irssi/scripts/tmux-nicklist.pl
Normal file
@@ -0,0 +1,304 @@
|
||||
# based on the nicklist.pl script
|
||||
################################################################################
|
||||
# tmux_nicklist.pl
|
||||
# This script integrates tmux and irssi to display a list of nicks in a
|
||||
# vertical right pane with 20% width. Right now theres no configuration
|
||||
# or setup, simply initialize the script with irssi and by default you
|
||||
# will get the nicklist for every channel(customize by altering
|
||||
# the regex in '$channel_pattern'.
|
||||
#
|
||||
# It supports mouse scrolling and the following keys:
|
||||
# k/up arrow: up one line
|
||||
# j/down arrow: down one line
|
||||
# pageup: up 20 lines
|
||||
# pagedown: down 20 lines
|
||||
# gg: go to top
|
||||
# G: go to bottom
|
||||
#
|
||||
# For better integration, unrecognized sequences will be sent to irssi and
|
||||
# its pane will be focused.
|
||||
################################################################################
|
||||
|
||||
use strict;
|
||||
use IO::Handle;
|
||||
use IO::Select;
|
||||
use POSIX;
|
||||
use File::Temp qw/ :mktemp /;
|
||||
use File::Basename;
|
||||
use vars qw($VERSION %IRSSI);
|
||||
$VERSION = '0.0.0';
|
||||
%IRSSI = (
|
||||
authors => 'Thiago de Arruda',
|
||||
contact => 'tpadilha84@gmail.com',
|
||||
name => 'tmux-nicklist',
|
||||
description => 'displays a list of nicks in a separate tmux pane',
|
||||
license => 'WTFPL',
|
||||
);
|
||||
|
||||
if ($#ARGV == -1) {
|
||||
require Irssi;
|
||||
|
||||
my $enabled = 0;
|
||||
my $script_path = __FILE__;
|
||||
my $tmpdir;
|
||||
my $fifo_path;
|
||||
# my $channel_pattern = '^&bitlbee$';
|
||||
my $channel_pattern = '^.+$';
|
||||
|
||||
sub enable_nicklist {
|
||||
return if ($enabled);
|
||||
$tmpdir = mkdtemp "/tmp/nicklist-XXXXXXXX";
|
||||
$fifo_path = "$tmpdir/fifo";
|
||||
POSIX::mkfifo($fifo_path, 0600) or die "can\'t mkfifo $fifo_path: $!";
|
||||
my $cmd = "perl $script_path $fifo_path $ENV{'TMUX_PANE'}";
|
||||
system('tmux', 'split-window', '-dh', '-p', '20', $cmd);
|
||||
# The next system call will block until the other pane has opened the pipe
|
||||
# for reading, so synchronization is not an issue here.
|
||||
open (FIFO, "> $fifo_path") or die "can't open $fifo_path: $!";
|
||||
FIFO->autoflush(1);
|
||||
$enabled = 1;
|
||||
}
|
||||
|
||||
sub disable_nicklist {
|
||||
return unless ($enabled);
|
||||
print(FIFO "EXIT\n");
|
||||
close FIFO;
|
||||
unlink $fifo_path;
|
||||
rmdir $tmpdir;
|
||||
$enabled = 0;
|
||||
}
|
||||
|
||||
sub reset_nicklist {
|
||||
my $active = Irssi::active_win();
|
||||
my $channel = $active->{active};
|
||||
|
||||
if ((!$channel ||
|
||||
(ref($channel) ne 'Irssi::Irc::Channel' && ref($channel) ne
|
||||
'Irssi::Silc::Channel') || $channel->{'type'} ne 'CHANNEL' ||
|
||||
($channel->{chat_type} ne 'SILC' && !$channel->{'names_got'})) ||
|
||||
($channel->{'name'} !~ /$channel_pattern/ )) {
|
||||
disable_nicklist;
|
||||
} else {
|
||||
enable_nicklist;
|
||||
print(FIFO "BEGIN\n");
|
||||
foreach my $nick (sort {(($a->{'op'}?'1':$a->{'halfop'}?'2':$a->{'voice'}?'3':'4').lc($a->{'nick'}))
|
||||
cmp (($b->{'op'}?'1':$b->{'halfop'}?'2':$b->{'voice'}?'3':'4').lc($b->{'nick'}))} $channel->nicks()) {
|
||||
print(FIFO "NICK");
|
||||
if ($nick->{'op'}) {
|
||||
print(FIFO "\e[32m\@$nick->{'nick'}\e[39m");
|
||||
} elsif ($nick->{'halfop'}) {
|
||||
print(FIFO "\e[34m%$nick->{'nick'}\e[39m");
|
||||
} elsif ($nick->{'voice'}) {
|
||||
print(FIFO "\e[33m+$nick->{'nick'}\e[39m");
|
||||
} else {
|
||||
print(FIFO " $nick->{'nick'}");
|
||||
}
|
||||
print(FIFO "\n");
|
||||
}
|
||||
print(FIFO "END\n");
|
||||
}
|
||||
}
|
||||
|
||||
sub switch_channel {
|
||||
print(FIFO "SWITCH_CHANNEL\n");
|
||||
reset_nicklist;
|
||||
}
|
||||
|
||||
Irssi::signal_add_last('window item changed', \&switch_channel);
|
||||
Irssi::signal_add_last('window changed', \&switch_channel);
|
||||
Irssi::signal_add_last('channel wholist', \&reset_nicklist);
|
||||
# first, to be before ignores
|
||||
Irssi::signal_add_first('message join', \&reset_nicklist);
|
||||
Irssi::signal_add_first('message part', \&reset_nicklist);
|
||||
Irssi::signal_add_first('message kick', \&reset_nicklist);
|
||||
Irssi::signal_add_first('message quit', \&reset_nicklist);
|
||||
Irssi::signal_add_first('message nick', \&reset_nicklist);
|
||||
Irssi::signal_add_first('message own_nick', \&reset_nicklist);
|
||||
Irssi::signal_add_first('nick mode changed', \&reset_nicklist);
|
||||
Irssi::signal_add('gui exit', \&disable_nicklist);
|
||||
|
||||
} else {
|
||||
require 'sys/ioctl.ph';
|
||||
# open STDERR, '>', "$ENV{'HOME'}/.nickbar-errors.log";
|
||||
my $fifo_path = $ARGV[0];
|
||||
my $irssi_pane = $ARGV[1];
|
||||
# array to store the current channel nicknames
|
||||
my @nicknames = ();
|
||||
|
||||
# helper functions for manipulating the terminal
|
||||
# escape sequences taken from
|
||||
# http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html
|
||||
sub clear_screen { print "\e[2J"; }
|
||||
sub save_cursor { print "\e[s"; }
|
||||
sub restore_cursor { print "\e[u"; }
|
||||
sub enable_mouse { print "\e[?1000h"; }
|
||||
# recognized sequences
|
||||
my $MOUSE_SCROLL_DOWN="\e[Ma";
|
||||
my $MOUSE_SCROLL_UP="\e[M`";
|
||||
my $ARROW_DOWN="\e[B";
|
||||
my $ARROW_UP="\e[A";
|
||||
my $UP="k";
|
||||
my $DOWN="j";
|
||||
my $PAGE_DOWN="\e[6~";
|
||||
my $PAGE_UP="\e[5~";
|
||||
my $GO_TOP="gg";
|
||||
my $GO_BOTTOM="G";
|
||||
|
||||
my $current_line = 0;
|
||||
my $sequence = '';
|
||||
|
||||
sub term_row_count {
|
||||
# from http://stackoverflow.com/questions/4286158/how-do-i-get-width-and-height-of-my-terminal-with-ioctl
|
||||
my $terminal_size;
|
||||
ioctl(STDOUT, TIOCGWINSZ() , $terminal_size);
|
||||
my ($rows, $cols, $xpix, $ypix) = unpack 'S4', $terminal_size;
|
||||
return $rows;
|
||||
}
|
||||
|
||||
sub redraw {
|
||||
my $rows = term_row_count;
|
||||
my $last_nick_idx = $#nicknames;
|
||||
my $last_idx = $current_line + $rows;
|
||||
# normalize last visible index
|
||||
if ($last_idx > ($last_nick_idx)) {
|
||||
$last_idx = $last_nick_idx;
|
||||
}
|
||||
# redraw visible nicks
|
||||
restore_cursor;
|
||||
clear_screen;
|
||||
for (my $idx = $current_line; $idx <= $last_idx; $idx++) {
|
||||
print "$nicknames[$idx]\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub move_down {
|
||||
$sequence = '';
|
||||
my $count = $_[0];
|
||||
my $nickcount = $#nicknames;
|
||||
my $rows = term_row_count;
|
||||
return if ($nickcount <= $rows);
|
||||
if ($count == -1) {
|
||||
$current_line = $nickcount - $rows - 1;
|
||||
redraw;
|
||||
return;
|
||||
}
|
||||
my $visible = $nickcount - $current_line - $count;
|
||||
if ($visible > $rows) {
|
||||
$current_line += $count;
|
||||
redraw;
|
||||
} elsif (($visible + $count) > $rows) {
|
||||
# scroll the maximum we can
|
||||
$current_line = $nickcount - $rows - 1;
|
||||
redraw;
|
||||
}
|
||||
}
|
||||
|
||||
sub move_up {
|
||||
$sequence = '';
|
||||
my $count = $_[0];
|
||||
if ($count == -1) {
|
||||
$current_line = 0;
|
||||
redraw;
|
||||
return;
|
||||
}
|
||||
return if ($current_line == 0);
|
||||
if (($current_line - $count) >= 0) {
|
||||
$current_line -= $count;
|
||||
redraw;
|
||||
}
|
||||
}
|
||||
|
||||
$SIG{INT} = 'IGNORE';
|
||||
|
||||
# setup terminal so we can listen for individual key presses without echo
|
||||
my ($term, $oterm, $echo, $noecho, $fd_stdin);
|
||||
$fd_stdin = fileno(STDIN);
|
||||
$term = POSIX::Termios->new();
|
||||
$term->getattr($fd_stdin);
|
||||
$oterm = $term->getlflag();
|
||||
$echo = ECHO | ECHOK | ICANON;
|
||||
$noecho = $oterm & ~$echo;
|
||||
$term->setlflag($noecho);
|
||||
$term->setcc(VTIME, 1);
|
||||
$term->setattr($fd_stdin, TCSANOW);
|
||||
|
||||
# open named pipe and setup the 'select' wrapper object for listening on both
|
||||
# fds(fifo and sdtin)
|
||||
open (FIFO, "< $fifo_path") or die "can't open $fifo_path: $!";
|
||||
my $fifo = \*FIFO;
|
||||
my $stdin = \*STDIN;
|
||||
my $select = IO::Select->new();
|
||||
my @ready;
|
||||
$select->add($fifo);
|
||||
$select->add($stdin);
|
||||
|
||||
save_cursor;
|
||||
enable_mouse;
|
||||
system('tput', 'civis');
|
||||
MAIN: {
|
||||
while (@ready = $select->can_read) {
|
||||
foreach my $fd (@ready) {
|
||||
if ($fd == $fifo) {
|
||||
while (<$fifo>) {
|
||||
my $line = $_;
|
||||
if ($line =~ /^BEGIN/) {
|
||||
@nicknames = ();
|
||||
} elsif ($line =~ /^SWITCH_CHANNEL/) {
|
||||
$current_line = 0;
|
||||
} elsif ($line =~ /^NICK(.+)$/) {
|
||||
push @nicknames, $1;
|
||||
} elsif ($line =~ /^END$/) {
|
||||
redraw;
|
||||
last;
|
||||
} elsif ($line =~ /^EXIT$/) {
|
||||
last MAIN;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
my $key = '';
|
||||
sysread(STDIN, $key, 1);
|
||||
$sequence .= $key;
|
||||
if ($MOUSE_SCROLL_DOWN =~ /^\Q$sequence\E/) {
|
||||
if ($MOUSE_SCROLL_DOWN eq $sequence) {
|
||||
move_down 3;
|
||||
# mouse scroll has two more bytes that I dont use here
|
||||
# so consume them now to avoid sending unwanted bytes to
|
||||
# irssi
|
||||
sysread(STDIN, $key, 2);
|
||||
}
|
||||
} elsif ($MOUSE_SCROLL_UP =~ /^\Q$sequence\E/) {
|
||||
if ($MOUSE_SCROLL_UP eq $sequence) {
|
||||
move_up 3;
|
||||
sysread(STDIN, $key, 2);
|
||||
}
|
||||
} elsif ($ARROW_DOWN =~ /^\Q$sequence\E/) {
|
||||
move_down 1 if ($ARROW_DOWN eq $sequence);
|
||||
} elsif ($ARROW_UP =~ /^\Q$sequence\E/) {
|
||||
move_up 1 if ($ARROW_UP eq $sequence);
|
||||
} elsif ($DOWN =~ /^\Q$sequence\E/) {
|
||||
move_down 1 if ($DOWN eq $sequence);
|
||||
} elsif ($UP =~ /^\Q$sequence\E/) {
|
||||
move_up 1 if ($UP eq $sequence);
|
||||
} elsif ($PAGE_DOWN =~ /^\Q$sequence\E/) {
|
||||
move_down 20 if ($PAGE_DOWN eq $sequence);
|
||||
} elsif ($PAGE_UP =~ /^\Q$sequence\E/) {
|
||||
move_up 20 if ($PAGE_UP eq $sequence);
|
||||
} elsif ($GO_BOTTOM =~ /^\Q$sequence\E/) {
|
||||
move_down -1 if ($GO_BOTTOM eq $sequence);
|
||||
} elsif ($GO_TOP =~ /^\Q$sequence\E/) {
|
||||
move_up -1 if ($GO_TOP eq $sequence);
|
||||
} else {
|
||||
# Unrecognized sequences will be send to irssi and its pane
|
||||
# will be focused
|
||||
system('tmux', 'send-keys', '-l', '-t', $irssi_pane, $sequence);
|
||||
system('tmux', 'select-pane', '-t', $irssi_pane);
|
||||
$sequence = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close FIFO;
|
||||
|
||||
}
|
||||
189
irssi/scripts/trackbar.pl
Executable file
189
irssi/scripts/trackbar.pl
Executable file
@@ -0,0 +1,189 @@
|
||||
# trackbar.pl
|
||||
#
|
||||
# This little script will do just one thing: it will draw a line each time you
|
||||
# switch away from a window. This way, you always know just upto where you've
|
||||
# been reading that window :) It also removes the previous drawn line, so you
|
||||
# don't see double lines.
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# The script works right out of the box, but if you want you can change
|
||||
# the working by /set'ing the following variables:
|
||||
#
|
||||
# trackbar_string The characters to repeat to draw the bar
|
||||
# trackbar_style The style for the bar, %r is red for example
|
||||
# See formats.txt that came with irssi
|
||||
#
|
||||
# /mark is a command that will redraw the line at the bottom. However! This
|
||||
# requires irssi version after 20021228. otherwise you'll get the error
|
||||
# redraw: unknown command, and your screen is all goofed up :)
|
||||
#
|
||||
# /upgrade & buf.pl notice: This version tries to remove the trackbars before
|
||||
# the upgrade is done, so buf.pl does not restore them, as they are not removeable
|
||||
# afterwards by trackbar. Unfortiounatly, to make this work, trackbar and buf.pl
|
||||
# need to be loaded in a specific order. Please experiment to see which order works
|
||||
# for you (strangely, it differs from configuration to configuration, something I will
|
||||
# try to fix in a next version)
|
||||
#
|
||||
# Authors:
|
||||
# - Main maintainer & author: Peter 'kinlo' Leurs
|
||||
# - Many thanks to Timo 'cras' Sirainen for placing me on my way
|
||||
# - on-upgrade-remove-line patch by Uwe Dudenhoeffer
|
||||
#
|
||||
# Version history:
|
||||
# 1.4: - Changed our's by my's so the irssi script header is valid
|
||||
# - Removed utf-8 support. In theory, the script should work w/o any
|
||||
# problems for utf-8, just set trackbar_string to a valid utf-8 character
|
||||
# and everything *should* work. However, this script is being plagued by
|
||||
# irssi internal bugs. The function Irssi::settings_get_str does NOT handle
|
||||
# unicode strings properly, hence you will notice problems when setting the bar
|
||||
# to a unicode char. For changing your bar to utf-8 symbols, read the line sub.
|
||||
# 1.3: - Upgrade now removes the trackbars.
|
||||
# - Some code cleanups, other defaults
|
||||
# - /mark sets the line to the bottom
|
||||
# 1.2: - Support for utf-8
|
||||
# - How the bar looks can now be configured with trackbar_string
|
||||
# and trackbar_style
|
||||
# 1.1: - Fixed bug when closing window
|
||||
# 1.0: - Initial release
|
||||
#
|
||||
#
|
||||
# Call for help!
|
||||
#
|
||||
# There is a trackbar version 2.0 that properly handles resizes and immediate config change
|
||||
# activation. However, there is/are some bug(s) in irssi's main buffer/window code that causes
|
||||
# irssi to 'forget' lines, which is ofcourse completly unaccepteable. I haven't found the time
|
||||
# nor do I know the irssi's internals enough to find and fix this bug, if you want to help, please
|
||||
# contact me, I'll give you a copy of the 2.0 version that will immediatly show you the problems.
|
||||
#
|
||||
# Known bugs:
|
||||
# - if you /clear a window, it will be uncleared when returning to the window
|
||||
# - UTF-8 characters in the trackbar_string doesnt work. This is an irssi bug.
|
||||
# - if you resize your irssi (in xterm or so) the bar is not resized
|
||||
# - changing the trackbar style is only visible after returning to a window
|
||||
# however, changing style/resize takes in effect after you left the window.
|
||||
#
|
||||
# Whishlist/todo:
|
||||
# - instead of drawing a line, just invert timestamp or something,
|
||||
# to save a line (but I don't think this is possible with current irssi)
|
||||
# - some pageup keybinding possibility, to scroll up upto the trackbar
|
||||
# - <@coekie> kinlo: if i switch to another window, in another split window, i
|
||||
# want the trackbar to go down in the previouswindow in that splitwindow :)
|
||||
# - < bob_2> anyway to clear the line once the window is read?
|
||||
# - < elho> kinlo: wishlist item: a string that gets prepended to the repeating pattern
|
||||
# - < elho> an option to still have the timestamp in front of the bar
|
||||
# - < elho> oh and an option to not draw it in the status window :P
|
||||
#
|
||||
# BTW: when you have feature requests, mailing a patch that works is the fastest way
|
||||
# to get it added :p
|
||||
|
||||
use strict;
|
||||
use 5.6.1;
|
||||
use Irssi;
|
||||
use Irssi::TextUI;
|
||||
|
||||
my $VERSION = "1.4";
|
||||
|
||||
my %IRSSI = (
|
||||
authors => "Peter 'kinlo' Leurs",
|
||||
contact => "peter\@pfoe.be",
|
||||
name => "trackbar",
|
||||
description => "Shows a bar where you've last read a window",
|
||||
license => "GPLv2",
|
||||
url => "http://www.pfoe.be/~peter/trackbar/",
|
||||
changed => "Thu Feb 20 16:18:08 2003",
|
||||
);
|
||||
|
||||
my %config;
|
||||
|
||||
Irssi::settings_add_str('trackbar', 'trackbar_string' => '_');
|
||||
$config{'trackbar_string'} = Irssi::settings_get_str('trackbar_string');
|
||||
|
||||
Irssi::settings_add_str('trackbar', 'trackbar_style' => '%K');
|
||||
$config{'trackbar_style'} = Irssi::settings_get_str('trackbar_style');
|
||||
|
||||
Irssi::signal_add(
|
||||
'setup changed' => sub {
|
||||
$config{'trackbar_string'} = Irssi::settings_get_str('trackbar_string');
|
||||
$config{'trackbar_style'} = Irssi::settings_get_str('trackbar_style');
|
||||
if ($config{'trackbar_style'} =~ /(?<!%)[^%]|%%|%$/) {
|
||||
Irssi::print(
|
||||
"trackbar: %RWarning!%n 'trackbar_style' seems to contain "
|
||||
. "printable characters. Only use format codes (read "
|
||||
. "formats.txt).", MSGLEVEL_CLIENTERROR);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
Irssi::signal_add(
|
||||
'window changed' => sub {
|
||||
my (undef, $oldwindow) = @_;
|
||||
|
||||
if ($oldwindow) {
|
||||
my $line = $oldwindow->view()->get_bookmark('trackbar');
|
||||
$oldwindow->view()->remove_line($line) if defined $line;
|
||||
$oldwindow->print(line($oldwindow->{'width'}), MSGLEVEL_NEVER);
|
||||
$oldwindow->view()->set_bookmark_bottom('trackbar');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
sub line {
|
||||
my $width = shift;
|
||||
my $string = $config{'trackbar_string'};
|
||||
$string = '-' unless defined $string;
|
||||
|
||||
# There is a bug in irssi's utf-8 handling on config file settings, as you
|
||||
# can reproduce/see yourself by the following code sniplet:
|
||||
#
|
||||
# my $quake = pack 'U*', 8364; # EUR symbol
|
||||
# Irssi::settings_add_str 'temp', 'temp_foo' => $quake;
|
||||
# Irssi::print length $quake;
|
||||
# # prints 1
|
||||
# Irssi::print length Irssi::settings_get_str 'temp_foo';
|
||||
# # prints 3
|
||||
#
|
||||
#
|
||||
# Trackbar used to have a workaround, but on recent versions of perl/irssi
|
||||
# it does no longer work. Therefore, if you want your trackbar to contain
|
||||
# unicode characters, uncomment the line below for a nice full line, or set
|
||||
# the string to whatever char you want.
|
||||
|
||||
# $string = pack('U*', 0x2500);
|
||||
|
||||
|
||||
my $length = length $string;
|
||||
|
||||
if ($length == 0) {
|
||||
$string = '-';
|
||||
$length = 1;
|
||||
}
|
||||
|
||||
my $times = $width / $length;
|
||||
$times = int(1 + $times) if $times != int($times);
|
||||
$string =~ s/%/%%/g;
|
||||
return $config{'trackbar_style'} . substr($string x $times, 0, $width);
|
||||
}
|
||||
|
||||
# Remove trackbars on upgrade - but this doesn't really work if the scripts are not loaded in the correct order... watch out!
|
||||
|
||||
Irssi::signal_add_first( 'session save' => sub {
|
||||
for my $window (Irssi::windows) {
|
||||
next unless defined $window;
|
||||
my $line = $window->view()->get_bookmark('trackbar');
|
||||
$window->view()->remove_line($line) if defined $line;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
sub cmd_mark {
|
||||
my $window = Irssi::active_win();
|
||||
# return unless defined $window;
|
||||
my $line = $window->view()->get_bookmark('trackbar');
|
||||
$window->view()->remove_line($line) if defined $line;
|
||||
$window->print(line($window->{'width'}), MSGLEVEL_NEVER);
|
||||
$window->view()->set_bookmark_bottom('trackbar');
|
||||
Irssi::command("redraw");
|
||||
}
|
||||
|
||||
Irssi::command_bind('mark', 'cmd_mark');
|
||||
500
irssi/scripts/trackbar22.pl
Normal file
500
irssi/scripts/trackbar22.pl
Normal file
@@ -0,0 +1,500 @@
|
||||
# trackbar.pl
|
||||
#
|
||||
# This little script will do just one thing: it will draw a line each time you
|
||||
# switch away from a window. This way, you always know just upto where you've
|
||||
# been reading that window :) It also removes the previous drawn line, so you
|
||||
# don't see double lines.
|
||||
#
|
||||
# redraw trackbar only works on irssi 0.8.17 or higher.
|
||||
#
|
||||
#
|
||||
# Usage:
|
||||
#
|
||||
# The script works right out of the box, but if you want you can change
|
||||
# the working by /set'ing the following variables:
|
||||
#
|
||||
# Setting: trackbar_style
|
||||
# Description: This setting will be the color of your trackbar line.
|
||||
# By default the value will be '%K', only Irssi color
|
||||
# formats are allowed. If you don't know the color formats
|
||||
# by heart, you can take a look at the formats documentation.
|
||||
# You will find the proper docs on http://www.irssi.org/docs.
|
||||
#
|
||||
# Setting: trackbar_string
|
||||
# Description: This is the string that your line will display. This can
|
||||
# be multiple characters or just one. For example: '~-~-'
|
||||
# The default setting is '-'.
|
||||
#
|
||||
# Setting: trackbar_use_status_window
|
||||
# Description: If this setting is set to OFF, Irssi won't print a trackbar
|
||||
# in the statuswindow
|
||||
#
|
||||
# Setting: trackbar_ignore_windows
|
||||
# Description: A list of windows where no trackbar should be printed
|
||||
#
|
||||
# Setting: trackbar_print_timestamp
|
||||
# Description: If this setting is set to ON, Irssi will print the formatted
|
||||
# timestamp in front of the trackbar.
|
||||
#
|
||||
# Setting: trackbar_require_seen
|
||||
# Description: Only clear the trackbar if it has been scrolled to.
|
||||
#
|
||||
# /mark is a command that will redraw the line at the bottom.
|
||||
#
|
||||
# Command: /trackbar, /trackbar goto
|
||||
# Description: Jump to where the trackbar is, to pick up reading
|
||||
#
|
||||
# Command: /trackbar keep
|
||||
# Description: Keep this window's trackbar where it is the next time
|
||||
# you switch windows (then this flag is cleared again)
|
||||
#
|
||||
# Command: /mark, /trackbar mark
|
||||
# Description: Remove the old trackbar and mark the bottom of this
|
||||
# window with a new trackbar
|
||||
#
|
||||
# Command: /trackbar markvisible
|
||||
# Description: Like mark for all visible windows
|
||||
#
|
||||
# Command: /trackbar markall
|
||||
# Description: Like mark for all windows
|
||||
#
|
||||
# Command: /trackbar remove
|
||||
# Description: Remove this window's trackbar
|
||||
#
|
||||
# Command: /trackbar removeall
|
||||
# Description: Remove all windows' trackbars
|
||||
#
|
||||
# Command: /trackbar redraw
|
||||
# Description: Force redraw of trackbars
|
||||
#
|
||||
|
||||
|
||||
# For bugreports and other improvements contact one of the authors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this script; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
##
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Irssi;
|
||||
use Irssi::TextUI;
|
||||
use Encode;
|
||||
|
||||
use POSIX qw(strftime);
|
||||
use vars qw($VERSION %IRSSI);
|
||||
|
||||
$VERSION = "2.2"; # cb3189a33c8e5f9
|
||||
|
||||
%IRSSI = (
|
||||
authors => 'Peter Leurs and Geert Hauwaerts',
|
||||
contact => 'peter@pfoe.be',
|
||||
patchers => 'Johan Kiviniemi (UTF-8), Uwe Dudenhoeffer (on-upgrade-remove-line)',
|
||||
name => 'trackbar',
|
||||
description => 'Shows a bar where you have last read a window.',
|
||||
license => 'GNU General Public License',
|
||||
url => 'http://www.pfoe.be/~peter/trackbar/',
|
||||
changed => 'Fri Jan 23 23:59:11 2004',
|
||||
commands => 'trackbar',
|
||||
);
|
||||
|
||||
## Comments and remarks.
|
||||
#
|
||||
# This script uses settings.
|
||||
# Use /SET to change the value or /TOGGLE to switch it on or off.
|
||||
#
|
||||
#
|
||||
# Tip: The command 'trackbar' is very usefull if you bind that to a key,
|
||||
# so you can easily jump to the trackbar. Please see 'help bind' for
|
||||
# more information about keybindings in Irssi.
|
||||
#
|
||||
# Command: /BIND meta2-P key F1
|
||||
# /BIND F1 command trackbar
|
||||
#
|
||||
##
|
||||
|
||||
## Bugfixes and new items in this rewrite.
|
||||
#
|
||||
# * Remove all the trackbars before upgrading.
|
||||
# * New setting trackbar_use_status_window to control the statuswindow trackbar.
|
||||
# * New setting trackbar_print_timestamp to print a timestamp or not.
|
||||
# * New command 'trackbar' to scroll up to the trackbar.
|
||||
# * When resizing your terminal, Irssi will update all the trackbars to the new size.
|
||||
# * When changing trackbar settings, change all the trackbars to the new settings.
|
||||
# * New command 'trackbar mark' to draw a new trackbar (The old '/mark').
|
||||
# * New command 'trackbar markall' to draw a new trackbar in each window.
|
||||
# * New command 'trackbar remove' to remove the trackbar from the current window.
|
||||
# * New command 'trackbar removeall' to remove all the trackbars.
|
||||
# * Don't draw a trackbar in empty windows.
|
||||
# * Added a version check to prevent Irssi redraw errors.
|
||||
# * Fixed a bookmark NULL versus 0 bug.
|
||||
# * Fixed a remove-line bug in Uwe Dudenhoeffer his patch.
|
||||
# * New command 'help trackbar' to display the trackbar commands.
|
||||
# * Fixed an Irssi startup bug, now processing each auto-created window.
|
||||
#
|
||||
##
|
||||
|
||||
## Known bugs and the todolist.
|
||||
#
|
||||
# Todo: * Instead of drawing a line, invert the line.
|
||||
#
|
||||
##
|
||||
|
||||
sub cmd_help {
|
||||
my ($args) = @_;
|
||||
if ($args =~ /^trackbar *$/i) {
|
||||
print CLIENTCRAP <<HELP
|
||||
%9Syntax:%9
|
||||
|
||||
TRACKBAR
|
||||
TRACKBAR GOTO
|
||||
TRACKBAR KEEP
|
||||
TRACKBAR MARK
|
||||
TRACKBAR MARKVISIBLE
|
||||
TRACKBAR MARKALL
|
||||
TRACKBAR REMOVE
|
||||
TRACKBAR REMOVEALL
|
||||
TRACKBAR REDRAW
|
||||
|
||||
%9Parameters:%9
|
||||
|
||||
GOTO: Jump to where the trackbar is, to pick up reading
|
||||
KEEP: Keep this window's trackbar where it is the next time
|
||||
you switch windows (then this flag is cleared again)
|
||||
MARK: Remove the old trackbar and mark the bottom of this
|
||||
window with a new trackbar
|
||||
MARKVISIBLE: Like mark for all visible windows
|
||||
MARKALL: Like mark for all windows
|
||||
REMOVE: Remove this window's trackbar
|
||||
REMOVEALL: Remove all windows' trackbars
|
||||
REDRAW: Force redraw of trackbars
|
||||
|
||||
%9Description:%9
|
||||
|
||||
Manage a trackbar. Without arguments, it will scroll up to the trackbar.
|
||||
|
||||
%9Examples:%9
|
||||
|
||||
/TRACKBAR MARK
|
||||
/TRACKBAR REMOVE
|
||||
HELP
|
||||
}
|
||||
}
|
||||
|
||||
Irssi::theme_register([
|
||||
'trackbar_loaded', '%R>>%n %_Scriptinfo:%_ Loaded $0 version $1 by $2.',
|
||||
'trackbar_wrong_version', '%R>>%n %_Trackbar:%_ Please upgrade your client to 0.8.17 or above if you would like to use this feature of trackbar.',
|
||||
'trackbar_all_removed', '%R>>%n %_Trackbar:%_ All the trackbars have been removed.',
|
||||
'trackbar_not_found', '%R>>%n %_Trackbar:%_ No trackbar found in this window.',
|
||||
]);
|
||||
|
||||
my $old_irssi = Irssi::version < 20140701;
|
||||
sub check_version {
|
||||
if ($old_irssi) {
|
||||
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trackbar_wrong_version');
|
||||
return;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
sub is_utf8 {
|
||||
lc Irssi::settings_get_str('term_charset') eq 'utf-8'
|
||||
}
|
||||
|
||||
my (%config, %keep_trackbar, %unseen_trackbar);
|
||||
|
||||
sub remove_one_trackbar {
|
||||
my $win = shift;
|
||||
my $view = shift || $win->view;
|
||||
my $line = $view->get_bookmark('trackbar');
|
||||
if (defined $line) {
|
||||
my $bottom = $view->{bottom};
|
||||
$view->remove_line($line);
|
||||
$win->command('^scrollback end') if $bottom && !$win->view->{bottom};
|
||||
$view->redraw;
|
||||
}
|
||||
}
|
||||
|
||||
sub add_one_trackbar {
|
||||
my $win = shift;
|
||||
my $view = shift || $win->view;
|
||||
$win->print(line($win->{width}), MSGLEVEL_NEVER);
|
||||
$view->set_bookmark_bottom('trackbar');
|
||||
$unseen_trackbar{ $win->{_irssi} } = 1;
|
||||
$view->redraw;
|
||||
}
|
||||
|
||||
sub update_one_trackbar {
|
||||
my $win = shift;
|
||||
my $view = shift || $win->view;
|
||||
my $force = shift;
|
||||
my $ignored = win_ignored($win, $view);
|
||||
remove_one_trackbar($win, $view)
|
||||
if $force || !defined $force || !$ignored;
|
||||
add_one_trackbar($win, $view)
|
||||
if $force || !$ignored;
|
||||
}
|
||||
|
||||
sub win_ignored {
|
||||
my $win = shift;
|
||||
my $view = shift || $win->view;
|
||||
return 1 unless $view->{buffer}{lines_count};
|
||||
return 1 if $win->{name} eq '(status)' && !$config{use_status_window};
|
||||
return 1 if grep { $win->{name} eq $_ || $win->{refnum} eq $_
|
||||
|| $win->get_active_name eq $_ } @{ $config{ignore_windows} };
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub sig_window_changed {
|
||||
my ($newwindow, $oldwindow) = @_;
|
||||
return unless $oldwindow;
|
||||
trackbar_update_seen($newwindow);
|
||||
return if delete $keep_trackbar{ $oldwindow->{_irssi} };
|
||||
trackbar_update_seen($oldwindow);
|
||||
return if $config{require_seen} && $unseen_trackbar{ $oldwindow->{_irssi } };
|
||||
update_one_trackbar($oldwindow, undef, 0);
|
||||
}
|
||||
|
||||
sub trackbar_update_seen {
|
||||
my $win = shift;
|
||||
return unless $win;
|
||||
my $view = $win->view;
|
||||
my $line = $view->get_bookmark('trackbar');
|
||||
unless ($line) {
|
||||
delete $unseen_trackbar{ $win->{_irssi} };
|
||||
return;
|
||||
}
|
||||
my $startline = $view->{startline};
|
||||
return unless $startline;
|
||||
|
||||
if ($startline->{info}{time} < $line->{info}{time}
|
||||
|| $startline->{_irssi} == $line->{_irssi}) {
|
||||
delete $unseen_trackbar{ $win->{_irssi} };
|
||||
}
|
||||
}
|
||||
|
||||
sub screen_length;
|
||||
{ local $@;
|
||||
eval { require Text::CharWidth; };
|
||||
unless ($@) {
|
||||
*screen_length = sub { Text::CharWidth::mbswidth($_[0]) };
|
||||
}
|
||||
else {
|
||||
*screen_length = sub {
|
||||
my $temp = shift;
|
||||
if (is_utf8()) {
|
||||
Encode::_utf8_on($temp);
|
||||
}
|
||||
length($temp)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
{ my %strip_table = (
|
||||
(map { $_ => '' } (split //, '04261537' . 'kbgcrmyw' . 'KBGCRMYW' . 'U9_8I:|FnN>#[' . 'pP')),
|
||||
(map { $_ => $_ } (split //, '{}%')),
|
||||
);
|
||||
sub c_length {
|
||||
my $o = Irssi::strip_codes($_[0]);
|
||||
$o =~ s/(%(%|Z.{6}|z.{6}|X..|x..|.))/exists $strip_table{$2} ? $strip_table{$2} :
|
||||
$2 =~ m{x(?:0[a-f]|[1-6][0-9a-z]|7[a-x])|z[0-9a-f]{6}}i ? '' : $1/gex;
|
||||
screen_length($o)
|
||||
}
|
||||
}
|
||||
|
||||
sub line {
|
||||
my ($width, $time) = @_;
|
||||
my $string = $config{string};
|
||||
$string = ' ' unless length $string;
|
||||
$time ||= time;
|
||||
|
||||
Encode::_utf8_on($string);
|
||||
my $length = c_length($string);
|
||||
|
||||
my $format = '';
|
||||
if ($config{print_timestamp}) {
|
||||
$format = $config{timestamp_str};
|
||||
$format =~ y/%/\01/;
|
||||
$format =~ s/\01\01/%/g;
|
||||
$format = strftime($format, localtime $time);
|
||||
$format =~ y/\01/%/;
|
||||
}
|
||||
|
||||
my $times = $width / $length;
|
||||
$times += 1 if $times != int $times;
|
||||
$format .= $config{style};
|
||||
$width -= c_length($format);
|
||||
$string x= $times;
|
||||
chop $string while length $string && c_length($string) > $width;
|
||||
return $format . $string;
|
||||
}
|
||||
|
||||
sub remove_all_trackbars {
|
||||
for my $window (Irssi::windows) {
|
||||
next unless ref $window;
|
||||
remove_one_trackbar($window);
|
||||
}
|
||||
}
|
||||
|
||||
sub UNLOAD {
|
||||
remove_all_trackbars();
|
||||
}
|
||||
|
||||
sub redraw_trackbars {
|
||||
return unless check_version();
|
||||
for my $win (Irssi::windows) {
|
||||
next unless ref $win;
|
||||
my $view = $win->view;
|
||||
my $line = $view->get_bookmark('trackbar');
|
||||
next unless $line;
|
||||
my $bottom = $view->{bottom};
|
||||
$win->print_after($line, MSGLEVEL_NEVER, line($win->{width}, $line->{info}{time}),
|
||||
$line->{info}{time});
|
||||
$view->set_bookmark('trackbar', $win->last_line_insert);
|
||||
$view->redraw;
|
||||
$view->remove_line($line);
|
||||
$win->command('^scrollback end') if $bottom && !$win->view->{bottom};
|
||||
$view->redraw;
|
||||
}
|
||||
}
|
||||
|
||||
sub goto_trackbar {
|
||||
my $win = Irssi::active_win;
|
||||
my $line = $win->view->get_bookmark('trackbar');
|
||||
|
||||
if ($line) {
|
||||
$win->command("scrollback goto ". strftime("%d %H:%M:%S", localtime($line->{info}{time})));
|
||||
} else {
|
||||
$win->printformat(MSGLEVEL_CLIENTCRAP, 'trackbar_not_found');
|
||||
}
|
||||
}
|
||||
|
||||
sub cmd_mark {
|
||||
update_one_trackbar(Irssi::active_win, undef, 1);
|
||||
}
|
||||
|
||||
sub cmd_markall {
|
||||
for my $window (Irssi::windows) {
|
||||
next unless ref $window;
|
||||
update_one_trackbar($window);
|
||||
}
|
||||
}
|
||||
|
||||
sub signal_stop {
|
||||
Irssi::signal_stop;
|
||||
}
|
||||
|
||||
sub cmd_markvisible {
|
||||
my @wins = Irssi::windows;
|
||||
my $awin =
|
||||
my $bwin = Irssi::active_win;
|
||||
my $awin_counter = 0;
|
||||
Irssi::signal_add_priority('window changed' => 'signal_stop', -99);
|
||||
do {
|
||||
Irssi::active_win->command('window up');
|
||||
$awin = Irssi::active_win;
|
||||
update_one_trackbar($awin);
|
||||
++$awin_counter;
|
||||
} until ($awin->{refnum} == $bwin->{refnum} || $awin_counter >= @wins);
|
||||
Irssi::signal_remove('window changed' => 'signal_stop');
|
||||
}
|
||||
|
||||
sub cmd_trackbar_remove_one {
|
||||
remove_one_trackbar(Irssi::active_win);
|
||||
}
|
||||
|
||||
sub cmd_remove_all_trackbars {
|
||||
remove_all_trackbars();
|
||||
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trackbar_all_removed');
|
||||
}
|
||||
|
||||
sub cmd_keep_once {
|
||||
$keep_trackbar{ Irssi::active_win->{_irssi} } = 1;
|
||||
}
|
||||
|
||||
sub trackbar_runsub {
|
||||
my ($data, $server, $item) = @_;
|
||||
$data =~ s/\s+$//g;
|
||||
|
||||
if ($data) {
|
||||
Irssi::command_runsub('trackbar', $data, $server, $item);
|
||||
} else {
|
||||
goto_trackbar();
|
||||
}
|
||||
}
|
||||
|
||||
sub update_config {
|
||||
my $was_status_window = $config{use_status_window};
|
||||
$config{style} = Irssi::settings_get_str('trackbar_style');
|
||||
$config{string} = Irssi::settings_get_str('trackbar_string');
|
||||
$config{require_seen} = Irssi::settings_get_bool('trackbar_require_seen');
|
||||
$config{ignore_windows} = [ split /[,\s]+/, Irssi::settings_get_str('trackbar_ignore_windows') ];
|
||||
$config{use_status_window} = Irssi::settings_get_bool('trackbar_use_status_window');
|
||||
$config{print_timestamp} = Irssi::settings_get_bool('trackbar_print_timestamp');
|
||||
if (defined $was_status_window && $was_status_window != $config{use_status_window}) {
|
||||
if (my $swin = Irssi::window_find_name('(status)')) {
|
||||
if ($config{use_status_window}) {
|
||||
update_one_trackbar($swin);
|
||||
}
|
||||
else {
|
||||
remove_one_trackbar($swin);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($config{print_timestamp}) {
|
||||
my $ts_format = Irssi::settings_get_str('timestamp_format');
|
||||
my $ts_theme = Irssi::current_theme->get_format('fe-common/core', 'timestamp');
|
||||
my $render_str = Irssi::current_theme->format_expand($ts_theme);
|
||||
(my $ts_escaped = $ts_format) =~ s/([%\$])/$1$1/g;
|
||||
$render_str =~ s/(?|\$(.)(?!\w)|\$\{(\w+)\})/$1 eq 'Z' ? $ts_escaped : $1/ge;
|
||||
$config{timestamp_str} = $render_str;
|
||||
}
|
||||
redraw_trackbars() unless $old_irssi;
|
||||
}
|
||||
|
||||
Irssi::settings_add_str('trackbar', 'trackbar_string', is_utf8() ? "\x{2500}" : '-');
|
||||
Irssi::settings_add_str('trackbar', 'trackbar_style', '%K');
|
||||
Irssi::settings_add_str('trackbar', 'trackbar_ignore_windows', '');
|
||||
Irssi::settings_add_bool('trackbar', 'trackbar_use_status_window', 1);
|
||||
Irssi::settings_add_bool('trackbar', 'trackbar_print_timestamp', 0);
|
||||
Irssi::settings_add_bool('trackbar', 'trackbar_require_seen', 0);
|
||||
|
||||
update_config();
|
||||
|
||||
Irssi::signal_add_last( 'mainwindow resized' => 'redraw_trackbars')
|
||||
unless $old_irssi;
|
||||
|
||||
Irssi::signal_register({'gui page scrolled' => [qw/Irssi::UI::Window/]});
|
||||
Irssi::signal_add_last('gui page scrolled' => 'trackbar_update_seen');
|
||||
|
||||
Irssi::signal_add('setup changed' => 'update_config');
|
||||
Irssi::signal_add_priority('session save' => 'remove_all_trackbars', Irssi::SIGNAL_PRIORITY_HIGH-1);
|
||||
|
||||
Irssi::signal_add('window changed' => 'sig_window_changed');
|
||||
|
||||
Irssi::command_bind('trackbar goto' => 'goto_trackbar');
|
||||
Irssi::command_bind('trackbar keep' => 'cmd_keep_once');
|
||||
Irssi::command_bind('trackbar mark' => 'cmd_mark');
|
||||
Irssi::command_bind('trackbar markvisible' => 'cmd_markvisible');
|
||||
Irssi::command_bind('trackbar markall' => 'cmd_markall');
|
||||
Irssi::command_bind('trackbar remove' => 'cmd_trackbar_remove_one');
|
||||
Irssi::command_bind('trackbar removeall' => 'cmd_remove_all_trackbars');
|
||||
Irssi::command_bind('trackbar redraw' => 'redraw_trackbars');
|
||||
Irssi::command_bind('trackbar' => 'trackbar_runsub');
|
||||
Irssi::command_bind('mark' => 'cmd_mark');
|
||||
Irssi::command_bind_last('help' => 'cmd_help');
|
||||
|
||||
Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'trackbar_loaded', $IRSSI{name}, $VERSION, $IRSSI{authors});
|
||||
171
irssi/scripts/usercount.pl
Executable file
171
irssi/scripts/usercount.pl
Executable file
@@ -0,0 +1,171 @@
|
||||
use Irssi 20020101.0250 ();
|
||||
$VERSION = "1.16";
|
||||
%IRSSI = (
|
||||
authors => 'David Leadbeater, Timo Sirainen, Georg Lukas',
|
||||
contact => 'dgl@dgl.cx, tss@iki.fi, georg@boerde.de',
|
||||
name => 'usercount',
|
||||
description => 'Adds a usercount for a channel as a statusbar item',
|
||||
license => 'GNU GPLv2 or later',
|
||||
url => 'http://irssi.dgl.yi.org/',
|
||||
);
|
||||
|
||||
# Once you have loaded this script run the following command:
|
||||
# /statusbar window add usercount
|
||||
# You can also add -alignment left|right option
|
||||
|
||||
# /set usercount_show_zero on or off to show users when 0 users of that type
|
||||
# /set usercount_show_ircops (default off)
|
||||
# /set usercount_show_halfops (default on)
|
||||
|
||||
# you can customize the look of this item from theme file:
|
||||
# sb_usercount = "{sb %_$0%_ nicks ($1-)}";
|
||||
# sb_uc_ircops = "%_*%_$*";
|
||||
# sb_uc_ops = "%_@%_$*";
|
||||
# sb_uc_halfops = "%_%%%_$*";
|
||||
# sb_uc_voices = "%_+%_$*";
|
||||
# sb_uc_normal = "$*";
|
||||
# sb_uc_space = " ";
|
||||
|
||||
|
||||
use strict;
|
||||
use Irssi::TextUI;
|
||||
|
||||
my ($ircops, $ops, $halfops, $voices, $normal, $total);
|
||||
my ($timeout_tag, $recalc);
|
||||
|
||||
# Called to make the status bar item
|
||||
sub usercount {
|
||||
my ($item, $get_size_only) = @_;
|
||||
my $wi = !Irssi::active_win() ? undef : Irssi::active_win()->{active};
|
||||
|
||||
if(!ref $wi || $wi->{type} ne "CHANNEL") { # only works on channels
|
||||
return unless ref $item;
|
||||
$item->{min_size} = $item->{max_size} = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if ($recalc) {
|
||||
$recalc = 0;
|
||||
calc_users($wi);
|
||||
}
|
||||
|
||||
my $theme = Irssi::current_theme();
|
||||
my $format = $theme->format_expand("{sb_usercount}");
|
||||
if ($format) {
|
||||
# use theme-specific look
|
||||
my $ircopstr = $theme->format_expand("{sb_uc_ircops $ircops}",
|
||||
Irssi::EXPAND_FLAG_IGNORE_EMPTY);
|
||||
my $opstr = $theme->format_expand("{sb_uc_ops $ops}",
|
||||
Irssi::EXPAND_FLAG_IGNORE_EMPTY);
|
||||
my $halfopstr = $theme->format_expand("{sb_uc_halfops $halfops}",
|
||||
Irssi::EXPAND_FLAG_IGNORE_EMPTY);
|
||||
my $voicestr = $theme->format_expand("{sb_uc_voices $voices}",
|
||||
Irssi::EXPAND_FLAG_IGNORE_EMPTY);
|
||||
my $normalstr = $theme->format_expand("{sb_uc_normal $normal}",
|
||||
Irssi::EXPAND_FLAG_IGNORE_EMPTY);
|
||||
my $space = $theme->format_expand('{sb_uc_space}',
|
||||
Irssi::EXPAND_FLAG_IGNORE_EMPTY);
|
||||
$space = " " unless $space;
|
||||
|
||||
my $str = "";
|
||||
$str .= $ircopstr.$space if defined $ircops;
|
||||
$str .= $opstr.$space if defined $ops;
|
||||
$str .= $halfopstr.$space if defined $halfops;
|
||||
$str .= $voicestr.$space if defined $voices;
|
||||
$str .= $normalstr.$space if defined $normal;
|
||||
$str =~ s/\Q$space\E$//;
|
||||
|
||||
$format = $theme->format_expand("{sb_usercount $total $str}",
|
||||
Irssi::EXPAND_FLAG_IGNORE_REPLACES);
|
||||
} else {
|
||||
# use the default look
|
||||
$format = "{sb \%_$total\%_ nicks \%c(\%n";
|
||||
$format .= '*'.$ircops.' ' if (defined $ircops);
|
||||
$format .= '@'.$ops.' ' if (defined $ops);
|
||||
$format .= '%%'.$halfops.' ' if (defined $halfops);
|
||||
$format .= "+$voices " if (defined $voices);
|
||||
$format .= "$normal " if (defined $normal);
|
||||
$format =~ s/ $//;
|
||||
$format .= "\%c)}";
|
||||
}
|
||||
|
||||
$item->default_handler($get_size_only, $format, undef, 1);
|
||||
}
|
||||
|
||||
sub calc_users() {
|
||||
my $channel = shift;
|
||||
my $server = $channel->{server};
|
||||
|
||||
$ircops = $ops = $halfops = $voices = $normal = 0;
|
||||
for ($channel->nicks()) {
|
||||
if ($_->{serverop}) {
|
||||
$ircops++;
|
||||
}
|
||||
|
||||
if ($_->{op}) {
|
||||
$ops++;
|
||||
} elsif ($_->{halfop}) {
|
||||
$halfops++;
|
||||
} elsif ($_->{voice}) {
|
||||
$voices++;
|
||||
} else {
|
||||
$normal++;
|
||||
}
|
||||
}
|
||||
|
||||
$total = $ops+$halfops+$voices+$normal;
|
||||
if (!Irssi::settings_get_bool('usercount_show_zero')) {
|
||||
$ircops = undef if ($ircops == 0);
|
||||
$ops = undef if ($ops == 0);
|
||||
$halfops = undef if ($halfops == 0);
|
||||
$voices = undef if ($voices == 0);
|
||||
$normal = undef if ($normal == 0);
|
||||
}
|
||||
$halfops = undef unless Irssi::settings_get_bool('usercount_show_halfops');
|
||||
$ircops = undef unless Irssi::settings_get_bool('usercount_show_ircops');
|
||||
}
|
||||
|
||||
sub refresh {
|
||||
if ($timeout_tag > 0) {
|
||||
Irssi::timeout_remove($timeout_tag);
|
||||
$timeout_tag = 0;
|
||||
}
|
||||
Irssi::statusbar_items_redraw('usercount');
|
||||
}
|
||||
|
||||
sub refresh_check {
|
||||
my $channel = shift;
|
||||
my $wi = ref Irssi::active_win() ? Irssi::active_win()->{active} : 0;
|
||||
|
||||
return unless ref $wi && ref $channel;
|
||||
return if $wi->{name} ne $channel->{name};
|
||||
return if $wi->{server}->{tag} ne $channel->{server}->{tag};
|
||||
|
||||
# don't refresh immediately, or we'll end up refreshing
|
||||
# a lot around netsplits
|
||||
$recalc = 1;
|
||||
Irssi::timeout_remove($timeout_tag) if ($timeout_tag > 0);
|
||||
$timeout_tag = Irssi::timeout_add(500, 'refresh', undef);
|
||||
}
|
||||
|
||||
sub refresh_recalc {
|
||||
$recalc = 1;
|
||||
refresh();
|
||||
}
|
||||
|
||||
$recalc = 1;
|
||||
$timeout_tag = 0;
|
||||
|
||||
Irssi::settings_add_bool('usercount', 'usercount_show_zero', 1);
|
||||
Irssi::settings_add_bool('usercount', 'usercount_show_ircops', 0);
|
||||
Irssi::settings_add_bool('usercount', 'usercount_show_halfops', 1);
|
||||
|
||||
Irssi::statusbar_item_register('usercount', undef, 'usercount');
|
||||
Irssi::statusbars_recreate_items();
|
||||
|
||||
Irssi::signal_add_last('nicklist new', 'refresh_check');
|
||||
Irssi::signal_add_last('nicklist remove', 'refresh_check');
|
||||
Irssi::signal_add_last('nick mode changed', 'refresh_check');
|
||||
Irssi::signal_add_last('setup changed', 'refresh_recalc');
|
||||
Irssi::signal_add_last('window changed', 'refresh_recalc');
|
||||
Irssi::signal_add_last('window item changed', 'refresh_recalc');
|
||||
601
irssi/weed.theme
Normal file
601
irssi/weed.theme
Normal file
@@ -0,0 +1,601 @@
|
||||
# __ __ ___ ___ ___
|
||||
# | T__T T / _] / _]| \
|
||||
# | | | | / [_ / [_ | \
|
||||
# | | | |Y _]Y _]| D Y
|
||||
# l ` ' !| [_ | [_ | |
|
||||
# \ / | T| T| |
|
||||
# \_/\_/ l_____jl_____jl_____j
|
||||
#
|
||||
# Beautiful X-Chat inspired irssi theme by rolle @ QuakeNet
|
||||
# http://roni.laukkarinen.info
|
||||
#
|
||||
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=~
|
||||
#
|
||||
# NOTE FOR FINNISH USERS:
|
||||
#
|
||||
# Jos olet suomalainen ja pidät teemasta, joini ihmeessä
|
||||
# kanavalle #pulina quakenetissä. Lisää tietoa kanavasta:
|
||||
# http://www.pulina.fi
|
||||
#
|
||||
# Ja jos tykkäsit, mikset sanoisi kiitokset privassa,
|
||||
# jotta tiedän että tätä käyttää joku :-)
|
||||
#
|
||||
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=~
|
||||
#
|
||||
# Inspired by X-Chat.
|
||||
# (not the xchat-irssi-theme: THE X-Chat-theme)
|
||||
#
|
||||
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=~
|
||||
#
|
||||
# IMPORTANT:
|
||||
#
|
||||
# Make sure this is the latest version and use the tutorial
|
||||
# provided in https://github.com/ronilaukkarinen/weed
|
||||
#
|
||||
# Without actions in the tutorial the theme WILL NOT WORK
|
||||
# PROPERLY!
|
||||
#
|
||||
# Always backup your ~/.irssi -folder before trying!
|
||||
#
|
||||
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=~
|
||||
|
||||
default_color = "-1";
|
||||
# Timestamp/servertag to the end, not first
|
||||
info_eol = "false";
|
||||
replaces = { "[]=" = "$*"; };
|
||||
|
||||
abstracts = {
|
||||
|
||||
# Disabling client crap
|
||||
# msglevel_clientcrap = "%p*%K | %W%K$*";
|
||||
|
||||
# For awaybar.pl
|
||||
sb_awaybar = " %1 {sb %W$0-} %N";
|
||||
|
||||
# For usercount.pl
|
||||
sb_usercount = " %0 {sb %G$0} %N ";
|
||||
sb_uc_ircops = "%r*$*";
|
||||
sb_uc_ops = "%Ro%K$*";
|
||||
sb_uc_halfops = "%Bho%b$*";
|
||||
sb_uc_voices = "%Gv%K$*";
|
||||
sb_uc_normal = "%w$*%K";
|
||||
sb_uc_space = " ";
|
||||
|
||||
line_start = "";
|
||||
timestamp = " %_$* ";
|
||||
hilight = "$*";
|
||||
error = "$*";
|
||||
channel = "$*";
|
||||
nick = "$*";
|
||||
nickhost = "$*";
|
||||
server = "$*";
|
||||
comment = "$*";
|
||||
reason = "{comment $*}";
|
||||
mode = "{comment $*}";
|
||||
channick_hilight = "$*";
|
||||
chanhost_hilight = "{nickhost $*}";
|
||||
channick = "$*";
|
||||
chanhost = "{nickhost $*}";
|
||||
channelhilight = "$*";
|
||||
ban = "$*";
|
||||
|
||||
# All of below: $0 = mode, $1 = nick
|
||||
msgnick = "$0$1- %|";
|
||||
ownmsgnick = "{msgnick %G$1%K%_|}%w";
|
||||
ownnick = "$*";
|
||||
|
||||
# v3.05-hilight is now on red background and white text
|
||||
# Can be seen better in communicator phone.
|
||||
# (if you liked the old fashioned hilight, comment out next lines below and enable the noted ones)
|
||||
#
|
||||
|
||||
pubmsgnick = "{msgnick %r$1%K%_|}%w";
|
||||
pubnick = "$*";
|
||||
pubmsgmenick = "%1%W{msgnick $1-|}";
|
||||
menick = "$*%n";
|
||||
# $0 = hilight color, $1 = mode, $2 = nick
|
||||
pubmsghinick = "%1%W{msgnick $2-|}";
|
||||
|
||||
# Got rid of on version 3.05:
|
||||
#
|
||||
#pubmsgnick = "{msgnick %r$1%K%_|}%w";
|
||||
#pubnick = "$*";
|
||||
#pubmsgmenick = "%G%K{msgnick $1-%R|}%0%W";
|
||||
#menick = "$*%n";
|
||||
#pubmsghinick = "%G%K{msgnick $2-%R|}%0%W";
|
||||
|
||||
msgchannel = ":$*";
|
||||
# $0 = nick, $1 = host
|
||||
#
|
||||
# msn-styled:
|
||||
#privmsg = "%:[$0($1-)]";
|
||||
privmsg = "[$0($1-)]";
|
||||
|
||||
#
|
||||
# $0 = "msg",
|
||||
# $1 = target nick
|
||||
#
|
||||
|
||||
#
|
||||
# msn-styled:
|
||||
#ownprivmsg = "%:%w[$0(%1-)]";
|
||||
ownprivmsg = "%w[$0(%1-)]";
|
||||
|
||||
ownprivmsgnick = "{msgnick $*}";
|
||||
|
||||
#
|
||||
# msn-styled privmsgs:
|
||||
#ownprivnick = "%B$*%K says:%:";
|
||||
#privmsgnick = "%r$*%K says:%:";
|
||||
ownprivnick = "%B$*%K%_|";
|
||||
privmsgnick = "%r$*%K%_|";
|
||||
action_core = " %C*%K | %C$0- ";
|
||||
action = "%C{action_core $*}%W";
|
||||
ownaction = "{action $*}";
|
||||
ownaction_target = "{action_core $*}:$1 ";
|
||||
pvtaction = " (>>>) $* ";
|
||||
pvtaction_query = "{action $*}";
|
||||
pubaction = "{action $*}";
|
||||
ownnotice = "[$0($1-)] ";
|
||||
notice = "$*";
|
||||
whois = "%# $[8]0 : $1-";
|
||||
pubnotice_channel = ":$*";
|
||||
# pvtnotice_host = "($*)";
|
||||
pvtnotice_host = "";
|
||||
servernotice = "%r!$* %K";
|
||||
ownctcp = "[$0($1-)] ";
|
||||
ctcp = "$*";
|
||||
wallop = "$*: ";
|
||||
wallop_nick = "$*";
|
||||
wallop_action = " * $* ";
|
||||
netsplit = "$*";
|
||||
netjoin = "$*";
|
||||
names_prefix = " %p*%K | ";
|
||||
names_nick = "$0$1- ";
|
||||
names_nick_op = "{names_nick $*}";
|
||||
names_nick_halfop = "{names_nick $*}";
|
||||
names_nick_voice = "{names_nick $*}";
|
||||
names_users = "$*";
|
||||
names_channel = "%K$*";
|
||||
dcc = "$*";
|
||||
dccfile = "$*";
|
||||
dccownmsg = "[$0($1-)] ";
|
||||
dccownnick = "$*";
|
||||
dccownquerynick = "$*";
|
||||
dccownaction = "{action $*}";
|
||||
dccownaction_target = "{action_core $0}:$1 ";
|
||||
dccmsg = "[$1-($0)] ";
|
||||
dccquerynick = "$*";
|
||||
dccaction = " (*dcc*) $* %|";
|
||||
sb_background = "%N";
|
||||
sb_window_bg = "%k%0";
|
||||
sb_default_bg = "%N";
|
||||
sb_prompt_bg = "%N";
|
||||
sb_info_bg = "%N";
|
||||
sb_topic_bg = "%N";
|
||||
sbstart = "";
|
||||
sbend = " ";
|
||||
topicsbstart = "{sbstart $*}";
|
||||
topicsbend = "{sbend $*}";
|
||||
#prompt = "%r$*%r: ";
|
||||
prompt = "";
|
||||
sb = "%K$*%K";
|
||||
sbmode = "";
|
||||
sbaway = "%raway!%n";
|
||||
sbservertag = "$0%K";
|
||||
sbnickmode = "";
|
||||
sb_act_sep = "%w$*%n";
|
||||
sb_act_text = "%K$*%n";
|
||||
sb_act_msg = "%2%W$*%n";
|
||||
sb_act_hilight = "%5%W $0%W$1-%n";
|
||||
sb_act_hilight_color = "%5%W$0%W$1-%n";
|
||||
};
|
||||
formats = {
|
||||
"fe-common/core" = {
|
||||
query_start = " %g*%K | %gStarting query%W on {server $1} w/ {nick $0}";
|
||||
join = " %g*%K | %K{channick_hilight $0} %gjoined%K {channel $2}";
|
||||
part = " %r*%K | %K{channick $0} %rleft%K {channel $2}";
|
||||
quit = " %r*%K | %K{channick $0} %rquit%k %w(%KReason: {reason $2}%w)";
|
||||
quit_once = " %r*%K | %K{channick $0} [{chanhost $1}] %rquit%K %w(%KReason: \012{reason $2}%w)";
|
||||
nick_changed = " %y*%K | %K{channick_hilight $0} %yis now known as%K {channick_hilight $1}";
|
||||
|
||||
own_msg = "{ownmsgnick $2 {ownnick $[-10]0}}%W$1";
|
||||
own_msg_channel = "{ownmsgnick $3 {ownnick $[-10]0}{msgchannel $1}}%w%_$2";
|
||||
pubmsg_me = "{pubmsgmenick $2 {menick $[-10]0}}%_$1";
|
||||
pubmsg_me_channel = "{pubmsgmenick $3 {menick $[-10]0}{msgchannel $1}}$2";
|
||||
pubmsg_hilight = "{pubmsghinick $0 $3 $[-10]1}$2";
|
||||
pubmsg_hilight_channel = "{pubmsghinick $0 $4 $[-10]1{msgchannel $2}}$3";
|
||||
pubmsg = "{pubmsgnick $2 {pubnick $nickcolor$[-10]0}}$1";
|
||||
pubmsg_channel = "{pubmsgnick $3 {pubnick $[-10]0}{msgchannel $1}}$2";
|
||||
|
||||
# own_msg = "{ownmsgnick $2 {ownnick $[-10]0}}$1";
|
||||
# own_msg_channel = "{ownmsgnick $3 {ownnick $[-10]0}{msgchannel $1}}$2";
|
||||
#pubmsg_me = "{pubmsgmenick $2 {menick $[-9]0}}$1";
|
||||
# pubmsg_me_channel = "{pubmsgmenick $3 {menick $[-10]0}{msgchannel $1}}$2";
|
||||
# pubmsg_hilight = "{pubmsghinick $0 $3 $[-10]1}$2";
|
||||
# pubmsg_hilight_channel = "{pubmsghinick $0 $4 $[-10]1{msgchannel $2}}$3";
|
||||
# pubmsg = "{pubmsgnick $2 {pubnick \0030$0}}$1";
|
||||
# pubmsg_channel = "{pubmsgnick $3 {pubnick $[-10]0}{msgchannel $1}}$2";
|
||||
# line_start = "{line_start}";
|
||||
# line_start_irssi = "{line_start}{hilight Irssi} %W|%n ";
|
||||
line_start_irssi = "%K{line_start}";
|
||||
timestamp = "%K%_{timestamp %_$Z} %W";
|
||||
# servertag = "$[-11]0 %W|%n ";
|
||||
servertag = "%K";
|
||||
daychange = " %K%_00:00:00%p * | Day changed! Still up? Today is %%d. %%b, Anno Domini %%Y.%n";
|
||||
talking_with = " %p*%K | %W%KYou are now having a conversation with {nick $0}.";
|
||||
refnum_too_low = " %r*%K | Window number must be greater than one.";
|
||||
error_server_sticky = " %r*%K | Window's server is %rsticky%K and it cannot be changed without -unsticky option";
|
||||
set_server_sticky = " %g*%K | Window's server %gset sticky%K";
|
||||
unset_server_sticky = " %g*%K | Window's server isn't sticky anymore";
|
||||
window_name_not_unique = " %r*%K | Window names must be unique";
|
||||
window_level = " %g*%K | Window level is now $0";
|
||||
windowlist_header = "Ref Name Active item Server Level";
|
||||
windowlist_line = "$[3]0 %|$[20]1 $[15]2 $[15]3 $4";
|
||||
windowlist_footer = "";
|
||||
windows_layout_saved = " %g*%K | Layout of windows is now %gremembered%K next time you start irssi";
|
||||
windows_layout_reset = " %g*%K | Layout of windows %greset%K to defaults";
|
||||
window_info_header = "";
|
||||
window_info_footer = "";
|
||||
window_info_refnum = "Window : {hilight #$0}";
|
||||
window_info_refnum_sticky = "Window : {hilight #$0 (sticky)}";
|
||||
window_info_name = "Name : $0";
|
||||
window_info_history = "History : $0";
|
||||
window_info_size = "Size : $0x$1";
|
||||
window_info_level = "Level : $0";
|
||||
window_info_server = "Server : $0";
|
||||
window_info_server_sticky = "Server : $0 (sticky)";
|
||||
window_info_theme = "Theme : $0$1";
|
||||
window_info_bound_items_header = "Bounds : {hilight Name Server tag}";
|
||||
window_info_bound_item = " : $[!30]0 $[!15]1 $2";
|
||||
window_info_bound_items_footer = "";
|
||||
window_info_items_header = "Items : {hilight Name Server tag}";
|
||||
window_info_item = " $[7]0: $[!30]1 $2";
|
||||
window_info_items_footer = "";
|
||||
looking_up = " %g*%K | %gLooking up%K {server $0}";
|
||||
connecting = " %g*%K | %gConnecting%K to {server $0} [$1] port {hilight $2}";
|
||||
connection_established = " %g*%K | Connection to {server $0} %gestablished%K";
|
||||
cant_connect = " %r*%K | %rUnable to connect%K server {server $0} port {hilight $1} {reason $2}";
|
||||
connection_lost = " %r*%K | %rConnection lost%K to {server $0}";
|
||||
lag_disconnected = " %r*%K | %rNo PONG reply%K from server {server $0} in $1 seconds, disconnecting";
|
||||
disconnected = " %r*%K | %rDisconnected%K from {server $0} {reason $1}";
|
||||
server_quit = " %r*%K | %rDisconnecting%K from server {server $0}: {reason $1}";
|
||||
server_changed = " %y*%K | %yChanged%K to {hilight $2} server {server $1}";
|
||||
unknown_server_tag = " %r*%K | %rUnknown%K server tag {server $0}";
|
||||
no_connected_servers = " %r*%K | %rNot connected%K to any servers";
|
||||
server_list = "{server $0}: $1:$2 ($3)";
|
||||
server_lookup_list = "{server $0}: $1:$2 ($3) (connecting...)";
|
||||
server_reconnect_list = "{server $0}: $1:$2 ($3) ($5 left before reconnecting)";
|
||||
server_reconnect_removed = " %g*%K | %gRemoved reconnection%K to server {server $0} port {hilight $1}";
|
||||
server_reconnect_not_found = " %r*%K | Reconnection tag {server $0} %rnot found%K";
|
||||
setupserver_added = " %g*%K | Server {server $0} %gsaved%K";
|
||||
setupserver_removed = " %g*%K | Server {server $0} %gremoved%K";
|
||||
setupserver_not_found = " %r*%K | Server {server $0} %rnot found%K";
|
||||
your_nick = " %p*%K | %W%KYour nickname is {nick $0}";
|
||||
kick = " %r*%K | {channick $0} was %rkicked%K from {channel $1} by {nick $2} ({reason $3})";
|
||||
invite = " %y*%K | {channick_hilight $0} %yinvites%K you to {channel $1}";
|
||||
not_invited = "You have not been invited to a channel!";
|
||||
new_topic = " %y*%K | {channick_hilight $0} %ychanged topic%W of {channel $1} to: {hilight $2}";
|
||||
topic_unset = " %y*%K | {channick_hilight $0} %yremoved the topic%W on {channel $1}";
|
||||
your_nick_changed = " %y*%K | You %yare now better known as%K nickname {channick_hilight $1}";
|
||||
talking_in = " %p*%K | %W%KYou are now on {channel $0}";
|
||||
not_in_channels = " %p*%K | %W%KYou are not on any channels";
|
||||
current_channel = " %p*%K | %W%KCurrent channel {channel $0}";
|
||||
names = " %p*%K | %W%K{names_users Users: {names_channel $0}}: {comment $1}";
|
||||
names_prefix = "%K{names_prefix $0}";
|
||||
names_nick_op = "%p{names_nick_op $0 $1}";
|
||||
names_nick_halfop = "%p{names_nick_halfop $0 $1}";
|
||||
names_nick_voice = "%p{names_nick_voice $0 $1}";
|
||||
names_nick = "%p{names_nick $0 $1}";
|
||||
endofnames = " %p*%K | {channel $0}: Total: {hilight $1} users ({comment {hilight $2} ops, {hilight $3} halfops, \012 %p*%K | {hilight $4} voiced, {hilight $5} normal users.})";
|
||||
chanlist_header = " %p*%K | %W%KYou are on the following channel:";
|
||||
chanlist_line = "{channel $[-9]0} %|+$1 ($2): $3";
|
||||
chansetup_not_found = "Channel {channel $0} not found";
|
||||
chansetup_added = "Channel {channel $0} saved";
|
||||
chansetup_removed = "Channel {channel $0} removed";
|
||||
chansetup_header = "Channel Network Password Settings";
|
||||
chansetup_line = "{channel $[15]0} %|$[10]1 $[10]2 $3";
|
||||
chansetup_footer = "";
|
||||
channel_move_notify = "{channel $0} is already joined in window $1, use \"/WINDOW ITEM MOVE $0\" to move it to this window";
|
||||
|
||||
# own_msg_private = "{ownprivmsg msg $0}$1";
|
||||
# own_msg_private_query = "{ownprivmsgnick {ownprivnick $[-9]2}}$1";
|
||||
# msg_private = "{privmsg $0 $1}$2";
|
||||
# msg_private_query = "{privmsgnick $[-9]0}$2";
|
||||
|
||||
no_msgs_got = " %p*%K | %W%KYou have not received a message from anyone yet";
|
||||
no_msgs_sent = " %p*%K | %W%KYou have not sent a message to anyone yet";
|
||||
query_stop = " %p*%K | %W%KA conversation with {nick $0} is ended.";
|
||||
no_query = " %p*%K | %W%KNo query with {nick $0}";
|
||||
query_server_changed = " %y*%K | Query with {nick $0} %ychanged%K to server {server $1}";
|
||||
query_move_notify = " %p*%K | %W%KQuery with {nick $0} is already created to window $1, use \"/WINDOW ITEM MOVE $0\" to move it to this window";
|
||||
hilight_header = " %p*%K | %W%KHighlights:";
|
||||
hilight_line = "$[-4]0 $1 $2 $3$4$5";
|
||||
hilight_footer = "";
|
||||
hilight_not_found = " %r*%K | Highlight %rnot found%K: $0";
|
||||
hilight_removed = " %g*%K | Highlight %gremoved%K: $0";
|
||||
alias_added = " %g*%K | Alias $0 %gadded%K";
|
||||
alias_removed = " %g*%K | Alias $0 %gremoved%K";
|
||||
alias_not_found = " %r*%K | %rNo such%K alias: $0";
|
||||
aliaslist_header = " %p*%K | %W%KAliases:";
|
||||
aliaslist_line = "$[10]0 $1";
|
||||
aliaslist_footer = "";
|
||||
log_opened = " %g*%K | Log file {hilight $0} %gopened%K";
|
||||
log_closed = " %g*%K | Log file {hilight $0} %gclosed%K";
|
||||
log_create_failed = " %r*%K | %rCouldn't create%K log file {hilight $0}: $1";
|
||||
log_locked = " %r*%K | Log file {hilight $0} is %rlocked%K, probably by another running Irssi";
|
||||
log_not_open = " %r*%K | Log file {hilight $0} %rnot open%K";
|
||||
log_started = " %g*%K | %gStarted%K logging to file {hilight $0}";
|
||||
log_stopped = " %r*%K | %rStopped%K logging to file {hilight $0}";
|
||||
log_list_header = " %p*%K | %W%KLogs:";
|
||||
log_list = "%K$0 $1: $2 $3$4";
|
||||
log_list_footer = "";
|
||||
windowlog_file = " %g*%K | Window LOGFILE set to $0";
|
||||
windowlog_file_logging = " %r*%K | %rCan't change%K window's logfile while log is on";
|
||||
# no_away_msgs = " %r*%K | %rNo new%K messages in awaylog";
|
||||
no_away_msgs = "";
|
||||
# away_msgs = " %g*%K | {hilight $1} %gnew messages%K in awaylog:%K";
|
||||
away_msgs = "";
|
||||
module_header = "Module Type Submodules";
|
||||
module_line = "$[!20]0 $[7]1 $2";
|
||||
module_footer = "";
|
||||
module_already_loaded = " %r*%K | Module {hilight $0/$1} already loaded";
|
||||
module_not_loaded = " %r*%K | Module {hilight $0/$1} %ris not loaded%K";
|
||||
module_load_error = " %r*%K | %rError%K loading module {hilight $0/$1}: $2";
|
||||
module_invalid = " %r*%K | {hilight $0/$1} isn't Irssi module";
|
||||
module_loaded = " %g*%K | %gLoaded%K module {hilight $0/$1}";
|
||||
module_unloaded = " %r*%K | %rUnloaded%K module {hilight $0/$1}";
|
||||
command_unknown = " %r*%K | %rUnknown%K command: $0";
|
||||
command_ambiguous = " %r*%K | %rAmbiguous%K command: $0";
|
||||
option_unknown = " %r*%K | %rUnknown%K option: $0";
|
||||
option_ambiguous = " %r*%K | %rAmbiguous%K option: $0";
|
||||
option_missing_arg = " %r*%K | %rMissing%K required argument for: $0";
|
||||
not_enough_params = " %r*%K | %rNot enough%K parameters given";
|
||||
not_connected = " %r*%K | %rNot connected%K to server";
|
||||
not_joined = " %r*%K | %rNot joined%K to any channel";
|
||||
chan_not_found = " %r*%K | %rNot joined%K to such channel";
|
||||
chan_not_synced = " %r*%K | Channel %rnot fully synchronized%K yet, try again after a while";
|
||||
illegal_proto = " %r*%K | Command isn't designed for the chat protocol of the active server";
|
||||
not_good_idea = " %r*%K | Doing this is %rnot a good idea%K. Add -YES if you really mean it";
|
||||
theme_saved = " %g*%K | Theme %gsaved%K to $0";
|
||||
theme_save_failed = " %r*%K | %rError%K saving theme to $0: $1";
|
||||
theme_not_found = " %r*%K | Theme {hilight $0} %rnot found%K";
|
||||
theme_changed = " %y*%K | %yUsing%K now theme {hilight $0} ($1)";
|
||||
window_theme = " %g*%K | %gUsing%K theme {hilight $0} in this window";
|
||||
window_theme_default = " %r*%K | %rNo theme is set%K for this window";
|
||||
window_theme_changed = " %y*%K | %yUsing%K now theme {hilight $0} ($1) in this window";
|
||||
window_theme_removed = " %g*%K | %gRemoved%K theme from this window";
|
||||
format_title = "%:[{hilight $0}] - [{hilight $1}]%:";
|
||||
format_subtitle = "[{hilight $0}]";
|
||||
format_item = "$0 = $1";
|
||||
ignored = " %g*%K | %gIgnoring%K {hilight $1} from {nick $0}";
|
||||
unignored = " %g*%K | %gUnignored%K {nick $0}";
|
||||
ignore_not_found = " %g*%K | {nick $0} %gis not%K being ignored";
|
||||
ignore_no_ignores = " %p*%K | %W%KThere are no ignores";
|
||||
ignore_header = " %p*%K | %W%KIgnorance List:";
|
||||
ignore_line = "$[-4]0 $1: $2 $3 $4";
|
||||
ignore_footer = "";
|
||||
unknown_chat_protocol = " %r*%K | %rUnknown%K chat protocol: $0";
|
||||
unknown_chatnet = " %r*%K | %rUnknown%K chat network: $0 (create it with /IRCNET ADD)";
|
||||
not_toggle = " %r*%K | Value must be either ON, OFF or TOGGLE";
|
||||
perl_error = " %r*%K | Perl %rerror%K: $0";
|
||||
bind_key = "$[!20]0 $1 $2";
|
||||
bind_unknown_id = " %r*%K | %rUnknown%K bind action: $0";
|
||||
config_saved = " %g*%K | %gSaved%K configuration to file $0";
|
||||
config_reloaded = " %g*%K | %gReloaded%K configuration";
|
||||
config_modified = " %p*%K | %W%KConfiguration file was modified since irssi was last started - do you want to overwrite the possible changes?";
|
||||
glib_error = "{error GLib $0} $1";
|
||||
overwrite_config = " %p*%K | %W%KOverwrite config (%gy%K/%rN%K)?";
|
||||
set_title = "[{hilight $0}]";
|
||||
set_item = "$0 = $1";
|
||||
set_unknown = " %r*%K | %rUnknown%K setting $0";
|
||||
set_not_boolean = " %r*%K | Setting {hilight $0} isn't boolean, use /SET";
|
||||
translation_not_found = " %r*%K | %rError%K opening translation table file $0: $1";
|
||||
translation_file_error = " %r*%K | %rError%K parsing translation table file $0";
|
||||
|
||||
#privat:
|
||||
|
||||
own_msg_private_query = "{ownprivmsgnick {ownprivnick $[-10]2}}%W$1";
|
||||
own_msg_private = "{ownprivmsg msg $0}%W$1";
|
||||
msg_private_query = "{privmsgnick {privnick $[-10]0}} %W$2";
|
||||
msg_private = "{privmsg $0 $1}%W$2";
|
||||
|
||||
# msn-styled:
|
||||
# own_msg_private_query = "{ownprivnick $2}%w$1%:";
|
||||
# msg_private_query = "{privmsgnick $0}%w$2%:";
|
||||
|
||||
};
|
||||
"fe-common/irc/dcc" = {
|
||||
dcc_list_header = "{line_start_irssi}{dcc DCC connections:}";
|
||||
dcc_list_footer = "{line_start_irssi}{dcc ];}";
|
||||
# own_dcc = "{dccownmsg dcc {dccownnick $1}}$2";
|
||||
# own_dcc_action = "{dccownaction_target $0 $1}$2";
|
||||
# own_dcc_action_query = "{dccownaction $0}$2";
|
||||
# own_dcc_ctcp = "{ownctcp ctcp $0}$1 $2";
|
||||
# dcc_msg = "{dccmsg dcc $0}$1";
|
||||
# action_dcc = "{dccaction $0}$1";
|
||||
# action_dcc_query = "{dccaction $0}$1";
|
||||
# own_dcc_query = "{ownmsgnick {dccownquerynick $0}}$2";
|
||||
# dcc_msg_query = "{privmsgnick $0}$1";
|
||||
dcc_ctcp = " %g*%K | {dcc >>> DCC CTCP {hilight $1} %greceived%K from {hilight $0}: $2}";
|
||||
dcc_chat = " %g*%K | {dcc DCC CHAT from {nick $0} [$1 port $2]}";
|
||||
dcc_chat_channel = " %g*%K | {dcc DCC CHAT from {nick $0} [$1 port $2] %grequested%K in channel {channel $3}}";
|
||||
dcc_chat_not_found = " %g*%K | {dcc No DCC CHAT %gconnection open%K to {nick $0}}";
|
||||
dcc_chat_connected = " %g*%K | {dcc DCC CHAT connection with {nick $0} [$1 port $2] %gestablished%K}";
|
||||
dcc_chat_disconnected = " %r*%K | {dcc DCC %rlost chat%K to {nick $0}}";
|
||||
dcc_send = " %g*%K | {dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes]}";
|
||||
dcc_send_channel = " %g*%K | {dcc DCC SEND from {nick $0} [$1 port $2]: $3 [$4 bytes] %grequested%K in channel {channel $5}}";
|
||||
dcc_send_exists = " %r*%K | {dcc DCC %ralready sending%K file {dccfile $0} for {nick $1}}";
|
||||
dcc_send_not_found = " %r*%K | {dcc DCC %rnot sending%K file {dccfile $1} to {nick $0}}";
|
||||
dcc_send_file_open_error = " %r*%K | {dcc DCC %rcan't open%K file {dccfile $0}: $1}";
|
||||
dcc_send_connected = " %g*%K | {dcc DCC %gsending%K file {dccfile $0} for {nick $1} [$2 port $3]}";
|
||||
dcc_send_complete = " %g*%K | {dcc DCC %gsent%K file {dccfile $0} [{hilight $1}kB] for {nick $2} in {hilight $3} secs [{hilight $4kB/s}]}";
|
||||
dcc_send_aborted = " %r*%K | {dcc DCC %raborted%K sending file {dccfile $0} for {nick $1}}";
|
||||
dcc_get_not_found = " %r*%K | {dcc DCC no file offered by {nick $0}}";
|
||||
dcc_get_connected = " %g*%K | {dcc DCC %greceiving%K file {dccfile $0} from {nick $1} [$2 port $3]}";
|
||||
dcc_get_complete = " %g*%K | {dcc DCC %greceived%K file {dccfile $0} [$1kB] from {nick $2} in {hilight $3} secs [$4kB/s]}";
|
||||
dcc_get_aborted = " %r*%K | {dcc DCC %raborted%K receiving file {dccfile $0} from {nick $1}}";
|
||||
dcc_unknown_ctcp = " %r*%K | {dcc DCC unknown ctcp {hilight $0} from {nick $1} [$2]}";
|
||||
dcc_unknown_reply = " %r*%K | {dcc DCC unknown reply {hilight $0} from {nick $1} [$2]}";
|
||||
dcc_unknown_type = " %r*%K | {dcc DCC unknown type {hilight $0}}";
|
||||
dcc_invalid_ctcp = " %r*%K | {dcc DCC received CTCP {hilight $0} with %rinvalid%K parameters from {nick $1}}";
|
||||
dcc_connect_error = " %r*%K | {dcc DCC %rcan't connect%K to {hilight $0} port {hilight $1}}";
|
||||
dcc_cant_create = " %r*%K | {dcc DCC %rcan't create%K file {dccfile $0}}";
|
||||
dcc_rejected = " %r*%K | {dcc DCC $0 was %rrejected%K by {nick $1} [{hilight $2}]}";
|
||||
dcc_request_send = " %g*%K | {dcc DCC $0 %grequest sent%K to {nick $1}: $2";
|
||||
dcc_close = "{dcc DCC $0 close for {nick $1} [{hilight $2}]}";
|
||||
dcc_lowport = "{dcc Warning: Port sent with DCC request is a lowport ({hilight $0, $1}) - this isn't normal. It is possible the address/port is faked (or maybe someone is just trying to bypass firewall)}";
|
||||
dcc_list_line_chat = "%WChat ->%K {dcc $0 $1}";
|
||||
dcc_list_line_file = "%WFile ->%K {dcc $0 $1 : $2k of $3k ($4%%) - $5kB/s - $6}";
|
||||
};
|
||||
"fe-text" = {
|
||||
lastlog_too_long = " %p*%K | %W%K/LASTLOG would print $0 lines. If you really want to print all these lines use -force option.";
|
||||
lastlog_count = "{hilight Lastlog}: $0 lines";
|
||||
lastlog_start = "{hilight Lastlog}:";
|
||||
lastlog_end = "{hilight End of Lastlog}";
|
||||
refnum_not_found = " %r*%K | Window number $0 %rnot found%K";
|
||||
window_too_small = " %r*%K | %rNot enough room%K to resize this window";
|
||||
cant_hide_last = " %r*%K | You %rcan't hide%K the last window";
|
||||
cant_hide_sticky_windows = " %r*%K | You %rcan't hide%K sticky windows (use /WINDOW STICK OFF)";
|
||||
cant_show_sticky_windows = " %r*%K | You %rcan't show%K sticky windows (use /WINDOW STICK OFF)";
|
||||
window_not_sticky = " %r*%K | Window %ris not%K sticky";
|
||||
window_set_sticky = " %g*%K | Window %gset%K sticky";
|
||||
window_unset_sticky = " %g*%K | Window %gis not%K sticky anymore";
|
||||
window_info_sticky = "Sticky : $0";
|
||||
window_scroll = " %g*%K | Window scroll mode is now $0";
|
||||
window_scroll_unknown = " %r*%K | %rUnknown%K scroll mode $0, must be ON, OFF or DEFAULT";
|
||||
};
|
||||
"fe-common/irc" = {
|
||||
netsplit = " %r*%K | %r{netsplit netsplit}%K %|{server $0} <-> {server $1} %rquits%K: $2";
|
||||
netsplit_more = " %r*%K | %r{netsplit netsplit}%K %|{server $0} <-> {server $1} %rquits:%K $2 (+$3 more, use /NETSPLIT to show all of them)";
|
||||
netsplit_join = " %g*%K | %g{netjoin netsplit}%K - %|%gjoins:%K $0";
|
||||
netsplit_join_more = " %g*%K | %g{netjoin netsplit}%K - %|over, %gjoins:%K $0 (+$1 more)";
|
||||
no_netsplits = " %p*%K | %W%KThere are no netsplits";
|
||||
netsplits_header = "Nick Channel Server Splitted server";
|
||||
netsplits_line = "$[9]0 $[10]1 $[20]2 $3";
|
||||
netsplits_footer = "";
|
||||
ircnet_added = " %g*%K | Ircnet $0 %gsaved%K";
|
||||
ircnet_removed = " %g*%K | Ircnet $0 %gremoved%K";
|
||||
ircnet_not_found = " %r*%K | Ircnet $0 %rnot found%K";
|
||||
ircnet_header = " %p*%K | %W%KIrcnets:";
|
||||
ircnet_line = "$0: $1";
|
||||
ircnet_footer = "";
|
||||
setupserver_header = "Server Port Network Settings";
|
||||
setupserver_line = "%|$[!20]0 $[5]1 $[10]2 $3";
|
||||
setupserver_footer = "";
|
||||
joinerror_toomany = " %r*%K | Join %rfails%K: {channel $0} (You have joined to too many channels)";
|
||||
joinerror_full = " %r*%K | Join %rfails%K: {channel $0} (Channel is full)";
|
||||
joinerror_invite = " %r*%K | Join %rfails%K: {channel $0} (You must be invited)";
|
||||
joinerror_banned = " %r*%K | Join %rfails%K: {channel $0} (You are banned)";
|
||||
joinerror_bad_key = " %r*%K | Join %rfails%K: {channel $0} (Wrong channel key)";
|
||||
joinerror_bad_mask = " %r*%K | Join %rfails%K: {channel $0} (Bad channel mask)";
|
||||
joinerror_unavail = " %r*%K | Join %rfails%K: {channel $0} (Channel is temporarily unavailable)";
|
||||
joinerror_duplicate = " %r*%K | Channel {channel $0} already exists - %rcannot create%K it";
|
||||
channel_rejoin = " %r*%K | Channel {channel $0} is temporarily %runavailable%K. Setting up a rejoin, to not rejoin, use /rmrejoins.";
|
||||
inviting = " %g*%K | %gInviting%K {nick $0} to {channel $1}";
|
||||
channel_created = " %p*%K | %W%K{channel $0} is created %_$1%_";
|
||||
url = " %p*%K | %W%KHome page for {channelhilight $0}: $1";
|
||||
topic = " %p*%K | %WTopic for channel {channel $0}: %_$1%_";
|
||||
no_topic = " %p*%K | %WNo topic for channel %_$0%_";
|
||||
topic_info = " %p*%K | %WTopic is set by {channick_hilight $0} {mode $1}";
|
||||
chanmode_change = " %y*%K | {nick $2} %ychanged mode%K on channel {channel $0} %w(%K{mode $1}%w)";
|
||||
server_chanmode_change = " %g*%K | {netsplit ServerMode}%K/{channelhilight $0}: {mode $1} by {nick $2}";
|
||||
channel_mode = " %y*%K | %yChannel settings%K: {mode $1}";
|
||||
bantype = " %y*%K | Ban type %ychanged%K to {channel $0}";
|
||||
no_bans = " %p*%K | %W%KNo bans in channel {channel $0}";
|
||||
banlist = "$0 - {channel $1}: ban {ban $2}";
|
||||
banlist_long = "$0 - {channel $1}: ban {ban $2} {comment by {nick $3}, $4 secs ago}";
|
||||
ebanlist = "{channel $0}: ban exception {ban $1}";
|
||||
ebanlist_long = "{channel $0}: ban exception {ban $1} {comment by {nick $2}, $3 secs ago}";
|
||||
no_invitelist = " %p*%K | %W%KInvite list is empty in channel {channel $0}";
|
||||
invitelist = "{channel $0}: invite {ban $1}";
|
||||
no_such_channel = " %r*%K | {channel $0}: %rNo such%K channel";
|
||||
channel_change = " %y*%K | %ychannel settings changed%K: %w(%K{mode $1}%w)";
|
||||
channel_synced = " %p*%K | %W%KJoin to {channel $0} was synced in {hilight $1} secs";
|
||||
usermode_change = " %y*%K | {nick $2} %ygave privileges%K on channel {channel $0} to %w(%K{mode $0}%w)";
|
||||
user_mode = " %p*%K | %W%KYour user mode is {mode $0}";
|
||||
# away = " %g*%K | You have been %gmarked%K as being away";
|
||||
# unaway = " %g*%K | You are %gno longer marked%K as being away";
|
||||
away = "";
|
||||
unaway = "";
|
||||
nick_away = " %r*%K | {nick $0} is %raway%K: $1";
|
||||
no_such_nick = " %r*%K | {nick $0}: %rNo such%K nick/channel";
|
||||
nick_in_use = " %r*%K | Nick {nick $0} is %ralready in use%K";
|
||||
nick_unavailable = " %r*%K | Nick {nick $0} is temporarily %runavailable%K";
|
||||
your_nick_owned = " %r*%K | Your nick is %rowned%K by {nick $3} {comment $1@$2}";
|
||||
whois = " %g*%K | %g{nick $0}%K ({nickhost $1@$2})%: %p*%K | ircname: $3";
|
||||
whowas = " %p*%K | %W%K{nick $0} {nickhost $1@$2}%: %p*%K | {whois ircname $3}";
|
||||
whois_idle = " %p*%K | %W%KIdle: %|since $1 days $2 hours $3 mins $4 secs";
|
||||
whois_idle_signon = " %p*%K | %W%KIdle: %|since $1 days $2 hours $3 mins $4 secs {comment Signed on: $5}";
|
||||
whois_server = " %p*%K | %W%KServer: %|$1 {comment $2}";
|
||||
whois_oper = " %p*%K | %W%KInfo: %|{hilight $1}";
|
||||
whois_registered = " %p*%K | %W%KInfo: %|has registered this nick";
|
||||
whois_help = " %p*%K | %W%KInfo: %|available for help";
|
||||
whois_modes = " %p*%K | %W%KModes: %|{mode $1}";
|
||||
whois_realhost = " %p*%K | %W%KHostname: %|{hilight $1-}";
|
||||
whois_usermode = " %p*%K | %W%KUsermode: %|{mode $1}";
|
||||
whois_channels = " %p*%K | %W%KChannels: %|{channel $1}";
|
||||
whois_away = " %p*%K | %W%KAway: %|$1";
|
||||
whois_special = " %p*%K | %W%KInfo: %|$1";
|
||||
whois_extra = " %p*%K | %W%KInfo: %|$1";
|
||||
end_of_whois = " %r*%K | %rEnd%K of WHOIS%K";
|
||||
end_of_whowas = " %p*%K | %W%KEnd of WHOWAS";
|
||||
whois_not_found = " %r*%K | There is %rno such%K nick {channick_hilight $0}";
|
||||
who = "{channelhilight $[-10]0} %|{nick $[!9]1} $[!3]2 $[!2]3 $4@$5 {comment {hilight $6}}";
|
||||
end_of_who = " %p*%K | %W%KEnd of /WHO list";
|
||||
own_notice = "%g>%K{ownnotice notice $0}%g< %w$1";
|
||||
# own_action = "{nick $[-11]0}%n $1";
|
||||
# own_action_target = "{ownaction_target $0 $2}$1";
|
||||
own_ctcp = "{ownctcp ctcp $0}$1 $2";
|
||||
notice_server = "%g>%K{servernotice $0}%g< %w$1";
|
||||
# notice_public = "%g>%K{notice $0{pubnotice_channel%g< $1}}$2";
|
||||
notice_private = "%g>%K{notice $0{pvtnotice_host $1}}%g< %w$2";
|
||||
# action_private = "{pvtaction $0}$2";
|
||||
# action_private_query = "{pvtaction_query $0}$2";
|
||||
# action_public = " {nick $[-11]0}%n $1";
|
||||
# action_public_channel = "{pubaction $0{msgchannel $1}}$2";
|
||||
ctcp_reply = " %g*%K | %gCTCP%K {hilight $0} reply from {channick_hilight $1}: $2";
|
||||
ctcp_reply_channel = " %g*%K | %gCTCP {hilight $0} reply%K from {channick_hilight $1} in channel {channel $3}: $2";
|
||||
ctcp_ping_reply = " %g*%K | %gCTCP {hilight PING} reply%K from {channick_hilight $0}: $1.$[-3.0]2 seconds";
|
||||
ctcp_requested = " %g*%K | %K{ctcp {hilight $0} {comment $1} %grequested%K {hilight $2} from {nick $3}}";
|
||||
ctcp_requested_unknown = "";
|
||||
online = " %p*%K | %W%KUsers online: {hilight $0}";
|
||||
pong = " %g*%K | PONG %greceived%K from $0: $1";
|
||||
wallops = "{wallop WALLOP {wallop_nick $0}} $1";
|
||||
action_wallops = "{wallop WALLOP {wallop_action $0}} $1";
|
||||
kill = " %r*%K | You were %r{error killed}%K by {nick $0} {nickhost $1} {reason $2} {comment Path: $3}";
|
||||
kill_server = " %r*%K | You were %r{error killed}%K by {server $0} {reason $1} {comment Path: $2}";
|
||||
error = " %r*%K | %r{error ERROR}%K $0";
|
||||
unknown_mode = " %r*%K | %rUnknown%K mode character $0";
|
||||
not_chanop = " %r*%K | You're %rnot channel operator%K in {channel $0}";
|
||||
silenced = " %g*%K | %gSilenced%K {nick $0}";
|
||||
unsilenced = " %g*%K | %gUnsilenced%K {nick $0}";
|
||||
silence_line = "{nick $0}: silence {ban $1}";
|
||||
ask_oper_pass = " %p*%K | %W%KOperator password:";
|
||||
};
|
||||
"fe-common/perl" = {
|
||||
script_not_found = " %r*%K | Script {hilight $0} %rnot found%K";
|
||||
script_not_loaded = " %r*%K | Script {hilight $0} %ris not%K loaded";
|
||||
script_loaded = " %g*%K | %gLoaded%K script {hilight $0}";
|
||||
script_unloaded = " %r*%K | %rUnloaded%K script {hilight $0}";
|
||||
no_scripts_loaded = " %p*%K | %W%KNo scripts are loaded";
|
||||
script_list_header = " %p*%K | %W%KLoaded scripts:";
|
||||
script_list_line = "$[!15]0 $1";
|
||||
script_list_footer = "";
|
||||
script_error = "{error %r*%K %rError%K in script {hilight $0}:}";
|
||||
};
|
||||
# "fe-common/irc/notifylist" = {
|
||||
# notify_join = "{nick $0} [$1@$2] [{hilight $3}] has joined to $4";
|
||||
# notify_part = "{nick $0} has left $4";
|
||||
# notify_away = "{nick $0} [$5] [$1@$2] [{hilight $3}] is now away: $4";
|
||||
# notify_unaway = "{nick $0} [$4] [$1@$2] [{hilight $3}] is now unaway";
|
||||
# notify_unidle = "{nick $0} [$5] [$1@$2] [{hilight $3}] just stopped idling";
|
||||
# notify_online = "On $0: {hilight $1}";
|
||||
# notify_offline = "Offline: $0";
|
||||
# notify_list = "$0: $1 $2 $3";
|
||||
# notify_list_empty = "The notify list is empty";
|
||||
# };
|
||||
"Irssi::Script::nickcolor" = {
|
||||
pubmsg_hilight = "{pubmsghinick $0 $3 $[-9]1}$2";
|
||||
};
|
||||
};
|
||||
42
termite/config
Normal file
42
termite/config
Normal file
@@ -0,0 +1,42 @@
|
||||
[options]
|
||||
font = Inconsolata-g 10
|
||||
|
||||
[colors]
|
||||
|
||||
# special
|
||||
foreground = #daba8b
|
||||
foreground_bold = #daba8b
|
||||
cursor = #daba8b
|
||||
background = #191716
|
||||
|
||||
# black
|
||||
color0 = #0f0e0d
|
||||
color8 = #383332
|
||||
|
||||
# red
|
||||
color1 = #845336
|
||||
color9 = #8c4f4a
|
||||
|
||||
# green
|
||||
color2 = #57553c
|
||||
color10 = #898471
|
||||
|
||||
# yellow
|
||||
color3 = #a17e3e
|
||||
color11 = #c8b491
|
||||
|
||||
# blue
|
||||
color4 = #43454f
|
||||
color12 = #65788f
|
||||
|
||||
# magenta
|
||||
color5 = #604848
|
||||
color13 = #755e4a
|
||||
|
||||
# cyan
|
||||
color6 = #5c6652
|
||||
color14 = #718062
|
||||
|
||||
# white
|
||||
color7 = #a18b62
|
||||
color15 = #bc9d66
|
||||
54
termite/termite.terminfo
Normal file
54
termite/termite.terminfo
Normal file
@@ -0,0 +1,54 @@
|
||||
# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-termite
|
||||
xterm-termite|VTE-based terminal,
|
||||
am, bce, ccc, hs, km, mc5i, mir, msgr, npc, xenl,
|
||||
colors#0x100, cols#80, it#8, lines#24, pairs#0x7fff,
|
||||
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
|
||||
bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
|
||||
clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=\r,
|
||||
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
|
||||
cud=\E[%p1%dB, cud1=\n, cuf=\E[%p1%dC, cuf1=\E[C,
|
||||
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
|
||||
cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
|
||||
dl=\E[%p1%dM, dl1=\E[M, dsl=\E]2;\007, ech=\E[%p1%dX,
|
||||
ed=\E[J, el=\E[K, el1=\E[1K, flash=\E[?5h$<100/>\E[?5l,
|
||||
fsl=^G, home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH,
|
||||
ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\n,
|
||||
indn=\E[%p1%dS,
|
||||
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
|
||||
invis=\E[8m, is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~,
|
||||
kEND=\E[1;2F, kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D,
|
||||
kNXT=\E[6;2~, kPRV=\E[5;2~, kRIT=\E[1;2C, kb2=\EOE, kbs=^?,
|
||||
kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
|
||||
kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
|
||||
kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q,
|
||||
kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~,
|
||||
kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,
|
||||
kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~,
|
||||
kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S,
|
||||
kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~,
|
||||
kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~,
|
||||
kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q,
|
||||
kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~,
|
||||
kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,
|
||||
kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,
|
||||
kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q,
|
||||
kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
|
||||
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
|
||||
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
|
||||
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
|
||||
kf8=\E[19~, kf9=\E[20~, khome=\EOH, kich1=\E[2~,
|
||||
kind=\E[1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
|
||||
kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, meml=\El,
|
||||
memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
|
||||
rin=\E[%p1%dT, ritm=\E[23m, rmacs=\E(B, rmam=\E[?7l,
|
||||
rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>,
|
||||
rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
|
||||
rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
|
||||
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
|
||||
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
|
||||
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
|
||||
sgr0=\E(B\E[m, sitm=\E[3m, smacs=\E(0, smam=\E[?7h,
|
||||
smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=,
|
||||
smm=\E[?1034h, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
|
||||
tsl=\E]2;, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
|
||||
vpa=\E[%i%p1%dd,
|
||||
118
vim/.vimrc
Normal file
118
vim/.vimrc
Normal file
@@ -0,0 +1,118 @@
|
||||
set nocompatible " be iMproved, required
|
||||
filetype off " required
|
||||
syntax on
|
||||
set term=xterm-256color
|
||||
set laststatus=2
|
||||
set nowrap
|
||||
set nofoldenable
|
||||
set number
|
||||
set noshowmode
|
||||
set title
|
||||
set novisualbell
|
||||
set shortmess=atI
|
||||
set nostartofline
|
||||
set autoindent
|
||||
set smartindent
|
||||
set expandtab
|
||||
set smarttab
|
||||
set shiftwidth=2
|
||||
set tabstop=4
|
||||
"set textwidth=80
|
||||
"set colorcolumn=81
|
||||
set backupcopy=yes
|
||||
|
||||
filetype plugin indent on
|
||||
|
||||
|
||||
" set the runtime path to include Vundle and initialize
|
||||
set rtp+=~/.vim/bundle/Vundle.vim
|
||||
call vundle#begin()
|
||||
" alternatively, pass a path where Vundle should install plugins
|
||||
"call vundle#begin('~/some/path/here')
|
||||
|
||||
" let Vundle manage Vundle, required
|
||||
Plugin 'VundleVim/Vundle.vim'
|
||||
Plugin 'vim-airline/vim-airline'
|
||||
Plugin 'vim-airline/vim-airline-themes'
|
||||
Plugin 'Valloric/YouCompleteMe'
|
||||
Plugin 'scrooloose/nerdtree'
|
||||
Plugin 'scrooloose/syntastic'
|
||||
Plugin 'mattn/emmet-vim'
|
||||
Plugin 'editorconfig/editorconfig-vim'
|
||||
Plugin 'mxw/vim-jsx'
|
||||
Plugin 'Raimondi/delimitMate'
|
||||
Plugin 'tomtom/tcomment_vim'
|
||||
Plugin 'tpope/vim-surround'
|
||||
Plugin 'tpope/vim-fugitive'
|
||||
Plugin 'hail2u/vim-css3-syntax'
|
||||
Plugin 'gregsexton/MatchTag'
|
||||
Plugin 'alvan/vim-closetag'
|
||||
Plugin 'pangloss/vim-javascript'
|
||||
Plugin 'junegunn/goyo.vim'
|
||||
Plugin 'ctrlpvim/ctrlp.vim'
|
||||
" All of your Plugins must be added before the following line
|
||||
call vundle#end() " required
|
||||
filetype plugin indent on " required
|
||||
" To ignore plugin indent changes, instead use:
|
||||
"filetype plugin on
|
||||
"
|
||||
" Brief help
|
||||
" :PluginList - lists configured plugins
|
||||
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
|
||||
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
|
||||
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
|
||||
"
|
||||
" see :h vundle for more details or wiki for FAQ
|
||||
" Put your non-Plugin stuff after this line
|
||||
|
||||
" Airline
|
||||
let g:airline_solarized_bg='dark'
|
||||
let g:airline_theme='tomorrow'
|
||||
let g:airline_powerline_fonts=1
|
||||
|
||||
" Closetag
|
||||
let g:closetag_filenames = '*.hbs,*.html'
|
||||
|
||||
" CtrlP
|
||||
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard']
|
||||
let g:ctrlp_custom_ignore = 'node_modules\|git'
|
||||
|
||||
" jsx
|
||||
let g:jsx_ext_required = 0
|
||||
|
||||
" Nerdtree
|
||||
map <F2> :NERDTree<CR>
|
||||
map <F3> :NERDTreeToggle<CR>
|
||||
|
||||
" Syntastic
|
||||
let g:syntastic_javascript_checkers = ['eslint']
|
||||
let g:syntastic_mode_map = {
|
||||
\'mode': 'active',
|
||||
\'active_filetypes': [],
|
||||
\'passive_filetypes': ['html'] }
|
||||
let g:syntastic_always_populate_loc_list = 1
|
||||
let g:syntastic_error_symbol = '✗✗'
|
||||
let g:syntastic_style_error_symbol = '✠✠'
|
||||
let g:syntastic_warning_symbol = '∆∆'
|
||||
let g:syntastic_style_warning_symbol = '≈≈'
|
||||
let g:syntastic_check_on_open = 1
|
||||
|
||||
fun! SetJavascriptCheckers()
|
||||
let localEslint = findfile('node_modules/.bin/eslint', '.;')
|
||||
if localEslint != ''
|
||||
let b:syntastic_javascript_eslint_exec = fnamemodify(localEslint, ':p')
|
||||
endif
|
||||
endf
|
||||
|
||||
fun! SetCssCheckers()
|
||||
let localStylelint = findfile('node_modules/.bin/stylelint', '.;')
|
||||
if localStylelint != ''
|
||||
let b:syntastic_css_stylelint_exec = fnamemodify(localStylelint, ':p')
|
||||
endif
|
||||
endf
|
||||
|
||||
if !exists('autocommands_loaded')
|
||||
let autocommands_loaded = 1
|
||||
autocmd FileType javascript :call SetJavascriptCheckers()
|
||||
autocmd FileType scss :call SetCssCheckers()
|
||||
endif
|
||||
144
vim/colors/wwdc16.vim
Normal file
144
vim/colors/wwdc16.vim
Normal file
@@ -0,0 +1,144 @@
|
||||
" Name: WWDC16 colorscheme
|
||||
" Author: Lifepillar <lifepillar@lifepillar.me>
|
||||
" License: This file is placed in the public domain
|
||||
|
||||
set background=dark
|
||||
hi clear
|
||||
if exists('syntax_on')
|
||||
syntax reset
|
||||
endif
|
||||
let colors_name = 'wwdc16'
|
||||
|
||||
if !has('gui_running') && get(g:, "wwdc16_term_trans_bg", 0)
|
||||
hi Normal ctermfg=15 ctermbg=NONE cterm=NONE guifg=#ffffff guibg=NONE gui=NONE
|
||||
else
|
||||
hi Normal ctermfg=15 ctermbg=0 cterm=NONE guifg=#ffffff guibg=#292c36 gui=NONE
|
||||
endif
|
||||
|
||||
hi ColorColumn ctermfg=NONE ctermbg=8 cterm=NONE guifg=NONE guibg=#333333 gui=NONE guisp=NONE
|
||||
hi Conceal ctermfg=2 ctermbg=NONE cterm=NONE guifg=#64878f guibg=NONE gui=NONE guisp=NONE
|
||||
hi Cursor ctermfg=15 ctermbg=4 cterm=NONE guifg=#ffffff guibg=#4670d8 gui=NONE guisp=NONE
|
||||
hi! link lCursor Cursor
|
||||
hi CursorIM ctermfg=NONE ctermbg=15 cterm=NONE guifg=NONE guibg=#ffffff gui=NONE guisp=NONE
|
||||
hi CursorColumn ctermfg=NONE ctermbg=8 cterm=NONE guifg=NONE guibg=#333333 gui=NONE guisp=NONE
|
||||
hi CursorLine ctermfg=NONE ctermbg=8 cterm=NONE guifg=NONE guibg=#333333 gui=NONE guisp=NONE
|
||||
hi CursorLineNr ctermfg=15 ctermbg=NONE cterm=NONE guifg=#ffffff guibg=NONE gui=NONE guisp=NONE
|
||||
hi DiffAdd ctermfg=11 ctermbg=0 cterm=NONE,reverse guifg=#95c76f guibg=#292c36 gui=NONE,reverse guisp=NONE
|
||||
hi DiffChange ctermfg=3 ctermbg=15 cterm=NONE,reverse guifg=#d28e5d guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi DiffDelete ctermfg=1 ctermbg=15 cterm=NONE,reverse guifg=#dc3c3c guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi DiffText ctermfg=10 ctermbg=15 cterm=NONE,bold,reverse guifg=#52bd58 guibg=#ffffff gui=NONE,bold,reverse guisp=NONE
|
||||
hi Directory ctermfg=11 ctermbg=NONE cterm=NONE guifg=#95c76f guibg=NONE gui=NONE guisp=NONE
|
||||
hi EndOfBuffer ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE guisp=NONE
|
||||
hi Error ctermfg=1 ctermbg=15 cterm=NONE,reverse guifg=#dc3c3c guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi ErrorMsg ctermfg=1 ctermbg=15 cterm=NONE,reverse guifg=#dc3c3c guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi FoldColumn ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE guisp=NONE
|
||||
hi Folded ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE guisp=NONE
|
||||
hi IncSearch ctermfg=3 ctermbg=15 cterm=NONE,reverse guifg=#d28e5d guibg=#ffffff gui=NONE,standout guisp=NONE
|
||||
hi LineNr ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE guisp=NONE
|
||||
hi MatchParen ctermfg=8 ctermbg=3 cterm=NONE,bold,reverse guifg=#333333 guibg=#d28e5d gui=NONE,bold,reverse guisp=NONE
|
||||
hi ModeMsg ctermfg=15 ctermbg=NONE cterm=NONE guifg=#ffffff guibg=NONE gui=NONE guisp=NONE
|
||||
hi MoreMsg ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE guisp=NONE
|
||||
hi NonText ctermfg=15 ctermbg=NONE cterm=NONE guifg=#ffffff guibg=NONE gui=NONE guisp=NONE
|
||||
hi Pmenu ctermfg=0 ctermbg=2 cterm=NONE guifg=#292c36 guibg=#64878f gui=NONE guisp=NONE
|
||||
hi PmenuSbar ctermfg=9 ctermbg=8 cterm=NONE guifg=#666666 guibg=#333333 gui=NONE guisp=NONE
|
||||
hi PmenuSel ctermfg=15 ctermbg=3 cterm=NONE guifg=#ffffff guibg=#d28e5d gui=NONE guisp=NONE
|
||||
hi PmenuThumb ctermfg=9 ctermbg=3 cterm=NONE guifg=#666666 guibg=#d28e5d gui=NONE guisp=NONE
|
||||
hi Question ctermfg=7 ctermbg=NONE cterm=NONE guifg=#999999 guibg=NONE gui=NONE guisp=NONE
|
||||
hi Search ctermfg=3 ctermbg=15 cterm=NONE,reverse guifg=#d28e5d guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi SignColumn ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE guisp=NONE
|
||||
hi SpecialKey ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE guisp=NONE
|
||||
hi SpellBad ctermfg=NONE ctermbg=NONE cterm=NONE,underline guifg=NONE guibg=NONE gui=NONE,undercurl guisp=#b73999
|
||||
hi SpellCap ctermfg=13 ctermbg=NONE cterm=NONE,underline guifg=#8485ce guibg=NONE gui=NONE,undercurl guisp=#b73999
|
||||
hi SpellLocal ctermfg=13 ctermbg=NONE cterm=NONE,underline guifg=#8485ce guibg=NONE gui=NONE,undercurl guisp=#b73999
|
||||
hi SpellRare ctermfg=13 ctermbg=NONE cterm=NONE,underline guifg=#8485ce guibg=NONE gui=NONE,undercurl guisp=#b73999
|
||||
hi StatusLine ctermfg=2 ctermbg=15 cterm=NONE,reverse guifg=#64878f guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi StatusLineNC ctermfg=2 ctermbg=0 cterm=NONE,reverse guifg=#64878f guibg=#292c36 gui=NONE,reverse guisp=NONE
|
||||
hi TabLine ctermfg=0 ctermbg=2 cterm=NONE guifg=#292c36 guibg=#64878f gui=NONE guisp=NONE
|
||||
hi TabLineFill ctermfg=0 ctermbg=2 cterm=NONE guifg=#292c36 guibg=#64878f gui=NONE guisp=NONE
|
||||
hi TabLineSel ctermfg=15 ctermbg=2 cterm=NONE guifg=#ffffff guibg=#64878f gui=NONE guisp=NONE
|
||||
hi Title ctermfg=3 ctermbg=NONE cterm=NONE,bold guifg=#d28e5d guibg=NONE gui=NONE,bold guisp=NONE
|
||||
hi VertSplit ctermfg=2 ctermbg=2 cterm=NONE guifg=#64878f guibg=#64878f gui=NONE guisp=NONE
|
||||
hi Visual ctermfg=4 ctermbg=15 cterm=NONE,reverse guifg=#4670d8 guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi VisualNOS ctermfg=15 ctermbg=4 cterm=NONE guifg=#ffffff guibg=#4670d8 gui=NONE guisp=NONE
|
||||
hi WarningMsg ctermfg=1 ctermbg=NONE cterm=NONE guifg=#dc3c3c guibg=NONE gui=NONE guisp=NONE
|
||||
hi WildMenu ctermfg=15 ctermbg=5 cterm=NONE guifg=#ffffff guibg=#b73999 gui=NONE guisp=NONE
|
||||
hi Boolean ctermfg=11 ctermbg=NONE cterm=NONE guifg=#95c76f guibg=NONE gui=NONE guisp=NONE
|
||||
hi Character ctermfg=3 ctermbg=NONE cterm=NONE guifg=#d28e5d guibg=NONE gui=NONE guisp=NONE
|
||||
hi Comment ctermfg=7 ctermbg=NONE cterm=NONE guifg=#999999 guibg=NONE gui=NONE,italic guisp=NONE
|
||||
hi Constant ctermfg=3 ctermbg=NONE cterm=NONE guifg=#d28e5d guibg=NONE gui=NONE guisp=NONE
|
||||
hi Debug ctermfg=5 ctermbg=NONE cterm=NONE guifg=#b73999 guibg=NONE gui=NONE guisp=NONE
|
||||
hi Delimiter ctermfg=15 ctermbg=NONE cterm=NONE guifg=#ffffff guibg=NONE gui=NONE guisp=NONE
|
||||
hi Float ctermfg=11 ctermbg=NONE cterm=NONE guifg=#95c76f guibg=NONE gui=NONE guisp=NONE
|
||||
hi Function ctermfg=10 ctermbg=NONE cterm=NONE guifg=#52bd58 guibg=NONE gui=NONE guisp=NONE
|
||||
hi Identifier ctermfg=6 ctermbg=NONE cterm=NONE guifg=#00aba5 guibg=NONE gui=NONE guisp=NONE
|
||||
hi Ignore ctermfg=15 ctermbg=NONE cterm=NONE guifg=#ffffff guibg=NONE gui=NONE guisp=NONE
|
||||
hi Include ctermfg=1 ctermbg=NONE cterm=NONE guifg=#dc3c3c guibg=NONE gui=NONE guisp=NONE
|
||||
hi Keyword ctermfg=2 ctermbg=NONE cterm=NONE guifg=#64878f guibg=NONE gui=NONE guisp=NONE
|
||||
hi Label ctermfg=10 ctermbg=NONE cterm=NONE guifg=#52bd58 guibg=NONE gui=NONE guisp=NONE
|
||||
hi Number ctermfg=11 ctermbg=NONE cterm=NONE guifg=#95c76f guibg=NONE gui=NONE guisp=NONE
|
||||
hi Operator ctermfg=6 ctermbg=NONE cterm=NONE guifg=#00aba5 guibg=NONE gui=NONE guisp=NONE
|
||||
hi PreProc ctermfg=1 ctermbg=NONE cterm=NONE guifg=#dc3c3c guibg=NONE gui=NONE guisp=NONE
|
||||
hi Special ctermfg=1 ctermbg=NONE cterm=NONE guifg=#dc3c3c guibg=NONE gui=NONE guisp=NONE
|
||||
hi SpecialChar ctermfg=5 ctermbg=NONE cterm=NONE guifg=#b73999 guibg=NONE gui=NONE guisp=NONE
|
||||
hi SpecialComment ctermfg=5 ctermbg=NONE cterm=NONE guifg=#b73999 guibg=NONE gui=NONE guisp=NONE
|
||||
hi Statement ctermfg=2 ctermbg=NONE cterm=NONE guifg=#64878f guibg=NONE gui=NONE guisp=NONE
|
||||
hi StorageClass ctermfg=6 ctermbg=NONE cterm=NONE guifg=#00aba5 guibg=NONE gui=NONE guisp=NONE
|
||||
hi String ctermfg=11 ctermbg=NONE cterm=NONE guifg=#95c76f guibg=NONE gui=NONE guisp=NONE
|
||||
hi Structure ctermfg=1 ctermbg=NONE cterm=NONE guifg=#dc3c3c guibg=NONE gui=NONE guisp=NONE
|
||||
hi Todo ctermfg=5 ctermbg=NONE cterm=NONE,bold guifg=#b73999 guibg=NONE gui=NONE,bold guisp=NONE
|
||||
hi Type ctermfg=13 ctermbg=NONE cterm=NONE guifg=#8485ce guibg=NONE gui=NONE guisp=NONE
|
||||
hi Underlined ctermfg=NONE ctermbg=NONE cterm=NONE,underline guifg=NONE guibg=NONE gui=NONE,underline guisp=NONE
|
||||
hi WWDC16Black ctermfg=0 ctermbg=NONE cterm=NONE guifg=#292c36 guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Red ctermfg=1 ctermbg=NONE cterm=NONE guifg=#dc3c3c guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Forestgreen ctermfg=2 ctermbg=NONE cterm=NONE guifg=#64878f guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Orange ctermfg=3 ctermbg=NONE cterm=NONE guifg=#d28e5d guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Blue ctermfg=4 ctermbg=NONE cterm=NONE guifg=#4670d8 guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Fusia ctermfg=5 ctermbg=NONE cterm=NONE guifg=#b73999 guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Bluegreen ctermfg=6 ctermbg=NONE cterm=NONE guifg=#00aba5 guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Grey3 ctermfg=7 ctermbg=NONE cterm=NONE guifg=#999999 guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Grey1 ctermfg=8 ctermbg=NONE cterm=NONE guifg=#333333 guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Grey2 ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Green ctermfg=10 ctermbg=NONE cterm=NONE guifg=#52bd58 guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Mintgreen ctermfg=11 ctermbg=NONE cterm=NONE guifg=#95c76f guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16Purple ctermfg=13 ctermbg=NONE cterm=NONE guifg=#8485ce guibg=NONE gui=NONE guisp=NONE
|
||||
hi WWDC16White ctermfg=15 ctermbg=NONE cterm=NONE guifg=#ffffff guibg=NONE gui=NONE guisp=NONE
|
||||
hi NormalMode ctermfg=9 ctermbg=15 cterm=NONE,reverse guifg=#666666 guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi InsertMode ctermfg=11 ctermbg=0 cterm=NONE,reverse guifg=#95c76f guibg=#292c36 gui=NONE,reverse guisp=NONE
|
||||
hi ReplaceMode ctermfg=3 ctermbg=0 cterm=NONE,reverse guifg=#d28e5d guibg=#292c36 gui=NONE,reverse guisp=NONE
|
||||
hi VisualMode ctermfg=4 ctermbg=15 cterm=NONE,reverse guifg=#4670d8 guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
hi CommandMode ctermfg=5 ctermbg=15 cterm=NONE,reverse guifg=#b73999 guibg=#ffffff gui=NONE,reverse guisp=NONE
|
||||
if has('nvim')
|
||||
hi! link TermCursor Cursor
|
||||
hi TermCursorNC ctermfg=15 ctermbg=7 cterm=NONE guifg=#ffffff guibg=#999999 gui=NONE guisp=NONE
|
||||
let g:terminal_color_0='#292c36'
|
||||
let g:terminal_color_1='#dc3c3c'
|
||||
let g:terminal_color_2='#64878f'
|
||||
let g:terminal_color_3='#d28e5d'
|
||||
let g:terminal_color_4='#4670d8'
|
||||
let g:terminal_color_5='#b73999'
|
||||
let g:terminal_color_6='#00aba5'
|
||||
let g:terminal_color_7='#999999'
|
||||
let g:terminal_color_8='#333333'
|
||||
let g:terminal_color_9='#666666'
|
||||
let g:terminal_color_10='#52bd58'
|
||||
let g:terminal_color_11='#95c76f'
|
||||
let g:terminal_color_12='#4670d8'
|
||||
let g:terminal_color_13='#8485ce'
|
||||
let g:terminal_color_14='#00aba5'
|
||||
let g:terminal_color_15='#ffffff'
|
||||
endif
|
||||
hi vimMapModKey ctermfg=3 ctermbg=NONE cterm=NONE guifg=#d28e5d guibg=NONE gui=NONE guisp=NONE
|
||||
hi vimMapMod ctermfg=3 ctermbg=NONE cterm=NONE guifg=#d28e5d guibg=NONE gui=NONE guisp=NONE
|
||||
hi vimBracket ctermfg=6 ctermbg=NONE cterm=NONE guifg=#00aba5 guibg=NONE gui=NONE guisp=NONE
|
||||
hi vimNotation ctermfg=6 ctermbg=NONE cterm=NONE guifg=#00aba5 guibg=NONE gui=NONE guisp=NONE
|
||||
hi! link vimUserFunc Function
|
||||
hi gitcommitComment ctermfg=9 ctermbg=NONE cterm=NONE guifg=#666666 guibg=NONE gui=NONE,italic guisp=NONE
|
||||
hi markdownHeadingDelimiter ctermfg=3 ctermbg=NONE cterm=NONE guifg=#d28e5d guibg=NONE gui=NONE guisp=NONE
|
||||
hi markdownURL ctermfg=13 ctermbg=NONE cterm=NONE guifg=#8485ce guibg=NONE gui=NONE guisp=NONE
|
||||
hi! link javascriptBraces Delimiter
|
||||
hi SyntasticErrorSign ctermfg=1 ctermbg=NONE cterm=NONE guifg=#dc3c3c guibg=NONE gui=NONE guisp=NONE
|
||||
hi SyntasticWarningSign ctermfg=3 ctermbg=NONE cterm=NONE guifg=#d28e5d guibg=NONE gui=NONE guisp=NONE
|
||||
if get(g:, "wwdc16_term_italics", 0)
|
||||
hi Comment cterm=italic
|
||||
hi gitcommitComment cterm=italic
|
||||
endif
|
||||
91
zsh/.zshrc
Normal file
91
zsh/.zshrc
Normal file
@@ -0,0 +1,91 @@
|
||||
export PATH=$HOME/.dotfiles/bin:$PATH
|
||||
|
||||
# Path to your oh-my-zsh installation.
|
||||
export ZSH=/home/dan/.oh-my-zsh
|
||||
|
||||
# Set name of the theme to load. Optionally, if you set this to "random"
|
||||
# it'll load a random theme each time that oh-my-zsh is loaded.
|
||||
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
|
||||
ZSH_THEME="muse"
|
||||
|
||||
# Uncomment the following line to use case-sensitive completion.
|
||||
# CASE_SENSITIVE="true"
|
||||
|
||||
# Uncomment the following line to use hyphen-insensitive completion. Case
|
||||
# sensitive completion must be off. _ and - will be interchangeable.
|
||||
# HYPHEN_INSENSITIVE="true"
|
||||
|
||||
# Uncomment the following line to disable bi-weekly auto-update checks.
|
||||
# DISABLE_AUTO_UPDATE="true"
|
||||
|
||||
# Uncomment the following line to change how often to auto-update (in days).
|
||||
# export UPDATE_ZSH_DAYS=13
|
||||
|
||||
# Uncomment the following line to disable colors in ls.
|
||||
# DISABLE_LS_COLORS="true"
|
||||
|
||||
# Uncomment the following line to disable auto-setting terminal title.
|
||||
# DISABLE_AUTO_TITLE="true"
|
||||
|
||||
# Uncomment the following line to enable command auto-correction.
|
||||
# ENABLE_CORRECTION="true"
|
||||
|
||||
# Uncomment the following line to display red dots whilst waiting for completion.
|
||||
# COMPLETION_WAITING_DOTS="true"
|
||||
|
||||
# Uncomment the following line if you want to disable marking untracked files
|
||||
# under VCS as dirty. This makes repository status check for large repositories
|
||||
# much, much faster.
|
||||
# DISABLE_UNTRACKED_FILES_DIRTY="true"
|
||||
|
||||
# Uncomment the following line if you want to change the command execution time
|
||||
# stamp shown in the history command output.
|
||||
# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
|
||||
# HIST_STAMPS="mm/dd/yyyy"
|
||||
|
||||
# Would you like to use another custom folder than $ZSH/custom?
|
||||
# ZSH_CUSTOM=/path/to/new-custom-folder
|
||||
|
||||
# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
|
||||
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
|
||||
# Example format: plugins=(rails git textmate ruby lighthouse)
|
||||
# Add wisely, as too many plugins slow down shell startup.
|
||||
plugins=(git)
|
||||
|
||||
source $ZSH/oh-my-zsh.sh
|
||||
|
||||
# User configuration
|
||||
|
||||
# export MANPATH="/usr/local/man:$MANPATH"
|
||||
|
||||
# You may need to manually set your language environment
|
||||
# export LANG=en_US.UTF-8
|
||||
|
||||
# Preferred editor for local and remote sessions
|
||||
# if [[ -n $SSH_CONNECTION ]]; then
|
||||
# export EDITOR='vim'
|
||||
# else
|
||||
# export EDITOR='mvim'
|
||||
# fi
|
||||
|
||||
# Compilation flags
|
||||
# export ARCHFLAGS="-arch x86_64"
|
||||
|
||||
# ssh
|
||||
# export SSH_KEY_PATH="~/.ssh/rsa_id"
|
||||
|
||||
# Set personal aliases, overriding those provided by oh-my-zsh libs,
|
||||
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
|
||||
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
|
||||
# For a full list of active aliases, run `alias`.
|
||||
#
|
||||
# Example aliases
|
||||
# alias zshconfig="mate ~/.zshrc"
|
||||
# alias ohmyzsh="mate ~/.oh-my-zsh"
|
||||
|
||||
source ~/.dotfiles/zsh/aliases.zsh
|
||||
|
||||
export NVM_DIR="$HOME/.nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
||||
|
||||
16
zsh/aliases.zsh
Normal file
16
zsh/aliases.zsh
Normal file
@@ -0,0 +1,16 @@
|
||||
alias zshconfig="vim ~/.zshrc"
|
||||
alias ohmyzsh="vim ~/.oh-my-zsh"
|
||||
alias wttr="curl wttr.in/~Brentwood+UK"
|
||||
alias phoenixfm="mpv 'http://hyades.shoutca.st:8555/stream'"
|
||||
alias cl="find . -type f -name '$1' | xargs wc -l"
|
||||
alias fif="find . -type f -print | xargs grep '$1'"
|
||||
alias hcf="sudo shutdown -h now"
|
||||
alias swh="tmux split-window -h"
|
||||
alias swv="tmux split-window -v"
|
||||
function rp() {
|
||||
tmux resize-pane -$1 $2
|
||||
}
|
||||
function android-backup() {
|
||||
filename=Full_Backup_$(date +%Y-%m-%d_%T).ab
|
||||
adb backup -f "${filename}" --twrp system cache data boot recovery --compress
|
||||
}
|
||||
Reference in New Issue
Block a user