flat7th

init-my.el

created 2025-09-04 modified 2025-09-04 
# 最新オレEmacs設定

;; init-my.el

;; emacs 29.1 の起動時Warning を消す
(setq comp-async-report-warnings-errors nil)

;; 言語、文字コード関係
(progn
  (set-language-environment "Japanese")
  (prefer-coding-system 'utf-8-unix)
  )

;; 実行環境のパス、URLなど
(progn
  (setq load-path (cons "~/.emacs.d/elisp" load-path))
  (progn
	(require 'package)
	(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
	(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
	(package-initialize)
	)
  )

;;;; 自分用 機能、キー設定
(progn
  (progn
	;; \M-O を割当てたらだめ。特定端末で 矢印キーが効かなくなる
	(define-key global-map "\C-z" 'undo)
	(define-key global-map "\M-o" 'other-window) ;; C-x o
	(define-key global-map "\C-\M-o" 'other-frame) ;; C-x 5 o
	(define-key global-map "\C-cg" 'goto-line)
	(define-key global-map "\C-s" 'isearch-forward-regexp)
	(define-key global-map "\M-p" 'backward-list)
	(define-key global-map "\M-n" 'forward-list)
	(define-key global-map "\C-o" 'ff-get-other-file)
	(define-key global-map [C-tab] 'ff-get-other-file)
	(define-key global-map [muhenkan] 'ignore)
	)
  (progn
	(defun toggle-indent-tabs-mode () (interactive)
           (setq indent-tabs-mode (not indent-tabs-mode))
           (message "indent-tabs-mode is %s" indent-tabs-mode)
           )
	(defun toggle-dedicate () "toggle dedicate status" (interactive)
           (set-window-dedicated-p (selected-window) (not (window-dedicated-p)))
           (message "window-dedicated-p is %s" (window-dedicated-p))
           )
	(defun incr-tab () (interactive)
           (setq tab-width (+ tab-width 1))
           (message "tab-width = %d" tab-width)
           (redraw-frame)
           )
	(defun decr-tab () (interactive)
           (setq tab-width (- tab-width 1))
           (message "tab-width = %d" tab-width)
           (redraw-frame)
           )
	)
  (progn
	(define-key global-map [f1] 'toggle-indent-tabs-mode)
	(define-key global-map [C-f1] 'toggle-truncate-lines)
	(define-key global-map [M-f1] 'toggle-dedicate)
	(define-key global-map [f6] 'bury-buffer)
	(define-key global-map [(shift f6)] 'unbury-buffer)
	(define-key global-map [f7] 'decr-tab)
	(define-key global-map [f8] 'incr-tab)
	(define-key global-map [f9] "\C-u0\C-l")
	(define-key global-map [f11] 'enlarge-window)
	(define-key global-map [C-f11] 'shrink-window)
	(define-key global-map [f12] 'enlarge-window-horizontally)
	(define-key global-map [C-f12] 'shrink-window-horizontally)
	)
  )


;; diff
(eval-after-load "diff"
  '(progn
	 (define-key diff-mode-map (kbd "M-o") nil)
	 )
  )

;; dired
(eval-after-load "dired"
  '(progn
     ;;(fset 'dired-find-file-eucjp "\C-x\C-mceuc-japan\C-mf")
     ;;(define-key dired-mode-map "e" 'dired-find-file-eucjp)

     ;; dired モードで 大文字S で .始まり隠す(logF) -> 通常(laF) -> selinuxの表示(laZF) を切り替える
     (defun dired-toggle-dot-files () (interactive)
            (if (string-match "Z" dired-actual-switches) ;; laZF ->
				(setq dired-actual-switches dired-listing-switches) ;; logF
                (if (string-match "a" dired-actual-switches)
					(setq dired-actual-switches "-laZF") ;; laF -> laZF
                    (setq dired-actual-switches "-laF") ;; logF -> laF
					)
				)
			(revert-buffer)
            )
     (define-key dired-mode-map "S" 'dired-toggle-dot-files)

     (setq dired-dnd-protocol-alist
           '(("^file:///" . dnd-open-local-file)
             ("^file://"  . dnd-open-file)
             ("^file:"    . dnd-open-local-file)))
     )
  )

;; speedbar
;; インストール
;;   M-x package-install sr-speedbar
;;   ... は、版が古い。2016年で止まっている。
;; 起動
;;   M-x sr-speedbar-toggle
;; 左側にするには
;;   M-x customize-apropos で sr-speedbar-right-side を探して、nil にする
;;
;;(require 'sr-speedbar)
;;
(eval-after-load 'speedbar
  '(progn
     (speedbar-add-supported-extension ".rb")
     (speedbar-add-supported-extension ".src")
     (speedbar-add-supported-extension ".conf")
     (speedbar-add-supported-extension ".a")
     (speedbar-add-supported-extension ".so")
     ))

;; C言語
(progn
  (defun my-c-mode-hook ()
	;;(setq indent-tabs-mode t)
	;;(modify-syntax-entry ?_ "w")
	(define-key c-mode-base-map "/" 'self-insert-command)
	(define-key c-mode-base-map "*" 'self-insert-command)
	(setq truncate-lines t)
	;;(highlight-indent-guides-mode)
	)
  ;;(add-hook 'c-mode-hook 'my-c-mode-hook)
  (add-hook 'c-mode-common-hook 'my-c-mode-hook)

  ;; 定義箇所に飛ぶやつ
  (eval-after-load 'xref
	'(progn
       (define-key xref--xref-buffer-mode-map
                   (kbd "RET") #'xref-quit-and-goto-xref)
       (define-key xref--button-map
                   (kbd "RET") #'xref-quit-and-goto-xref)
       ))

  ;; FindOtherFile  ff-find-other-file  .h と.cで切り替えるやつ
  (setq cc-search-directories
		'(;; AAA/
		  ;;   x.h
		  ;;   x.cpp
		  "."

		  ;; AAA/
		  ;;   include/x.h
		  ;;   src/x.cpp
          "../include"
          "../src"

		  ;; PROC/
		  ;;   include/AAA/x.h
		  ;;   AAA/x.cpp
          "../include/*"
          "../../*"

		  ;; src/
		  ;;   include/PROC/AAA/x.h
		  ;;   PROC/AAA/x.cpp
          "../../../src/include/*/*"
          "../../../../src/*/*"

		  ;; proj/
		  ;;   include/AAA/x.h
		  ;;   src/AAA/x.cpp
          "../../include/*/*"
          "../../src/*/*"

          "/usr/include"
          ))
  )

;; ファイル名とモードの対応
(progn
  ;; markdown
  (autoload 'markdown-mode "markdown-mode"
    "Major mode for editing Markdown files" t)
  (add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
  (add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))
  (autoload 'gfm-mode "markdown-mode"
    "Major mode for editing GitHub Flavored Markdown files" t)
  (add-to-list 'auto-mode-alist '("README\\.md\\'" . gfm-mode))

  (defun my-document-mode-hook ()
	;;(setq indent-tabs-mode t)
	;;(modify-syntax-entry ?_ "w")
	(setq truncate-lines nil)
	)
  (add-hook 'markdown-mode-hook 'my-document-mode-hook)

  ;; makefile
  (add-to-list 'auto-mode-alist '("/Makefile" . makefile-gmake-mode))
  (add-to-list 'auto-mode-alist '("\\.h$" . c++-mode))

  ;; flex bison
  (autoload 'bison-mode "bison-mode" "mode for bison" t)
  (add-to-list 'auto-mode-alist '("\\.l$" . bison-mode))
  (add-to-list 'auto-mode-alist '("\\.y$" . bison-mode))
  ;;(when (load "bison-mode" t)
	;;)

  ;; web
  (add-to-list 'auto-mode-alist '("\\.php$" . php-mode))
  (add-to-list 'auto-mode-alist '("\\.html$" . xml-mode))

  ;; vala
  (autoload 'vala-mode "vala-mode" "Major mode for editing Vala code." t)
  (add-to-list 'auto-mode-alist '("\\.vala$" . vala-mode))
  (add-to-list 'auto-mode-alist '("\\.vapi$" . vala-mode))
  (add-to-list 'file-coding-system-alist '("\\.vala$" . utf-8))
  (add-to-list 'file-coding-system-alist '("\\.vapi$" . utf-8))

  ;; all programing language
  (when (load "highlight-indent-guides" t)
	(add-hook 'prog-mode-hook 'highlight-indent-guides-mode)
	(add-hook 'nxml-mode-hook 'highlight-indent-guides-mode)
	)
  )


;; 見栄え
(progn
  ;; FONT
  ;; フォント名の一覧を知るには:
  ;;   (dolist (x (x-list-fonts "*")) (print x))
  ;;     "Monospace" "Liberation Mono" "DejaVu Sans Mono"
  ;;	 "VL Pゴシック" "VL ゴシック" "Noto Sans Mono CJK JP-regular" など
  ;; character setの一覧を知るには:
  ;;   M-x list-character-sets
  ;;     ascii japanese-jisx0208 など
  ;;
  ;;;; dejavu-sans-mono-fonts-2.37-23.fc40.noarch ;;fonts-dejavu-mono

  (set-face-attribute 'default nil :family "DejaVu Sans Mono" :height 110)
  (set-fontset-font t 'japanese-jisx0208 (font-spec :family "VL ゴシック"))
  (set-fontset-font t 'cyrillic-iso8859-5 (font-spec :family "Monapo")) ;;"YOzNF"
  (set-fontset-font t 'greek-iso8859-7 (font-spec :family "Monapo"))
  (set-fontset-font t 'symbol (font-spec :family "Monapo"))

  ;;
  ;; 英数と漢字のバランス
  ;; (setq face-font-rescale-alist '(("VL ゴシック" . 1.2))) ;; 1.2 だと 英2:日1 方式になる
  ;;   最近は、英数5文字に日本語3文字が対応するのが流行りらしい。
  ;;   日本語を1.2倍すると等幅になるってことは、emacs標準でそうなってる…はずなんだけど、
  ;;   英字のサイズによって狂うらしく、"DejaVu Sans Mono" 110 はきれいに英5:日3になるが、それ以外だとダメポ
  ;;   abcdeABCDEabcdeABCDE
  ;;   あいう日本語あいう日本語
  ;; East Asian Ambiguous Width問題 ... フォントによるらしい
  ;;   AαД・◯あ→

  ;; 絵文字対策
  (setq use-default-font-for-symbols nil)

  ;;
  ;; tab character
  ;;(standard-display-ascii ?\t "»        ")
  
  ;; /usr/include/ 以下は linux スタイルで開く
  (dir-locals-set-class-variables
   'linux-include-directory
   '((nil . ((tab-width . 8)
	     (c-file-style . "linux")
	     ))))
  (dir-locals-set-directory-class
   "/usr/include/" 'linux-include-directory)
)

(progn
  (defun reset-frame-parameter (frame)
	(sleep-for 0.1)
	;;(set-frame-parameter frame 'height 32)
	;;(modify-frame-parameters frame '((width . 112) (height . 32) ) )
	(modify-frame-parameters frame default-frame-alist)
	)
  ;;(add-hook 'after-make-frame-functions #'reset-frame-parameter)
  ;;(reset-frame-parameter (selected-frame))
  )