差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
emacs [2023/11/08 00:56] – skk | emacs [2025/01/13 01:28] (現在) – skk | ||
---|---|---|---|
行 1: | 行 1: | ||
- | = [[emacs]] / LM: [2023-11-08 00:56:36] | + | = [[emacs]] / LM: [2025-01-13 01:28:49] |
~~NOCACHE~~ | ~~NOCACHE~~ | ||
行 193: | 行 193: | ||
That is, remove duplicates, non-kept, and excluded files. | That is, remove duplicates, non-kept, and excluded files. | ||
</ | </ | ||
+ | |||
+ | [2023-12-13] | ||
+ | |||
+ | recentf が増えてくると,検索したくなる.そのような時は,'' | ||
参考: | 参考: | ||
行 667: | 行 671: | ||
これで,Chrome と emacs の間での Window 移動の際に,マウスを使わなくて済むはずである. | これで,Chrome と emacs の間での Window 移動の際に,マウスを使わなくて済むはずである. | ||
- | ==== - slack での atomic-chrome [2023-10-15] | + | ==== - slack での atomic-chrome |
+ | [2023-10-15] | ||
ウィンドウの設定を行なうと,atomic-chrome の使い勝手がかなり向上するが,slack で利用することを考えると,emacs 内から submit できるとチャットの効率が大変あがるので便利な気がする. | ウィンドウの設定を行なうと,atomic-chrome の使い勝手がかなり向上するが,slack で利用することを考えると,emacs 内から submit できるとチャットの効率が大変あがるので便利な気がする. | ||
行 676: | 行 682: | ||
僕が投げた前後で,作者により秒で却下されてる issue があったが,現段階で 2 日経っても却下されてないので,少し考えてくれてるんじゃないかと期待して気長に待ってみようかと思う. | 僕が投げた前後で,作者により秒で却下されてる issue があったが,現段階で 2 日経っても却下されてないので,少し考えてくれてるんじゃないかと期待して気長に待ってみようかと思う. | ||
+ | [2023-11-15] | ||
+ | |||
+ | いちいち slack のウィンドウに戻るのが耐えられなかったので,slack にたいしての超アドホック対応を行なってみた. | ||
+ | 大まかには,chrome を remote-debugging mode で起動し,websocket 越しに,今編集している textarea へ Enter のキーイベントを javscript 実行により送る. | ||
+ | chrome の remote debugging mode は,localhost からの接続しか設定できないため,WSL2 emacs から Windows の chrome の間では,この方法は実現不可能となる.WSL1 の場合,Linux コマンドも Windows と同じユーザランドで動作しているため,通信できる. | ||
+ | |||
+ | |||
+ | まず,chrome を debug モードで起動させる.Windows ならショートカットのプロパティなどで,'' | ||
+ | |||
+ | < | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | 次に,emacs 上で,[[https:// | ||
+ | |||
+ | 次に,以下のコードが動かせるようにする.ちょうアドホックなので,このままでは多分動きません.「テキストを HTML 化しておく」と書いてある部分はまるごとなくても良いと思います.以下の2つの関数は,それぞれ別のオリジナル関数. | ||
+ | |||
+ | * (atomic-chrome-slack-send-buffer-modify) は,textarea 内のテキストにリストなどがあったら,対応する HTML に変化する関数 | ||
+ | * (my-atomic-chrome-send-buffer-text) atomic-chrome の中にある関数をラップしてるオリジナル関数.単に ghost-script の方に最新テキストを送るために呼び出している. | ||
+ | |||
+ | <code lisp> | ||
+ | (defun skk/ | ||
+ | (interactive) | ||
+ | ;; もし *chrome-tabs* バッファの中で chrome.el が動いてなかったら,バッファ内で動作させる | ||
+ | (setq edit-buffer (current-buffer)) | ||
+ | (chrome) | ||
+ | ;; 自分のバッファに戻ってくる | ||
+ | (switch-to-buffer edit-buffer) | ||
+ | |||
+ | ;; 作業バッファを *chrome-tabs* にする | ||
+ | (set-buffer " | ||
+ | |||
+ | ;; *chrome-tabs* バッファ内のタブリストをアップデートする | ||
+ | (chrome-retrieve-tabs) | ||
+ | |||
+ | ;; url が同じタブを見つける | ||
+ | ;; ~atomic-chrome 側で取得している url をここまで持ってくる~ | ||
+ | (setq tmp chrome--cached-tabs) | ||
+ | (setq keys ()) | ||
+ | (maphash (lambda (key value) | ||
+ | (if (string-match " | ||
+ | (setq keys (cons key keys))) | ||
+ | | ||
+ | tmp) | ||
+ | |||
+ | (message (format "num of slack chrome tab: %s" (length keys))) | ||
+ | ;; assuming only 1 app.slack.com exists | ||
+ | (setq value (gethash (car keys) tmp)) | ||
+ | |||
+ | ;; テキストを HTML 化しておく | ||
+ | ;; XXX [2023-11-11] save-current-buffer を利用しなければならないはず. | ||
+ | (set-buffer edit-buffer) | ||
+ | (setq tmp (atomic-chrome-slack-send-buffer-modify (buffer-substring-no-properties (point-min) (point-max)))) | ||
+ | (message (format " | ||
+ | (set-buffer edit-buffer) | ||
+ | (erase-buffer) | ||
+ | (insert tmp) | ||
+ | (my-atomic-chrome-send-buffer-text) | ||
+ | |||
+ | ;; タブに対して websocket を貼る | ||
+ | ;;(require ' | ||
+ | (setq skk/ | ||
+ | (websocket-open (concat | ||
+ | " | ||
+ | | ||
+ | :on-message (lambda (_websocket frame) | ||
+ | (message "ws frame: %S" | ||
+ | | ||
+ | :on-error (lambda (_websocket frame) | ||
+ | ;;(message " | ||
+ | (message " | ||
+ | ) | ||
+ | : | ||
+ | (message " | ||
+ | ) | ||
+ | |||
+ | )) | ||
+ | |||
+ | ;; Enter を送信する js コードを送り込んで実行する | ||
+ | (setq js-code "var hoge = document.getElementsByClassName(\\\" | ||
+ | for (i=0; hoge.length> | ||
+ | if(hoge[i].innerHTML.length != 0){ | ||
+ | var push_hoge = hoge[i]; | ||
+ | } | ||
+ | } | ||
+ | push_hoge.dispatchEvent(new KeyboardEvent(\\\" | ||
+ | key: \\\" | ||
+ | keyCode: 13, | ||
+ | })); | ||
+ | ") | ||
+ | |||
+ | ;; XXX [2023-11-11] json-encode を使うべき. | ||
+ | ;; (json-encode ' | ||
+ | ;; | ||
+ | ;; | ||
+ | (setq json-message (concat " | ||
+ | |||
+ | (sleep-for 0.1) ;; XXX WHY!?!? | ||
+ | ;;(message json-message) | ||
+ | (websocket-send-text skk/ | ||
+ | |||
+ | (websocket-close skk/ | ||
+ | |||
+ | ;; 送信したら,buffer 内をきれいにする | ||
+ | (set-buffer edit-buffer) | ||
+ | (erase-buffer) | ||
+ | |||
+ | ) | ||
+ | </ | ||
+ | |||
+ | 取り急ぎ,この関数を Ctrl-Enter に bind しておくと,なんとなく emacs 側からメッセージ送信ができている.できれば Ghost Script 側から,どの textarea 要素を編集しているのかの正確な情報が得られるなら,Enter のキーイベントを送りやすいし,JS コードを受けとってくれるなら,わざわざ remote-debugging を有効にしなくて良いので大変助かる,,,んだけどなあ. | ||
+ | |||
+ | 参考: | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
行 720: | 行 841: | ||
" | " | ||
</ | </ | ||
- | |||
- | === - latex export === | ||
- | org-mode で書いた文章を,LaTeX に export して,PDF にできる.頑張る人は論文まで書いている模様.MarkDown よりも org-mode の方が記述力が高い為,共同作業などをしない場合は,org-mode で記述する方が LaTeX コマンドを直接記述する割合を減らせる. | ||
- | |||
- | <TBD> | ||
行 833: | 行 949: | ||
==== - インストール ==== | ==== - インストール ==== | ||
- | M-x package-list-package から markdown-mode を選択してインストール. | + | M-x package-list-package から markdown-mode を選択してインストール.use-package を使う場合は,自動でインストールされるので,手動でのインストールは必要無い. |
==== - 設定 ==== | ==== - 設定 ==== | ||
行 854: | 行 970: | ||
- | ==== - pandoc で PDF 生成 [2023-10-12] ==== | + | [2023-11-16] |
+ | |||
+ | use-package を使うなら下記. | ||
+ | |||
+ | <code lisp> | ||
+ | (use-package markdown-mode | ||
+ | :ensure t | ||
+ | :after action-lock | ||
+ | :init | ||
+ | (add-to-list ' | ||
+ | (add-to-list ' | ||
+ | :hook | ||
+ | (markdown-mode . turn-off-auto-fill) | ||
+ | (markdown-mode . action-lock-mode) | ||
+ | ;; | ||
+ | :bind | ||
+ | (:map markdown-mode-map | ||
+ | ("C-c g" . grep-checkbox-in-md) | ||
+ | ("C-c C-y" . skk/ | ||
+ | : | ||
+ | (markdown-header-face-1 ((t (:inherit org-level-1)))) | ||
+ | (markdown-header-face-2 ((t (:inherit org-level-2)))) | ||
+ | (markdown-header-face-3 ((t (:inherit org-level-3)))) | ||
+ | (markdown-header-face-4 ((t (:inherit org-level-4)))) | ||
+ | (markdown-header-face-5 ((t (:inherit org-level-5)))) | ||
+ | (markdown-header-face-6 ((t (:inherit org-level-6)))) | ||
+ | |||
+ | ) | ||
+ | </ | ||
+ | |||
+ | ==== - 画像を貼りつける ==== | ||
+ | [2023-11-16] | ||
+ | |||
+ | org-mode のところで作った関数を markdown-mode でも使えるようにした. | ||
+ | |||
+ | <code lisp> | ||
+ | (defun skk/ | ||
+ | (interactive) | ||
+ | (skk/ | ||
+ | ) | ||
+ | </ | ||
+ | |||
+ | 画像の表示/ | ||
+ | |||
+ | 上のセクションに書いてあるように,'' | ||
+ | |||
+ | 表示される画像の最大サイズを指定したい場合は,以下のようにする.ただし,imagemagick オプション付きでコンパイルされていないと,縮小は動作しない.Ubuntu の場合はソースからコンパイルしたら良さそう.FreeBSD の場合は,ports でインストールする際のオプションで指定しておくと良さそう. | ||
+ | |||
+ | <code lisp> | ||
+ | (setq markdown-max-image-size '(1000 . 700)) | ||
+ | </ | ||
+ | |||
+ | ==== - pandoc で markdown から | ||
Windows のアプリで,markdown で書いたものを印刷するちょうどよいアプリが無い.アプリを買うのも嫌なので,pandoc を設定した.pandoc 自体の設定は [[https:// | Windows のアプリで,markdown で書いたものを印刷するちょうどよいアプリが無い.アプリを買うのも嫌なので,pandoc を設定した.pandoc 自体の設定は [[https:// | ||
行 878: | 行 1046: | ||
(buffer-file-name) | (buffer-file-name) | ||
" | " | ||
- | " | + | " |
" | " | ||
" | " | ||
行 888: | 行 1056: | ||
) | ) | ||
</ | </ | ||
+ | |||
+ | ------------------------------------------------------------ | ||
+ | ===== - markdown-preview-mode ===== | ||
+ | |||
+ | ==== - 概要 ==== | ||
+ | 基本的に,wiki/ | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | * on save/idle preview update | ||
+ | * scroll sync | ||
+ | * custom/ | ||
+ | * remote preview | ||
+ | * multiple simultaneous previews | ||
+ | |||
+ | CSS が適用できるのは当然として,スクロール追従をなんとなくしてくれるのは,思ったより便利かもしれない. | ||
+ | |||
+ | ==== - 設定 ==== | ||
+ | |||
+ | use-package の場合. | ||
+ | |||
+ | <code lisp> | ||
+ | (use-package markdown-preview-mode | ||
+ | :ensure t | ||
+ | :config | ||
+ | (setq markdown-command (list "/ | ||
+ | (setq markdown-preview-stylesheets (list (concat homedir " | ||
+ | </ | ||
+ | |||
+ | use-package を使わない場合. | ||
+ | |||
+ | <code lisp> | ||
+ | (require ' | ||
+ | (setq markdown-command (list "/ | ||
+ | (setq markdown-preview-stylesheets (list (concat homedir " | ||
+ | </ | ||
+ | |||
+ | pandoc 以外にも,markdown や multimarkdown という変換コマンドが存在している模様.pandoc はなんでも変換できるので便利だが,FreeBSD だと ports でインストールするのにでかいし,サイズもでかい.専用で考えるなら,他のコマンドを調べてもいいのかもしれない. | ||
+ | |||
+ | 今回は,redmine の markdown を編集したいので,似てる亜種の github markdown をベースにするために,'' | ||
+ | |||
+ | stylesheet は,redmine の css を持ってきて,以下の変更を加えると,ヘッダを除いた部分が redmine wiki とほぼ同じようになる. | ||
+ | |||
+ | + ''# | ||
+ | + body に background-color:# | ||
+ | |||
+ | redmine の CSS は'' | ||
+ | |||
+ | きれいな CSS の方が良ければ,https:// | ||
+ | |||
+ | 使いかたは,MarkDown を編集しているバッファで '' | ||
行 934: | 行 1153: | ||
画像を保存するディレクトリは,僕は,howm で管理されているディレクトリ以下でしか利用しないだろうから,howm のディレクトリ構成を前提に作っているが,いろいろなところにファイルが点在する人は,WSL 環境と Windows 環境のパス名の変換を正しく行ない,特定のフォルダに画像を保存するようにした方がよいと思われる. | 画像を保存するディレクトリは,僕は,howm で管理されているディレクトリ以下でしか利用しないだろうから,howm のディレクトリ構成を前提に作っているが,いろいろなところにファイルが点在する人は,WSL 環境と Windows 環境のパス名の変換を正しく行ない,特定のフォルダに画像を保存するようにした方がよいと思われる. | ||
+ | |||
+ | [2023-11-16] markdown でも画像ペーストができるように,少し修正. | ||
+ | 画像のインライン表示/ | ||
+ | |||
<code lisp> | <code lisp> | ||
(setq org-image-actual-width 700) ;; emacs 内での画像サイズを実サイズにしない | (setq org-image-actual-width 700) ;; emacs 内での画像サイズを実サイズにしない | ||
- | (defun skk/ | + | (defun skk/ |
+ | " | ||
+ | (interactive) | ||
+ | (skk/ | ||
+ | ) | ||
+ | |||
+ | (defun skk/ | ||
"Save a clipboard' | "Save a clipboard' | ||
in a specified directory and insert a link to this file." | in a specified directory and insert a link to this file." | ||
行 944: | 行 1173: | ||
;; XXX ホスト毎に以下は変更する | ;; XXX ホスト毎に以下は変更する | ||
(setq filedir " | (setq filedir " | ||
- | (setq unix_filedir "~/ | + | (setq unix_filedir |
;; latex に入れようとした時,dot が二つあると動作しないので,拡張子用以外の dot は _ にする. | ;; latex に入れようとした時,dot が二つあると動作しないので,拡張子用以外の dot は _ にする. | ||
行 957: | 行 1186: | ||
;; ../ | ;; ../ | ||
(if (file-exists-p (concat unix_filedir filename)) | (if (file-exists-p (concat unix_filedir filename)) | ||
- | (progn (insert (concat " | + | (progn |
- | | + | (cond |
+ | | ||
+ | | ||
+ | (org-display-inline-images)) | ||
+ | | ||
+ | (insert (concat " | ||
+ | (markdown-display-inline-images)) | ||
+ | )) | ||
(user-error | (user-error | ||
" | " | ||
行 966: | 行 1202: | ||
==== - PDF 生成 ==== | ==== - PDF 生成 ==== | ||
+ | |||
+ | org-mode で書いた文章は,HTML や MarkDown, LaTeX などに Export できる. | ||
+ | 多少の文章を作るのに,Word や Google Spreadsheet で作成しても良いのだが,テキストベースで残っている方が保存の観点からは安心なので,共同作業が求められない場合,僕は emacs で文章を書き,LaTeX に export した上で PDF にする機能をちょいちょい使っている.org-mode は MarkDown よりも記述力が高いので,そこそこ複雑な文章でも作成しやすいような気がする.世の中的には MarkDown の方が流行っているけれども. | ||
+ | |||
+ | === - 基本設定 === | ||
+ | |||
+ | org-latex-pdf-process で,呼び出す latex コマンドを指定する.もし,参照を使いたい人は,bibtex などもここで指定する必要がある.また,latexmk などを使って呼び出す内容をまとめておくのもよいかもしれない.僕はコマンドラインから呼び出すことはほぼないので,latexmk まで整備する必要はない. | ||
+ | |||
+ | org-latex-default-class は,org-latex-classes で指定された複数の class のうち,文章内で # | ||
+ | |||
+ | org-latex-classes には,複数のクラスを記述して追加しておく.以下の例で言えば,''" | ||
+ | |||
+ | <code lisp> | ||
+ | (use-package org | ||
+ | :ensure t ;; 多分イラナイ | ||
+ | :after action-lock | ||
+ | :init | ||
+ | (setq org-latex-default-class " | ||
+ | (setq org-latex-pdf-process | ||
+ | ' | ||
+ | " | ||
+ | " | ||
+ | (setq org-export-with-toc nil) ; \tableofcontents を出さない | ||
+ | (setq org-export-latex-date-format " | ||
+ | :hook | ||
+ | (org-mode . turn-off-auto-fill) | ||
+ | (org-mode . action-lock-mode) | ||
+ | :config | ||
+ | (add-hook ' | ||
+ | (add-hook ' | ||
+ | ) | ||
+ | |||
+ | (add-to-list ' | ||
+ | ' | ||
+ | " | ||
+ | \\setlength{\\topmargin}{15mm} | ||
+ | \\addtolength{\\topmargin}{-1in} | ||
+ | \\setlength{\\oddsidemargin}{20mm} | ||
+ | \\addtolength{\\oddsidemargin}{-1in} | ||
+ | \\setlength{\\evensidemargin}{15mm} | ||
+ | \\addtolength{\\evensidemargin}{-1in} | ||
+ | \\setlength{\\textwidth}{170mm} | ||
+ | \\setlength{\\textheight}{254mm} | ||
+ | \\setlength{\\headsep}{0mm} | ||
+ | \\setlength{\\headheight}{0mm} | ||
+ | \\setlength{\\topskip}{0mm} | ||
+ | \\usepackage{otf} | ||
+ | \\usepackage{fancyhdr} | ||
+ | \\usepackage[dvipdfmx]{graphicx, | ||
+ | \\usepackage{xytree} | ||
+ | \\usepackage{indentfirst} | ||
+ | \\usepackage{minijs} | ||
+ | \\usepackage[T1]{fontenc} | ||
+ | \\usepackage{lmodern} | ||
+ | \\pagestyle{plain} | ||
+ | \\makeatletter | ||
+ | \\西暦" | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ) | ||
+ | |||
+ | ) | ||
+ | |||
+ | </ | ||
+ | |||
+ | org の文章をエクスポートするには,'' | ||
+ | |||
+ | Windows の emacs で作業する際,PDF をオープンするために,毎回,howm で保存されてるフォルダにまでエクスプローラでたどり着くのがめんどくさいので,'' | ||
+ | |||
+ | <code lisp> | ||
+ | (global-set-key " | ||
+ | (defun open-current-file-dir-with-explore () | ||
+ | (interactive) | ||
+ | (my-action-lock-explorer-open (unix-path-to-windows (file-name-directory buffer-file-truename))) | ||
+ | ) | ||
+ | </ | ||
+ | |||
+ | 実際に文章を書く際は,文章毎にいくつかオプションをつけることになる.次の項目に僕が使う代表的なものをいくつか載せておくが,クラスを選ぶには,''# | ||
+ | |||
+ | |||
+ | === - 文章毎のオプション === | ||
+ | |||
+ | < | ||
+ | #+TITLE: 文章のタイトル | ||
+ | #+AUTHOR: skk | ||
+ | # | ||
+ | * セクション | ||
+ | 内容内容. | ||
+ | </ | ||
+ | |||
+ | のように書く.オプションは以下のようなものがある. | ||
+ | |||
+ | ^ コマンド | ||
+ | | #+TITLE: タイトル文字 | ||
+ | | #+AUTHOR: 著者 | ||
+ | | #+DATE: \today | ||
+ | | #+OPTIONS: H:2 toc:nil num:t | | | ||
+ | | #+LANGUAGE: ja | ||
+ | | # | ||
<TBD> | <TBD> | ||
- | コマンドメモ: | + | === - latex engine の切替え === |
- | * C-e C-p:変換先の候補を出す | + | |
- | * l p:PDF を出力する | + | 僕は 2000 年代頭くらいの状態のまま LaTeX を使っていたので,platex を使っていたのだが,ここ最近は,lualatex,uplatex, |
+ | これと同じように,documentclass で指定するクラスも,jarticle ではなく,jsarticle や bxjsarticle などを使うのが主流になってきている模様. | ||
+ | |||
+ | 年賀状で原の味フォントを使うのなんかも,platex のままで動作してたので,問題ないのかもしれないが,せっかくちょっとずついじるなら, jsarticle などを使っていってみたいと思う. | ||
+ | |||
+ | ただ,その際,jarticle ベースで設定していたフォーマットと,jsarticle でこれから育てていくフォーマットを共存させたくなってくるので,latex class に応じて呼び出されるコマンドを変更したいと考えた. | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | ここのコードを拝借して,以下のように書いてみたら,切替がうまく言ったような気がする. | ||
+ | |||
+ | <code lisp> | ||
+ | |||
+ | (use-package org | ||
+ | ... | ||
+ | :hook | ||
+ | (add-hook ' | ||
+ | ) | ||
+ | |||
+ | (defun skk/ | ||
+ | (message " | ||
+ | ;; [2025-01-12] | ||
+ | ;; https:// | ||
+ | (setq current-latex-class | ||
+ | (cdr (assoc " | ||
+ | (org-element-map (org-element-parse-buffer ' | ||
+ | (lambda (keyword) (cons (org-element-property :key keyword) | ||
+ | (org-element-property :value keyword))))))) | ||
+ | (if (eq current-latex-class nil) | ||
+ | (setq current-latex-class org-latex-default-class)) | ||
+ | |||
+ | (cond ((string-match current-latex-class " | ||
+ | (setq org-latex-pdf-process | ||
+ | ' | ||
+ | " | ||
+ | " | ||
+ | | ||
+ | | ||
+ | | ||
+ | ((string-match current-latex-class " | ||
+ | (setq org-latex-pdf-process | ||
+ | ' | ||
+ | " | ||
+ | " | ||
+ | | ||
+ | | ||
+ | | ||
+ | ((string-match current-latex-class " | ||
+ | (setq org-latex-pdf-process | ||
+ | ' | ||
+ | " | ||
+ | " | ||
+ | | ||
+ | | ||
+ | | ||
+ | ) | ||
+ | ) | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | '' | ||
+ | |||
+ | 備考:[[https:// | ||
+ | |||
+ | === - beamer === | ||
+ | LaTeX の beamer クラスは,スライドを LaTeX で作成するためのクラス.org で箇条書したものを beamer で export すると,スライドにしやすい.ox-beamer というパッケージを使いつつ export できる. | ||
+ | |||
+ | beamer の LaTeX 的な記法は,[[latex]] に記載予定. | ||
+ | |||
+ | <TBD> | ||
==== - tbl 関係 | ==== - tbl 関係 | ||
行 1839: | 行 2247: | ||
* http:// | * http:// | ||
+ | ====== - 自作機能 ====== | ||
+ | ===== - 今開いているファイルまたはフォルダをエクスプローラで開く ===== | ||
+ | [2023-12-13] | ||
+ | WSL1 環境において emacs を利用中,Windows 側のファイルをいじることがあるが,そのファイルがあるフォルダをエクスプローラで開きたい時がある.たとえば,org-mode で文章を書いていて,PDF export した時,PDF を Acrobat など Windows 側のアプリで見る,など. | ||
+ | |||
+ | 以下のコードで,今開いているフォルダを開くならば,'' | ||
+ | |||
+ | <code lisp> | ||
+ | (global-set-key " | ||
+ | (global-set-key " | ||
+ | |||
+ | ;; (set-drvfs-alist) は,https:// | ||
+ | (defun set-drvfs-alist () | ||
+ | (interactive) | ||
+ | (setq drvfs-alist | ||
+ | (mapcar | ||
+ | | ||
+ | (when (string-match " | ||
+ | (cons (match-string 1 x) (match-string 2 x)))) | ||
+ | | ||
+ | ;; //wsl$ or // | ||
+ | (when (or (not (string-match " | ||
+ | (>= (string-to-number (nth 1 (split-string operating-system-release " | ||
+ | (concat "/ | ||
+ | (shell-command-to-string | ||
+ | | ||
+ | "mount | grep -E 'type (drvfs|cifs)' | ||
+ | "mount | grep ' | ||
+ | " | ||
+ | |||
+ | (set-drvfs-alist) | ||
+ | |||
+ | (defun my-action-lock-explorer-open (url) | ||
+ | (message (concat "/ | ||
+ | (start-process " | ||
+ | (setq action-lock-default-rules | ||
+ | (cons (action-lock-general ' | ||
+ | " | ||
+ | 1) | ||
+ | action-lock-default-rules)) | ||
+ | |||
+ | (defun unix-path-to-windows (unix-path) | ||
+ | "WSL unix path を windows に変換する" | ||
+ | (let ((unix-path-prefix "" | ||
+ | (ret "" | ||
+ | (mapcar (lambda (x) | ||
+ | (setq unix-path-prefix (car x)) | ||
+ | (unless (string= unix-path-prefix "/" | ||
+ | (if (string-match unix-path-prefix unix-path) | ||
+ | (setq ret (concat | ||
+ | (cdr (assoc unix-path-prefix drvfs-alist)) | ||
+ | | ||
+ | | ||
+ | unix-path-prefix "" | ||
+ | drvfs-alist) | ||
+ | ret)) | ||
+ | |||
+ | (defun open-current-file-dir-with-explore () | ||
+ | (interactive) | ||
+ | (my-action-lock-explorer-open (unix-path-to-windows (file-name-directory buffer-file-truename)))) | ||
+ | |||
+ | (defun open-current-file-with-explore () | ||
+ | (interactive) | ||
+ | (my-action-lock-explorer-open (unix-path-to-windows buffer-file-truename))) | ||
+ | </ | ||
行 1875: | 行 2348: | ||
* apt などパッケージで入れても良い. | * apt などパッケージで入れても良い. | ||
* emacs 28 から登場した native compilation は,elisp の動作が 100 倍レベルで速くなるそうなので,もし利用している OS のパッケージが 28 になっていなかったら,自分でコンパイルして入れても良いかもしれない. | * emacs 28 から登場した native compilation は,elisp の動作が 100 倍レベルで速くなるそうなので,もし利用している OS のパッケージが 28 になっていなかったら,自分でコンパイルして入れても良いかもしれない. | ||
+ | |||
+ | 参考: | ||
+ | |||
+ | <code bash> | ||
+ | % sudo apt-get install libwebkit2gtk-4.0-dev libgccjit-8-dev | ||
+ | % CPPFLAGS=' | ||
+ | </ | ||
==== - X の設定 ==== | ==== - X の設定 ==== | ||
行 2418: | 行 2898: | ||
<code lisp> | <code lisp> | ||
- | (replace-regexp-in-string " | + | (replace-regexp-in-string "\\\.md" " |
</ | </ | ||