Compare commits
8 Commits
b91f2f22dd
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| e66cd1c51a | |||
| c981153301 | |||
| db8fa04f1f | |||
| 180c084bbc | |||
| 90128ba06f | |||
| 38dc2a2b3d | |||
| ccd161718a | |||
| af88bcc2df |
+72
-71
@@ -36,8 +36,6 @@ my-yatex-review-highlight.el
|
|||||||
└── my-yatex-review-highlight.el
|
└── my-yatex-review-highlight.el
|
||||||
#+end_example
|
#+end_example
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
* init.el で load-path に追加する
|
* init.el で load-path に追加する
|
||||||
|
|
||||||
まず、=init.el= の先頭付近に以下を追加して、自作Lispのload pathを追加します。
|
まず、=init.el= の先頭付近に以下を追加して、自作Lispのload pathを追加します。
|
||||||
@@ -69,8 +67,8 @@ my-yatex-review-highlight.el
|
|||||||
|
|
||||||
** my-labai.el
|
** my-labai.el
|
||||||
|
|
||||||
研究室用 Lab-AI Gateway を Emacs から利用するためのクライアントです。
|
研究室用 Lab-AI GatewayをEmacsから利用するためのクライアントです。
|
||||||
通常のテキスト変換、翻訳、メール校正、Python コード生成、チャット、画像生成、画像編集を Emacs 内から実行できます。
|
通常のテキスト変換、翻訳、メール校正、Python コード生成、チャット、画像生成、画像編集をEmacs内から実行できます。
|
||||||
|
|
||||||
*** 主な機能
|
*** 主な機能
|
||||||
|
|
||||||
@@ -85,7 +83,7 @@ my-yatex-review-highlight.el
|
|||||||
|
|
||||||
*** 前提条件
|
*** 前提条件
|
||||||
|
|
||||||
- =~/.config/lab-ai/token= に API トークンを保存しておく必要があります。
|
- =~/.config/lab-ai/token= に大窪から配布してもらったAPIトークンを保存しておく必要があります。
|
||||||
- HTTP 通信には =curl= を使います。
|
- HTTP 通信には =curl= を使います。
|
||||||
- クリップボード画像添付には macOS の =pngpaste= が必要です。
|
- クリップボード画像添付には macOS の =pngpaste= が必要です。
|
||||||
- チャット内 LaTeX プレビューには =latex= と =dvipng= が必要です。
|
- チャット内 LaTeX プレビューには =latex= と =dvipng= が必要です。
|
||||||
@@ -162,6 +160,7 @@ my-yatex-review-highlight.el
|
|||||||
|
|
||||||
- =lab-ai--dwim= がファイル内で2回定義されています。後半の定義が有効になります。動作上は問題ありませんが、整理するなら前半の定義は削除できます。
|
- =lab-ai--dwim= がファイル内で2回定義されています。後半の定義が有効になります。動作上は問題ありませんが、整理するなら前半の定義は削除できます。
|
||||||
- 起動画面には =C-c C-m Switch model= と表示されますが、現在の =lab-ai-chat-mode-map= には =C-c C-m= が割り当てられていません。必要なら以下を追加します。
|
- 起動画面には =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
|
#+begin_src emacs-lisp
|
||||||
(define-key lab-ai-chat-mode-map (kbd "C-c C-m") #'lab-ai-switch-model)
|
(define-key lab-ai-chat-mode-map (kbd "C-c C-m") #'lab-ai-switch-model)
|
||||||
@@ -171,7 +170,7 @@ my-yatex-review-highlight.el
|
|||||||
|
|
||||||
** my-org-pukiwiki.el
|
** my-org-pukiwiki.el
|
||||||
|
|
||||||
Org-mode の文書を PukiWiki 記法に変換する簡易 exporter です。
|
Org-modeの文書をPukiWiki記法に変換する簡易exporterです。
|
||||||
PukiWiki に貼り付けるためのテキスト生成、ファイル出力、クリップボードコピーができます。
|
PukiWiki に貼り付けるためのテキスト生成、ファイル出力、クリップボードコピーができます。
|
||||||
|
|
||||||
*** 主な機能
|
*** 主な機能
|
||||||
@@ -242,18 +241,18 @@ PDF や Web からコピーした文章、AI の出力、改行が多すぎる
|
|||||||
|
|
||||||
*** 主要設定
|
*** 主要設定
|
||||||
|
|
||||||
| 変数 | 既定値 | 内容 |
|
| 変数 | 既定値 | 内容 |
|
||||||
| =my-org-unfill-aware-preserve-list-items= | =t= | リスト項目行を構造行として保持するかどうか |
|
| =my-org-unfill-aware-preserve-list-items= | =t= | リスト項目行を構造行として保持するかどうか |
|
||||||
|
|
||||||
*** コマンド
|
*** コマンド
|
||||||
|
|
||||||
| コマンド | 機能 |
|
| コマンド | 機能 |
|
||||||
| =my-org-unfill-aware-ascii= | 通常段落の改行を半角スペースに置換します。英文向けです。 |
|
| =my-org-unfill-aware-ascii= | 通常段落の改行を半角スペースに置換します。英文向けです。 |
|
||||||
| =my-org-unfill-aware-japanese= | 通常段落の改行をスペースなしで削除します。日本語向けです。 |
|
| =my-org-unfill-aware-japanese= | 通常段落の改行をスペースなしで削除します。日本語向けです。 |
|
||||||
| =my-org-unfill-aware-auto= | 日本語/CJK を含む場合は日本語モード、それ以外は ASCII モードで処理します。 |
|
| =my-org-unfill-aware-auto= | 日本語/CJK を含む場合は日本語モード、それ以外は ASCII モードで処理します。 |
|
||||||
| =my-org-unfill-aware-ascii-copy= | ASCII モードで変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
| =my-org-unfill-aware-ascii-copy= | ASCII モードで変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
||||||
| =my-org-unfill-aware-japanese-copy= | 日本語モードで変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
| =my-org-unfill-aware-japanese-copy= | 日本語モードで変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
||||||
| =my-org-unfill-aware-auto-copy= | 自動判定で変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
| =my-org-unfill-aware-auto-copy= | 自動判定で変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
||||||
|
|
||||||
*** 使用例
|
*** 使用例
|
||||||
|
|
||||||
@@ -264,7 +263,7 @@ PDF や Web からコピーした文章、AI の出力、改行が多すぎる
|
|||||||
|
|
||||||
*** 注意点
|
*** 注意点
|
||||||
|
|
||||||
- region がある場合は region、ない場合はバッファ全体を処理します。
|
- regionがある場合は region、ない場合はバッファ全体を処理します。
|
||||||
- リスト項目の継続行は、継続行自身が構造行でない限り通常段落として扱われます。
|
- リスト項目の継続行は、継続行自身が構造行でない限り通常段落として扱われます。
|
||||||
- 完全な Org parser ではなく、行単位の実用的な判定で処理します。
|
- 完全な Org parser ではなく、行単位の実用的な判定で処理します。
|
||||||
|
|
||||||
@@ -276,8 +275,8 @@ URL や短いテキストをスマートフォンに渡す用途に便利です
|
|||||||
*** 主な機能
|
*** 主な機能
|
||||||
|
|
||||||
- region の文字列を =qrencode= に渡して PNG の QR コードを生成します。
|
- region の文字列を =qrencode= に渡して PNG の QR コードを生成します。
|
||||||
- QR コードを =*QR Code*= バッファに表示します。
|
- QRコードを =*QR Code*= バッファに表示します。
|
||||||
- QR コード専用の別フレームを作成します。
|
- QRコード専用の別フレームを作成します。
|
||||||
- =+=, =-= キーで拡大・縮小できます。
|
- =+=, =-= キーで拡大・縮小できます。
|
||||||
|
|
||||||
*** 前提条件
|
*** 前提条件
|
||||||
@@ -291,28 +290,28 @@ sudo port install qrencode
|
|||||||
|
|
||||||
*** 主要設定
|
*** 主要設定
|
||||||
|
|
||||||
| 変数 | 既定値 | 内容 |
|
| 変数 | 既定値 | 内容 |
|
||||||
| =my-qrcode-buffer-name= | =*QR Code*= | QR 表示用バッファ名 |
|
| =my-qrcode-buffer-name= | =*QR Code*= | QR 表示用バッファ名 |
|
||||||
| =my-qrcode-frame-pixel-size= | 500 | QR 表示フレームの縦横ピクセルサイズ |
|
| =my-qrcode-frame-pixel-size= | 500 | QR 表示フレームの縦横ピクセルサイズ |
|
||||||
| =my-qrcode-frame-left= | 100 | フレーム左位置 |
|
| =my-qrcode-frame-left= | 100 | フレーム左位置 |
|
||||||
| =my-qrcode-frame-top= | 100 | フレーム上位置 |
|
| =my-qrcode-frame-top= | 100 | フレーム上位置 |
|
||||||
|
|
||||||
*** コマンド
|
*** コマンド
|
||||||
|
|
||||||
| コマンド | 機能 |
|
| コマンド | 機能 |
|
||||||
| =my-qrcode-from-region= | region の文字列から QR コードを生成し、別フレームに表示します。 |
|
| =my-qrcode-from-region= | region の文字列から QR コードを生成し、別フレームに表示します。 |
|
||||||
| =my-qrcode-zoom-in= | QR コードを拡大します。 |
|
| =my-qrcode-zoom-in= | QR コードを拡大します。 |
|
||||||
| =my-qrcode-zoom-out= | QR コードを縮小します。 |
|
| =my-qrcode-zoom-out= | QR コードを縮小します。 |
|
||||||
| =my-qrcode-zoom-reset= | QR コードの倍率を 1.0 に戻します。 |
|
| =my-qrcode-zoom-reset= | QR コードの倍率を 1.0 に戻します。 |
|
||||||
| =my-qrcode-redraw= | 現在の倍率で QR コードを再描画します。 |
|
| =my-qrcode-redraw= | 現在の倍率で QR コードを再描画します。 |
|
||||||
|
|
||||||
*** QR 表示バッファ内のキー
|
*** QR 表示バッファ内のキー
|
||||||
|
|
||||||
| キー | 機能 |
|
| キー | 機能 |
|
||||||
| =+= / === | 拡大 |
|
| =+= / === | 拡大 |
|
||||||
| =-= | 縮小 |
|
| =-= | 縮小 |
|
||||||
| =0= | 倍率リセット |
|
| =0= | 倍率リセット |
|
||||||
| =q= | ウィンドウを閉じる |
|
| =q= | ウィンドウを閉じる |
|
||||||
|
|
||||||
*** 使用例
|
*** 使用例
|
||||||
|
|
||||||
@@ -322,8 +321,8 @@ sudo port install qrencode
|
|||||||
|
|
||||||
*** 注意点
|
*** 注意点
|
||||||
|
|
||||||
- region が active でない場合はエラーになります。
|
- regionがactiveでない場合はエラーになります。
|
||||||
- 生成 PNG は一時ファイルとして作成されます。
|
- 生成PNGは一時ファイルとして作成されます。
|
||||||
- ファイル末尾のコメント例では =my-region-to-qrcode= という古い関数名が残っていますが、現在の実コマンドは =my-qrcode-from-region= です。
|
- ファイル末尾のコメント例では =my-region-to-qrcode= という古い関数名が残っていますが、現在の実コマンドは =my-qrcode-from-region= です。
|
||||||
|
|
||||||
** my-replace-zen-to-ascii.el
|
** my-replace-zen-to-ascii.el
|
||||||
@@ -334,8 +333,8 @@ LaTeX 原稿、コード、ファイル名、コマンドラインに混入し
|
|||||||
*** 主な機能
|
*** 主な機能
|
||||||
|
|
||||||
- 全角スペースを半角スペースに変換します。
|
- 全角スペースを半角スペースに変換します。
|
||||||
- 全角英数字を ASCII 英数字に変換します。
|
- 全角英数字をASCII英数字に変換します。
|
||||||
- 全角記号を ASCII 記号に変換します。
|
- 全角記号をASCII記号に変換します。
|
||||||
- =²=, =₃= などの上付き・下付き数字を通常の数字に変換します。
|
- =²=, =₃= などの上付き・下付き数字を通常の数字に変換します。
|
||||||
- =“ ” ‘ ’= などの引用符を ASCII の引用符に変換します。
|
- =“ ” ‘ ’= などの引用符を ASCII の引用符に変換します。
|
||||||
- =−=, =–=, =—= などのダッシュ・マイナス類を =-= に変換します。
|
- =−=, =–=, =—= などのダッシュ・マイナス類を =-= に変換します。
|
||||||
@@ -343,19 +342,19 @@ LaTeX 原稿、コード、ファイル名、コマンドラインに混入し
|
|||||||
|
|
||||||
*** 主要設定
|
*** 主要設定
|
||||||
|
|
||||||
| 変数 | 既定値 | 内容 |
|
| 変数 | 既定値 | 内容 |
|
||||||
| =my-replace-zen-to-ascii-convert-scientific-symbols= | =nil= | =t= にすると科学記号も ASCII 近似へ変換します。 |
|
| =my-replace-zen-to-ascii-convert-scientific-symbols= | =nil= | =t= にすると科学記号も ASCII 近似へ変換します。 |
|
||||||
|
|
||||||
科学記号変換は原稿中では意味を変える可能性があるため、既定では無効です。
|
科学記号変換は原稿中では意味を変える可能性があるため、既定では無効です。
|
||||||
|
|
||||||
*** コマンド
|
*** コマンド
|
||||||
|
|
||||||
| コマンド | 機能 |
|
| コマンド | 機能 |
|
||||||
| =replace-zen-to-ascii-region= | region 内の対象文字を ASCII に変換します。 |
|
| =replace-zen-to-ascii-region= | region 内の対象文字を ASCII に変換します。 |
|
||||||
| =replace-zen-to-ascii-buffer= | バッファ全体の対象文字を ASCII に変換します。 |
|
| =replace-zen-to-ascii-buffer= | バッファ全体の対象文字を ASCII に変換します。 |
|
||||||
| =replace-zen-to-ascii-region-copy= | region を変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
| =replace-zen-to-ascii-region-copy= | region を変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
||||||
| =replace-zen-to-ascii-buffer-copy= | バッファ全体を変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
| =replace-zen-to-ascii-buffer-copy= | バッファ全体を変換し、結果を kill-ring にコピーします。バッファは変更しません。 |
|
||||||
| =replace-zen-to-ascii-toggle-scientific-symbols= | 科学記号変換の ON/OFF を切り替えます。 |
|
| =replace-zen-to-ascii-toggle-scientific-symbols= | 科学記号変換の ON/OFF を切り替えます。 |
|
||||||
|
|
||||||
*** 使用例
|
*** 使用例
|
||||||
|
|
||||||
@@ -373,53 +372,55 @@ LaTeX 原稿、コード、ファイル名、コマンドラインに混入し
|
|||||||
** my-yatex-review-highlight.el
|
** my-yatex-review-highlight.el
|
||||||
|
|
||||||
YaTeX バッファ内で、査読返信や改訂原稿用の独自 LaTeX マクロを色分け表示するツールです。
|
YaTeX バッファ内で、査読返信や改訂原稿用の独自 LaTeX マクロを色分け表示するツールです。
|
||||||
=\RA=, =\RB=, =\RC=, =\RD=, =\TO=, =\CA=, =\CB=, =\CC=, =\CD= を overlay でハイライトします。
|
=\RA=, =\RB=, =\RC=, =\RD=, =\TO=, =\XX=, =\CA=, =\CB=, =\CC=, =\CD= を overlay でハイライトします。
|
||||||
|
|
||||||
*** 主な機能
|
*** 主な機能
|
||||||
|
|
||||||
- =\RA{label}{body}= から =\RD{label}{body}= までを色分け表示します。
|
- =\RA{label}{body}= から =\RD{label}{body}= までを色分け表示します。
|
||||||
- 第1引数、つまりラベル部分は背景付き太字で表示します。
|
- 第1引数、つまりラベル部分は背景付き太字で表示します。
|
||||||
- 第2引数、つまり本文部分は対応色の文字色で表示します。
|
- 第2引数、つまり本文部分は対応色の文字色で表示します。
|
||||||
- =\TO{body}= は赤太字で表示します。
|
- =\TO{body}= は赤太字で表示します(大窪コメント)。
|
||||||
|
- =\XX{body}= は赤ピンク太字で表示します(学生コメント)。
|
||||||
- =\CA{A1}= から =\CD{...}= までは、次の =\CO=, =\CA=, =\CB=, =\CC=, =\CD=, =\end{enumerate}=, =\end{document}= までを本文として色付けします。
|
- =\CA{A1}= から =\CD{...}= までは、次の =\CO=, =\CA=, =\CB=, =\CC=, =\CD=, =\end{enumerate}=, =\end{document}= までを本文として色付けします。
|
||||||
- 編集後に idle timer で自動再ハイライトします。
|
- 編集後に idle timer で自動再ハイライトします。
|
||||||
- 古い font-lock 方式の review macro highlight が残っている場合、enable 時に削除します。
|
- 古い font-lock 方式の review macro highlight が残っている場合、enable 時に削除します。
|
||||||
|
|
||||||
*** 対応マクロ
|
*** 対応マクロ
|
||||||
|
|
||||||
| マクロ | 用途 | 表示 |
|
| マクロ | 用途 | 表示 |
|
||||||
| =\RA{label}{body}= | Reviewer A など | label は赤系背景付き、body は赤系文字 |
|
| =\RA{label}{body}= | Reviewer A など | label は赤系背景付き、body は赤系文字 |
|
||||||
| =\RB{label}{body}= | Reviewer B など | label は青系背景付き、body は青系文字 |
|
| =\RB{label}{body}= | Reviewer B など | label は青系背景付き、body は青系文字 |
|
||||||
| =\RC{label}{body}= | Reviewer C など | label は緑系背景付き、body は緑系文字 |
|
| =\RC{label}{body}= | Reviewer C など | label は緑系背景付き、body は緑系文字 |
|
||||||
| =\RD{label}{body}= | Reviewer D など | label は紫系背景付き、body は紫系文字 |
|
| =\RD{label}{body}= | Reviewer D など | label は紫系背景付き、body は紫系文字 |
|
||||||
| =\TO{body}= | TODO/対応事項 | 赤太字 |
|
| =\TO{body}= | TODO/対応事項 | 赤太字 |
|
||||||
| =\CA{label}= | 回答案 A | label と次項目までの本文を RA 系の色で表示 |
|
| =\XX{body}= | TODO/対応事項 | 赤ピンク太字 |
|
||||||
| =\CB{label}= | 回答案 B | label と次項目までの本文を RB 系の色で表示 |
|
| =\CA{label}= | 回答案 A | label と次項目までの本文を RA 系の色で表示 |
|
||||||
| =\CC{label}= | 回答案 C | label と次項目までの本文を RC 系の色で表示 |
|
| =\CB{label}= | 回答案 B | label と次項目までの本文を RB 系の色で表示 |
|
||||||
| =\CD{label}= | 回答案 D | label と次項目までの本文を RD 系の色で表示 |
|
| =\CC{label}= | 回答案 C | label と次項目までの本文を RC 系の色で表示 |
|
||||||
|
| =\CD{label}= | 回答案 D | label と次項目までの本文を RD 系の色で表示 |
|
||||||
|
|
||||||
*** 主要設定
|
*** 主要設定
|
||||||
|
|
||||||
| 変数 | 既定値 | 内容 |
|
| 変数 | 既定値 | 内容 |
|
||||||
| =my-yatex-review-label-background= | =gray30= | ラベル部分の背景色 |
|
| =my-yatex-review-label-background= | =gray30= | ラベル部分の背景色 |
|
||||||
| =my-yatex-review-idle-delay= | 0.8 | 編集後、自動再ハイライトまでの待ち時間、秒 |
|
| =my-yatex-review-idle-delay= | 0.8 | 編集後、自動再ハイライトまでの待ち時間、秒 |
|
||||||
|
|
||||||
*** コマンド
|
*** コマンド
|
||||||
|
|
||||||
| コマンド | 機能 |
|
| コマンド | 機能 |
|
||||||
| =my-yatex-review-highlight-enable= | review macro highlight を有効化します。 |
|
| =my-yatex-review-highlight-enable= | review macro highlight を有効化します。 |
|
||||||
| =my-yatex-review-highlight-disable= | review macro highlight を無効化します。 |
|
| =my-yatex-review-highlight-disable= | review macro highlight を無効化します。 |
|
||||||
| =my-yatex-review-highlight-toggle= | 有効/無効を切り替えます。 |
|
| =my-yatex-review-highlight-toggle= | 有効/無効を切り替えます。 |
|
||||||
| =my-yatex-review-highlight-refresh= | 現在のバッファ全体を再スキャンしてハイライトを更新します。 |
|
| =my-yatex-review-highlight-refresh= | 現在のバッファ全体を再スキャンしてハイライトを更新します。 |
|
||||||
| =my-yatex-review-install-keybindings= | 現在のバッファにローカルキーを設定します。 |
|
| =my-yatex-review-install-keybindings= | 現在のバッファにローカルキーを設定します。 |
|
||||||
| =my-yatex-review-setup= | キー設定とハイライト有効化をまとめて行います。 |
|
| =my-yatex-review-setup= | キー設定とハイライト有効化をまとめて行います。 |
|
||||||
| =my-yatex-review-set-faces= | face 設定を再適用します。 |
|
| =my-yatex-review-set-faces= | face 設定を再適用します。 |
|
||||||
|
|
||||||
*** YaTeX バッファ内のキー
|
*** YaTeX バッファ内のキー
|
||||||
|
|
||||||
| キー | コマンド | 機能 |
|
| キー | コマンド | 機能 |
|
||||||
| =C-c h= | =my-yatex-review-highlight-toggle= | ハイライト ON/OFF |
|
| =C-c h= | =my-yatex-review-highlight-toggle= | ハイライト ON/OFF |
|
||||||
| =C-c r= | =my-yatex-review-highlight-refresh= | 手動再ハイライト |
|
| =C-c r= | =my-yatex-review-highlight-refresh= | 手動再ハイライト |
|
||||||
|
|
||||||
*** 自動設定
|
*** 自動設定
|
||||||
|
|
||||||
@@ -430,7 +431,7 @@ YaTeX バッファ内で、査読返信や改訂原稿用の独自 LaTeX マク
|
|||||||
(add-hook 'YaTeX-mode-hook #'my-yatex-review-setup)
|
(add-hook 'YaTeX-mode-hook #'my-yatex-review-setup)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
そのため、YaTeX バッファを開くと自動的に review macro highlight が有効になります。
|
そのため、YaTeXバッファを開くと自動的にreview macro highlightが有効になります。
|
||||||
|
|
||||||
*** 注意点
|
*** 注意点
|
||||||
|
|
||||||
|
|||||||
+55
-47
@@ -9,35 +9,64 @@
|
|||||||
;; configuration
|
;; configuration
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defvar lab-ai-url
|
(defgroup lab-ai nil
|
||||||
"https://amorphous.tf.chiba-u.jp/lab-ai/chat")
|
"Lab-AI client."
|
||||||
|
:group 'applications)
|
||||||
|
|
||||||
(defvar lab-ai-image-url
|
(defconst lab-ai-url
|
||||||
"https://amorphous.tf.chiba-u.jp/lab-ai/image")
|
"https://amorphous.tf.chiba-u.jp/lab-ai/chat"
|
||||||
|
"Lab-AI chat endpoint.")
|
||||||
|
|
||||||
(defvar lab-ai-image-edit-url
|
(defconst lab-ai-image-url
|
||||||
"https://amorphous.tf.chiba-u.jp/lab-ai/image-edit")
|
"https://amorphous.tf.chiba-u.jp/lab-ai/image"
|
||||||
|
"Lab-AI image generation endpoint.")
|
||||||
|
|
||||||
(defvar lab-ai-image-size
|
(defconst lab-ai-image-edit-url
|
||||||
"1024x1024")
|
"https://amorphous.tf.chiba-u.jp/lab-ai/image-edit"
|
||||||
|
"Lab-AI image editing endpoint.")
|
||||||
|
|
||||||
|
(defconst lab-ai-supported-models
|
||||||
|
'("gpt-5.6-luna"
|
||||||
|
"gpt-5.6-terra"
|
||||||
|
"gpt-5.6-sol")
|
||||||
|
"Models supported by the Lab-AI gateway.")
|
||||||
|
|
||||||
(defvar lab-ai-models
|
(defcustom lab-ai-model
|
||||||
'("gpt-5-mini"
|
"gpt-5.6-terra"
|
||||||
"gpt-5"
|
"Default model used by Lab-AI."
|
||||||
"gpt-5.5"))
|
:type '(choice
|
||||||
|
(const :tag "GPT-5.6 Luna" "gpt-5.6-luna")
|
||||||
|
(const :tag "GPT-5.6 Terra" "gpt-5.6-terra")
|
||||||
|
(const :tag "GPT-5.6 Sol" "gpt-5.6-sol"))
|
||||||
|
:group 'lab-ai)
|
||||||
|
|
||||||
(defvar lab-ai-model
|
(defcustom lab-ai-image-size
|
||||||
"gpt-5.5")
|
"1024x1024"
|
||||||
|
"Default image size used by Lab-AI."
|
||||||
|
:type '(choice
|
||||||
|
(const "1024x1024")
|
||||||
|
(const "1024x1536")
|
||||||
|
(const "1536x1024"))
|
||||||
|
:group 'lab-ai)
|
||||||
|
|
||||||
(defvar lab-ai-timeout
|
(defcustom lab-ai-timeout
|
||||||
"600")
|
"600"
|
||||||
|
"Timeout in seconds passed to curl."
|
||||||
|
:type 'string
|
||||||
|
:group 'lab-ai)
|
||||||
|
|
||||||
(defvar lab-ai-max-attachment-size
|
(defcustom lab-ai-max-attachment-size
|
||||||
(* 50 1024 1024))
|
(* 5 1024 1024)
|
||||||
|
"Maximum attachment size in bytes."
|
||||||
|
:type 'integer
|
||||||
|
:group 'lab-ai)
|
||||||
|
|
||||||
|
(defcustom lab-ai-chat-history-max-messages
|
||||||
|
200
|
||||||
|
"Maximum number of chat history messages."
|
||||||
|
:type 'integer
|
||||||
|
:group 'lab-ai)
|
||||||
|
|
||||||
(defvar lab-ai-chat-history-max-messages
|
|
||||||
200)
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; API
|
;; API
|
||||||
@@ -197,29 +226,6 @@
|
|||||||
(goto-char beg)
|
(goto-char beg)
|
||||||
(insert text))
|
(insert text))
|
||||||
|
|
||||||
(defun lab-ai--dwim (system user)
|
|
||||||
(let* ((bnds (lab-ai--bounds))
|
|
||||||
(beg (copy-marker (car bnds)))
|
|
||||||
(end (copy-marker (cdr bnds) t))
|
|
||||||
(origin-buffer (current-buffer))
|
|
||||||
(txt (buffer-substring-no-properties beg end))
|
|
||||||
(prompt
|
|
||||||
(concat system "\n\n"
|
|
||||||
user "\n\n"
|
|
||||||
txt)))
|
|
||||||
(message "Lab-AI: sending request... model=%s" lab-ai-model)
|
|
||||||
(lab-ai-request-async
|
|
||||||
prompt
|
|
||||||
(lambda (answer)
|
|
||||||
(when (buffer-live-p origin-buffer)
|
|
||||||
(with-current-buffer origin-buffer
|
|
||||||
(save-excursion
|
|
||||||
(lab-ai--replace-region beg end answer))
|
|
||||||
(message "Lab-AI: done. model=%s" lab-ai-model))))
|
|
||||||
(lambda (err)
|
|
||||||
(message "Lab-AI: error: %s"
|
|
||||||
(error-message-string err))))))
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; translation/editing commands
|
;; translation/editing commands
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
@@ -533,6 +539,8 @@ Run again to clear previews."
|
|||||||
#'lab-ai-chat-clear-attachments)
|
#'lab-ai-chat-clear-attachments)
|
||||||
(define-key map (kbd "C-c C-h")
|
(define-key map (kbd "C-c C-h")
|
||||||
#'lab-ai-chat-clear-history)
|
#'lab-ai-chat-clear-history)
|
||||||
|
(define-key map (kbd "C-c C-m")
|
||||||
|
#'lab-ai-switch-model)
|
||||||
map))
|
map))
|
||||||
|
|
||||||
|
|
||||||
@@ -908,13 +916,16 @@ Run again to clear previews."
|
|||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; misc
|
;; misc
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
(defun lab-ai-show-model ()
|
||||||
|
(interactive)
|
||||||
|
(message "Lab-AI model: %s" lab-ai-model))
|
||||||
|
|
||||||
(defun lab-ai-switch-model ()
|
(defun lab-ai-switch-model ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(setq lab-ai-model
|
(setq lab-ai-model
|
||||||
(completing-read
|
(completing-read
|
||||||
"Model: "
|
"Model: "
|
||||||
lab-ai-models
|
lab-ai-supported-models
|
||||||
nil t
|
nil t
|
||||||
lab-ai-model))
|
lab-ai-model))
|
||||||
(when (get-buffer lab-ai-chat-buffer)
|
(when (get-buffer lab-ai-chat-buffer)
|
||||||
@@ -922,9 +933,6 @@ Run again to clear previews."
|
|||||||
(lab-ai-chat-update-mode-line)))
|
(lab-ai-chat-update-mode-line)))
|
||||||
(message "lab-ai model => %s" lab-ai-model))
|
(message "lab-ai model => %s" lab-ai-model))
|
||||||
|
|
||||||
(defun lab-ai-show-model ()
|
|
||||||
(interactive)
|
|
||||||
(message "Lab-AI model: %s" lab-ai-model))
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Keys
|
;; Keys
|
||||||
|
|||||||
+5
-4
@@ -12,11 +12,11 @@
|
|||||||
"QR frame size in pixels."
|
"QR frame size in pixels."
|
||||||
:type 'integer)
|
:type 'integer)
|
||||||
|
|
||||||
(defcustom my-qrcode-frame-left 100
|
(defcustom my-qrcode-frame-left 0
|
||||||
"QR frame left position."
|
"QR frame left position."
|
||||||
:type 'integer)
|
:type 'integer)
|
||||||
|
|
||||||
(defcustom my-qrcode-frame-top 100
|
(defcustom my-qrcode-frame-top 0
|
||||||
"QR frame top position."
|
"QR frame top position."
|
||||||
:type 'integer)
|
:type 'integer)
|
||||||
|
|
||||||
@@ -177,7 +177,8 @@
|
|||||||
(make-frame
|
(make-frame
|
||||||
`((name . "QR Code")
|
`((name . "QR Code")
|
||||||
(left . ,my-qrcode-frame-left)
|
(left . ,my-qrcode-frame-left)
|
||||||
(top . ,my-qrcode-frame-top)))))
|
(top . ,my-qrcode-frame-top)
|
||||||
|
(user-position . t)))))
|
||||||
|
|
||||||
;; 正方形サイズ(ピクセル単位)
|
;; 正方形サイズ(ピクセル単位)
|
||||||
(set-frame-size
|
(set-frame-size
|
||||||
@@ -199,7 +200,7 @@
|
|||||||
|
|
||||||
;; (global-set-key
|
;; (global-set-key
|
||||||
;; (kbd "C-c q")
|
;; (kbd "C-c q")
|
||||||
;; #'my-region-to-qrcode)
|
;; #'my-qrcode-from-region)
|
||||||
|
|
||||||
(provide 'my-qrcode)
|
(provide 'my-qrcode)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
\
|
|
||||||
;;; my-replace-zen-to-ascii.el --- Convert fullwidth/superscript/subscript chars to ASCII -*- lexical-binding: t; -*-
|
;;; my-replace-zen-to-ascii.el --- Convert fullwidth/superscript/subscript chars to ASCII -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
;; This library converts selected fullwidth ASCII-like characters,
|
;; This library converts selected fullwidth ASCII-like characters,
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
;;
|
;;
|
||||||
;; \TO:
|
;; \TO:
|
||||||
;; 第1引数: 赤太字、背景は変更しない
|
;; 第1引数: 赤太字、背景は変更しない
|
||||||
|
;; \XX:
|
||||||
|
;; 学生が修正した部分。第1引数を黄色太字で表示する。
|
||||||
;;
|
;;
|
||||||
;; \CA-\CD:
|
;; \CA-\CD:
|
||||||
;; \CA は \RA と同じ色
|
;; \CA は \RA と同じ色
|
||||||
@@ -35,6 +37,7 @@
|
|||||||
(defface my-latex-RD-body-face '((t ())) "Face for second argument of \\RD.")
|
(defface my-latex-RD-body-face '((t ())) "Face for second argument of \\RD.")
|
||||||
|
|
||||||
(defface my-latex-TO-body-face '((t ())) "Face for argument of \\TO.")
|
(defface my-latex-TO-body-face '((t ())) "Face for argument of \\TO.")
|
||||||
|
(defface my-latex-XX-body-face '((t ())) "Face for argument of \\XX.")
|
||||||
|
|
||||||
|
|
||||||
(defvar my-yatex-review-label-background "gray30"
|
(defvar my-yatex-review-label-background "gray30"
|
||||||
@@ -97,6 +100,13 @@
|
|||||||
'my-latex-TO-body-face nil
|
'my-latex-TO-body-face nil
|
||||||
:foreground "tomato"
|
:foreground "tomato"
|
||||||
:background 'unspecified
|
:background 'unspecified
|
||||||
|
:weight 'bold)
|
||||||
|
|
||||||
|
;; XX: student revision
|
||||||
|
(set-face-attribute
|
||||||
|
'my-latex-XX-body-face nil
|
||||||
|
:foreground "DeepPink"
|
||||||
|
:background 'unspecified
|
||||||
:weight 'bold))
|
:weight 'bold))
|
||||||
|
|
||||||
|
|
||||||
@@ -151,7 +161,9 @@
|
|||||||
(1 'my-latex-RD-label-face t)
|
(1 'my-latex-RD-label-face t)
|
||||||
(2 'my-latex-RD-body-face t))
|
(2 'my-latex-RD-body-face t))
|
||||||
("\\\\TO{\\([^{}\n]*\\)}"
|
("\\\\TO{\\([^{}\n]*\\)}"
|
||||||
(1 'my-latex-TO-body-face t))))
|
(1 'my-latex-TO-body-face t))
|
||||||
|
("\\\\XX{\\([^{}\n]*\\)}"
|
||||||
|
(1 'my-latex-XX-body-face t))))
|
||||||
|
|
||||||
;; 重いので refresh のたびには呼ばない
|
;; 重いので refresh のたびには呼ばない
|
||||||
(when font-lock-mode
|
(when font-lock-mode
|
||||||
@@ -283,8 +295,8 @@ Return number of highlighted answer macros."
|
|||||||
(let ((count 0))
|
(let ((count 0))
|
||||||
(goto-char (point-min))
|
(goto-char (point-min))
|
||||||
|
|
||||||
;; 行頭またはインデント後の \CA, \CB, \CC, \CD を対象にする
|
;; 行頭に限定せず、\CA, \CB, \CC, \CD を検索する
|
||||||
(while (re-search-forward "^[ \t]*\\\\\\(C[ABCD]\\)\\_>" nil t)
|
(while (re-search-forward "\\\\\\(C[ABCD]\\)\\_>" nil t)
|
||||||
(let* ((macro (match-string-no-properties 1))
|
(let* ((macro (match-string-no-properties 1))
|
||||||
(faces (my-yatex-review--faces-for-citem-macro macro))
|
(faces (my-yatex-review--faces-for-citem-macro macro))
|
||||||
(label-face (nth 0 faces))
|
(label-face (nth 0 faces))
|
||||||
@@ -303,25 +315,29 @@ Return number of highlighted answer macros."
|
|||||||
|
|
||||||
;; \CA{A1} の A1 部分
|
;; \CA{A1} の A1 部分
|
||||||
(my-yatex-review--make-overlay
|
(my-yatex-review--make-overlay
|
||||||
(nth 0 arg1) (nth 1 arg1) label-face 1000)
|
(nth 0 arg1)
|
||||||
|
(nth 1 arg1)
|
||||||
|
label-face
|
||||||
|
1000)
|
||||||
|
|
||||||
;; A1 に続く本文部分
|
;; ラベルに続く回答本文
|
||||||
;; \RA などの局所 overlay より少し低い priority にする
|
|
||||||
(my-yatex-review--make-overlay
|
(my-yatex-review--make-overlay
|
||||||
body-beg body-end body-face 900)
|
body-beg
|
||||||
|
body-end
|
||||||
|
body-face
|
||||||
|
900)
|
||||||
|
|
||||||
;; 次の item まで飛ぶ
|
;; 次の回答項目まで移動
|
||||||
(goto-char body-end))))))
|
(goto-char body-end))))))
|
||||||
|
|
||||||
count))
|
count))
|
||||||
|
|
||||||
|
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
;; Main refresh
|
;; Main refresh
|
||||||
;; ============================================================
|
;; ============================================================
|
||||||
|
|
||||||
(defun my-yatex-review-highlight-refresh ()
|
(defun my-yatex-review-highlight-refresh ()
|
||||||
"Refresh highlighting for \\RA, \\RB, \\RC, \\RD, \\TO, and \\CA-\\CD."
|
"Refresh highlighting for \\RA-\\RD, \\TO, \\XX, and \\CA-\\CD."
|
||||||
(interactive)
|
(interactive)
|
||||||
|
|
||||||
;; refresh 時は font-lock 削除や face 再設定をしない。
|
;; refresh 時は font-lock 削除や face 再設定をしない。
|
||||||
@@ -339,7 +355,7 @@ Return number of highlighted answer macros."
|
|||||||
;; ------------------------------------------------------------
|
;; ------------------------------------------------------------
|
||||||
(goto-char (point-min))
|
(goto-char (point-min))
|
||||||
|
|
||||||
(while (re-search-forward "\\\\\\(R[ABCD]\\|TO\\)\\_>" nil t)
|
(while (re-search-forward "\\\\\\(R[ABCD]\\|TO\\|XX\\)\\_>" nil t)
|
||||||
(let ((macro (match-string-no-properties 1)))
|
(let ((macro (match-string-no-properties 1)))
|
||||||
(cond
|
(cond
|
||||||
|
|
||||||
@@ -361,7 +377,6 @@ Return number of highlighted answer macros."
|
|||||||
;; second argument
|
;; second argument
|
||||||
(my-yatex-review--make-overlay
|
(my-yatex-review--make-overlay
|
||||||
(nth 0 arg2) (nth 1 arg2) body-face 1000)))))))
|
(nth 0 arg2) (nth 1 arg2) body-face 1000)))))))
|
||||||
|
|
||||||
;; \TO{body}
|
;; \TO{body}
|
||||||
((string= macro "TO")
|
((string= macro "TO")
|
||||||
(let ((arg1 (my-yatex-review--read-brace-arg)))
|
(let ((arg1 (my-yatex-review--read-brace-arg)))
|
||||||
@@ -369,7 +384,16 @@ Return number of highlighted answer macros."
|
|||||||
(setq count (1+ count))
|
(setq count (1+ count))
|
||||||
(my-yatex-review--make-overlay
|
(my-yatex-review--make-overlay
|
||||||
(nth 0 arg1) (nth 1 arg1)
|
(nth 0 arg1) (nth 1 arg1)
|
||||||
'my-latex-TO-body-face 1000)))))))
|
'my-latex-TO-body-face 1000))))
|
||||||
|
|
||||||
|
;; \XX{body}: student revision
|
||||||
|
((string= macro "XX")
|
||||||
|
(let ((arg1 (my-yatex-review--read-brace-arg)))
|
||||||
|
(when arg1
|
||||||
|
(setq count (1+ count))
|
||||||
|
(my-yatex-review--make-overlay
|
||||||
|
(nth 0 arg1) (nth 1 arg1)
|
||||||
|
'my-latex-XX-body-face 1000)))))))
|
||||||
|
|
||||||
;; ------------------------------------------------------------
|
;; ------------------------------------------------------------
|
||||||
;; \CA, \CB, \CC, \CD
|
;; \CA, \CB, \CC, \CD
|
||||||
|
|||||||
Reference in New Issue
Block a user