Git Product home page Git Product logo

shic's Introduction

shic - SHellscript Irc Client

shic is a simple IRC client written in pure BASH. It is inspired by sic. shic supports coloring, configuration files and automatic execution of commands.

shic came to be as a learning excercise of BASH. The design principles are:

  • Pure BASH
  • High functionality-to-code ratio
  • Few lines of code

Options

shic accepts the following options

  • -h hostname: hostname of IRC server
  • -p port: port of IRC server
  • -n nickname: nickname and username
  • -k password: password for username
  • -c configfile: load configfile (see below)
  • -v : print version info and exit

Configuration

Besides giving shic command line options, configuration can be stored in ~/.shicrc, $XDG_CONFIG_HOME/shic/shicrc, or a separate file and specified with the -c option. shic source:s these file, so they must be valid BASH. Variables can also be set in the environment, e.g. through export SHIC_NICK="mynick" in e.g. ~/.bashrc. Precedence for configuration, i.e. which setting counts if there are many, is from lower to higher:

  • Defaults (see below)
  • Environment
  • ~/.shicrc
  • ~/.config/shic/shicrc
  • Command line options, including configuration files, in order left to right

Below is and example of a valid configuration file, here set with the defaults

SHIC_HOST="irc.freenode.net"
SHIC_PORT=6667
SHIC_NICK="$USER"
SHIC_PASS=""
# Automatically execute these inputs at startup, separated by ;
# e.g: SHIC_SCRIPT=":j #archlinux; Heya all!; :s;
SHIC_SCRIPT=""
# Red error, green background for private message, cyan for #archlinux,
# white for conversations in and out, and gray for everything else
SHIC_PREFIX=(
    "\e[31m::^ERROR"
    "\e[42m\e[30m::(^<[^@]*@[^#])"
    "\e[36m::#archlinux"
    "\e[0m::^<"
    "\e[0m::^->"
    "\e[1;30m::(.*)"
)

SHIC_PREFIX is an array of prefix::regexp pairs. If an output line matches regexp (through the BASH =~ operator), prefix will be printed before the line. This is best used to set different colors for different messages. Gotcha/known bug: spaces are not allowed in the regexp.

Commands

All messages are sent to the current channel (set using :s, see below). All input starting with : is considered a command. If the command is not one of the below, the leading : is stripped and the command is sent to the server. Use this for other IRC features, e.g. :NICK mynewnick.

  • :j #channel - join #channel
  • :l #channel - leave #channel
  • :m #channel/user message - send message to #channel or user
  • :s #channel/user - set #channel or user as the current channel
  • :q - exit

Screenshot

shic running in the left window with the config below. Green text is me talking, green background is someone mentioning my nick. Cyan is #archlinux, yellow is #python and white is #bash, or me typing. Gray are status messages and the like.

SHIC_HOST="irc.freenode.net"
SHIC_PORT=6667
SHIC_NICK="halhen"
SHIC_PASS=""
SHIC_SCRIPT=":j #archlinux; :j #python; :s;"
SHIC_PREFIX=(
    "\e[31m::^ERROR"
    "\e[42m\e[30m::(^<[^@]*@[^#])"
    "\e[42m\e[30m::(^<.*$SHIC_NICK)"
    "\e[32m::^->"
    "\e[36m::#archlinux>"
    "\e[33m::#python>"
    "\e[0m::^<"
    "\e[1;30m::(.*)"
)

screenshot

FAQ

How is shic licensed?

It is public domain. Do what you want with it, no warranties. And don't feed the trolls.

shic doesn't do X, like Y does

Nope. But Y isn't 100-ish lines of BASH, including configuration and input. However, let me know if you have an idea.

Chat messages overwrite my input

Yes, they do. If you know of a BASH way to solve this in few lines of code, let me know. All hope is not lost, though. shic uses the readline library, so you can use the same keybindings as in bash. Put the following line in your ~/.inputrc and press Ctrl+L to redraw your current line.

"\C-l":redraw-current-line

Your BASH skills suck. You should use X instead of Y

Yes. I'm only now moving from beginner to not-as-much-beginner in shell scripting. If X is a better way to do Y in BASH, I'm happy to be taught.

I found a bug

I'm sure you did. My improving BASH skills are only slighly better than my lacking knowledge of IRC. Please tell me, and I will try to fix it.

shic made me write in the wrong channel / kicked me out of a conversation / ate my homework

No warranties. Sorry.

This client is shit

SHellscript Irc Tool? Seriously, though: use it if you want to.

This client is the shit

Glad you like it. Make me happy by telling me. I'm occasionally at Freenode as halhen. Try :m halhen Hey man. shic is chic!. Or send me an e-mail.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.