プログラミングを頑張る日記

プログラミングを勉強して、ハッカーになろう

番外編:Emacsを頑張る

番外編ということで、Emacsの設定をやっていこうと思います。

とっても恥ずかしいので、これまでの設定は晒さずに完全に一からいきます。

とはいえ、色々入れるためにこれだけは残します。あとSKK

;; パッケージの設定
(require 'package)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

;; ddskkを利用するための設定
(global-set-key (kbd "C-x C-j") 'skk-mode)
(setq default-input-method "japanese-skk")

とりあえず括弧の補完機能でも入れますか。基本ですね。

;; 括弧の自動補完機能らしい
(electric-pair-mode 1)

るびきち様のブログ(#3 反復練習に勝るものなし -- 打鍵すべし!設定書くべし! (Software Design 2014年7月号掲載記事) ヘルプシステム 困ったとき 初期設定)を
参考にさせていただき初期設定をします。
パッケージだけは入れてしまったので、それ以外ですね。どんな設定なのかは上のリンクを見ていただければ。
コメントがセミコロン3つなのでまねします。
念の為、全選択してeval-regionしてエラーにならないことを確認します。
...問題ありません。先へ進みます。

当然Common Lispの実行環境を入れなければなりません。
パッケージが使えないのはなんなんだったのでしょう。以前と同じことをしてもしょうがないので、
roswellという素敵ツールを使ってしっかりいれてみます。
Lispのパッケージ管理入門.Quicklisp,ASDF,Roswellの違いなど · wshito's diary
参考にしたのは上記の記事です。書いてあるコードをコピペしたらいけました。
...そしてここを読んでいたらどうすればパッケージを利用できるかもわかりました。
間抜けでした...もう基本的なパッケージは最初からあるものだと思っていました。
落とさなきゃいけないんですね...。あれ、もしかして最初からあるのかな。

なによりやり方が間違ってたのでしょうね。
わからないものにわからないものを重ねてたので、何が悪いのかわからなくなってました。
反省。
なにはともあれ、今度はちゃんとパッケージも使えるようになりました。

さて、とりあえずどうしても設定しておきたいものはちゃんと入れられました。
あとは...見栄え!カッチョよくしたいです!

Emacs初心者だがオススメ設定を晒させてくれ
こちらの方の設定を入れてみます。お、自動補完機能もあるんですね。
見栄えだけじゃなくこれも入れてみます。
足りないパッケージは、M-x package-list-packagesで入れてと。
ちょっと自分としては透過率が高過ぎたのでそこは変えました。
あと何かわからないものは避けてと。
しかし自動補完はどこに効いてるのかな(支離滅裂な発言)。

とりあえずこれでいいかな。エラーも起きません!
こんな感じになりました。

;;; パッケージの設定
(require 'package)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

;;; ddskkを利用するための設定
(global-set-key (kbd "C-x C-j") 'skk-mode)
(setq default-input-method "japanese-skk")

;;; 括弧の自動補完機能らしい
(electric-pair-mode 1)

;;; 右から左に読む言語に対応させないことで描画高速化
(setq-default bidi-display-reordering nil)
;;; splash screenを無効にする
(setq inhibit-splash-screen t)
;;; 同じ内容を履歴に記録しないようにする
(setq history-delete-duplicates t)
;; C-u C-SPC C-SPC ...でどんどん過去のマークを遡る
(setq set-mark-command-repeat-pop t)
;;; 複数のディレクトリで同じファイル名のファイルを開いたときのバッファ名を調整する
(require 'uniquify)
;; filename<dir> 形式のバッファ名にする
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
(setq uniquify-ignore-buffers-re "[^*]+")
;;; ファイルを開いた位置を保存する
(require 'saveplace)
(setq-default save-place t)
(setq save-place-file (concat user-emacs-directory "places"))
;;; 釣合う括弧をハイライトする
(show-paren-mode 1)
;;; インデントにTABを使わないようにする
(setq-default indent-tabs-mode nil)
;;; 現在行に色をつける
(global-hl-line-mode 1)
;;; ミニバッファ履歴を次回Emacs起動時にも保存する
(savehist-mode 1)
;;; シェルに合わせるため、C-hは後退に割り当てる
(global-set-key (kbd "C-h") 'delete-backward-char)
;;; モードラインに時刻を表示する
(display-time)
;;; 行番号・桁番号を表示する
(line-number-mode 1)
(column-number-mode 1)
;;; GCを減らして軽くする
(setq gc-cons-threshold (* 10 gc-cons-threshold))
;;; ログの記録行数を増やす
(setq message-log-max 10000)
;;; 履歴をたくさん保存する
(setq history-length 1000)
;;; メニューバーとツールバーとスクロールバーを消す
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)

;;; roswellでslimeを使う
(load (expand-file-name "~/.roswell/helper.el"))  ; slime 起動スクリプト
(setq slime-lisp-implementations
      `((ros ("ros" "run"))                       ; ros run の起動設定
        (sbcl ("/opt/local/bin/sbcl"))
        (abcl ("/opt/local/bin/abcl"))
        (clisp ("/opt/local/bin/clisp"))))

;; auto-complete(自動補完)
(require 'auto-complete-config)
(global-auto-complete-mode 0.5)
;; font
(add-to-list 'default-frame-alist '(font . "ricty-12"))
;; color theme
(load-theme 'monokai t)
;; alpha
(if window-system 
    (progn
      (set-frame-parameter nil 'alpha 98)))
;; 非アクティブウィンドウの背景色を設定
(require 'hiwin)
(hiwin-activate)
(set-face-background 'hiwin-face "gray30")
;; 現在ポイントがある関数名をモードラインに表示
(which-function-mode 1)
;; タイトルにフルパス表示
(setq frame-title-format "%f")
;;current directory 表示
(let ((ls (member 'mode-line-buffer-identification
                  mode-line-format)))
  (setcdr ls
    (cons '(:eval (concat " ("
            (abbreviate-file-name default-directory)
            ")"))
            (cdr ls))))

日々改良していきたいところですが、初期設定としては満足です。
それでは、今日はここまでにします。