<commit_before>;; -*- mode: lisp-interaction; syntax: elisp; coding: utf-8-unix -*-

(require 'cl)

(add-to-list 'load-path "~/.emacs.d")

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

;; 言語設定は環境変数に依存
(set-language-environment nil)

;; dired などでマルチバイト文字が化ける
(setq default-file-name-coding-system 'utf-8-unix)

;; meadow 向けの設定
; (if (string-equal system-type "windows-nt") (let () ))

;; 自動保存機能
(setq auto-save-default t
      auto-save-list-file-name "~/.emacs-auto-save-list" ;; 自動保存に関する情報
      auto-save-intrval 50  ;; 自動保存する打鍵回数
      auto-save-timeout 10)  ;; 自動保存する時間

;; フォントロックモード (強調表示等) を有効にする
;; (global-font-lock-mode t)

;; 対応する括弧をハイライト
(show-paren-mode 1)
(setq show-paren-style 'mixed)

;; バッファ末尾に余計な改行コードを防ぐための設定
(setq next-line-add-newlines nil)

;; 一行で表示しきれない時の挙動 (nil/t)
(setq truncate-partial-width-windows t)

;; インデントの際にタブを用いるか否か
(setq-default indent-tabs-mode nil)

;; メニューバーの表示
(menu-bar-mode (if window-system 1 0))

;; シンボリックリンク先がバージョンコントロール化にある時の
;; プロンプトを表示しない
(setq vc-follow-symlinks t)

;; "The local variables list in .emacs" と言われるのを抑止
(add-to-list 'ignored-local-variables 'syntax)

;; 列数表示
(column-number-mode 1)

;; スプラッシュ画面を表示しない
(setq inhibit-splash-screen t)

;; BS でマーク範囲を消す
(delete-selection-mode 1)

;; Emacs のフレームの横幅最小値（文字数で指定）
(defvar kui/min-colmun-number 80) ;; 80 文字

;; Emacs のフレームの横幅最大値（文字数で指定）
(defvar kui/max-colmun-number (/ 1000 (frame-char-width))) ;; 1000 px

;; マーク範囲をハイライト
(setq-default transient-mark-mode t)

;; 現在の行をハイライト
(global-hl-line-mode)

;; 保存前に末尾空白の削除
(add-hook 'before-save-hook 'delete-trailing-whitespace)

;; -------------------------------------------------------------------------
;; グローバルキーバインド変更

;; 不要なキーバインド削除
(global-unset-key "\C-\\") ;; 入力モード切り替え
(global-unset-key "\C-t")  ;; 文字入れ替え

;; C-h でカーソルの左にある文字を消す
(global-set-key "\C-h" 'delete-backward-char)

;; C-h に割り当てられている関数 help-command を C-x C-h に割り当てる
(global-set-key "\C-x\C-h" 'help-command)

;; tag のキーバインド
(global-set-key "\M-t" nil)
(global-set-key "\M-tt" 'find-tag)
(global-set-key "\M-t\M-t" 'find-tag)
(global-set-key "\M-tn" 'next-tag)
(global-set-key "\M-tp" 'pop-tag-mark)
;; (global-set-key "\M-o" 'list-tags)

;; goto-line を実行
(define-key ctl-x-map "l" 'goto-line)

;; -------------------------------------------------------------------------
;; 自作関数

(defun kui/vbutlast (vector &optional n)
  "Return a copy of VECTOR with the last N elements removed."
  (vconcat (butlast (append vector nil) n)))

;; require のパッケージが無かった時に自動的に package-install を実行してくれる
(defun kui/package-require (feature &optional filename packagename noerror)
  "If PACKAGENAME(or FEATURE) was installed, execute (`require' FEATURE
 &optional FILENAME NOERROR).
if not installed, install PACKAGENAME(or FEATURE) and then execute `require'."
  (unless package-archive-contents
    (package-refresh-contents))
  (let* ((pname (if packagename packagename feature)))
    (unless (package-installed-p pname)
        (package-install pname)))
  (require feature filename noerror))

;; C-w をもう少し賢く
(defun kui/backward-kill-word-or-kill-region ()
  (interactive)
  (if (or (not transient-mark-mode) (region-active-p))
      (kill-region (region-beginning) (region-end))<commit_msg>bugfix raise error if noerror is non-nil<commit_after>;; -*- mode: lisp-interaction; syntax: elisp; coding: utf-8-unix -*-

(require 'cl)

(add-to-list 'load-path "~/.emacs.d")

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

;; 言語設定は環境変数に依存
(set-language-environment nil)

;; dired などでマルチバイト文字が化ける
(setq default-file-name-coding-system 'utf-8-unix)

;; meadow 向けの設定
; (if (string-equal system-type "windows-nt") (let () ))

;; 自動保存機能
(setq auto-save-default t
      auto-save-list-file-name "~/.emacs-auto-save-list" ;; 自動保存に関する情報
      auto-save-intrval 50  ;; 自動保存する打鍵回数
      auto-save-timeout 10)  ;; 自動保存する時間

;; フォントロックモード (強調表示等) を有効にする
;; (global-font-lock-mode t)

;; 対応する括弧をハイライト
(show-paren-mode 1)
(setq show-paren-style 'mixed)

;; バッファ末尾に余計な改行コードを防ぐための設定
(setq next-line-add-newlines nil)

;; 一行で表示しきれない時の挙動 (nil/t)
(setq truncate-partial-width-windows t)

;; インデントの際にタブを用いるか否か
(setq-default indent-tabs-mode nil)

;; メニューバーの表示
(menu-bar-mode (if window-system 1 0))

;; シンボリックリンク先がバージョンコントロール化にある時の
;; プロンプトを表示しない
(setq vc-follow-symlinks t)

;; "The local variables list in .emacs" と言われるのを抑止
(add-to-list 'ignored-local-variables 'syntax)

;; 列数表示
(column-number-mode 1)

;; スプラッシュ画面を表示しない
(setq inhibit-splash-screen t)

;; BS でマーク範囲を消す
(delete-selection-mode 1)

;; Emacs のフレームの横幅最小値（文字数で指定）
(defvar kui/min-colmun-number 80) ;; 80 文字

;; Emacs のフレームの横幅最大値（文字数で指定）
(defvar kui/max-colmun-number (/ 1000 (frame-char-width))) ;; 1000 px

;; マーク範囲をハイライト
(setq-default transient-mark-mode t)

;; 現在の行をハイライト
(global-hl-line-mode)

;; 保存前に末尾空白の削除
(add-hook 'before-save-hook 'delete-trailing-whitespace)

;; -------------------------------------------------------------------------
;; グローバルキーバインド変更

;; 不要なキーバインド削除
(global-unset-key "\C-\\") ;; 入力モード切り替え
(global-unset-key "\C-t")  ;; 文字入れ替え

;; C-h でカーソルの左にある文字を消す
(global-set-key "\C-h" 'delete-backward-char)

;; C-h に割り当てられている関数 help-command を C-x C-h に割り当てる
(global-set-key "\C-x\C-h" 'help-command)

;; tag のキーバインド
(global-set-key "\M-t" nil)
(global-set-key "\M-tt" 'find-tag)
(global-set-key "\M-t\M-t" 'find-tag)
(global-set-key "\M-tn" 'next-tag)
(global-set-key "\M-tp" 'pop-tag-mark)
;; (global-set-key "\M-o" 'list-tags)

;; goto-line を実行
(define-key ctl-x-map "l" 'goto-line)

;; -------------------------------------------------------------------------
;; 自作関数

(defun kui/vbutlast (vector &optional n)
  "Return a copy of VECTOR with the last N elements removed."
  (vconcat (butlast (append vector nil) n)))

;; インストールされていないパッケージを require した時に、
;; 自動でインストールしたあとに require してくれる
(defun kui/package-require (feature &optional filename packagename noerror)
  "If PACKAGENAME(or FEATURE) was installed, execute `require' as:

	(require FEATURE &optional FILENAME NOERROR)

If PACKAGENAME(or FEATURE) not installed, execute `package-install' with
PACKAGENAME(or FEATURE) and then execute `require'.
If NOERROR is non-nil, then return nil if PACKAGENAME(or FEATURE) is not
available package."
  (unless package--initialized (package-initialize t))
  (unless package-archive-contents (package-refresh-contents))
  (if (assq pname package-archive-contents)
      (let ((pname (if packagename packagename feature)))
        (unless (package-installed-p pname) (package-install pname))
        (or (require feature filename t)
            (if noerror nil
              (error "Package `%s' does not provide the feature `%s'"
                     (symbol-name pname) (symbol-name feature)))))
    (if noerror nil
      (error "Package `%s' is not available for installation"
             (symbol-name feature)))))

;; C-w をもう少し賢く
(defun kui/backward-kill-word-or-kill-region ()
  (interactive)
  (if (or (not transient-mark-mode) (region-active-p))
      (kill-region (region-beginning) (region-end))
{'fraction_non_alphanumeric': 0.19353524378650006, 'fraction_numerical': 0.006247453483634388, 'mean_word_length': 3.232183908045977, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1023968', 'n_tokens_mistral': 3422, 'n_tokens_neox': 3347, 'n_words': 603}