;; --- Ollama Buddy 設定開始 (2025-07-14) --- ;; ollama-buddy パッケージをロードします。 ;; この行はollama-buddyをEmacsで利用可能にするために必須です。 (use-package ollama-buddy :ensure t :custom (ollama-buddy-default-model "gemma3:latest")) ;; デフォルトのOllamaモデルを設定します。 ;; あなたがインストール済みの "gemma3n:e2b" を指定します。 ;; ここで指定したモデルが、チャット開始時のデフォルトになります。 ;(setq ollama-buddy-default-model "gemma3n:e2b") ;; 必要であれば、Ollamaサーバーのエンドポイントを指定します。 ;; 通常はOllamaがデフォルトのポートで起動していればこの行は不要です。 ;; 例: (setq ollama-buddy-server-url "http://localhost:11434/api/generate") ;;(setq ollama-buddy-server-url "http://ollama.lxd:11434/api/generate") ;(setq ollama-buddy-server-url "http://10.10.100.242:11434/api/generate") (setq ollama-buddy-server-url "http://127.0.0.1:11435/api/generate") ;; Ollama Buddy 関連コマンドのプレフィックスキーマップを定義します。 ;; Emacsのバージョンが古い場合 (Emacs 29未満) でも動作するように `make-keymap` を使用します。 ;; これにより、`C-c o` を押した後、次に続くキーで様々なollama-buddy機能にアクセスできます。 (setq ollama-buddy-map (make-keymap)) (global-set-key (kbd "C-c o") ollama-buddy-map) ;; --- 基本的な Ollama Buddy コマンドへのキーバインド --- ;; `C-c o` の後に続くキーを設定します ;; 新しいチャットセッションを開始します。 ;; `M-x ollama-buddy--open-chat` と同じ動作です。 (define-key ollama-buddy-map (kbd "c") 'ollama-buddy--open-chat) ;; 現在の選択範囲(リージョン)をプロンプトとして Ollama に送信し、新しいチャットで応答を得ます。 (define-key ollama-buddy-map (kbd "r") 'ollama-buddy-chat-region) ;; 現在のバッファ全体の内容をプロンプトとして Ollama に送信し、新しいチャットで応答を得ます。 (define-key ollama-buddy-map (kbd "b") 'ollama-buddy-chat-buffer) ;; ミニバッファでプロンプトを入力し、その Ollama からの応答を現在のカーソル位置に挿入します。 ;; コードスニペットの生成などに便利です。 (define-key ollama-buddy-map (kbd "i") 'ollama-buddy-insert-at-point) ;; --- カスタムアシストコマンドの定義とキーバインド --- ;; よく使う指示を関数化し、専用のキーバインドで簡単に呼び出せるようにします。 ;; 選択範囲のコードをリファクタリングする関数 ;; `C-c o R` で呼び出せます。 (defun my-ollama-refactor-region () "Selected region is sent to ollama for refactoring to be more efficient and readable." (interactive) ; この関数を M-x で実行可能にする (let ((prompt-prefix "Refactor this code to be more efficient and readable: ")) ;; `nil` を渡すことで、結果は新しいチャットバッファで表示されます。 (ollama-buddy-chat-region nil prompt-prefix))) (define-key ollama-buddy-map (kbd "R") 'my-ollama-refactor-region) ;; 選択範囲のコードを詳細に説明する関数 ;; `C-c o E` で呼び出せます。 (defun my-ollama-explain-region () "Selected region is sent to ollama for detailed explanation." (interactive) (let ((prompt-prefix "Explain this code in detail: ")) (ollama-buddy-chat-region nil prompt-prefix))) (define-key ollama-buddy-map (kbd "E") 'my-ollama-explain-region) ;; 選択範囲のコードと任意のエラーメッセージをデバッグのために送信する関数 ;; `C-c o D` で呼び出せます。エラーメッセージはミニバッファで尋ねられます。 (defun my-ollama-debug-region () "Selected region and optional error message sent to ollama for debugging." (interactive) (let* ((error-message (read-string "Enter error message (optional): ")) ; エラーメッセージを入力プロンプト (prompt-prefix (if (string-empty-p error-message) ; エラーメッセージが空でなければ、プロンプトに含める "Debug this code: " (format "Debug this code, given the error: \"%s\"\nCode: " error-message)))) (ollama-buddy-chat-region nil prompt-prefix))) (define-key ollama-buddy-map (kbd "D") 'my-ollama-debug-region) ;; (string-empty-p ...) 関数は一部の古いEmacsバージョンでは定義されていない場合があります。 ;; もし "void-function string-empty-p" エラーが出た場合、以下のコメントアウトを外してください。 ;; (unless (fboundp 'string-empty-p) ;; (defun string-empty-p (str) ;; "Return t if STR is nil or an empty string." ;; (or (null str) (string= str "")))) ;; --- Ollama Buddy 設定終了 --- (global-set-key (kbd "C-c r") 'my-ollama-refactor-region) ;; Ctrl-c r にバインド