読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

Emacs始めてみました

emacs 日記

昔からvimユーザーだったがこの度Emacsに手を出してみたという報告。
今回は特に備忘録とかではなくて単なる日記的な何か。

設定について

Emacsの設定は~/.emacs.d以下にinit.elを作って記述した。
はじめにinit.elが読み込まれるが、init-loader.elによってinitsに入れているファイルが順番に読み込まれていく。
すべて晒すと長いので、init.elだけ晒してみる。 ほとんど本とかどこかのサイトを参考に書いてるので、多分どこかで見た記述が山ほどある。

;;; -*- Mode: Emacs-Lisp; Coding: utf-8 -*-

;;; http://www.emacswiki.org/
(require 'server)
(unless (server-running-p)
  (server-start))

;;; my prefix
(global-unset-key (kbd "C-k"))
(global-set-key (kbd "C-k C-k") 'recenter-top-bottom)

(defvar backupdir (expand-file-name "~/.backup/emacs")
  "Directory for saving backup files")

(require 'package)
;;; add MELPA
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
;;; add Marmalade
(add-to-list 'package-archives  '("marmalade" . "http://marmalade-repo.org/packages/"))
;;; initialize package
(package-initialize)


;;; backup and autosave settings
(setq backup-directory-alist
      (cons (cons ".*" backupdir) backup-directory-alist))
(setq auto-save-file-name-transforms
      `((".*", (concat backupdir "/") t)))
(setq auto-save-list-file-prefix (concat backupdir "/save-"))
(setq auto-save-interval 100)
(setq auto-save-timeout 15)

;;; set/enable theme
(setq custom-theme-directory "~/.emacs.d/themes/")
(load-theme 'jazz t)
(enable-theme 'jazz)

(let ((default-directory (expand-file-name "~/.emacs.d/site-lisp")))
    (add-to-list 'load-path default-directory)
    (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
        (normal-top-level-add-subdirs-to-load-path)))

;;; invisible menu-bar
(menu-bar-mode 0)
;;; invisible tool-bar
(tool-bar-mode 0)

(require 'init-loader)
(setq init-loader-show-log-after-init 'error-only)
(init-loader-load "~/.emacs.d/inits")

(require 'yakubun)

(setq split-height-threshold nil)

;;; disable opening message
(setq inhibit-startup-message t)

;;; display time
(display-time)

パッケージは基本標準のpackage.elで管理。多分el-get.elと併用したりその他諸々よりより方法があるんだろうが、とりあえずはじめだしこの程度でいいかなという。

elispも書いてみた

Emacs Lispを勉強して機能追加とかいろいろやってみたいのであの本でelispを勉強している。
2章くらいまで読み終わったので、昔rubyで書いた分数の約分スクリプトelispに移植してコマンドとして実行できるようにしてみた。

;;;; yakubun.el
;;; This provide ykbs command for your Emacs and
;;; is created to practice Emacs lisp.

(provide 'yakubun)

(defun yakubun-eukeides (m n)
  "Function of Eucledean algorithm"
  (let ((r (% m n)))
    (if (= r 0)
        n
      (yakubun-eukeides n r))))

(defun yakubun-solve (m n)
  (let ((answer (yakubun-eukeides m n)))
    (if (= answer 1)
        (cons m n)
      (yakubun-solve (/ m answer) (/ n answer)))))

(defun ykbs (m n)
  (interactive "n Numerator: \nn Denominator: ")
  (let ((answer (yakubun-solve m n)))
    (if (/= (cdr answer) 1)
        (message "%d/%d = %d/%d" m n (car answer) (cdr answer))
      (message "%d/%d = %d" m n (car answer)))))

M-x ykbsで呼び出せるようにしてみた。多分一応動くみたい???

elispも最低限の文法やらいろいろわかってきたので、コピペで書き上げた設定ファイルを見なおして修正も必要かもしれない。

終わり

図書館にあった本を参考にしました。

Emacsテクニックバイブル ?作業効率をカイゼンする200の技?

Emacsテクニックバイブル ?作業効率をカイゼンする200の技?

Emacs Lispテクニックバイブル

Emacs Lispテクニックバイブル

まだ全然わかってないので、変な設定とか習慣に合ってない書き方とかあると思うけどまあ、きっとこのまま飽きずに続けばそのうち良くなると思(ry

(Evil使っています)

Firefox ブラウザ無料ダウンロード