emacs初期設定、キーアサインの変更や簡単なコマンドの追加など。
emacs27.1で使っているものです。
何をしているかはコメントを読んでください。
;;;
;;; emacs初期設定 (キーアサイン設定)
;;;
;; iswitchb.el
(iswitchb-mode 1)
;; バッファ読み取り関数を iswitchb にする
(setq reqd-buffer-function 'iswitchb-read-buffer)
;; 部分文字列の代わりに正規表現を使う場合は t にする
(setq iswitchb-regexp t)
;; 新しいバッファを作成するときにいちいち聞いてこない
(setq iswitchb-prompt-newbuffer nil)
;;;; added after emacs29 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq null-device "/dev/null")
(setq transient-mark-mode t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 時々のメインの作業に応じて決めると良い。
;;; ファイルの新規生成時は文字コードに注意すること。
(prefer-coding-system 'utf-8-dos)
;;;(prefer-coding-system 'utf-8-unix)
;;;(prefer-coding-system 'sjis-dos)
;;;(prefer-coding-system 'cp932)
;;(set-file-name-coding-system 'sjis-dos)
;;(set-file-name-coding-system 'cp932)
;;; font-lockの設定
(if window-system
(progn
;;; (setq font-lock-support-mode 'lazy-lock-mode)
(global-font-lock-mode t)))
;;; 標準キーアサインの変更と標準コマンドに対する個人的キーアサインの追加
(global-unset-key [C-backspace])
(global-unset-key "\C-z")
(global-set-key "\C-z" 'undo)
(global-set-key "\M-s" 'search-forward)
(global-set-key "\M-r" 'search-backward)
(global-set-key "\M-i" 'indent-relative)
(global-set-key "\C-]" 'set-mark-command)
(global-set-key "\C-@" 'pop-to-mark-command)
(global-set-key (kbd "<f9>") 'other-window)
(global-set-key (kbd "S-<f9>") (lambda () (interactive)(other-window -1)))
(global-set-key (kbd "<f10>") 'ido-switch-buffer)
(global-set-key (kbd "S-C-o") 'ido-switch-buffer)
(global-set-key (kbd "<f11>") 'other-frame)
(global-set-key (kbd "S-<f11>") (lambda() (interactive)(other-frame -1)))
(global-unset-key "\C-xf")
(global-set-key "\C-xfc" 'set-fill-column)
(global-set-key "\C-xfp" 'set-fill-prefix)
(global-set-key "\C-x\C-y" 'insert-register)
;; Always end a file with a newline
(setq require-final-newline t)
;;; 最下行で↓を押しても勝手に行を増やさない
(setq next-line-add-newlines nil)
;;; C-U C-SPC C-SPC で連続してポップマークになるようにする。
(setq set-mark-command-repeat-pop t)
;;; Shell Mode で末尾に^Mが付かないようにする
(add-hook 'comint-output-filter-functions 'shell-strip-ctrl-m nil t)
;;; CC mode のスタイル
;;; custom で設定すると、ファイル出力などのタイミングで
;;; c-basic-offsetが5に戻ってしまうので、伝統的なフックを使うことに
;;; した。
(defun c-set-style-kandr-base ()
(c-set-style "k&r")
(setq c-comment-only-line-offset 0)
(setq comment-start "/*")
(setq c-block-comment-prefix "")
(setq comment-end "*/")
(c-set-offset 'inline-open 0)
(c-set-offset 'statement-case-open 4)
(c-set-offset 'namespace-open 0)
(c-set-offset 'innamespace 0)
(c-set-offset 'namespace-close 0)
(setq fill-column 80)
(setq indent-tabs-mode nil))
(defun c-set-style-kandr-oldies ()
(c-set-style-kandr-base)
(setq c-basic-offset 2)
(setq tab-width 8)
)
(defun c-set-style-kandr ()
(c-set-style-kandr-base)
(setq c-basic-offset 4)
(setq tab-width 4)
)
;;(require 'google-c-style)
(add-hook 'c-mode-common-hook 'google-set-c-style)
;;;(add-hook 'c-mode-hook 'c-set-style-kandr-oldies)
;;(add-hook 'c-mode-hook 'c-set-style-kandr)
;;(add-hook 'c++-mode-hook 'c-set-style-kandr)
;;(add-hook 'java-mode-hook 'c-set-style-kandr)
(eval-after-load 'flycheck
'(progn
(require 'flycheck-google-cpplint)
;; Add Google C++ Style checker.
(flycheck-add-next-checker 'c/c++-cppcheck
'c/c++-googlelint 'append)))
;;; HOME/ENDキーの挙動をWindows標準に合わせる
;;; 注:端末エミュレーションでは下記のキーは元々うまく認識されていない場合がある。
;;; その時は諦めるべし。
(global-unset-key [home])
(global-unset-key [end])
(global-unset-key [C-home])
(global-unset-key [C-end])
(global-set-key [home] 'beginning-of-line)
(global-set-key [end] 'end-of-line)
(global-set-key [C-home] 'beginning-of-buffer)
(global-set-key [C-end] 'end-of-buffer)
;;; i-search で漢字が使えるようにする。(Ctrl-Kを打ってから入力する)
(define-key isearch-mode-map "\C-k" 'isearch-edit-string)
;;; 現在行番号と桁番号のモードラインへの表示
(line-number-mode 1)
(column-number-mode 1)
;;; スクロールを1行ごとにする。
(setq scroll-step 1)
(setq scroll-conservatively 10)
(setq scroll-margin 5)
;;; 括弧の対応を表示する
(show-paren-mode)
;;; 折り返し行を見たまま↑↓キーで上下に移動する。
;;; go next-visual-line
(global-set-key "\C-p" 'previous-window-line)
(global-set-key "\C-n" 'next-window-line)
(global-set-key [up] 'previous-window-line)
(global-set-key [down] 'next-window-line)
(defun previous-window-line (n)
(interactive "p")
(let ((cur-col
(- (current-column)
(save-excursion (vertical-motion 0) (current-column)))))
(vertical-motion (- n))
(move-to-column (+ (current-column) cur-col)))
(run-hooks 'auto-line-hook)
)
(defun next-window-line (n)
(interactive "p")
(let ((cur-col
(- (current-column)
(save-excursion (vertical-motion 0) (current-column)))))
(vertical-motion n)
(move-to-column (+ (current-column) cur-col)))
(run-hooks 'auto-line-hook)
)
;; セッション間の mini-buffer history を有効にする。
(savehist-mode 1)
;; セッション間の desktop 保存を有効にする。
(desktop-save-mode 1)
;; HTML ファイルは常に nxml-mode で編集する。
(fset 'html-mode 'nxml-mode)