Trevoke / sqlup-mode.el

An emacs minor mode to upcase SQL keyword and functions
GNU General Public License v3.0
88 stars 15 forks source link
capitalize emacs sql sqlup sqlup-mode upcase

Build status

sqlup-mode

sqlup-mode is a minor mode for emacs. Its sole purpose is to make your life easier when writing SQL.

Purpose

SQL, by convention, uses upper-case keywords, although lower-case works just as well. As humans, the separation between upper-case and lower-case helps scan and parse the code much more quickly.

This mode has been extended to upcase keywords when using redis-mode as well.

Pronunciation

I gave a talk (slides) at the emacs NYC meetup, and it was decided that sqlup is pronounced skloop.

Installation

Manually

Content TK. Pull request welcome. Same as all other emacs packages, really.

MELPA

MELPA MELPA Stable

Marmalade

sqlup-mode is NOT YET on Marmalade.

Usage

Basic setup

Here follows an example setup to activate sqlup-mode automatically when entering sql-mode or sql-interactive-mode:

;; Capitalize keywords in SQL mode
(add-hook 'sql-mode-hook 'sqlup-mode)
;; Capitalize keywords in an interactive session (e.g. psql)
(add-hook 'sql-interactive-mode-hook 'sqlup-mode)
;; Set a global keyword to use sqlup on a region
(global-set-key (kbd "C-c u") 'sqlup-capitalize-keywords-in-region)

Blacklisting words

Sqlup can be configured to ignore certain keywords by adding them to the list sqlup-blacklist. For example if you use name as a column name it would be annoying to have it upcased so you can prevent this by adding

(add-to-list 'sqlup-blacklist "name")

to your config (or do the equivalent through the M-x customize interface).

Normal typing (e.g. SQL REPL)

Activate the minor mode with M-x sqlup-mode and you can just start typing. The minor mode will be triggered by the following keys:

Work with a region

Select a region and just call M-x sqlup-capitalize-keywords-in-region. Magic.

Work with a whole buffer

Just call M-x sqlup-capitalize-keywords-in-buffer.

Implementation choices

I made the choice of only triggering the word-scanning when a particular keypress happens specifically because I don't want to see the word "ORde" typed when I'm typing "ORDER", and I didn't know a simple way to do it. I believe that in practice, this is good enough.