Emacs, könyvtárfüggő formázás (C, C++)

Sokszor bizonyos könyvárakban egységesen kell a C/C++ kódot formázni, vim esetén ezt nagyon egyszerűen megcsináltam, de emacs esetén nem találtam rá könnyű megoldást, így megírtam. Könnyen használható (szemben az előző kettő kis kódommal), a c-set-style-t burkolja.

Link: c-styles.el

Hozzászólások

Tedd ki a vimes megoldast is... erdekel...
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Talán így egyszerűbb. A panther/c-modes-directory-alist változót a M-x customize-variable panther/c-modes-directory-alist utasítással bármikor könnyen tudod módosítani.


(defcustom panther/c-modes-directory-alist
  '(("/home/panther/src" "linux")
    ("/home/panther/gnu" "gnu"))
  "Alist of Panther's (DIRECTORY CODING-STYLE) mapping."
  :type '(alist :key-type file :value-type (group string))
  :group 'c)

(defun panther/c-set-style ()
  "Set C style according to visiting file's directory."
  (interactive)
  (mapcar (lambda (item)
            (when (string-match (car item) (buffer-file-name))
              (message "Setting C-style to '%s'" (cadr item))
              (c-set-style (cadr item)))) panther/c-modes-directory-alist))

(add-hook 'c-mode-hook 'panther/c-set-style)

A

file-in-dir

függvényed beépítettje a

file-directory-p

, string összehasonlításra pedig itt kiváló a

string-equal

.

Ismerkedem még csak a lisp-pel. De köszi, így sokkal barátságosabb :D

A gondom csak az, hogy elsőre elég tömény (funkcionális nyelv, és a procedurálist szoktam meg, értem ez alatt az objektum-orientált nyelveket is), és egyelőre kevés könyvet, meg példát találtam.

szerk: ebből hiányzik a fallback stílus, de majd törpölök rajta, legalább megértem teljes egészében (a használatot). Bár lehet, erre a hétre nem sok emacsozás jut :P

Csak a teljesség kedvéért: Emacs 23-ban már benne van a kívánt funkció, dir-locals-set-class-variables néven fut. Pont az teszi, amit szeretnél: elérési útvonaltól függően megváltoztatja a megadott változók értékéet.