summary refs log blame commit diff stats
path: root/.gitignore
blob: 8c110f0012ec57351e6362410e8ae64efa41b4f1 (plain) (tree)
1
2
3
4



       
*~
*.pyc
*.pyo
stuff/*
or: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
Responsibilities are generally seperated into modules.

profanity.c
===========

Contains initialisation, main loop, and shutdown functions.

Initialisation is loading preferences, initialising any libraries/files/data 
structures used.

The main loop is where the work is done.  It will keep checking for a new
character on the input, if there is one deals with it, if not, goes around the
loop again.

If the character was a newline, the input line is processed, the result of
processing profanity will either continue (TRUE) or stop (FALSE).

Shutting down just involves clearing up resources.

title_bar.c, windows.c, status_bar.c, input_win.c
=================================================

Represent the different windows in Ncurses.

     ----------------------------------------------
    |  TITLE_BAR                                   |
     ----------------------------------------------
    |                                              |
    |                                              |
    |  WINDOWS                                     |
    |                                              |
    |                                              |
     ----------------------------------------------
    |  STATUS_BAR                                  |
     ----------------------------------------------
    |  INPUT_WIN                                   |
     ----------------------------------------------

The interface to the UI is all through windows.h, all UI modules share this
header:


                            windows.h
                                |
                                |
          --------------------------------------------------
         |             |               |                    |
    title_bar.c     windows.c       status_bar.c        inp_win.c



So any calls to the UI are through windows.h

title_bar.c and status_bar.c are pretty trivial.

windows.c
---------

Contains a list of prof_win structs called _wins, which consist of:

    from:  A string, the name of the recipient for this chat window
    win:   An ncurses pad containing the chat
    y_pos: The current position in the chat window
    paged: Whether or not the pad has been paged (i.e not showing the end)

The console is _wins[0], and has a special 'from' value of "_cons".

This module contains things like a pointer to the console window, the index
of the current window being displayed, a dirty flag that indicated the current
windows should be updated next time around the loop.

inp_win.c
---------

Doesn't do much more than handle each character with inp_get_char().  Deals
with all special chars for editing the input, HOME, PAGE UP, UP, DOWN etc.

command.c
=========

When the main input loop gets a '\n', process_input() is called with the 
line of input.

This is where each command/message is handled.

jabber.c
========

All interaction with libstrophe is done here.  Contains a references to the
libstrophe objects, connection, context etc.

Functions ending 'handler' are callback handlers registered with libstrophe,
for incomming messages etc.

contact.c
=========

PContact represents a contact with:

    name:   The contact full JID, e.g. somecontact@server.org
    show:   "Online", "Away" etc
    status: "I'm not here right now", "At lunch" etc

It's an opaque pointer so all access to a PContact is encapsulated in this
module.

contact_list.c
==============

Currently has two purposes.

Firstly stores a live list of online contacts.  Live meaning jabber.c will 
call contact_list_add() and contact_list_remove() as it gets presence
notifications.

Secondly it is used for autocompleting contact names when typing them, hence
it stores the contact in a PAutocomplete, described later.

history.c
=========

Stores a history of all input and allows navigating through it, bash style.

Uses PHistory object, described later.

preferences.c
=============

Deals with loading and setting preferences saved in ~/.profanity.

Also allows autocomplete of previous JIDs the use has logged in with 
(stored in ~/.profanity) by storing them in a PAutocomplete.

common.c
========

Functions written where older versions of GLib does not have them.

util.c
======

Some util functions, should probably move to common.c.

log.c
=====

Stored a reference to the log file, and provides functions for writing to it.

Library like modules
====================

prof_history.c and prof_autocomplete.c implement a generic way to deal with 
command history and command autocompletion respectively.

The rest of Profanity uses them indirectly, via history.c for example.
And they know nothing about Profanity (no includes).

These modules use opaque pointers so all access must be through functions
exposed in their headers.

The idea is that these modules could be included in other applications.

The "prof_" prefix is just because they were created whilst developing
Profanity.

prof_autocomplete.c
-------------------

Two type are PAutocomplete can be created.

p_autocomplete_new() creates a PAutocomplete that can store strings, the
simple case.

p_obj_autocomplete_new() creates a PAutocomplete of arbitrary data 
structures. This function must be passed function pointers of the following
types:

    PStrFunc:       A function that will get a string out of the data structure
    PCopyFunc:      A function that will make a copy the data structure, allocating
        memory for it.
    GDestroyNotify: A function that will free memory for the data structure.