help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Extending the concept of pretty-greek with icons/images


From: Nordlöw
Subject: Extending the concept of pretty-greek with icons/images
Date: Wed, 05 Sep 2007 04:30:13 -0700
User-agent: G2/1.0

We humans are very good at recognizing content based on images and
shapes, often more efficiently than we recognize words, at least when
the words are long. For this reason a text written in chinese and/or
japanese can more efficiently ("with a higher bandwidth") explain a
concept to to the reader than is possible with (western) alphabets.

When reading source code, especially C code, we are often confronted
by quite long function names, especially in C environments such as
GNOME. These function names are however built up of smaller words or
acronyms often separated by underline or capitalization. After having
seen the clever Emacs extensions pretty-lamda and pretty-greek (given
below) I have gotten a feeling that this concept of "visual
abbreviations" could be applied also to these contexts of long C
identifiers. I believe this would make reading such C source code
easier and more visually attractive. Wanting to try out my idea I
thought I could start simple by overlay/change all the gtk_ prefix
with a miniturized version of the GTK's main icon seen www.gtk.org
(http://www.gtk.org/images/gtk-logo-rgb.gif). Is this possible to do
easily in Emacs or do I have to change the internals (C code) of
Emacs?

Thanks in advance for any reflections or/and help,
Nordlöw

Emacs Lisp Sources for pretty-greek follows. Just add to .emacs,
evaluate and restart emacs or do M-x emacs-lisp-mode to activate the
hook:

;; Pretty Greek
;; This is BenignoUria modification to Pretty Lambda. Substitutes all
;; greek letter names with its character. Very nice if you use greek
;; letters as parameters in parts of your code.
(defun pretty-greek ()
  (let ((greek '("alpha" "beta" "gamma" "delta" "epsilon" "zeta" "eta"
"theta" "iota" "kappa" "lambda" "mu" "nu" "xi" "omicron" "pi" "rho"
"sigma_final" "sigma" "tau" "upsilon" "phi" "chi" "psi" "omega")))
    (loop for word in greek
          for code = 97 then (+ 1 code)
          do (let ((greek-char (make-char 'greek-iso8859-7 code)))
               (font-lock-add-keywords
                nil
                `((,(concatenate
                     'string "\\(^\\|[^a-zA-Z0-9]\\)\\(" word "\\)[a-zA-Z]")
                   (0 (progn
                        (decompose-region (match-beginning 2) (match-end 2))
                        nil)))))
               (font-lock-add-keywords
                nil
                `((,(concatenate
                     'string "\\(^\\|[^a-zA-Z0-9]\\)\\(" word "\\)[^a-zA-Z]")
                   (0 (progn (compose-region (match-beginning 2) (match-end 2)
                                             ,greek-char)
                             nil)))))))))
(add-hook 'lisp-mode-hook 'pretty-greek)
(add-hook 'emacs-lisp-mode-hook 'pretty-greek)
;; (add-hook 'c-mode-common-hook 'pretty-greek)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]