first commit

This commit is contained in:
trogloxene
2026-03-15 12:56:10 +08:00
commit 8c1c211e4b
12 changed files with 676 additions and 0 deletions

169
lisp/init-kbd.el Normal file
View File

@@ -0,0 +1,169 @@
;;; init-kbd.el
;;; -*- lexical-binding: t -*-
;; 修改mac键位
(when *is-mac*
(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'none))
;; 使用F2打开init.el
(defun open-init-file()
"Open user's init.el file in ~/.emacs.d
这是一段文档"
(interactive)
(find-file "~/.emacs.d/init.el"))
(global-set-key (kbd "<f2>") 'open-init-file)
;; 快速打开函数与变量的定义
(global-set-key (kbd "C-h C-f") 'find-function)
(global-set-key (kbd "C-h C-v") 'find-variable)
;; 根据平台使用不同的重启方式
(if *is-windows*
(progn
(defun restart-emacs ()
"Restart emacs (for Windows)"
(interactive)
(save-some-buffers)
(w32-shell-execute "open" "runemacs.exe")
(kill-emacs))
(global-set-key (kbd "C-c r") 'restart-emacs))
(global-set-key (kbd "C-c r") 'restart-emacs))
;; multiple cursors
(global-set-key (kbd "C-c c c") 'mc/edit-lines)
(global-set-key (kbd "C-c c a") 'mc/mark-all-in-region)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
;; 快速复制当前行
(defun duplicate-and-move-to-next-line()
(interactive)
(progn
(duplicate-line)
(next-line)))
(global-set-key (kbd "C-,") 'duplicate-and-move-to-next-line)
;; 切换buffer
(defun my-tab-line-buffers ()
"Get list of buffers shown in tab-line."
(mapcar (lambda (tab)
(if (consp tab) (cdr tab) tab))
(funcall tab-line-tabs-function)))
(defun previous-buffer-with-tab-line ()
"Switch to previous buffer in tab-line order"
(interactive)
(let ((already-enabled global-tab-line-mode))
(unless already-enabled
(global-tab-line-mode 1))
(let* ((buffers (my-tab-line-buffers))
(current (current-buffer))
(pos (cl-position current buffers)))
(when pos
(switch-to-buffer
(nth (mod (1- pos) (length buffers)) buffers))))
(unless already-enabled
(run-with-idle-timer 0.5 nil (lambda () (global-tab-line-mode -1))))))
(defun next-buffer-with-tab-line ()
"Switch to next buffer in tab-line order"
(interactive)
(let ((already-enabled global-tab-line-mode))
(unless already-enabled
(global-tab-line-mode 1))
(let* ((buffers (my-tab-line-buffers))
(current (current-buffer))
(pos (cl-position current buffers)))
(when pos
(switch-to-buffer
(nth (mod (1+ pos) (length buffers)) buffers))))
(unless already-enabled
(run-with-idle-timer 0.5 nil (lambda () (global-tab-line-mode -1))))))
(global-set-key (kbd "<f3>") 'previous-buffer-with-tab-line)
(global-set-key (kbd "<mouse-4>") 'previous-buffer)
(global-set-key (kbd "M-[") 'previous-buffer)
(global-set-key (kbd "<f4>") 'next-buffer-with-tab-line)
(global-set-key (kbd "<mouse-5>") 'next-buffer)
(global-set-key (kbd "M-]") 'next-buffer)
;; 段落导航
(global-set-key (kbd "M-p") 'backward-paragraph)
(global-set-key (kbd "M-n") 'forward-paragraph)
;; 打开tab-line-mode
(global-set-key (kbd "C-c u t") 'global-tab-line-mode)
(global-set-key (kbd "<mouse-3>") 'global-tab-line-mode)
;; 中键使用embark打开定义
(global-set-key (kbd "<mouse-2>") 'xref-find-definitions)
;; 使用C-c s切换到scrath buffer
(global-set-key (kbd "C-c <delete>") 'scratch-buffer)
;; 使用M-<方向键>调整window
(global-set-key (kbd "M-<left>") 'shrink-window-horizontally)
(global-set-key (kbd "M-<right>") 'enlarge-window-horizontally)
(global-set-key (kbd "M-<up>") 'enlarge-window)
(global-set-key (kbd "M-<down>") 'shrink-window)
;; crux相关
(global-set-key (kbd "C-<backspace>") 'crux-kill-line-backwards) ;; C-DEL kill line backwards
(global-set-key (kbd "C-c k") 'comment-line) ;; 快速注释
(global-set-key (kbd "C-k") 'crux-smart-kill-line) ;; smart kill line
(global-set-key (kbd "C-a") 'crux-move-beginning-of-line) ;; 移动到第一个缩进而非行首
(global-set-key (kbd "C-x K") 'crux-kill-other-buffers) ;; 删除除当前buffer之外的buffer
;; consult
(global-set-key (kbd "C-x b") 'consult-buffer) ;; buffer菜单
(global-set-key (kbd "C-s") 'consult-line) ;; 搜索
(global-set-key (kbd "C-c i") 'consult-imenu) ;; imenu
(global-set-key (kbd "C-c f r") 'consult-recent-file) ;; 最近打开
(global-set-key (kbd "C-c f f") 'consult-fd) ;; 调用fd进行目录内搜索
(global-set-key (kbd "C-c f l") 'consult-locate) ;; consult-locate
(global-set-key (kbd "C-c f g") 'consult-ripgrep) ;; consult-ripgrep
(global-set-key (kbd "C-c y") 'consult-yank-from-kill-ring) ;; 从kill ring中粘贴
;; hungry-delete
(global-set-key (kbd "C-c DEL") 'hungry-delete-backward) ;; 向后删除到第一个非空字符
(global-set-key (kbd "C-c d") 'hungry-delete-forward) ;; 向前删除到第一个非空字符
;; drag-stuff
(global-set-key (kbd "M-P") 'drag-stuff-up)
(global-set-key (kbd "M-N") 'drag-stuff-down)
;; ace-windows
(global-set-key (kbd "M-o") 'ace-window)
;; embark修饰键之后加C-h可以查看所有指令
(global-set-key (kbd "C-;") 'embark-act)
;; 打开目录
(defun consult-directory-externally (file)
"Open FILE externally using the default application of the system."
(interactive "fOpen externally: ")
(if (and (eq system-type 'windows-nt)
(fboundp 'w32-shell-execute))
(shell-command-to-string (encode-coding-string (replace-regexp-in-string "/" "\\\\"
(format "explorer.exe %s" (file-name-directory (expand-file-name file))))
'gbk))
(call-process (pcase system-type
('darwin "open")
('cygwin "cygstart")
(_ "xdg-open"))
nil 0 nil
(file-name-directory (expand-file-name file)))))
(with-eval-after-load 'embark
(define-key embark-file-map (kbd "d") 'consult-directory-externally))
;;打开当前文件的目录
(defun my-open-current-directory ()
(interactive)
(consult-directory-externally default-directory))
(global-set-key (kbd "C-c f d") 'my-open-current-directory)
(provide 'init-kbd)