Emacs

Table of Contents

1. Emacsの学習記録

  • org-modeを利用して学習。
    • htmlへの出力は"C-c C-e" -> h -> o
  • org-mode内でのelispの実行は"C-c C-c"で行う。

1.1. Elisp

  • グローバル変数 : setq
  • ローカル変数 : let
    • スコープは()の中だけ。

1.1.1. 四則演算

(+ 1 9)
10
(/ 2.2 2)
1.1
(+ 1 2 (* 3 4) 5 6)
26

1.1.2. 変数

;  - (let ((変数名 値))
;      処理1
;      処理2
;      ...)

  (let ((x 50))
    (* x 100)
    )

5000
; 2つ以上の変数定義
(let ((price 100)
      (tax 1.1))
  (* price tax))
110.00000000000001
  ; 1は実行されるが、値を返すのは最後の結果だけ
(let ((hoge 100)
      (huga 200))
  (message "1, hoge : %d, huga : %d" hoge huga)
  (message "2, hoge : %d, huga : %d" hoge huga))
2, hoge : 100, huga : 200
; 定義した変数を次以降の処理で使用したい時
; let*で変数定義する。
; letの場合は全変数が同時に作成される。
(let* ((a 200)
       (b (+ a 20)))
  (+ a b))
420

1.1.3. if文

;(if 条件式
;  Trueの時の処理
;  Falseの時の処理)
(let ((score 80))
  (if (>= score 60)
      "合格"
      "不合格"))


合格
(let ((n 15))
(if (= (% n 3) 0)
(progn
  (message "Fizz")
  (sit-for 1.0)
  "割り切れました。")
n))
割り切れました。
(let ((temp 29))
  (if (>= temp 30)
      (progn
        (message "暑い冷房ON")
        (sit-for 1.0)
        "稼働中")
      (progn
        (message "まだ涼しいぞ")
        (sit-for 1.0)
        "待機中")))

待機中

1.1.4. 関数

  • interactive : M-x air-conditionerを実行できるようになる。 n : 数字で入力させる。
(defun air-conditioner (temp)
  "気温(temp)を受け取って、エアコンの状態を返す関数"
  (interactive "n今何度?: ") 
  (if (>= temp 30)
      (progn
        (message "暑い! 冷房ON")
        (sit-for 1.0)
        "稼働中")

      "待機中"))



air-conditioner
(air-conditioner 30)
;(air-conditioner 20)
稼働中
;; "C-c a" でair-conditionerコマンドを実行できる。
;; クォートする(評価を遅らせる)

(global-set-key (kbd "C-c a") 'air-conditioner)

air-conditioner
(defun esc ()
  "カーソル位置にemacs-lispのコードエリアをぶち込む"
  (interactive)
  (insert "#+BEGIN_SRC emacs-lisp")
  (insert "\n")
  (insert "\n")    
  (insert "#+END_SRC")
  (forward-line -1))
  (global-set-key (kbd "C-c e") 'esc)
esc
(defun insert-current-time ()
  (interactive)
  (insert (format-time-string "%Y-%m-%d %H:%M")))
;; M-x insert-current-time
insert-current-time
(defun insert-blog-header ()
  "対話的にタイトルとタブを入力し、Org-modeのブログヘッダーを挿入する"
  (interactive)
  (let ((title (read-string "記事のタイトルを入力: "))
        (date (format-time-string "%Y-%m-%d")))
    (insert (format "** %s\n" title))
    (insert (format "*** %s\n" date))      
    (forward-line -1)))
insert-blog-header

1.2. memo

1.2.1. 矩形選択

"C-x spc"で矩形領域を選択してから下記コマンドを実行。 覚えれる気がせん。

  • 置換・挿入: C-x r t
  • 切り取り: C-x r k
  • 貼り付け: C-x r y
  • 開く: C-x r o
  • 削除: C-x r d
  • 連番: C-x r N

Author: kenta

Created: 2026-03-11 水 22:44

Validate