;;;; -*-Mode:LISP; Package:LISP; Base:10; Syntax:EmacsLisp -*- ;;;; Date: 2022/07/19 ;;;; Title: .emacs ;;;; Author: C. Jullien (require 'cc-mode) (require 'ido) (autoload 'View-scroll-line-forward "view" nil t) (autoload 'View-scroll-line-backward "view" nil t) (autoload 'bat-mode "bat-mode" "DOS and WIndows BAT files" t) ;; Set up the keyboard so the delete key on both the regular keyboard ;; and the keypad delete the character under the cursor and to the ;; right under X, instead of the default, backspace behavior. (global-set-key [delete] 'delete-char) (global-set-key [kp-delete] 'delete-char) (global-set-key (kbd "C-$") 'dabbrev-expand) (global-set-key (kbd "M-$") 'compare-windows) (global-set-key (kbd "M-g") 'goto-line) ;; Default is M-gg or M-gM-g (global-set-key [f5] 'undo) (global-set-key [f9] 'call-last-kbd-macro) (global-set-key [C-home] 'View-scroll-line-backward) (global-set-key [C-end] 'View-scroll-line-forward) (global-set-key [f1] (lambda () (interactive) (manual-entry (current-word)))) ;; Special keys on macOS ;; ;; Missing characters ;; '{' = Alt + ( ;; '}' = Alt + ) ;; '[' = Alt + Shift + ( ;; ']' = Alt + Shift + ) ;; '|' = Alt + Shift + L ;; '\' = Alt + Shift + / ;; '~' = Alt + n ;; ;; Navigation ;; HOME = fn + up arrow ;; END = fn + down arrow ;; Page Down = fn + righ arraow ;; Page Up = fn + left arraow ;; c-mode-base-map is common to C/C++/Java ... (define-key c-mode-base-map "\C-m" 'newline-and-indent) ;; Always end a file with a newline (setq require-final-newline t) ;; Required with Emacs 23 so that C-n and C-p move to physical line (setq line-move-visual nil) (setq visible-bell nil) ;; Stop at the end of the file, not just add lines (setq next-line-add-newlines nil) ;; Warn only when opening files bigger than 100MB (setq large-file-warning-threshold 100000000) (defvar max-width 80) (defvar max-height 25) ;; New? ;; (setq x-select-enable-clipboard t) ;; (setq interprogram-paste-function 'x-cut-buffer-or-selection-value) ;; ;; set font ;; (defvar current-font nil ; "-outline-Courier New-normal-r-*-*-13-97-*-*-c-*-*-iso8859-1" ) (defvar use-cmd-shell nil) ;; t == cmdproxy ;;; Known system-type values: ;;; gnu compiled for a GNU Hurd system. ;;; gnu/linux compiled for a GNU/Linux system. ;;; darwin compiled for Darwin (GNU-Darwin, Mac OS X, ...). ;;; ms-dos compiled as an MS-DOS application. ;;; windows-nt compiled as a native W32 application. ;;; cygwin compiled using the Cygwin library. (cond ((eq system-type 'windows-nt) ;; (cd (getenv "HOME")) ;; Add support for nmake ;; (setq compile-command '("nmake " . 6)) ;; ;; This assumes that Cygwin is installed in C:\cygwin (the ;; default) and that C:\cygwin\bin is not already in your ;; Windows Path (it generally should not be). ;; ;; (setq exec-path (cons "C:/cygwin/bin" exec-path)) ;; (setenv "PATH" (concat "C:\\cygwin\\bin;" (getenv "PATH"))) ;; ;; NT-emacs assumes a Windows command shell, which you change ;; here. ;; (cond (use-cmd-shell (setq explicit-shell-file-name "cmdproxy") (setq shell-file-name "cmdproxy") (setq shell-command-switch "\\/u") (setq w32-quote-process-args t)) (t (setq process-coding-system-alist '(("bash" . undecided-unix))) (setq w32-quote-process-args ?\") (setq shell-file-name "bash") (setenv "SHELL" shell-file-name) (setq explicit-shell-file-name shell-file-name))) (setq current-top 0) (setq current-left 72) ;; leave room for icons. ;; ;; This removes unsightly ^M characters that would otherwise ;; appear in the output of java applications. ;; (add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m)) ((eq system-type 'darwin) (cd (getenv "HOME")) (setq current-left 72) ;; leave room for icons. (set-face-attribute 'default nil :height 150) ;; was 200 (setq default-input-method "MacOSX") (setq mac-command-modifier 'meta) (setq mac-option-modifier nil) (setq mac-allow-anti-aliasing t) (setq mac-command-key-is-meta t) ;; (global-set-key "\M-(" (lambda () (interactive) (insert "{"))) ;; (global-set-key "\M-)" (lambda () (interactive) (insert "}"))) ;; (global-set-key "\M-8" (lambda () (interactive) (insert "["))) ;; (global-set-key "\M-9" (lambda () (interactive) (insert "]"))) t) (t ;; Clipboard (setq x-select-enable-clipboard t) (setq interprogram-paste-function 'x-cut-buffer-or-selection-value) (setq current-left 72) ;; leave room for icons. t)) (defvar current-top 28) ;; 10 (defvar current-left 28) ;; 10 (when window-system ;; mouse ptr when cursor is too close (mouse-avoidance-mode 'jump) ;; ScrollBar on the right (set-scroll-bar-mode 'right) (let ((screen-height (x-display-pixel-height)) (screen-width (x-display-pixel-width))) (when current-font (set-default-font current-font)) (setq max-height (/ screen-height (frame-char-height))) ;; reserve some characters (for menu bar). (cond ((eq system-type 'windows-nt) (setq max-height (- max-height 8))) (t (setq max-height (- max-height 8)))))) ;; Don't display welcome message when Emacs starts. (setq inhibit-startup-message t) ;; With default-frame-alist, we set the top left corner of new frames ;; to be at pixel offset +10+10, the width and height to be computed, ;; the cursor to be white, the foreground to be white, the background ;; to be NavyBlue, and the font to be Courier 10. With ;; initial-frame-alist, we override the top left corner of the initial ;; frame to be at pixel offset +10+10, and inherit the remaining ;; properties from initial-frame-alist. (setq default-frame-alist (list (cons 'fullscreen 'fullheight) (cons 'width max-width) ; (cons 'height max-height) ; (cons 'font current-font) (cons 'top current-top) (cons 'left current-left) (cons 'cursor-type 'box) (cons 'cursor-color "white") (cons 'foreground-color "LightBlue") (cons 'background-color "rgb:00/20/60"))) ;; "NavyBlue" (setq initial-frame-alist default-frame-alist) ;; '((top . 10) (left . 10)) (setq frame-title-format (concat "%b - emacs@" system-name)) ;; The above code uses the default faces for decoration. If you would ;; like to customize the attributes of the faces, you can use the ;; following startup code to get started (cond ((fboundp 'global-font-lock-mode) ;; Load the font-lock package. (require 'font-lock) ;; Customize face attributes (custom-set-faces '(left-margin ((t (:background "black"))) t) `(font-lock-builtin-face ((t (:foreground "Light Steel Blue")))) '(font-lock-comment-face ((t (:foreground "Green" :italic t)))) '(font-lock-constant-face ((t (:foreground "Orchid")))) '(font-lock-doc-face ((t (:foreground "Wheat3")))) '(font-lock-doc-string-face ((t (:foreground "Wheat3")))) '(font-lock-function-name-face ((t (:foreground "Orange" t)))) '(font-lock-keyword-face ((t (:foreground "Cyan" :bold t)))) '(font-lock-preprocessor-face ((t (:foreground "Wheat" t)))) '(font-lock-reference-face ((t (:foreground "orangered")))) '(font-lock-string-face ((t (:foreground "Yellow")))) '(font-lock-type-face ((t (:foreground "Grey" t)))) '(font-lock-variable-name-face ((t (:foreground "LightGrey" t)))) '(font-lock-warning-face ((t (:foreground "Red" t)))) ) ;; Maximum colors (setq font-lock-maximum-decoration t) ;; Turn on font-lock in all modes that support it (global-font-lock-mode t))) ;; To highlight the region between the point and the mark, use the ;; function transient-mark-mode: (transient-mark-mode t) ;; To highlight matching parenthesis (show-paren-mode 1) (add-hook 'sh-mode-hook ;; works for shell-script-mode, shell-mode which are aliases ;; to sh-mode main function. (lambda () (setq indent-tabs-mode nil) (setq comint-completion-addsuffix '("/" . "")))) ;; Tune Lisp mode (add-hook 'lisp-mode-hook ;; Lisp uses spaces instead of tabs. (lambda () (setq indent-tabs-mode nil))) (add-to-list 'auto-mode-alist '("\\.lap\\'" . lisp-mode)) (setq auto-mode-alist (append '(("\\.[bB][aA][tT]$" . bat-mode)) ;; For DOS init files '(("CONFIG\\." . bat-mode)) '(("AUTOEXEC\\." . bat-mode)) auto-mode-alist)) (defun unicode-shell () ;; Execute the shell buffer in UTF-8 encoding. ;; Note that you'll need to set the environment variable LANG and others ;; appropriately. (interactive) (let ((coding-system-for-read 'utf-16) (coding-system-for-write 'utf-16) (coding-system-require-warning t)) (call-interactively 'shell))) (transient-mark-mode 1) ;; (add-hook 'c-mode-common-hook '(lambda () (setq c-basic-offset 8)) t) (setq line-indent-mode t) (defun my-c-mode-hook () "Hook for running C file..." ;;don't indent braces (c-set-offset 'substatement-open 0) (c-set-offset 'statement-case-open 0) (c-set-offset 'case-label 0) ; '+ to indent (setq tab-width 8) ; 2 'modern code' (setq c-basic-offset 8) ; 2 'modern code' (setq c-auto-newline nil) ; (setq c-indent-comments-syntactically-p t) ;; make sure spaces are used instead of tabs (setq indent-tabs-mode nil) ; nil 'modern' code t) (add-hook 'c-mode-hook 'my-c-mode-hook) (defun my-c++-mode-hook () "Hook for running C++ file..." ;;don't indent braces (c-set-offset 'substatement-open 0) (c-set-offset 'statement-case-open 0) (c-set-offset 'case-label 0) ; '+ to indent (setq tab-width 2) (setq c-basic-offset 2) (setq c-auto-newline nil) ; (setq c-indent-comments-syntactically-p t) ;; make sure spaces are used instead of tabs (setq indent-tabs-mode nil) t) (add-hook 'c++-mode-hook 'my-c++-mode-hook) (defun my-java-mode-hook () "Hook for running Java file..." ;;don't indent braces (c-set-offset 'substatement-open 0) (c-set-offset 'statement-case-open 0) (c-set-offset 'case-label 0) ; '+ to indent (setq tab-width 2) (setq c-basic-offset 2) (setq c-auto-newline nil) ; (setq c-indent-comments-syntactically-p t) ;; make sure spaces are used instead of tabs (setq indent-tabs-mode nil) t) (add-hook 'java-mode-hook 'my-java-mode-hook) (add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode)) (mapc (lambda (mode) (font-lock-add-keywords mode '(("^[^\n]\\{80\\}\\(.*\\)$" 1 font-lock-warning-face prepend)))) '(c-mode c++-mode java-mode lisp-mode python-mode)) ;; Add more 'makefile' patterns (setq auto-mode-alist (append '(("makefile\\." . makefile-mode) ("\\.mak" . makefile-mode) ("Makefile\\." . makefile-mode)) auto-mode-alist)) ;; Add PHP extension to c-mode mode. (setq auto-mode-alist (append '(("\\.php\\'" . c-mode)) auto-mode-alist)) ;; Add BAT extension to bat-mode mode. (setq auto-mode-alist (append '(("\\.[bB][aA][tT]$" . bat-mode)) ;; For DOS init files '(("CONFIG\\." . bat-mode)) '(("AUTOEXEC\\." . bat-mode)) auto-mode-alist)) ;; Customize c-mode (setq c-default-style '((other . "user"))) ;; Basic indent is 8 characters. (setq c-basic-offset 8) ;; insert a tab if point is in the middle of a line. (setq c-tab-always-indent nil) (setq indent-tabs-mode nil) ;; Make searches case sensitive by default (in all buffers that do not ;; override this). (setq-default case-fold-search nil) ;; Add support for European character sets ;(standard-display-european 1) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(font-lock-builtin-face ((t (:foreground "Light Steel Blue")))) '(font-lock-comment-face ((t (:foreground "Green" :italic t)))) '(font-lock-constant-face ((t (:foreground "Orchid")))) '(font-lock-doc-face ((t (:foreground "Wheat3")))) '(font-lock-doc-string-face ((t (:foreground "Wheat3")))) '(font-lock-function-name-face ((t (:foreground "Orange" t)))) '(font-lock-keyword-face ((t (:foreground "Cyan" :bold t)))) '(font-lock-preprocessor-face ((t (:foreground "Wheat" t)))) '(font-lock-reference-face ((t (:foreground "orangered")))) '(font-lock-string-face ((t (:foreground "Yellow")))) '(font-lock-type-face ((t (:foreground "Grey" t)))) '(font-lock-variable-name-face ((t (:foreground "LightGrey" t)))) '(font-lock-warning-face ((t (:foreground "Red" t)))) '(left-margin ((t (:background "black"))) t)) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(safe-local-variable-values '((syntax . islisp) (base . 10) (package . lisp) (Syntax . ANSI-Common-Lisp) (Syntax . EmacsLisp) (Mode . LISP) (Package . LISP) (Base . 10) (Syntax . ISLISP) (Encoding . utf-8) (Encoding . utf-16)))) (defun clozure (&optional and-go) "Run Clozure" (interactive) (cond ((eq system-type 'windows-nt) (setq inferior-lisp-program "f:/ccl/wx86cl64.exe") ;; your Lisp (add-to-list 'load-path "f:/slime/")) ; your SLIME directory (t (setq inferior-lisp-program "f:/ccl/wx86cl64.exe"))) ;; your Lisp (require 'slime) (slime-setup) (slime)) (defun sbcl (&optional and-go) "Run sbcl" (interactive) (setq inferior-lisp-program "sbcl") ;; your Lisp ;; (add-to-list 'load-path "f:/slime/")) ; your SLIME directory (require 'slime) (slime-setup) (slime)) (defun check-openlisp (path) ;; check if openlisp.el exists and load it. (let ((path (getenv path)) (found nil) (openlisp nil)) (when path (setq openlisp (concat path "/emacs/openlisp.el")) (when (file-exists-p openlisp) (load openlisp) (setf found t))) found)) ; (visit-tags-table "~/nstools/lib/trunk/TAGS" ) (or (check-openlisp "HOME") (check-openlisp "HOMEPATH") (check-openlisp "OPENLISP")) (put 'downcase-region 'disabled nil) (put 'upcase-region 'disabled nil) ;(setq inferior-lisp-program "/collabwork/nstools/ccl/lx86cl64") ;(add-to-list 'load-path "~/slime-2.22") ;(add-to-list 'slime-contribs 'slime-fancy) ;(require 'slime-autoloads) ;(setq slime-contribs '(slime-scratch slime-editing-commands)) ;(setq slime-contribs '(slime-fancy)) ; almost everything ;(add-hook 'lisp-mode-hook ; (lambda () ; (slime-mode t) ; (setq indent-tabs-mode nil))) ;(add-hook 'inferior-lisp-mode-hook (lambda () (inferior-slime-mode t)))