スクリーンショットをorg-modeバッファ内に取り込む

スクリーンショットをすぐに記事に追加できたら便利だ。 org-modeでスクリーンショットをファイル内に素早く取り込めるよう、org-downloadパッケージが用意されている。 M-x package-list-packages~ や M-x package-install でorg-downloadをインストールしよう。 スクリーンショットはgnome-screenshotやscrot, flameshotなど色々なものがあるが、 3つ試した上でflameshotにした。 決め手はスクリーンショットを撮った後にすぐに図を編集できること。 テキストの追加や矢印や矩形などの図形挿入、モザイク処理もできる。 惜しい点はウィンドウを選択してスクリーンショットが撮れないこと。 なお、gnome-screenshotはウィンドウが選択できるが編集ができないのでボツにした。 Ubuntu24.04では以下のコマンドでflameshotがインストールできる。 sudo apt install flameshot Emacsの設定ファイルに以下を追加する。 ;; for org-download (setq org-download-heading-lvl nil) (require 'org-download) (setq org-download-screenshot-method "flameshot gui --raw > %s") org-download-heading-lvlの設定はお好みで。 デフォルトは0で一番上の階層の見出しがフォルダになって保存される。 ox-hugo用にカテゴリーで見出しを作っており、 *Emacs の下でスクリーンショットを撮った場合は [保存先フォルダ]/Emacs/タイムスタンプ.png に保存される。 nilにしておけば保存先フォルダに直接保存される。 スクリーンショットの保存フォルダはorgファイルごとに設定できる。 orgファイルの冒頭に以下の1行を追加する。 -*- mode: Org; org-download-image-dir: "~/savedir/static/img"; -*- savedirは任意のフォルダで良いが、staticを挟んでおくとox-hugoが自動でhugoディレクトリのstaticフォルダにコピーしてくれるので便利。 ここでEmacsを再起動する。 ...

作成日: 2025年9月14日

記事作成環境を整える

記事を作成する際、下準備があってなかなか本題に入れなかったりする。 それが障壁になって記事を作成するのが億劫になってしまったりする。 書く気になったときに書けるよう、環境を整えたい。 悩み (前提条件)ox-hugoを使ってサブツリー形式で記事を書いている。 フロントマターを毎回入力するのは面倒なので、ベースとなる記事からコピペしてタイトルやファイル名を書き直さないといけない。 もっと記事の内容に集中したい。 解決方法 思い立ったときにすぐにメモを取れるorg-capture。 org-caputureでox-hugo用のテンプレートを作ることですぐに記事作成できるようにする。 Emacsの設定ファイルに以下を追加。 (with-eval-after-load 'org-capture (defun org-hugo-new-subtree-post-capture-template () "Returns `org-capture' template string for new Hugo post. See `org-capture-templates' for more information." (let* ((title (read-from-minibuffer "Post Title: ")) ;Prompt to enter the post title (fname (org-hugo-slug title))) (mapconcat #'identity `( ,(concat "* TODO " title) ":PROPERTIES:" ,(concat ":EXPORT_FILE_NAME: " fname) ":END:" "%?\n") ;Place the cursor here finally "\n"))) (add-to-list 'org-capture-templates '("h" ;`org-capture' binding + h "Hugo post" entry (file+olp "~/myorgdir/subtree.org" "Emacs") (function org-hugo-new-subtree-post-capture-template)))) org-captureをC-c cに割り当てていない場合は以下も設定ファイルに追加しておこう。 ...

作成日: 2025年9月11日 · 最終更新日: 2025年9月12日

Emacsと生成AI(LLM)

EmacsでchatGPTやgemini,ollama(ローカルLLM)を扱うためのパッケージgptelについて紹介する。 試しにollamaを操作してみる。 ollamaはインストール済みでgpt-oss:20bのモデルをpullまたはrunしており、ローカルLAN向けにサーバが動いているものとする。 gptelをインストール後、Emacsの設定ファイルに以下を追記。 (setq gptel-model 'gpt-oss:20b gptel-backend (gptel-make-ollama "Ollama" :host "ollamaサーバのIPアドレス:11434" :stream t :models '(gpt-oss:20b))) M-x gptel すれば別バッファで会話が可能。 なお、以下の設定をしておくとorg-modeで開かれる(デフォルトはmarkdown mode) (setq gptel-default-mode 'org-mode) Emacsで作業しているときにそのバッファでプロンプトを記載して、プロンプトの下に回答を追記してもらうことも可能。 その場合は M-x gptel-send を使う。 範囲が選択されていればその範囲がプロンプトとして送られる。 何も選択せずにgptel-sendを実行するとバッファ全体が送られるので注意。 右側のバッファが会話用のバッファでやりとりしている例で、 そのあとに左側のバッファでバッファ内で範囲指定してプロンプトを投げて回答をもらった例。 会話用バッファは C-RET が gptel-send に割り当てられており、 デフォルトはバッファ全体がプロンプトとして送られるので過去の会話内容をふまえた返答が可能。 左側はグプトスについて聞いているが単発で聞いているのでモデルは知らないと素直に回答。 M-x gptel-menu から会話の前提条件を指定することもできる。 以下のとおり指定してみた。 あなたは関西弁で話す陽気な人です。ボケを混ぜつつ日本語30文字程度で返答して。 こんにちは おおきに!今日も一緒に笑い転げまっか?もう笑い止まんないで! それはいいですね ほっほ、笑顔でがんばろか!今日は盛り上がるで、にこりこりね。 Emacsってなんですか? エディタやんね!文字操作が楽ちん。バグも笑うで。 ...

作成日: 2025年9月10日

Emacsのキーボード操作(キーバインディング・ショートカットキー)

いまさらながらEmacsのデフォルトのキー操作について、日本語キーボードレイアウト上で可視化してみた。 先人の知恵(配置)を考慮しながら、自分好みのキー操作にカスタマイズしていきたい。 fundamental-modeのCtrlキーとの組み合わせ 設定ファイルを使用せず、一番素のメジャーモードであろうfundamental-modeでCtrlキーとの組み合わせでどんなfunctionが呼ばれるか図にしてみる。 ホームポジションから押しやすいキーとしてはC-;、C-,、C-.などが空いている。 それぞれのキーに割り当てられているものを関数名とともにおさらいする。 赤系 カーソル移動(小) キー操作 関数 機能 C-f forward-char カーソルを右に1つ移動 C-b backword-char カーソルを左に1つ移動 C-p previous-line カーソルを上に1つ移動 C-n next-line カーソルを下に1つ移動 青系 カーソル移動(大) キー操作 関数 機能 C-a move-beginning-of-lineforward-char カーソルを行の先頭に移動 C-e move-end-of-line カーソルを行の最後に移動 C-v scroll-up-command カーソルを約1画面分下に移動 オレンジ系 取り消し) キー操作 関数 機能 C-g keyboard-quit 途中の操作を取り消す C-/ undo 完了した操作の取り消し 緑系 削除・選択・コピペ キー操作 関数 機能 C-d delete-char カーソルの位置の文字を1文字消す。 C-SPACE, または C-@ set-mark-command カーソルの位置を選択開始位置にセット。 C-k kill-line カーソル位置から行末まで削除(カット) C-w kill-region 選択範囲を削除(カット) C-y yank カットしたものをペースト C-backspace backward-kill-word カーソル位置から前の単語を削除(カット) 紫系 検索 キー操作 関数 機能 C-s isearch-forward 下方向に検索 C-r isearch-backward 上方向に検索 ピンク系 連続 単体では何も機能せず、入力後のキーで様々な操作ができるようになっている。 ...

作成日: 2025年9月9日

Emacsと生産性

Emacsとは Emacs(イーマックス)の詳しい説明は公式サイトやウィキペディアを参照してほしい。 起源は1974年から、そして1985年にオープンソースとなり、現在も開発が続いているすごいソフトウェア。 エディタやOS(オペレーティングシステム)とも言われるけど、私はEmacsのことを コンピュータを(特にキーボードで)快適に操作するもの だと思っている。 生産性 Emacsはコンピュータをキーボードで効率的に操作するにあたり、様々な工夫がなされている。 それは今現在普及しているキー操作(例えばCtrl-Cでコピー、Ctrl-Vでペースト)とは大きく異なるが、コンピュータを使った仕事で生産性を高めたいと思うのならばEmacsを学ぶことは決して損にはならない。 Emacsはキーボード操作でプログラムを書けるし、実行できる。メールの読み書きやレポートの作成、今流行りの生成AIとのやりとりもEmacsというアプリの中ですべて実行できる。 そしてこのキー操作はほぼ全て自分の好きなようにカスタマイズできる。 Emacsは日本人向けに日本語で整備されたドキュメントが少なく、初学者は"大抵の人がうまく使えるように設計された別のソフトウェア"を選ぶかもしれない。 しかし最近は生成AIが賢くなり、Emacsのことも日本語で丁寧に教えてくれる。Emacsは難しいと敬遠していた人も、学び直すチャンスだ。 オープンソースの良いところは特定の人や企業の影響を受けにくいことだ。つまり、誰かの気まぐれで開発がストップしたり、急に有償になることはほぼ無い。 あなたは過去にお気に入りのソフトウェアが使えなくなったことはないだろうか。 Emacsはすぐに使いこなせるものではないが、自分好みに育てられ、これからずっと伴走してくれるソフトウェアだと思っている。 文字入力する際にキーボードを見ながらタイピングするのは遅い。タッチタイピングを習得すれば文字入力は圧倒的に速くなる。 それと同様、Emacsと仲良くなれば、文字入力だけでなく様々な操作が圧倒的に速くなるのだ。 ぜひEmacsを試してほしい。

作成日: 2025年9月8日

ox-hugoで記事内のテキストの見た目を変化させる

org-mode記法でどのように記事内のテキストの見た目が変わるか、またはテキストそのまま表示させる方法を例示する。 太字 orgファイル *太字* 出力 太字 斜体 /斜体/ 斜体 取り消し +取り消し+ 取り消し 下線 _下線_ 下線 コード =インラインコード= インラインコード #+begin_src R print("hello") #+end_src print("hello") hello なお、上記のようにbegin_src自体を表示させるには下のようにさらにbegin_srcで囲む必要がある。カンマはエスケープ文字。 EmacsではC-SPCとカーソル移動で範囲指定した上でC-c C-, sを押せばbegin_srcで囲ってくれて必要に応じてエスケープ文字を追加してくれる。 #+begin_src ,#+begin_src R print("hello") ,#+end_src #+end_src 引用 #+begin_quote これは引用です #+end_quote これは引用です リンク [[/][リンクテキスト]] リンクテキスト VERBATIM(チルダ) ~*太字*~ *太字* テキストそのまま出力させたいときに。 見出し **** 見出し1 ***** 見出し2 ****** 見出し3 見出し1 見出し2 見出し3 文字色 ox-hugo単体では色を指定する仕組みはないのでインラインHTMLで色を指定する。 事前にHugoの設定ファイルでインラインHTMLを有効にする必要がある。 ...

作成日: 2025年9月6日

ox-hugoでTODOトラッキングによる日付自動更新

まずはorg-modeでTODOをDONEにしたときにタイムスタンプを追加する設定を行う。 orgファイルの先頭に以下を追加する。 大事なのはDONEのときに!でタイムスタンプを追加する設定にすること。 #+TODO: TODO(t) WAIT(w@/!) | DONE(d!) CANCELED(c@) デフォルト設定だとそれぞれ状態を変化させたときに以下のようにリストが挿入される - State "CANCELED" from "DONE" [2025-09-04 木 19:11] \\ test - State "DONE" from "WAIT" [2025-09-04 木 19:11] - State "WAIT" from "TODO" [2025-09-04 木 19:11] \\ test 次にM-x customize-variableでorg-log-into-drawerをtにする。 TODOの状態を変化させたとき、以下のようにLOGBOOKドロワーに格納されるようになる。 :LOGBOOK: - State "CANCELED" from "WAIT" [2025-09-04 木 19:23] \\ test - State "WAIT" from "DONE" [2025-09-04 木 19:23] \\ test - State "DONE" from "WAIT" [2025-09-04 木 19:23] - State "WAIT" from "TODO" [2025-09-04 木 19:22] \\ test :END: この情報を使ってox-hugoではdate(記事作成日時)とlastmod(最終更新日時)を自動更新してくれる仕組みがある。 その仕組みを使うためにはorg-modeでドロワーのexportを有効にする必要がある。 ...

作成日: 2025年9月4日 · 最終更新日: 2025年9月5日