;;; acdw-irc.el -*- lexical-binding: t; coding: utf-8-unix -*- (require 's nil :noerror) (defgroup acdw-irc nil "Customizations for IRC." :group 'applications) (defcustom acdw-irc/left-margin 16 "The size of the margin for nicks, etc. on the left." :type 'integer) (defcustom acdw-irc/pre-nick "" "What to show before a nick." :type 'string) (defcustom acdw-irc/post-nick " | " "What to show after a nick." :type 'string) (defcustom acdw-irc/pre-my-nick "-" "What to show before the current user's nick." :type 'string) (defcustom acdw-irc/post-my-nick "-> " "What to show after the current user's nick." :type 'string) (defcustom acdw-irc/ellipsis "~" "The ellipsis for when a string is too long." :type 'string) ;;; Convenience functions (I don't want to /depend/ on s.el) (if (fboundp 's-repeat) (defalias 'repeat-string 's-repeat) (defun repeat-string (num s) "Make a string of STR repeated NUM times. Stolen from s.el." (declare (pure t) (side-effect-free t)) (let (ss) (while (> num 0) (setq ss (cons s ss)) (setq num (1- num))) (apply 'concat ss)))) ;;; IRC stuff (defun acdw-irc/margin-format (str &optional before after alignment) "Print STR to fit in `acdw-irc/left-margin'. Optional arguments BEFORE and AFTER specify strings to go ... before and after the string. ALIGNMENT aligns left on nil and right on t." (let* ((before (or before "")) (after (or after "")) (str-length (length str)) (before-length (length before)) (after-length (length after)) (max-length (- acdw-irc/left-margin 1 (+ before-length after-length))) (left-over (max 0 (- max-length str-length)))) (format "%s%s%s%s%s" before (if alignment (repeat-string left-over " ") "") (truncate-string max-length str acdw-irc/ellipsis) (if alignment "" (repeat-string left-over " ")) after))) (provide 'acdw-irc) ;;; acdw-irc.el ends here