diff --git a/.gitignore b/.gitignore
index d2847ea9a09903689f8c8c4ad06f6d475e5036b3..30c4ef506e1c8f0d3e03283602f49107bec542d4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,7 @@ auto-save-list
 /custom.el
 /Installation.tex
 /.last-package-update-day
+.lsp-session-v1
+forge-database.sqlite
+games/
+projectile.cache
diff --git a/Configuration.org b/Configuration.org
index 8216064f0c9df40697996cf5f0ada4c8f6daf78b..e8cf1a17ceb04572464ee6a08635a28200eb013b 100644
--- a/Configuration.org
+++ b/Configuration.org
@@ -1216,6 +1216,13 @@ statistiques, utiliser la commande ~M-x keyfreq-show~
     :ensure t)
 #+END_SRC
 
+** Mode pugs
+#+BEGIN_SRC emacs-lisp
+  (load-library "~/.emacs.d/extra/pugs.el")
+  (add-to-list 'auto-mode-alist '("\\.pgs?\\'" . pugs-mode))
+  (require 'pugs-mode)
+#+END_SRC
+
 * Annexes
 ** Génération de toute la documentation
 
diff --git a/extra/pugs.el b/extra/pugs.el
new file mode 100644
index 0000000000000000000000000000000000000000..36830ffa5036575b65b08690cb22d986b34473a9
--- /dev/null
+++ b/extra/pugs.el
@@ -0,0 +1,75 @@
+;;; pugs -- simple major mode for pgs files
+;;; Commentary:
+;;; simple major mode for pugs
+;;; Code:
+
+(define-derived-mode pugs-output-mode compilation-mode "pugs-output"
+  "Define a special mode for pugs process output."
+)
+
+(defun pugs-run-file ()
+  "Execute the current pugs script.
+Ask to save the buffer if needed"
+  (interactive)
+  (when (buffer-modified-p)
+    (save-buffer))
+  (let ((output-buffer "*pugs-output*")
+	(pugs-binary "~/src/pugs/build/pugs")
+	(pugs-file (buffer-file-name (current-buffer)))
+	(pugs-buffer (current-buffer)))
+    (when (get-buffer output-buffer)
+      (kill-buffer output-buffer))
+    (get-buffer-create output-buffer)
+    (follow-mode)
+    (display-buffer output-buffer)
+    (set-buffer output-buffer)
+    (pugs-output-mode)
+    (setq-local inhibit-read-only t)
+    (insert (format "started: %s\n" (current-time-string)))
+    (insert (format "binary : %s\n" pugs-binary))
+    (insert (format "script : %s\n\n" pugs-file))
+    ;;; run the process
+    (process-file pugs-binary nil output-buffer nil pugs-file "--no-color")
+;    (start-process pugs-binary nil output-buffer t pugs-file "--no-color")
+    ;;;
+    (insert (format "\nfinished: %s\n" (current-time-string)))
+    (insert (format "binary : %s\n" pugs-binary))
+    (insert (format "script : %s\n" pugs-file))
+    ))
+
+(define-derived-mode pugs-mode prog-mode "pugs"
+  "pugs mode is a major mode for editing pugs files"
+  ;; define pugs keywords
+  (defvar pugs-keywords
+    '("import" "let" "Z" "N" "B" "R" "string" "and" "or" "xor" "not" "true" "false" "let" "do" "while" "for" "if" "else" "break" "continue" "cout" "cerr" "clog" "+"))
+
+  (defvar pugs-special-symbols
+    '(":" "," ";" "{" "}" "->" "<=" ">=" "=" "+" "-" "*" "/"  "<" ">" "^"))
+
+  (defvar pugs-font-lock-defaults
+    `((
+       ;; strings
+       ("\"\\.\\*\\?" . font-lock-string-face)
+       ;; keywords
+       ( ,(regexp-opt pugs-keywords 'words) . font-lock-keyword-face)
+       ;; special symbols
+       ( ,(regexp-opt pugs-special-symbols) . font-lock-constant-face)
+       )))
+
+  (setq font-lock-defaults pugs-font-lock-defaults)
+
+  ;; for comments
+  (setq comment-start "//")
+  (setq comment-end "")
+
+  (modify-syntax-entry ?\\ "\\" pugs-mode-syntax-table)
+  (modify-syntax-entry ?/ ". 124b" pugs-mode-syntax-table)
+  (modify-syntax-entry ?* ". 23" pugs-mode-syntax-table)
+  (modify-syntax-entry ?\n "> b" pugs-mode-syntax-table)
+
+  (local-set-key (kbd "C-c C-c") 'pugs-run-file)
+  )
+(provide 'pugs-mode)
+
+;;; (provide 'pugs-mode)
+;;; pugs.el ends here
diff --git a/snippets/cc-mode/once b/snippets/cc-mode/once
new file mode 100644
index 0000000000000000000000000000000000000000..9abbd3cab8e574acb088d7c6da361b2f0c756b42
--- /dev/null
+++ b/snippets/cc-mode/once
@@ -0,0 +1,10 @@
+# -*- mode: snippet -*-
+# name: #ifndef XXX; #define XXX; #endif
+# key: ONCE
+# --
+#ifndef ${1:`(let ((case-fold-search nil)) (concat (upcase (replace-regexp-in-string "\\([A-Z][a-z]*\\)" "\\1_" (file-name-nondirectory (file-name-sans-extension (or (buffer-file-name) ""))))) "HPP"))`}
+#define $1
+
+$0
+
+#endif // $1