スキップしてメイン コンテンツに移動

投稿

ラベル(emacs)が付いた投稿を表示しています

まだまだ helm-swoop.el を使ってマルチバッファ検索する

最近はまた helm.el の開発が活発に行われているようです。 少し前から helm の仕様変更のためか、 helm-multi-swoop コマンドを実行したときに、検索語句は背後で開いているバッファも含めた全体のものが表示されるものの、語句の位置に移動できるのは現在開いているバッファのみに限られてしまうようになりました。 helm-swoop.el のマルチバッファ横断検索が便利過ぎて、他のパッケージに移行できないため、こちらも ChatGPT に解決策を教えてもらいました。 問題点は、「選択移動だけでは persistent-action が走らない」ことで、 helm-multi-swoop の「選択を上下に動かすだけで対象バッファへプレビュー移動する」機能が働かなくなっているようでした。 対処法は、候補移動時に必ず persistent-action を実行させることで各候補の場所へプレビュー/ジャンプを可能にすること、および multi-swoop の source に follow を有効化することだそうです。以下を init.el に追記します。 ;;; --- 1) 候補移動+persistent-action を実行する関数を追加 (defun helm-swoop--next-line-follow () "Move to next line and execute persistent action (preview/jump)." (interactive) (helm-next-line) (helm-execute-persistent-action)) (defun helm-swoop--previous-line-follow () "Move to previous line and execute persistent action (preview/jump)." (interactive) (helm-previous-line) (helm-execute-persistent-action)) ;;; --- 2) マルチバッファ用のキーマップを『follow つき移動』へ差し替え (with-eval-after-l...

YaTeXでインライン数式の括弧を挿入する関数

EmacsのLaTeXの入力支援モードであるYaTeXでは、YaTeX-insert-dollarという関数が定義されていて、ドル記号"\$"を入力すると"\$\$"が入力され、カーソルは2つのドル記号の間に移動し、入力モードは直接入力に切り替わります。 日本語入力をオフにしなくとも直接数式入力に移行できることや、インライン数式環境の閉じ忘れが防げるので重宝しています。 LaTeXのインライン数式モードとして、他にも"\\("と"\\)"で括る方法があり、ドル記号を入力するのと同じような挙動をする関数が欲しいなと思っていたので作成してみました。 とはいってもYaTeX-insert-dollarとYaTeX-insert-dollars-regionの挿入文字列を変えてみただけです。 今のところの問題点は、数式モードの開始にドル記号が使われていても、"\\)"で閉じてしまうところです。ドル記号と括弧のどちらで開始された数式モードであるか判定する機能が欲しいところです。 (defun YaTeX-insert-math-paren () (interactive) (if (or (not (YaTeX-closable-p)) ; (= (preceding-char) 92) ;; (and (YaTeX-in-math-mode-p) ;; (or (/= (preceding-char) ?$) (/= (following-char) ?$))) (YaTeX-in-math-mode-p)) (insert "\\)") (insert "\\(\\)") (forward-char -2) (and YaTeX-use-jmode-hook (fboundp 'add-text-properties) (add-text-properties (- 2 (point)) (+ 2 (point)) (list 'point-left 'YaTeX-jmode-hook 'point...

mozc.elでの日本語入力における句読点の自動修正

通常の日本語の文章を書くときの句読点は「、」や「。」を使うけれど、数式を含む文章を書くときの句読点は「,」と「.」を使いたい派です。 10年くらいほど前にこの機能を実現するpunch.elというEmacsのパッケージを配布されている方がいて、便利に使わせて頂いてました。 このpunch.elはMacやWindowsのOSのIMEを利用した場合には上手く動くものの、mozc.elを利用した入力には対応していませんでした。 mozc.elで同じ機能を実現するelispをGrokにお願いして出力してもらったところ、ほぼそのまま利用できるコードを生成してくれました。 mozc-handle-event関数の実行前後の文字列入力位置を記録しておき、その範囲内の句読点をmozc-handle-event実行後に書き換えるという操作をするコードになっています。以下の内容をpunct-mozc.elという名前でEmacs Lispのライブラリに保存します。 (defgroup punct-mozc nil "Punctuation switcher in mozc" :group 'punct-mozc :prefix "punct-mozc-") (defun punct-mozc-lighter () " Punct") (defun punct-mozc-replace-punctuation (beg end) "挿入された範囲内の句読点を変換する関数。 BEG と END は挿入された文字列の開始点と終了点を表す。" (interactive) (when punct-mozc-mode (save-excursion (goto-char (1- beg)) (while (< (point) end) (let ((char (char-after))) ; (message "Position: %d, Char: %c" (point) char) (cond ((= char ?、) (delete-...

yatex-modeでmozc-im使用時に,ドル記号入力で直接入力に切り替える.

emacsでyatex-modeを使っているときに,日本語入力中でもドル記号を入力すれば,直接入力に切り替わりドル記号が2つ入力されて欲しい人間です. mozc.elを使っているときには,mozc-mode-mapを書き換えることで 上記に対応していた のですが,mozc-imではキーマップが用意されていません.そこでキーイベントを拾う関数であるmozc-im-input-methodにアドバイスを定義することで上記を解決してみました. (require 'mozc-im) (setq default-input-method "japanese-mozc-im") (defadvice mozc-im-input-method (around insert-dollars (event)) (if (and (eq major-mode 'yatex-mode) (equal event ?$)) (YaTeX-insert-dollar) ad-do-it)) (ad-activate 'mozc-im-input-method) mozc.elでも,mozc-mode-mapを書き換える方法でなく,これと同様にmozc-handle-eventという関数にアドバイスを定義すれば同じ挙動を示します. 追記:defadviceは古いそうなので,advice-addを使用したものに書き換えてみました. (require 'mozc-im) (setq default-input-method "japanese-mozc-im") (defun mozc-im-input-method--yatex-insert-dollars (orig-fun key) (if (and (eq major-mode 'yatex-mode) (equal key ?$)) (YaTeX-insert-dollar) (funcall orig-fun key))) (advice-add 'mozc-im-input-method :around #'mozc-im-input-method--yat...

mozc-tempを使ってみた。

ac-mozcの後継である mozc-temp というものがあるということで使ってみました。 英字を直接入力して、変換したい文字列の直後でAlt-nを打鍵することで変換候補が表示されます。 少し利用してみたところ、yatex-modeでは直接入力でしか使わないような変換してほしくない記号も変換されて不便なので、以下のように変換候補の文字に関する正規表現を変更してみました。 ;;mozc-temp ;;(global-set-key (kbd "M-n") #'mozc-temp-convert-dwim) (global-set-key (kbd "M-n") #'mozc-temp-convert) ;;mozc-tempの変換候補文字に関する正規表現を変更する (add-hook 'yatex-mode-hook '(lambda () (custom-set-variables '(mozc-temp-prefix-regexp (let ((convertibles "][,.:0-9A-Za-z-")) (format "\\(?:^\\|[^%s]\\)\\([%s]+\\)\\=" convertibles convertibles))) ))) 使用していて気になる点は、 ひらがなやカタカナに変換するときにAlt-nの後でCtrl-H, Ctrl-Kを打鍵する必要があり、打鍵回数が増えるので、ひらがな・カタカナに直接変換するキー割り当てが欲しい。 mozc.elを使って入力をしているときには、変換候補が表示されているときに続けて文字を打ち込むと変換確定扱いになるのに対し、mozc-tempではEnterを押して決定しないと変換確定にならないので、やはり打鍵回数が増えて不便. といったところでしょうか。後者がかなり気にかかるので使用頻度が減ってしまいましたが、日本語入力モードに切り替えるのを忘れて文字列を打ってしまった後に変換可能なのでその用途で使っています。

yatexで数式イメージ補完を使って数式書体を変更したい

普段はLaTeX文書を作成するのにemacs+YaTeXを使用しています。 YaTeXでは数式環境中でセミコロン; を押下すると数式イメージ補完入力可能になり、その後aを押せば\alphaが、6を押せば\partialが補完されます。 セミコロンの後にmrを押せば、\mathrm{}が補完され、括弧の間にカーソルが移ります。同様にmsで\mathsf{}, miで\mathit{}なども補完されるのですが、自分が普段良く使う\mathbbや\mathscrはデフォルトで定義されていないようです。 これら数式の書体変更の命令はセクション型(\section{})のコマンドなので、ユーザー定義のセクション型補完の変数として用意されているuser-section-tableに登録すると、セクション型補完のコマンド[prefix]-sで入力した際には括弧まで補完してくれます。 \mathbbや\mathscrも数式イメージ補完を行いたいと思ったので、ユーザ定義の数式記号の変数YaTeX-math-sign-alist-privateにも登録してみたのですが、数式イメージ補完入力からこれらのコマンドを入力すると、括弧が補完されません。 yatex.elで定義されている変数section-tableにこれらのコマンドを登録しておけば、数式イメージ補完入力でも括弧が入力されることを確認したのですが、これらの挙動の違いがイマイチ把握出来ていません。yatex.elを直接変更するとなるとYaTeXのアップデート毎にyatex.elを修正する必要があるので、根本的な解決方法が知りたいのですが、どうすればよいのでしょう? 追記:2016/12/18 yatexの更新の度にyatex.elを書き換えるのは面倒なので,とりあえずinit.elに次のように記述しました. (setq yatex-mode-load-hook '(lambda() (setq section-table (append section-table '(("mathscr") ("mathbb") ("mathfrak")))) )) user-section-tableに追加...

Emacs.appから起動したEmacsでシェルの環境変数を引き継ぐ

Macを使い始めて最初に不便に感じたことの一つは,Emacs.appをGUIで起動したときに,PATHなどのシェルの環境変数が引き継がれないことでした. 最近はターミナルから起動するのが習慣づいているので余り気にならなくなりましたが,環境変数を引き継ぐことが出来るようなので設定してみました.参考にしたのはsyohexさんのブログ「Life is very short」の記事 Emacsでの環境変数の設定に exec-path-from-shellを使うようにした です. exec-path-from-shell.elというパッケージを用います. まずpackage.elを用いるか,もしくは こちら からexec-path-from-shell.elをダウンロードして,これをemacsが読み込める場所に置いておきます. 設定は次のようにしました. ;;;ターミナル以外から起動したときも,パスなどのシェル環境変数を引き継ぐ (when (memq window-system '(mac ns)) (require 'exec-path-from-shell) (exec-path-from-shell-initialize) (let ((envs '("BIBINPUTS" "TEXINPUTS" "INDEXSTYLE"))) (exec-path-from-shell-copy-envs envs)) ) ここでは,パス以外のシェル環境変数としてLaTeXで使うBIBINPUTSとTEXINPUTS, INDEXSTYLEの3つをenvsというリストにして,exec-path-from-shell-copy-envsという変数に設定しています.これでexec-path-from-shell-copy-envsに設定したシェルの環境変数も一緒に引き継いでくれるようになりました. あとはQuicsilverでEmacs.appにキーボードショートカットを割り当てて,ターミナルなしで起動出来るようにしました.最近外付けSSDにUbuntu 15.04をインストールしたのですが,UbuntuでもEmacsをGUI...

Ubuntu 14.04でのEmacsの設定(mozc, YaTeX, SyncTeX, フルスクリーン)

最近MacBook Air (mid 2012)の外付けSSDにUbuntu 14.04をインストールしたので,久しぶりに設定をゴニョゴニョしております. Emacsの日本語入力では,以前はAnthyを使っていましたが,TeXフォーラムの「 emacs, mozc, TeX入力 」を見て,mozcでもドル記号を入力したときに自動で直接入力に切り替えることが出来そうだったので設定をしてみました.「~/.emacs.d/init.el」に次のように設定しています. ;;; 言語環境の指定 ;;mozcの設定 (require 'mozc) (set-language-environment "Japanese") (setq default-input-method "japanese-mozc") ;;yatex-modeでドル記号を入力したときに直接入力に切り替える。 (define-key mozc-mode-map "$" 'YaTeX-insert-dollar-or-mozc-insert) (defun YaTeX-insert-dollar-or-mozc-insert () (interactive) (if (eq major-mode 'yatex-mode) (YaTeX-insert-dollar) (mozc-handle-event ?$))) その他にも,SyncTeXの設定がしばらく見ない間に変わっていたので,TeXWikiを参考に設定も行いました. 「 synctex-for-evince-yatex.el 」をダウンロードしてemacsが読める場所に置きます. init.elには次のように書き込んでおきます. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; synctex関連 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;inverse search (require 'dbus) (defun un-urlify (fname-or-url) ...

emacs内でTeX文書の作成からpdf閲覧まで行う

TeX WikiのEmacsに関する記述を見ていると,sheepheadさんのblog記事: Emacs上のPDFでisearch,occur,imenuとかなんでもしてしまうpdf-toolsの紹介 が紹介されていました.Emacs23を導入したときに,EmacsでPDFファイルを表示するDocViewを試したことがありましたが,使い勝手が悪かったためすぐに使わなくなりました. まずdoc-view-modeの基本的な操作法をまとめておきます. キー コマンド 機能 n 'doc-view-next-page 次のページ p 'doc-view-previous-page 前のページ C-n 'doc-view-next-line-or-next-page 1行下方へスクロール C-p 'doc-view-previous-line-or-previous-page 1行上方へスクロール SPACE 'doc-view-scroll-up-or-next-page 下方スクロールまたは次のページ DEL 'doc-view-scroll-down-or-previous-page 上方スクロールまたは前のページ k 'doc-view-kill-proc-and-buffer プロセスを終了しバッファを閉じる g 'revert-buffer バッファを閉じる + 'doc-view-enlarge 拡大 - 'doc-view-shrink 縮小 カーソルキー  - 上下左右方向へスクロール M-g M-g  'doc-view-goto-page 指定 したページへ 移動 M-> 'doc-view-first-page 最初 のページへ 移動 M-< 'doc-view-last-page 最後 のページへ 移動 上述の記事ではEmacsのdoc-view-modeの使い勝手を良くするEmacs拡張アプリであるpdf-toolsを紹介していたので,早速試してみました.環境はMac OS X MavericksでEmacs 24.4.50を使用しています. pdf-toolsを検索してみ...