;; Elisp source code header -*- coding: utf-8 -*- ;; Created: [22-55:36 Май 19 2008] ;; Modified: [23-45:37 Май 31 2008] ;; Description: ;; The idea of using muse as a site backend and some code was taken from Alex Ott ;; Author: Stanislav M. Ivankin ;; Email: stas@concat.info ;; Tags: muse, emacs, elisp ;; License: (require 'muse) (require 'muse-mode) (require 'muse-publish) (require 'muse-html) (require 'muse-project) (require 'muse-colors) (require 'muse-wiki) (defvar concat.info-muse-menu '(("index.html" . "Главная") ("emacs/" . "Дот файлы emacs и прочее") ("about/" . "Резюме") ("about/more-about.html" . "Немного за жисть") ("literature/" . "Литература")) "Site main menu") (defvar my-muse-publish-files '("/home/esgal/emacs/emacs-rc/www-stuff.el" "/home/esgal/emacs/emacs-rc/helpers.el" "/home/esgal/emacs/emacs-rc/devel.el" "/home/esgal/emacs/emacs-rc/features.el" "/home/esgal/emacs/emacs-rc/my-muse.el" "/home/esgal/emacs/emacs-rc/mytramp.el" "/home/esgal/.gnus" "/home/esgal/.emacs") "Files to publish with muse project") (defvar my-muse-protected-files '("/home/esgal/emacs/emacs-rc/www-stuff.el" "/home/esgal/emacs/emacs-rc/features.el" "/home/esgal/.gnus") "Files that needs to be edited before publishing") (defun my-muse-mode-hook () (setq auto-fill-mode t) (footnote-mode 1)) (defun set-rel-path () (file-name-directory (muse-wiki-resolve-project-page (muse-project)))) (defun my-muse-prepare-els () "Prepare el files to publish with concat.info muse project, if files has some private data, clean it first by hand" (interactive) (dolist (file my-muse-publish-files) (if (find-in-lst my-muse-protected-files file) (let ((buf (generate-new-buffer (concat "concat.info->" file)))) (switch-to-buffer buf) (emacs-lisp-mode) (insert-file-contents file nil)) (let ((pos (position ?/ file :from-end t)) (fname)) (if pos (setq fname (subseq file (1+ pos) (length file))) (setq fname file)) (htmlize-file file (concat (set-rel-path) "emacs/" fname ".html")))))) (defun generate-concat.info-menu () (let* ((current-muse-file (muse-current-file)) (link-path (replace-regexp-in-string "\\.muse" ".html" current-muse-file)) (dir (if (> (length (file-name-directory (muse-wiki-resolve-project-page (muse-project)))) 2) "../" ""))) (apply #'concat (mapcar #'(lambda (x) (concat "<li><a href=\"" dir (car x) "\">" (cdr x) "</a></li>")) concat.info-muse-menu)))) (add-to-list 'auto-mode-alist '("\\.muse$" . muse-mode)) (custom-set-variables '(muse-html-encoding-default (quote utf-8)) '(muse-html-meta-content-encoding (quote utf-8)) '(muse-html-charset-default "utf-8") '(muse-file-extension "muse") '(muse-mode-auto-p nil) '(muse-wiki-allow-nonexistent-wikiword nil) '(muse-wiki-use-wikiword nil) '(muse-ignored-extensions (quote ("bz2" "gz" "[Zz]" "rej" "orig" "png" "hgignore" "gif" "css" "jpg" "html" "sh" "lftp" "pdf")))) (add-hook 'muse-mode-hook 'my-muse-mode-hook) (muse-derive-style "concat-info-muse-html" "html" :header "~/Projects/concat.info/muse/header.tmpl" :footer "~/Projects/concat.info/muse/footer.tmpl") (setq muse-project-alist `(("muse-concat-info" (,@(muse-project-alist-dirs "~/Projects/concat.info/muse/") :default "index") ,@(muse-project-alist-styles "~/Projects/concat.info/muse/" "~/Projects/concat.info/muse/" "concat-info-muse-html")))) (defun muse-mp-generate-menu () (let* ((menu-lang (muse-mp-detect-language)) (menu-struct (assoc menu-lang my-page-menu)) (menu-string "") (rel-dir (file-name-directory (muse-wiki-resolve-project-page (muse-project)))) (rel-path (if (> (length rel-dir) 2) (substring rel-dir 3) "")) (cur-path-muse (muse-current-file)) (cur-path-html (replace-regexp-in-string "\\.muse" ".html" cur-path-muse)) ) (when menu-struct (let ((menu-list (if (not (null menu-struct)) (cdr menu-struct)))) (setq menu-string (concat "<ul class=\"avmenu\">" (apply #'concat (mapcar (lambda (x) (concat "<li><a href=\"" rel-path (car x) (if (string-match (concat "/" menu-lang "/" (car x)) cur-path-html) "\" class=\"current\"" "\"") ">" (cdr x) "</a></li>")) menu-list)) "</ul>")))) menu-string))