Files
my-lisp/Readme.org
T
2026-07-12 07:05:08 +09:00

441 lines
23 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#+TITLE: my-lisp の読み込み手順
#+AUTHOR: Takahiro Ohkubo
#+LANGUAGE: ja
#+OPTIONS: toc:2 num:nil ^:nil
* 概要
配布するLispは、自作Lispとして、以下のディレクトリに配置します。
#+begin_src sh
~/.emacs.d/site-lisp/my-lisp/
#+end_src
現在は、以下のファイルを配布しています。
#+begin_src sh
my-labai.el
my-org-pukiwiki.el
my-org-unfill-aware.el
my-qrcode.el
my-replace-zen-to-ascii.el
my-yatex-review-highlight.el
#+end_src
最終的には以下のような構成にします。
#+begin_example
~/.emacs.d/
├── init.el
└── site-lisp/
└── my-lisp/
├── my-labai.el
├── my-org-pukiwiki.el
├── my-org-unfill-aware.el
├── my-qrcode.el
├── my-replace-zen-to-ascii.el
└── my-yatex-review-highlight.el
#+end_example
* init.el で load-path に追加する
まず、=init.el= の先頭付近に以下を追加して、自作Lispのload pathを追加します。
#+begin_src emacs-lisp
;; ------------------------------------------------------------
;; local lisp
;; ------------------------------------------------------------
(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/my-lisp"))
#+end_src
* init.el で require する
=init.el= に以下を追加します。
#+begin_src emacs-lisp
;; ------------------------------------------------------------
;; my-lisp
;; ------------------------------------------------------------
(require 'my-labai)
(require 'my-org-pukiwiki)
(require 'my-org-unfill-aware)
(require 'my-qrcode)
(require 'my-replace-zen-to-ascii)
(require 'my-yatex-review-highlight)
#+end_src
** my-labai.el
研究室用 Lab-AI GatewayをEmacsから利用するためのクライアントです。
通常のテキスト変換、翻訳、メール校正、Python コード生成、チャット、画像生成、画像編集をEmacs内から実行できます。
*** 主な機能
- 選択範囲または段落を Lab-AI に送信し、結果で置換します。
- 日本語から英語、英語から日本語、日本語校正、英語校正を実行します。
- Python コード生成・修正用のプロンプトを送れます。
- 独立した =*Lab-AI*= チャットバッファを使えます。
- チャット履歴を保持し、次の質問に文脈として付加します。
- 画像ファイル、PDF、macOS クリップボード画像を添付できます。
- LaTeX 数式プレビューを =*Lab-AI*= バッファ内で表示できます。
- 画像生成・画像編集 API を呼び出し、生成画像を Emacs で開きます。
*** 前提条件
- =~/.config/lab-ai/token= に大窪から配布してもらったAPIトークンを保存しておく必要があります。
- HTTP 通信には =curl= を使います。
- クリップボード画像添付には macOS の =pngpaste= が必要です。
- チャット内 LaTeX プレビューには =latex==dvipng= が必要です。
- 画像添付は PNG/JPEG/WebP/GIF、PDF に対応しています。
*** 主要設定
| 変数 | 既定値 | 内容 |
| =lab-ai-url= | =https://amorphous.tf.chiba-u.jp/lab-ai/chat= | チャット API の URL |
| =lab-ai-image-url= | =https://amorphous.tf.chiba-u.jp/lab-ai/image= | 画像生成 API の URL |
| =lab-ai-image-edit-url= | =https://amorphous.tf.chiba-u.jp/lab-ai/image-edit= | 画像編集 API の URL |
| =lab-ai-model= | =gpt-5.5= | 使用モデル |
| =lab-ai-models= | =gpt-5-mini=, =gpt-5=, =gpt-5.5= | 選択可能モデル |
| =lab-ai-timeout= | =600= | curl の最大待ち時間、秒 |
| =lab-ai-max-attachment-size= | 50 MB | 添付ファイルの最大サイズ |
| =lab-ai-chat-history-max-messages= | 200 | チャット履歴として保持する最大メッセージ数 |
| =lab-ai-image-size= | =1024x1024= | 画像生成・編集サイズ |
*** 基本コマンド
| コマンド | 機能 |
| =lab-ai-translate-dwim= | 選択範囲または段落を自動判定して翻訳します。日本語を含む場合は英訳、それ以外は和訳します。 |
| =lab-ai-ja->en-academic= | 日本語を自然な学術英語に翻訳します。 |
| =lab-ai-ja->ja-academic= | 日本語の科学技術文章を校正します。 |
| =lab-ai-en->ja= | 英語を自然な日本語に翻訳します。 |
| =lab-ai-en->en= | 英語を読みやすく校正します。 |
| =lab-ai-python-code= | 説明または未完成コードから Python コードを生成・修正します。 |
| =lab-ai-mail= | メール文を自然で読みやすく校正します。 |
| =lab-ai-bullets->paper-ja= | 箇条書きの結果を論文本文風の日本語に整形します。 |
| =lab-ai-prompt= | 任意の指示を入力して選択範囲または段落に適用します。 |
| =lab-ai-switch-model= | 使用モデルを切り替えます。 |
| =lab-ai-show-model= | 現在のモデルを表示します。 |
*** チャット機能
=M-x lab-ai-chat==*Lab-AI*= バッファを開きます。
=You:= の下に入力し、=C-c C-c= で送信します。
| キー | 機能 |
| =C-c C-c= | プロンプト送信 |
| =C-c C-a= | 画像/PDF ファイルを添付 |
| =C-c C-v= | macOS クリップボード画像を添付 |
| =C-c C-k= | 添付をクリア |
| =C-c C-h= | チャット履歴をクリア |
| =C-c C-l= | LaTeX プレビューの表示/解除 |
*** 画像生成・画像編集
| コマンド | 機能 |
| =lab-ai-image= | 画像プロンプトを入力して画像を生成します。 |
| =lab-ai-image-edit= | 既存画像ファイルを選択し、編集指示を送信します。 |
生成画像は =user-emacs-directory/cache/lab-ai/images/= に保存され、=image-mode= で開かれます。
*** グローバルキー
| キー | コマンド |
| =C-x t= | =lab-ai-translate-dwim= |
| =C-c r a= | =lab-ai-ja->en-academic= |
| =C-c r j= | =lab-ai-ja->ja-academic= |
| =C-c r e= | =lab-ai-en->en= |
| =C-c r t= | =lab-ai-en->ja= |
| =C-c r m= | =lab-ai-mail= |
| =C-c r i= | =lab-ai-prompt= |
| =C-c r p= | =lab-ai-python-code= |
| =C-c r s= | =lab-ai-switch-model= |
| =C-c r c= | =lab-ai-chat= |
| =C-c r b= | =lab-ai-bullets->paper-ja= |
| =C-c r M= | =lab-ai-show-model= |
| =C-c r g= | =lab-ai-image= |
| =C-c r G= | =lab-ai-image-edit= |
*** 注意点
- =lab-ai--dwim= がファイル内で2回定義されています。後半の定義が有効になります。動作上は問題ありませんが、整理するなら前半の定義は削除できます。
- 起動画面には =C-c C-m Switch model= と表示されますが、現在の =lab-ai-chat-mode-map= には =C-c C-m= が割り当てられていません。必要なら以下を追加します。
- yatex modeでC-cが重複します。別キーにするか、M-xで関数呼び出ししてください。
#+begin_src emacs-lisp
(define-key lab-ai-chat-mode-map (kbd "C-c C-m") #'lab-ai-switch-model)
#+end_src
- ファイル末尾には =(provide 'my-labai)= が入っているので、=(require 'my-labai)= で読み込めます。
** my-org-pukiwiki.el
Org-modeの文書をPukiWiki記法に変換する簡易exporterです。
PukiWiki に貼り付けるためのテキスト生成、ファイル出力、クリップボードコピーができます。
*** 主な機能
- Org 見出しを PukiWiki 見出しに変換します。
- Org の箇条書きと番号付きリストを PukiWiki 形式に変換します。
- Org 表を PukiWiki 表として出力します。
- =#+begin_src=, =#+begin_example= ブロックを半角スペース始まりの整形済みテキストに変換します。
- =file:= リンクを =#ref(...)= に変換します。
- URL ラベル付きリンクを PukiWiki の =[[label>URL]]= に変換します。
- Shift-JIS で問題になりやすい一部 Unicode 文字を ASCII 近似に置換します。
*** 主要設定
| 変数 | 既定値 | 内容 |
| =my-org-pukiwiki-coding-system= | =japanese-shift-jis= | ファイル出力時の文字コード |
*** コマンド
| コマンド | 機能 |
| =my-org-pukiwiki-export-buffer= | 現在の Org バッファを PukiWiki に変換し、=*PukiWiki*= バッファに表示します。 |
| =my-org-pukiwiki-export-file= | 現在の Org バッファを =.pukiwiki= ファイルとして Shift-JIS 出力します。 |
| =my-org-pukiwiki-copy-to-clipboard= | 変換結果を kill-ring、つまりクリップボード相当にコピーします。 |
| =my-org-pukiwiki-convert-string= | 文字列を PukiWiki 記法へ変換する内部利用向け関数です。 |
*** 変換例
Org:
#+begin_src org
* 見出し1
** 見出し2
- 項目
1. 番号付き
[[https://example.org][Example]]
[[file:image.png]]
#+end_src
PukiWiki:
#+begin_example
* 見出し1
** 見出し2
-項目
+番号付き
[[Example>https://example.org]]
#ref(image.png)
#+end_example
*** 注意点
- Org の4階層目以降の見出しは、PukiWiki の見出しではなく太字として出力されます。
- =#+TITLE=, =#+AUTHOR=, =#+OPTIONS= などのメタデータ行は出力されません。
- 表の区切り行は削除されます。
- 完全な Org exporter ではなく、研究室 Wiki 用の実用的な簡易変換です。
** my-org-unfill-aware.el
Org 構造を壊さずに、通常段落のハード改行を除去するためのツールです。
PDF や Web からコピーした文章、AI の出力、改行が多すぎる文章を整える用途に向いています。
*** 主な機能
- 通常段落の改行を削除します。
- 見出し、リスト、表、Org キーワード、コメント、水平線、drawer、src/example/export ブロック、display math は保持します。
- 英文用、日本語用、自動判定の3モードがあります。
- バッファを書き換えず、変換結果だけを kill-ring にコピーするコマンドがあります。
*** 主要設定
| 変数 | 既定値 | 内容 |
| =my-org-unfill-aware-preserve-list-items= | =t= | リスト項目行を構造行として保持するかどうか |
*** コマンド
| コマンド | 機能 |
| =my-org-unfill-aware-ascii= | 通常段落の改行を半角スペースに置換します。英文向けです。 |
| =my-org-unfill-aware-japanese= | 通常段落の改行をスペースなしで削除します。日本語向けです。 |
| =my-org-unfill-aware-auto= | 日本語/CJK を含む場合は日本語モード、それ以外は ASCII モードで処理します。 |
| =my-org-unfill-aware-ascii-copy= | ASCII モードで変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
| =my-org-unfill-aware-japanese-copy= | 日本語モードで変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
| =my-org-unfill-aware-auto-copy= | 自動判定で変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
*** 使用例
#+begin_src emacs-lisp
(global-set-key (kbd "C-c u") #'my-org-unfill-aware-auto)
(global-set-key (kbd "C-c U") #'my-org-unfill-aware-auto-copy)
#+end_src
*** 注意点
- regionがある場合は region、ない場合はバッファ全体を処理します。
- リスト項目の継続行は、継続行自身が構造行でない限り通常段落として扱われます。
- 完全な Org parser ではなく、行単位の実用的な判定で処理します。
** my-qrcode.el
選択範囲の文字列を QR コードに変換し、別フレームで表示するツールです。
URL や短いテキストをスマートフォンに渡す用途に便利です。
*** 主な機能
- region の文字列を =qrencode= に渡して PNG の QR コードを生成します。
- QRコードを =*QR Code*= バッファに表示します。
- QRコード専用の別フレームを作成します。
- =+=, =-= キーで拡大・縮小できます。
*** 前提条件
=qrencode= コマンドが必要です。
MacPorts の場合は次のようにインストールします。
#+begin_src sh
sudo port install qrencode
#+end_src
*** 主要設定
| 変数 | 既定値 | 内容 |
| =my-qrcode-buffer-name= | =*QR Code*= | QR 表示用バッファ名 |
| =my-qrcode-frame-pixel-size= | 500 | QR 表示フレームの縦横ピクセルサイズ |
| =my-qrcode-frame-left= | 100 | フレーム左位置 |
| =my-qrcode-frame-top= | 100 | フレーム上位置 |
*** コマンド
| コマンド | 機能 |
| =my-qrcode-from-region= | region の文字列から QR コードを生成し、別フレームに表示します。 |
| =my-qrcode-zoom-in= | QR コードを拡大します。 |
| =my-qrcode-zoom-out= | QR コードを縮小します。 |
| =my-qrcode-zoom-reset= | QR コードの倍率を 1.0 に戻します。 |
| =my-qrcode-redraw= | 現在の倍率で QR コードを再描画します。 |
*** QR 表示バッファ内のキー
| キー | 機能 |
| =+= / === | 拡大 |
| =-= | 縮小 |
| =0= | 倍率リセット |
| =q= | ウィンドウを閉じる |
*** 使用例
#+begin_src emacs-lisp
(global-set-key (kbd "C-c q") #'my-qrcode-from-region)
#+end_src
*** 注意点
- regionがactiveでない場合はエラーになります。
- 生成PNGは一時ファイルとして作成されます。
- ファイル末尾のコメント例では =my-region-to-qrcode= という古い関数名が残っていますが、現在の実コマンドは =my-qrcode-from-region= です。
** my-replace-zen-to-ascii.el
全角英数字、全角記号、Unicode の上付き・下付き数字、引用符、ダッシュ類を ASCII に変換するツールです。
LaTeX 原稿、コード、ファイル名、コマンドラインに混入した全角文字を直す用途に向いています。
*** 主な機能
- 全角スペースを半角スペースに変換します。
- 全角英数字をASCII英数字に変換します。
- 全角記号をASCII記号に変換します。
- =²=, =₃= などの上付き・下付き数字を通常の数字に変換します。
- =“ ” = などの引用符を ASCII の引用符に変換します。
- ==, ==, =—= などのダッシュ・マイナス類を =-= に変換します。
- 必要に応じて =μ=, =Å=, =×=, =°= などの科学記号も ASCII 近似へ変換できます。
*** 主要設定
| 変数 | 既定値 | 内容 |
| =my-replace-zen-to-ascii-convert-scientific-symbols= | =nil= | =t= にすると科学記号も ASCII 近似へ変換します。 |
科学記号変換は原稿中では意味を変える可能性があるため、既定では無効です。
*** コマンド
| コマンド | 機能 |
| =replace-zen-to-ascii-region= | region 内の対象文字を ASCII に変換します。 |
| =replace-zen-to-ascii-buffer= | バッファ全体の対象文字を ASCII に変換します。 |
| =replace-zen-to-ascii-region-copy= | region を変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
| =replace-zen-to-ascii-buffer-copy= | バッファ全体を変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
| =replace-zen-to-ascii-toggle-scientific-symbols= | 科学記号変換の ON/OFF を切り替えます。 |
*** 使用例
#+begin_src emacs-lisp
(global-set-key (kbd "C-c z") #'replace-zen-to-ascii-region)
(global-set-key (kbd "C-c Z") #'replace-zen-to-ascii-buffer)
#+end_src
*** 注意点
- コマンド名は互換性のため =replace-zen-to-ascii-...= になっています。
- 科学記号変換を ON にすると、例えば =μ==u==Å==A==×==x==°== deg= になります。
- 化学式や論文原稿では、科学記号変換を常時 ON にしない方が安全です。
** my-yatex-review-highlight.el
YaTeX バッファ内で、査読返信や改訂原稿用の独自 LaTeX マクロを色分け表示するツールです。
=\RA=, =\RB=, =\RC=, =\RD=, =\TO=, =\XX=, =\CA=, =\CB=, =\CC=, =\CD= を overlay でハイライトします。
*** 主な機能
- =\RA{label}{body}= から =\RD{label}{body}= までを色分け表示します。
- 第1引数、つまりラベル部分は背景付き太字で表示します。
- 第2引数、つまり本文部分は対応色の文字色で表示します。
- =\TO{body}= は赤太字で表示します(大窪コメント)。
- =\XX{body}= は赤ピンク太字で表示します(学生コメント)。
- =\CA{A1}= から =\CD{...}= までは、次の =\CO=, =\CA=, =\CB=, =\CC=, =\CD=, =\end{enumerate}=, =\end{document}= までを本文として色付けします。
- 編集後に idle timer で自動再ハイライトします。
- 古い font-lock 方式の review macro highlight が残っている場合、enable 時に削除します。
*** 対応マクロ
| マクロ | 用途 | 表示 |
| =\RA{label}{body}= | Reviewer A など | label は赤系背景付き、body は赤系文字 |
| =\RB{label}{body}= | Reviewer B など | label は青系背景付き、body は青系文字 |
| =\RC{label}{body}= | Reviewer C など | label は緑系背景付き、body は緑系文字 |
| =\RD{label}{body}= | Reviewer D など | label は紫系背景付き、body は紫系文字 |
| =\TO{body}= | TODO/対応事項 | 赤太字 |
| =\XX{body}= | TODO/対応事項 | 赤ピンク太字 |
| =\CA{label}= | 回答案 A | label と次項目までの本文を RA 系の色で表示 |
| =\CB{label}= | 回答案 B | label と次項目までの本文を RB 系の色で表示 |
| =\CC{label}= | 回答案 C | label と次項目までの本文を RC 系の色で表示 |
| =\CD{label}= | 回答案 D | label と次項目までの本文を RD 系の色で表示 |
*** 主要設定
| 変数 | 既定値 | 内容 |
| =my-yatex-review-label-background= | =gray30= | ラベル部分の背景色 |
| =my-yatex-review-idle-delay= | 0.8 | 編集後、自動再ハイライトまでの待ち時間、秒 |
*** コマンド
| コマンド | 機能 |
| =my-yatex-review-highlight-enable= | review macro highlight を有効化します。 |
| =my-yatex-review-highlight-disable= | review macro highlight を無効化します。 |
| =my-yatex-review-highlight-toggle= | 有効/無効を切り替えます。 |
| =my-yatex-review-highlight-refresh= | 現在のバッファ全体を再スキャンしてハイライトを更新します。 |
| =my-yatex-review-install-keybindings= | 現在のバッファにローカルキーを設定します。 |
| =my-yatex-review-setup= | キー設定とハイライト有効化をまとめて行います。 |
| =my-yatex-review-set-faces= | face 設定を再適用します。 |
*** YaTeX バッファ内のキー
| キー | コマンド | 機能 |
| =C-c h= | =my-yatex-review-highlight-toggle= | ハイライト ON/OFF |
| =C-c r= | =my-yatex-review-highlight-refresh= | 手動再ハイライト |
*** 自動設定
このファイルは読み込み時に以下の hook を追加します。
#+begin_src emacs-lisp
(add-hook 'yatex-mode-hook #'my-yatex-review-setup)
(add-hook 'YaTeX-mode-hook #'my-yatex-review-setup)
#+end_src
そのため、YaTeXバッファを開くと自動的にreview macro highlightが有効になります。
*** 注意点
- overlay による表示変更なので、ファイル内容自体は変更されません。
- =\CA= から =\CD= の本文範囲は正規表現で次項目を探して決まります。特殊な環境では意図より長く色付けされる可能性があります。
- =C-c r==my-labai.el= のグローバル prefix と衝突する可能性があります。ただし YaTeX バッファ内では local key の方が優先されます。