Created
October 2, 2020 17:44
-
-
Save rougier/4d06d892ded73b4dc6b364a8e0fbcad5 to your computer and use it in GitHub Desktop.
A very minimal emacs configuration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; nano.el -- A very minimal emacs | |
;; Usage: emacs -q -l nano.el | |
;; | |
;; Copyright (C) 2020 Nicolas .P Rougier | |
;; | |
;; Author: Nicolas P. Rougier <[email protected]> | |
;; | |
;; This program is free software; you can redistribute it and/or modify | |
;; it under the terms of the GNU General Public License as published by | |
;; the Free Software Foundation, either version 3 of the License, or | |
;; (at your option) any later version. | |
;; This program is distributed in the hope that it will be useful, | |
;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
;; GNU General Public License for more details. | |
;; You should have received a copy of the GNU General Public License | |
;; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
(setq default-frame-alist | |
(append (list | |
'(font . "Roboto Mono Light 14") | |
;; '(unsplittable . t) | |
;; '(buffer-predicate . (lambda (x) nil)) | |
'(min-height . 1) | |
'(height . 42) | |
'(min-width . 40) | |
'(width . 74) | |
'(foreground-color . "#333333") | |
'(background-color . "#ffffff") | |
'(cursor-color . "black") | |
'(internal-border-width . 1) | |
'(vertical-scroll-bars . nil) | |
'(left-fringe . 32) | |
'(right-fringe . 32) | |
'(tool-bar-lines . 0) | |
'(menu-bar-lines . 0)))) | |
(setq inhibit-startup-screen t | |
inhibit-startup-message t | |
inhibit-startup-echo-area-message t | |
initial-scratch-message nil) | |
(tool-bar-mode 0) | |
(menu-bar-mode t) | |
(tooltip-mode 0) | |
(setq org-hide-emphasis-markers t) | |
(set-face-attribute 'mode-line nil | |
:height 0.5 | |
:foreground "#999977" | |
:background "#ffffff" | |
:overline nil | |
:underline nil | |
:box nil) | |
(set-face-attribute 'mode-line-inactive nil | |
:height 0.5 | |
:foreground "#999977" | |
:background "#ffffff" | |
:overline nil | |
:underline nil | |
:inherit nil | |
:box nil) | |
(set-face-attribute 'header-line nil | |
:weight 'light | |
:foreground "#000000" | |
:background "#f0f0f0" | |
:overline nil | |
:underline nil | |
:box nil | |
:box `(:line-width 1 :color "#ffffff" :style nil) | |
:inherit nil) | |
(set-face-attribute 'internal-border nil | |
:background "#777777") | |
(set-face-attribute 'fringe nil | |
:foreground "#cccccc" | |
:background "#ffffff") | |
(set-face-attribute 'bold nil | |
:weight 'medium) | |
(defun header-line-render (left right) | |
(let* ((available-width (- (window-total-width) (length left) ))) | |
(format (format "%%s%%%ds" available-width) left right))) | |
(setq-default header-line-format | |
'((:eval | |
(header-line-render | |
(format-mode-line | |
(list | |
(cond ((and buffer-file-name (buffer-modified-p)) " [M] ") | |
(buffer-read-only " [RO] ") | |
(t " ")) | |
(propertize "%b" 'face '(:weight regular)) | |
" (%m)" | |
(propertize " " 'display '(raise +0.25)) | |
(propertize " " 'display '(raise -0.30)))) | |
(format-mode-line | |
(list "%l:%c ")))))) | |
(setq-default mode-line-format "%-") | |
(defun update-buffers-mode-line () | |
(dolist (window (window-list)) | |
(with-selected-window window | |
(if (or (one-window-p t) | |
(eq (window-in-direction 'below) (minibuffer-window)) | |
(not (window-in-direction 'below))) | |
(with-current-buffer (window-buffer window) | |
(setq mode-line-format "%-")) | |
(with-current-buffer (window-buffer window) | |
(setq mode-line-format nil))) | |
(if (window-in-direction 'above) | |
(face-remap-add-relative 'header-line '(:overline "#777777")) | |
(face-remap-add-relative 'header-line '(:overline nil)))))) | |
(add-hook 'window-configuration-change-hook 'update-buffers-mode-line) | |
(dolist (buffer (list " *Minibuf-0*" " *Echo Area 0*" | |
" *Minibuf-1*" " *Echo Area 1*")) | |
(when (get-buffer buffer) | |
(with-current-buffer buffer | |
(face-remap-add-relative 'default '(:foreground "#999999"))))) | |
;; (define-key global-map (kbd "M-q") 'kill-emacs) | |
(define-key global-map (kbd "M-n") 'make-frame) | |
;; (define-key global-map (kbd "M-w") 'delete-frame) | |
;; See https://200ok.ch/posts/... | |
;; ... 2020-09-29_comprehensive_guide_on_handling_long_lines_in_emacs.html | |
(setq bidi-paragraph-direction 'left-to-right) | |
(if (version<= "27.1" emacs-version) | |
(setq bidi-inhibit-bpa t)) | |
(if (version<= "27.1" emacs-version) | |
(global-so-long-mode 1)) | |
(defun help-message () | |
(interactive) | |
(let ((message-log-max nil)) | |
(message | |
(concat | |
"[C-x C-f] Open [M-w] Copy [C-w] Cut [C-s] Search —— " | |
(propertize "[C-g] Cancel" 'face '(:foreground "black")) | |
"\n" | |
"[C-x C-s] Save [C-y] Paste [C-/] Undo [M-x] Command —— " | |
(propertize "[C-x C-c] Quit" 'face '(:foreground "black")))) | |
;; (message | |
;; (concat | |
;; "[⌘-O] Open [⌘-C] Copy [⌘-X] Cut [⌘-F] Search [⌘-H] Help " | |
;; (propertize "[Esc] Cancel" 'face '(:foreground "black")) | |
;; "\n" | |
;; "[⌘-S] Save [⌘-V] Paste [⌘-Z] Undo [⌘-R] Replace [⌘-P] Command " | |
;; (propertize "[⌘-Q] Quit" 'face '(:foreground "black")))) | |
(sit-for 30))) | |
(help-message) | |
(define-key global-map (kbd "C-h") 'help-message) | |
(setq minibuffer-prompt-properties | |
(quote (read-only nil | |
cursor-intangible t | |
face minibuffer-prompt))) | |
(defun nano-minibuffer-hook () | |
(if (active-minibuffer-window) | |
(with-current-buffer | |
(window-buffer (active-minibuffer-window)) | |
(add-text-properties (point-min) (point-max) | |
`(display '(raise +0.25)))))) | |
(defun nano-minibuffer-setup-hook () | |
(add-hook 'post-command-hook 'nano-minibuffer-hook)) | |
(defun nano-minibuffer-exit-hook () | |
(remove-hook 'post-command-hook 'nano-minibuffer-hook)) | |
(defun my-command-error-function (data context caller) | |
"Ignore some minor warnings." | |
(when (not (memq (car data) '(quit | |
beginning-of-line end-of-line | |
beginning-of-buffer end-of-buffer | |
end-of-file buffer-read-only))) | |
(command-error-default-function data context caller))) | |
(setq command-error-function #'nano-command-error-function) | |
(defun nano-message (orig-fun &rest args) | |
(let* ((msg (if (car args) (apply 'format-message args) "")) | |
(split (string-match "\n.*\\'" msg))) | |
(if split | |
(let ((part-1 (substring msg 0 split)) | |
(part-2 (propertize (substring msg split) | |
'display '(raise +0.25)))) | |
(apply orig-fun (list (concat part-1 part-2)))) | |
(apply orig-fun (list (propertize msg 'display '(raise +0.25))))))) | |
(add-hook 'minibuffer-setup-hook 'nano-minibuffer-setup-hook) | |
(add-hook 'minibuffer-exit-hook 'nano-minibuffer-exit-hook) | |
(advice-add 'message :around #'nano-message) | |
Author
rougier
commented
Oct 2, 2020
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment