Skip to content

Instantly share code, notes, and snippets.

@itouhiro
Created January 14, 2018 00:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itouhiro/cad0b1c4f7ac833490bf86e694aba76a to your computer and use it in GitHub Desktop.
Save itouhiro/cad0b1c4f7ac833490bf86e694aba76a to your computer and use it in GitHub Desktop.
;;; -*- mode: emacs-lisp; syntax: elisp -*-
;; Time-stamp: <Jan 10 2018>
;; ------------------------------------------------------------------------
;; Keyset
(global-set-key "\C-h" 'backward-delete-char) ;C-h as BackSpace
(global-set-key "\M-?" 'help-for-help) ;M-? as help
(global-set-key "\C-q" 'dabbrev-expand)
;(global-set-key "\C-q" 'quoted-insert) ;C-q original
(global-set-key "\C-x\C-b" 'buffer-menu)
(global-set-key "\C-z" 'suspend-frame) ; C-z original
(global-set-key "\C-x\C-t" 'delete-trailing-whitespace)
(global-set-key "\M-\C-t" 'delete-trailing-whitespace)
;(global-set-key (kbd "RET") 'newline-and-indent)
;(global-set-key "\M-\C-s" 'search-forward-regexp)
(global-set-key (kbd "M-RET") 'newline-and-indent)
;; move by words
(global-set-key [C-right] 'forward-word)
(global-set-key [C-left] 'backward-word)
(global-set-key "\M-s" 'backward-word)
(global-set-key "\M-e" 'previous-line)
(global-set-key "\M-d" 'next-line)
(global-set-key "\M-a" 'move-beginning-of-line)
(global-set-key "\M-g" 'end-of-line)
(global-set-key "\M-r" 'scroll-down)
(global-set-key "\M-v" 'scroll-up)
;; PuTTY
(global-set-key [select] 'end-of-line)
;; Backup
;; tmp file saving directory
(setq auto-save-list-file-prefix "~/.emacs.d/tmp/.saves-")
;; backup.file~ location
(setq make-backup-files t)
(setq backup-directory-alist
(cons (cons "\\.*$" (expand-file-name "~/.emacs.d/tmp"))
backup-directory-alist))
;; 自動セーブファイル(#ファイル名#)の設定
(setq auto-save-file-name-transforms
`((".*/Dropbox/.*" ,(expand-file-name "~/.emacs.d/tmp/") t)))
;; CharCode
(set-default-coding-systems 'utf-8-unix)
(set-buffer-file-coding-system 'utf-8-unix)
(set-keyboard-coding-system 'utf-8-unix)
(set-terminal-coding-system 'utf-8-unix)
;; decode-translation-table の設定
(coding-system-put 'euc-jp :decode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table))
(coding-system-put 'iso-2022-jp :decode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table))
;以下を有効化→U+301CがU+FF5Eに自動変換される
;(coding-system-put 'utf-8 :decode-translation-table
; (get 'japanese-ucs-jis-to-cp932-map 'translation-table))
;; encode-translation-table の設定
(coding-system-put 'euc-jp :encode-translation-table
(get 'japanese-ucs-cp932-to-jis-map 'translation-table))
(coding-system-put 'iso-2022-jp :encode-translation-table
(get 'japanese-ucs-cp932-to-jis-map 'translation-table))
(coding-system-put 'cp932 :encode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table))
;以下を有効化→U+301CがU+FF5Eに自動変換される
;(coding-system-put 'utf-8 :encode-translation-table
; (get 'japanese-ucs-jis-to-cp932-map 'translation-table))
;; charset と coding-system の優先度設定
(set-charset-priority 'ascii 'japanese-jisx0208 'latin-jisx0201
'katakana-jisx0201 'iso-8859-1 'cp1252 'unicode)
(set-coding-system-priority 'utf-8 'euc-jp 'iso-2022-jp 'cp932)
;; PuTTY 用の terminal-coding-system の設定
;(apply 'define-coding-system 'utf-8-for-putty
; "UTF-8 (translate jis to cp932)"
; :encode-translation-table
; (get 'japanese-ucs-jis-to-cp932-map 'translation-table)
; (coding-system-plist 'utf-8))
;(set-terminal-coding-system 'utf-8-for-putty)
;; East Asian Ambiguous
(defun set-east-asian-ambiguous-width (width)
(while (char-table-parent char-width-table)
(setq char-width-table (char-table-parent char-width-table)))
(let ((table (make-char-table nil)))
(dolist (range
'(#x00A1 #x00A4 (#x00A7 . #x00A8) #x00AA (#x00AD . #x00AE)
(#x00B0 . #x00B4) (#x00B6 . #x00BA) (#x00BC . #x00BF)
#x00C6 #x00D0 (#x00D7 . #x00D8) (#x00DE . #x00E1) #x00E6
(#x00E8 . #x00EA) (#x00EC . #x00ED) #x00F0
(#x00F2 . #x00F3) (#x00F7 . #x00FA) #x00FC #x00FE
#x0101 #x0111 #x0113 #x011B (#x0126 . #x0127) #x012B
(#x0131 . #x0133) #x0138 (#x013F . #x0142) #x0144
(#x0148 . #x014B) #x014D (#x0152 . #x0153)
(#x0166 . #x0167) #x016B #x01CE #x01D0 #x01D2 #x01D4
#x01D6 #x01D8 #x01DA #x01DC #x0251 #x0261 #x02C4 #x02C7
(#x02C9 . #x02CB) #x02CD #x02D0 (#x02D8 . #x02DB) #x02DD
#x02DF (#x0300 . #x036F) (#x0391 . #x03A9)
(#x03B1 . #x03C1) (#x03C3 . #x03C9) #x0401
(#x0410 . #x044F) #x0451 #x2010 (#x2013 . #x2016)
(#x2018 . #x2019) (#x201C . #x201D) (#x2020 . #x2022)
(#x2024 . #x2027) #x2030 (#x2032 . #x2033) #x2035 #x203B
#x203E #x2074 #x207F (#x2081 . #x2084) #x20AC #x2103
#x2105 #x2109 #x2113 #x2116 (#x2121 . #x2122) #x2126
#x212B (#x2153 . #x2154) (#x215B . #x215E)
(#x2160 . #x216B) (#x2170 . #x2179) (#x2190 . #x2199)
(#x21B8 . #x21B9) #x21D2 #x21D4 #x21E7 #x2200
(#x2202 . #x2203) (#x2207 . #x2208) #x220B #x220F #x2211
#x2215 #x221A (#x221D . #x2220) #x2223 #x2225
(#x2227 . #x222C) #x222E (#x2234 . #x2237)
(#x223C . #x223D) #x2248 #x224C #x2252 (#x2260 . #x2261)
(#x2264 . #x2267) (#x226A . #x226B) (#x226E . #x226F)
(#x2282 . #x2283) (#x2286 . #x2287) #x2295 #x2299 #x22A5
#x22BF #x2312 (#x2460 . #x24E9) (#x24EB . #x254B)
(#x2550 . #x2573) (#x2580 . #x258F) (#x2592 . #x2595)
(#x25A0 . #x25A1) (#x25A3 . #x25A9) (#x25B2 . #x25B3)
(#x25B6 . #x25B7) (#x25BC . #x25BD) (#x25C0 . #x25C1)
(#x25C6 . #x25C8) #x25CB (#x25CE . #x25D1)
(#x25E2 . #x25E5) #x25EF (#x2605 . #x2606) #x2609
(#x260E . #x260F) (#x2614 . #x2615) #x261C #x261E #x2640
#x2642 (#x2660 . #x2661) (#x2663 . #x2665)
(#x2667 . #x266A) (#x266C . #x266D) #x266F #x273D
(#x2776 . #x277F) (#xE000 . #xF8FF) (#xFE00 . #xFE0F)
#xFFFD
))
(set-char-table-range table range width))
(optimize-char-table table)
(set-char-table-parent table char-width-table)
(setq char-width-table table)))
(set-east-asian-ambiguous-width 2)
;; 全角チルダ/波ダッシュをWindowsスタイルにする
;(let ((table (make-translation-table-from-alist '((#x301c . #xff5e))) ))
; (mapc
; (lambda (coding-system)
; (coding-system-put coding-system :decode-translation-table table)
; (coding-system-put coding-system :encode-translation-table table)
; )
; '(utf-8 cp932 utf-16le)))
;; cp932エンコード時の表示を「P」とする
(coding-system-put 'cp932 :mnemonic ?P)
(coding-system-put 'cp932-dos :mnemonic ?P)
(coding-system-put 'cp932-unix :mnemonic ?P)
(coding-system-put 'cp932-mac :mnemonic ?P)
;; Behavior
;; ウインドウ分割時に画面外へ出る文章を折り返す
(setq-default truncate-partial-width-windows nil)
;; 編集行のハイライト
;(global-hl-line-mode)
;; 変更箇所を目立たせる
;(global-highlight-changes 'active)
;(add-hook 'write-file-hooks 'highlight-changes-rotate-faces)
;; 前回編集していた場所を記憶し,ファイルを開いた時にそこへカーソルを移動
(load "saveplace")
(setq-default save-place t)
(setq save-place-file "~/.emacs.d/.emacs-places")
;; file名の補完で大文字小文字を区別しない
(setq completion-ignore-case t)
;; バッファ自動再読み込み
(global-auto-revert-mode 1)
;; elisp変数表示のとき途中で省略しない
(setq eval-expression-print-level nil)
(setq eval-expression-print-length nil)
(setq diff-switches "-u")
;; auto-insert LAST-MODIFIED-DATE
(if (not (memq 'time-stamp write-file-hooks))
(setq write-file-hooks
(cons 'time-stamp write-file-hooks)))
(setq time-stamp-line-limit 40)
(setq system-time-locale "C")
(setq time-stamp-format "%3b %02d %:y") ; Jan 22 2012
;(setq time-stamp-format "%:y-%02m-%02d %02H:%02M JST") ;2010-11-19 09:27 JST
;(setq time-stamp-format "%:y-%02m-%02dT%02H:%02M:%02S+09:00") ;2010-11-19T09:27:32+09:00
;; insert-current-time-string
(defun insert-current-day-string ()
"Inserts current time string at point."
(interactive)
(move-beginning-of-line nil) ;行頭に移動
(goto-char (point-min)) ;buffer先頭に移動
(setq insert-current-time-wday (vector '日 '月 '火 '水 '木 '金 '土))
(insert (format "%s(%s)\n%s "
(format-time-string "%Y-%02m-%d")
(aref insert-current-time-wday (string-to-int (format-time-string "%w")))
(format-time-string "%H:%M"))))
(defun insert-current-time-string ()
"Inserts current time string at point."
(interactive)
(insert (format "%s " (format-time-string "%H:%M"))))
(global-set-key "\C-xT" 'insert-current-day-string)
(global-set-key "\C-xt" 'insert-current-time-string)
;; kill-ring でテキスト属性(色情報など)を保存しない
;; http://www-tsujii.is.s.u-tokyo.ac.jp/~yoshinag/tips/elisp_tips.html#yankoff
(defadvice kill-new (around my-kill-ring-disable-text-property activate)
(let ((new (ad-get-arg 0)))
(set-text-properties 0 (length new) nil new)
ad-do-it))
;; タブ , 全角スペース を色つき表示 (色名は M-x list-color-displayで調べる)
;; http://homepage1.nifty.com/blankspace/emacs/color.html
(defface my-face-b-1 '((t (:background "gray32"))) nil)
(defface my-face-b-2 '((t (:background "gray26"))) nil)
(defface my-face-u-1 '((t (:foreground "DarkSlateBlue" :underline t))) nil)
;(defface my-face-u-1 '((t (:foreground "SteelBlue" :underline t))) nil)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode ())
(font-lock-add-keywords
major-mode
'(("\t" 0 my-face-b-2 append)
(" " 0 my-face-b-1 append)
("[ \t]+$" 0 my-face-u-1 append)
;;("[\r]*\n" 0 my-face-r-1 append)
)))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
;; 編集中のファイルを開き直す
;; http://www.bookshelf.jp/soft/meadow_24.html#SEC254
;; - revert-buffer は yes/no の確認がうるさい
;; - find-alternate-file は開き直したら元のバッファの状態に戻れない
(defun reopen-file ()
(interactive)
(let ((file-name (buffer-file-name))
(old-supersession-threat
(symbol-function 'ask-user-about-supersession-threat))
(point (point)))
(when file-name
(fset 'ask-user-about-supersession-threat (lambda (fn)))
(unwind-protect
(progn
(erase-buffer)
(insert-file file-name)
(set-visited-file-modtime)
(goto-char point))
(fset 'ask-user-about-supersession-threat
old-supersession-threat)))))
(global-set-key "\C-xR" 'reopen-file)
;; コンテキスト依存バッファ移動
;; 画面分割されていない→分割して新しいバッファに移動
;; 分割されている→別バッファに移動
;; http://d.hatena.ne.jp/rubikitch/20100210/emacs
(defun other-window-or-split ()
(interactive)
(cond ((one-window-p)
;; 横161文字以上なら横に分割、未満なら縦分割
(if (< 160 (frame-width))
(split-window-horizontally)
(split-window)
)
(other-window 1)
(setq-default truncate-partial-width-windows nil) ;なぜかときどきtになるのでここに入れる
(buffer-menu)
)
(t
(other-window 1))))
(global-set-key (kbd "C-t") 'other-window-or-split)
;; 一文字検索移動
;; http://dev.ariel-networks.com/wp/documents/aritcles/emacs/part16
(defvar last-search-char nil)
(defvar last-search-direction 'forward)
;; 一文字検索(順方向)
(defun search-forward-with-char (char)
(interactive "cMove to Char: ")
(if (eq (char-after (point)) char) (forward-char))
(and (search-forward (char-to-string char) nil t)
(backward-char))
(setq last-search-char char
last-search-direction 'forward))
;; 一文字検索(逆方向)
(defun search-backward-with-char (char)
(interactive "cMove backward to Char: ")
(search-backward (char-to-string char) nil t)
(setq last-search-char char
last-search-direction 'backward))
;(global-set-key "\C-]" 'search-forward-with-char)
;(global-set-key "\C-\M-]" 'search-backward-with-char)
;(global-set-key "\C-\\" 'search-backward-with-char)
(global-set-key "\C-j" 'search-forward-with-char)
(global-set-key "\C-o" 'search-backward-with-char)
;; *scratch* bufferでもC-jを一文字検索にする
(define-key lisp-interaction-mode-map "\C-j" 'search-forward-with-char)
(define-key lisp-interaction-mode-map "\C-x\C-j" 'eval-print-last-sexp)
;; 最後に実行した一文字検索を再実行
(defun search-repeat-with-char ()
(interactive)
(cond
((eq nil last-search-char) (message "You haven't searched yet."))
((eq last-search-direction 'forward)
(or (search-forward-with-char last-search-char) (backward-char)))
((eq last-search-direction 'backward) (search-backward-with-char last-search-char))))
;(global-set-key "\C-]" 'search-forward-with-char)
;(global-set-key "\C-o" 'search-repeat-with-char)
(global-set-key "\C-\\" 'search-repeat-with-char)
;; 最後のマーク(C-SPC C-SPC)に移動
(defun move-to-mark ()
(interactive)
(let ((pos (point)))
(goto-char (mark))
(push-mark pos)))
(global-set-key "\C-\M-j" 'move-to-mark)
;; Erase memubar(text), toolbar(icon), scrollbar
(menu-bar-mode -1)
(line-number-mode t)
(column-number-mode t)
;入力バッファ以外はカーソル非表示
(setq cursor-in-non-selected-windows nil)
; beep
(setq visible-bell nil)
; カーソルを点滅させない
(blink-cursor-mode nil)
; スプラッシュ(起動画面)非表示
(setq inhibit-startup-message t)
; リージョンに色をつける
(setq transient-mark-mode t)
; font-lock use-all
(global-font-lock-mode t)
;level of fontification: least level
(setq font-lock-maximum-decoration
'((c-mode . 1) (c++-mode . 1)))
;; FrameTitle
(setq frame-title-format "%b")
;; バッファ画面外文字の切り詰め表示
(setq truncate-lines nil)
;; ウィンドウ縦分割時のバッファ画面外文字の切り詰め表示
(setq truncate-partial-width-windows t)
;; 同一バッファ名にディレクトリ付与
(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
(setq uniquify-ignore-buffers-re "*[^*]+*")
;; スクロール時のカーソル位置の維持
(setq scroll-preserve-screen-position t)
;; スクロール行数(一行ごとのスクロール)
(setq vertical-centering-font-regexp ".*")
(setq scroll-conservatively 35)
(setq scroll-margin 0)
(setq scroll-step 1)
;; 画面スクロール時の重複行数
(setq next-screen-context-lines 1)
;; 対応する括弧をハイライトさせる
(show-paren-mode t)
;; 最近使ったファイル
(require 'recentf)
(recentf-mode 1)
(global-set-key "\C-x\ \C-r" 'recentf-open-files)
;(setq recentf-save-file (expand-file-name ".recentf" user-emacs-directory))
(setq recentf-max-saved-items 200)
(setq recentf-exclude '(".recentf" "bookmarks"))
;; 変更のあったファイルの自動再読み込み
(global-auto-revert-mode 1)
;; dired
;; http://qiita.com/l3msh0@github/items/8665122e01f6f5ef502f
;; diredを2つのウィンドウで開いている時に、デフォルトの移動orコピー先をもう一方のdiredで開いているディレクトリにする
(setq dired-dwim-target t)
;; ディレクトリを再帰的にコピーする
(setq dired-recursive-copies 'always)
;; diredバッファでC-sした時にファイル名だけにマッチするように
(setq dired-isearch-filenames t)
;; dired バッファを編集(一括ファイル名リネーム)
(require 'wdired)
(define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
(define-key wdired-mode-map "\C-j" 'search-forward-with-char)
(define-key wdired-mode-map "\C-o" 'search-backward-with-char)
(define-key wdired-mode-map "\C-\\" 'search-repeat-with-char)
(cd "~") ; start on home directory
(buffer-menu) ; 初期画面をいきなりbuffer-menuにする
;; disable version control
(setq vc-handled-backends nil)
(remove-hook 'find-file-hook 'vc-find-file-hook)
(remove-hook 'kill-buffer-hook 'vc-kill-buffer-hook)
;; coding style
;[TAB]キー押下時にTabではなくスペース入力
(setq-default indent-tabs-mode nil)
;; cc-mode
(defun my-c-mode-common-hook ()
(c-set-style "java")
)
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
(add-to-list 'auto-mode-alist '("\\.c\\'" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.cpp\\'" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))
(add-to-list 'auto-mode-alist '("\\.pl\\'" . perl-mode))
(add-to-list 'auto-mode-alist '("\\.rb\\'" . ruby-mode))
;; javascript-mode
(setq js-indent-level 2)
(add-to-list 'auto-mode-alist '("\\.json\\'" . js-mode))
(add-to-list 'auto-mode-alist '("\\.jsfl\\'" . js-mode))
(add-to-list 'auto-mode-alist '("\\.jsx\\'" . js-mode))
;; php-mode
(add-to-list 'auto-mode-alist '("\\.ctp\\'" . html-mode))
(add-hook 'php-mode-hook
'(lambda()
(setq tab-width 4)
(setq c-basic-offset 4)
(setq c-hanging-comment-ender-p nil)
(setq indent-tabs-mode nil)
(setq php-manual-path "/usr/share/php/php-chunked-xhtml")
(setq php-manual-url "http://www.phppro.jp/phpmanual/")
))
(add-hook 'php-mode-hook (lambda ()
(defun ywb-php-lineup-arglist-intro (langelem)
(save-excursion
(goto-char (cdr langelem))
(vector (+ (current-column) c-basic-offset))))
(defun ywb-php-lineup-arglist-close (langelem)
(save-excursion
(goto-char (cdr langelem))
(vector (current-column))))
(c-set-offset 'arglist-intro 'ywb-php-lineup-arglist-intro)
(c-set-offset 'arglist-close 'ywb-php-lineup-arglist-close)))
;; EXTERNAL LIB
;; RegExp like Perl
;(add-to-list 'load-path "~/.emacs.d")
;(require 'foreign-regexp)
;; Choose your taste of foreign regexp from 'perl, 'ruby or 'javascript.
;; Tell re-builder to use foreign regexp.
;(custom-set-variables
;'(foreign-regexp/regexp-type 'perl)
;'(reb-re-syntax 'foreign-regexp))
;(cond
; ((= emacs-major-version 24)
; (load "~/.emacs.d/emacs24.el"))
; ((= emacs-major-version 23)
; (load "~/.emacs.d/emacs23.el"))
;)
;; Linux or Windows
(cond
((equal system-type 'windows-nt)
(load "~/.emacs.d/mswindows.el"))
)
;; end of file
;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment