Emacs Part 54
eggが使えるかぎりどんどんバージョンアップしてもらってかまわない IDEが便利で強力になっても システム標準でviが必修でも VSCodeが流行しても Emacsは常に生き残ってきたじゃないか emacsを長らく使ってます(テキスト書き、プログラミングなどメイン使いのエディタ)。 何か新しいもの触ってみたくて spacemacs と doomemacsを知ったのですが、どっちがおすすめですか? (どっちがメンテされてる、など) >>10 どちらもクレカの番号を抜けないのでおすすめできません。 WSL の emacs(GNU Emacs 25.2.2 (x86_64-pc-linux-gnu) of 2017-09-23, modified by Debian)に markdown-mode 入れようとしてるんだが、packagelist 上では markdown-mode 20221105.236 incompat melpa Major mode for Markdown-formatted text と表示されてインストールできない。 何か互換性の問題ってあったっけ? Version: 20221105.236 Summary: Major mode for Markdown-formatted text Requires: emacs-26.1 って出てるな。 いまだに Windows XP 使い続けてる老人と一緒でしょ 次のように引数の必要な関数を関数名のシンボルの代わりに指定するときに、 lambda式で書くとエラーになる場合はどうするのがいいんでしょうか? Wrong type argument: symbolp, #'(lambda nil (dabbrev-expand nil)) (setq smart-tab-completion-functions-alist '((emacs-lisp-mode . lisp-complete-symbol) (lisp-interaction-mode . lisp-complete-symbol) (text-mode . #'(lambda () (dabbrev-expand nil))))) # この例では実際にはこの設定は不要なんですが、 # いじっているうちに疑問が出てきたので一例として。 うーん多分それ先頭の#'全く場違いなんじゃね? それシンボルのfunctionPartにアクセスするfunctionというかaliasというかsyntax sugarというべきかのものだしquoteされてたらそもそもなんも意味をなさん quote内部のpartial evalみたいのは先頭をbackquoteにして`(sym1 sym2 ,evaled)みたいに先頭にcommaを付記する defmacroとかのときによく使う手法だな。まぁ、俺はlispyじゃないと思うからあんま好きじゃないけど 単純に(list (cons 'someone 'something) (cons 'anyone (lambda (x) (some-over x))))みたいに書くか `((someone . something) (anyone . ,(lambda (x) (some-over x))とかじゃね(´・ω・`) まだよく理解できていないので一部だけ補足しますが、 #'(lammda ...は(lambda ...でも一緒なのかと思ったんですが。 https://www.gnu.org/software/emacs/manual/html_node/elisp/Anonymous-Functions.html で、そもそもこんな風に書いたのは次のような書法を参考にしたんですが、 どうもここではまずいようです。 (add-hook 'text-mode-hook (lambda ... )) いまいち何が解決出来ないのか何が分からんのかが分からんな ただhookにlambdaぶち込みたいならfbody 先頭に (lambda () (interactive) (insert "hello hook fucker"))みたいにinteractive宣言が要るぞ lambdaのargumentが必要な場合はこのinteractiveのargumentに別途それらにアサインする関数というか糞stringというかlist返すexpression書くんだけどこまけえ事は説明めんどい(´・ω・`) (quote symbol)は評価されないとsymbolにならないように、(function (lambda () ...) も評価されないと関数にならない。 >>20 評価される文脈なら一緒だけどリストの中にある場合はそうも行かない。 lambdaはそのままで関数として機能する(funcallできる)からややこしいのかな。 symbolは評価すると変数の値になってしまうけどlambdaは、まあ、closureになったりはするものの関数のままだしクォートの必要性を感じづらいというか。 >>19 >>22 何となく引っかかっていたところがちょっとわかりかけました。 lambda式が評価せずそのまま飲み込んで関数として定義されていないことが、 関数名のシンボルを要求する文脈ではエラーになると。 ではつまり関数として定義してしまうしかないということですかね? >>23 文脈と書いたのは>>18 の#'(の部分が評価されない文脈だから。なぜなら'(で囲まれてる中だからね。 #'(lambda () ...)は(function (lambda () ...)の略記だから(ここが分かってない?) '(の中ではそのまま一つ目の要素がシンボルfunctionで二つ目の要素が(lambda~のリストになってしまう。そしてそれはfuncall出来ない。例:(funcall '(function (lambda () 123))) 解決策は'(を使わずリストを組み立てることで、>>19 や>>24 が言うように(listやバッククォートでリストを組み立てること。シンボルだけで無く、(functionで囲まれていない)lambda(やそれを評価すると出来るclosure)も問題なく使える。 まあdefunして良いならそれでもOK。 >>25 中途半端にあれこれ聞いてお手間を取らせました。 まだろくにわかってないんですが、 疑問は疑問としてとりあえずこうすると動きます。 consだといいの?何だか不思議だなあ。 (setq smart-tab-completion-functions-alist '((emacs-lisp-mode . lisp-complete-symbol) (lisp-interaction-mode . lisp-complete-symbol) (cons 'text-mode (lambda () (dabbrev-expand nil))))) そうみたいですね。評価したら結果が変でした。 デフォルトでdabbrev-expandが呼ばれる仕様なんだった。 多分、こういうことだろうと思うんですが、 (setq smart-tab-completion-functions-alist `((emacs-lisp-mode . lisp-complete-symbol) (lisp-interaction-mode . lisp-complete-symbol) (text-mode . ,(lambda () (dabbrev-expand nil))) )) 今回の場合は条件がfboundpでチェックされるので同じエラーになりますが、 cond: Wrong type argument: symbolp, (lambda nil (dabbrev-expand nil)) これがなければfuncall以下はちゃんと動きます。 (cond ((fboundp smart-tab-mode-specific-completion-function) (funcall smart-tab-mode-specific-completion-function)) むしろその場合はこうするだけでいいんですね。 (setq smart-tab-completion-functions-alist '((emacs-lisp-mode . lisp-complete-symbol) (lisp-interaction-mode . lisp-complete-symbol) (text-mode . (lambda () (dabbrev-expand nil))))) >>19 > うーん多分それ先頭の#'全く場違いなんじゃね? そもそも最初に指摘されていたこの点がまずかったと。 評価されたら (lambda 〜) も #'(lambda 〜) も完全に等価だよね 何かの拍子で特定のバッファ(やてふモード)を閉じれなくなりました * Message *を確認すると以下のメッセージが出ます bm-buffer-save: Wrong type argument: listp, \.\.\. 他のやてふモードのバッファは問題ありません とりあえず当該バッファを閉じたいと思い *scratch*で (remove-hook 'after-save-hook 'bm-buffer-save) したのですが何ともなりません 何か解決方法はないでしょうか? どこでどう評価するかでは clのlambdaは評価するとレキシカルクロージャに化けるマクロだけど、(coerce '(lambda ...) 'function)でキャストすればcoerceはfunctionのように特殊形式でないからローカル関数を補足できないはず el的にはどうだっけ? そもそもクォートされたラムダ式を単にフォームとして受け取り、自分で勝手に解釈するだって全然アリ >>32 kill-buffer-hook とかじゃなくていいの? >>34 ああ!そうですね! ボケボケでした (remove-hook 'kill-buffer-hook 'bm-buffer-save) で閉じれました ただ今度は当該ファイルをfind-fileすると 初回に以下のエラーメッセージが出ます bm-buffer-restore: Wrong type argument: number-or-marker-p, nil 連続で2回当該ファイルをfind-fileすると開くので問題はないのですが これはbmのキャッシュが不整合を起こしているということでしょうかね? 前スレでDebianのunstableでEmacsパッケージのnative compilationが有効化されたって話があったけど その後色々問題があったものの解決されて有効化されたバージョンがTestingにやってきた模様 というわけでこのまま行けば来年出るであろうDebianの次の安定版ではEmacsパッケージは デフォルトでnative compilationが有効化されたものになるわけだ キャッシュのsaveにprincを使っていて print-lengthより長いリストが...になっているかもしれない (let ((aaa (list '(a) '(a) '(a))) (print-length 2)) (princ aaa)) ; => ((a) (a) ...) native compilationを有効にすると、 確かにごく偶に何も言わずに落ちることがあるから、 まったく問題がないわけでもないのかな。 まあ、最後に落ちたのも一月以上前だったりするけど。 companyと*Completions*バッファについて教えてください。 (use-package company)としてcompanyを使うようにすると、補完がcompany経由で行われる?と聞いたのですが、 例えば、 M-x shell ls ./[TAB] とすると、*Completions*バッファ内にカレントディレクトリのファイルが表示されます。 これはcompanyモードが効いてないのでしょうか?それともcompanyが補完するのは、こういう類の補完ではそもそもないのでしょうか? バッファでcompany-modeが有効になってないかキーバインドが定義されてないとか。 M-x company-completeするとどうなりますか? >>41 返信ありがとうございます。 shellのバッファで「M-x company-complete」するとカーソル位置で補完候補が現れました。 同じバッファでM-x describe-modeをすると、一覧にCompanyとGlobal-Companyが出てきています。 これは、単にキーバインドが定義されてないってことでしょうか? M-x describe-key で[TAB]押すとどうなんだろうか (global-company-mode 1) とかやっとけばいいんでないの? >>42 use-packageを使ってませんが、 とりあえずglobal-company-modeは有効にされてるんだと思います。 M-x company-completeで手動では起動できるわけだから、 どのキーにバインドするかは設定が必要だろうし、 tabでデフォルトのshellの補完を奪っていいかどうかも自分次第かと。 返信ありがとうございます。 >>43 ls ./[ここでdescribe-key TAB]すると、(completion-at-point)にバウンドされてるようです。 >>44 >>45 describe-modeした際にglobal-companyが出てきてるので、global-company-modeは有効になっているように見えます。 >どのキーにバインドするかは設定が必要だろうし、 >tabでデフォルトのshellの補完を奪っていいかどうかも自分次第かと。 なるほど。tabに対してキーバインドは設定していませんでした。 このあたりの仕組みがよくわかってないもので、company-modeを有効にすると自動的に*Completions*バッファが ツールチップで補完表示されるものかと思ってましたが、そういうものではなく、 自分で設定する必要があるんですね。 >>46 普段company-idle-delayをnilに設定してキーで起動していたので勘違いしましたが、 デフォルトのままだと入力するそばから自動的に補完候補を表示しますね。 私はそれが煩わしいので手動で起動するようにしてたんですが、 何かの設定がうまくいってないんですかね? >>47 頂いた情報を参考に色々調整した結果、 (setq company-idle-delay 0) (setq company-minimum-prefix-length 0) 上記設定を追加してみると、shellバッファで文字を打つたびに補完候補が表示されるようになりました。 試しに、 (setq company-minimum-prefix-length 5) とした場合、 (5文字未満) ls ./[TAB] # *Completions*バッファが表示される。 (5文字以上) ls ./../[TAB] # companyで補完候補が表示される。 という挙動になりました。 私がcompanyの機能を勘違いしている気がしてきました。 companyはemacs従来の「*Completions*バッファが表示される」動きをまるまる置き換えるものと思ってましたが、 そんなことはなく*Completions*バッファが表示されてしまう場面を完全に無くせるわけではないのでしょうか? companyは既存の設定だけでなく、 最終的には自分で補完に使用するbackendsまで作成すればほとんどどんな動作にもできるはずですが、 お話のようにデフォルトの補完completion-at-pointをcompanyで置き換えたいだけなら、 パッケージに同梱されたcompany-capfをcompany-backendsに設定すればよさそうですけどね。 company-backendsは以下のように設定されていました。 (company-bbdb company-semantic company-capf company-files (company-dabbrev-code company-gtags company-etags company-keywords) company-oddmuse company-dabbrev) リストの中にリストが含まれてるのが怪しいのですが、一応company-capfは入っているようです。 一つ気になったのが、 (use-package company :config ((global-set-key (kbd "TAB") 'company-complete)) と設定しても、shellバッファでdescribe-key [TAB]をすると、設定されているのは (completion-at-point) となっていました。これはキーバインドの設定の方が間違っている可能性がありますか? 質問ばかりですいません。 >>51 infoというのが、companyの公式ページの話であれば読んではいるもののなかなか理解できず苦労してます。 「emacsの情報」という意味であれば、すいません、emacsを使い始めたばかりなので拾いきれてないですね >>51 じゃないけど M-x info のことを言ってると思われ セルフドキュメント方式、てのがググれない時代からあるEmacsの思想の一つなんだわ で、そういった思想とか調べ方もinfoの中に書いてあった気がする 日本語の方が良いなら Emacs 日本語マニュアル インストール あたりでググれ companyモード用のinfoがあるかは知らん 公式のマニュアルにサンプルもあるのでまずそれを試してみては。 https://company-mode.github.io/manual/ とりあえずキーバインドを定義しなくても、 以下のcompany-backendsのサンプルで概ね希望通りの動作になるのでは? https://company-mode.github.io/manual/Backends.html#Package-Backends (setq company-backends '((company-capf company-dabbrev-code))) 最近font-lock-modeの仕様が変わった? wanderlustのsummaryでfont lockが効かなくなった、 というか挙動が変なような。 >>55 古いバージョンを戻して切り分けてみたら? 少なくともEmacsかそれ以外か分かれば すぐに思い浮かばなかったけどwhitespace.el関連の変更が原因でした。 細かい原因はまだ調べてないけど、 とりあえずwhitespace-global-modesから除外すればよさそう。 多分、これが原因だから年末頃? whitespace: Use `define-globalized-minor-mode' for global mode * lisp/whitespace.el (global-whitespace-mode): Fix interoperability between `whitespace-mode' and `global-whitespace-mode' by using `define-globalized-minor-mode'. (Bug#60334) * test/lisp/whitespace-tests.el (whitespace-tests--global): Add a regression test. >>58 戻って留まれ。自分が新しいものについていく必要があるとかついていく能力があるとかいう心得違いをしないこと。世界は君を中心に回っていない(甚だ遺憾であろうとは察する 戻って留まるにしても、そのための能力が必要なんよな 新しいOSで古いものについていく能力がないと、古いものさえビルドできない みんなDocker使ってるの? Emacs使いはエディタが環境だろ >>63 凡人がdockerでやってることをEmacsで再現できてるなら画期的すぎるから、そのノウハウをシェアしたらめちゃくちゃPV取れると思うよ Software Design辺りで連載の依頼も来るかもしれない USB起動のLinuxみたいなモン 一旦インスコとか設定をしたら別PCで 全く同じように動かせる 建前上ではそうなってる docker = chrootの化け物(ファイルシステムだけじゃなくプロセス空間も分けるよ的な) >>60 新しいものが道具として洗練されているとは限らない グーグルのための野暮な改悪は新しいとは言わない つか28はちょっと酷いなあ ネイティブコンパイルってそんなに有り難いもんなのか? .elファイルをコンパイルして.elcにしたら 物凄く速くなったことある 28速いか? むしろ遅くなってるように感じられるが? elnを生成している間は当然前より遅いけど、終わってしまえば遅いってことはないだろう 体感的にはとても速いと思っている 無能なのでベンチ取る気はない つか、ネイティブコンパイルなら早いって発想も随分とまあ、経験浅いのねぇw Native compileかあれはデフォオプション来るなら28で更新止めるな 本当にあれはイラン おま環かもしれんがpackage list packageとかやるごとにフリーズするかlaptopファン大回転始めるわで全く話にならんかった(´・ω・`) >>80 ビルドするスレッド数を制限しろ 当然、native-comp-async-jobs-numberぐらいを試した上で、文句を言っているよな? わが家の貧弱な環境でもデフォルト値のままで一時的に重くなるくらいだから、 もっと根本的な問題があるんじゃない? mozc.elを入れたんだけど、(setq mozc-candidate-style 'overlay)としても変換候補がミニバッファに表示される。 おまかん? emacs -nwで起動してみたけど入力している所の一行下に表示されるな overlay遅いのでmozc-popupっての使うといい posframe一度使ってみたけどpopupに戻した (let* ((l '((:p 'a) (:p 'b)))) (dolist (i l) (print (symbolp (plist-get i :p))))) :pに対応する'aと'bを順番取りたいんですが、出力がnilと表示されます。 l=プロパティリストのリスト i=プロパティリスト になると思ったので、plist-getで:pのペアになっているシンボルが変えると思ったのですが、 何が間違ってるんでしょうか? (let* ((l '((:p a) (:p b)))) にしたら? key重複alistならmap-remove? prop重複plistならalistに変換するかmapcarで丁寧に処理する? >>95 あざます。できました。クォートよくわからん・・・ 質問があります。 regionを適切にインデントするには、M-x indent-region か C-M-\ を押しますが、整形したいregionを選択している状態でtabキーを押すと、同じような挙動をすることに気がつきました。 もしかして、regionを選択してtabキーを押すと、indent-region と同じ事が実行されるのでしょうか? であれば、C-M-\ の代わりにtabキーを押すようにしようと思うのですが... 環境: Emacs 28.1 Mac(monterey) indent-for-tab-command でヘルプ引け 質問があります org-modeでアーカイブ先を変更するにはどうすればよいでしょうか? hoge_archive から org-directory/archives/hoge_YYYY に変更したいです https://repl.info/archives/52/ を読んで (setq org-archive-location (concat org-directory "/archives/“%s_archive_” (format-time-string “%Y” (current-time)")) としてみましたがorg-archive--compute-location: Invalid archive location: "~/Dropbox/emacs/org/archives/“%s_archive_” (format-time-string “%Y” (current-time)" とのエラーが出ます GNU Emacs 27.1 org-mode 9.6です。よろしくお願いします EmacsでLSP使ってる方いらっしゃいますか? LSPにおける「プロジェクト」という単位が何を指すのか分かりません。 Emacsはただのエディタですから、ファイル単位で編集を行いたいのですが、LSPを使うならば全てのファイルは何らかのプロジェクトに属しているべき、ということなのでしょうか? >>102 > LSPを使うならば全てのファイルは何らかのプロジェクトに属しているべき 基本的に Yes language server によっては単ファイルでいけるやつもある気がする (setq org-archive-location (concat org-directory "/archives/“%s_archive_” (format-time-string “%Y” (current-time)::")) とすると今度は org-archive--compute-location: Not enough arguments for format string なんもわからん >>103 たった一つのファイルを編集するときってどうされてます? いちいちプロジェクトを切るのもなあと思ってしまいます。 一般ファイル用のプロジェクトを作っておいて何でもかんでもそこに放り込むって感じですかね? >>101 Emacsもorg-modeもなく机上ですが…S式すら閉じてませんね。もしや (setq org-archive-location (concat "org-directory/archives/%s_" (format-time-string "%Y" (current-time)) "::")) とかするのでは? 上手くいきました お手数おかけしました。ありがとうございます。 突然ゴミになるほど大した変化も無いがなw 何があったんだよ ほっとのがいい Emacs 28リリースあたりの時期から、本人のメンタルがヤバくなっただけかもしれんから LinusやRuby松本が愛用してる素晴らしいエディタ >>111 ソフトウェア板にあったけど最近荒らしの埋め立てで落ちてそれっきり Emacsの対話セラピー機能doctorをChatGPTに対応させる https://blog.symdon.info/posts/1673355987/ 堕落してしまいそう まだ事実と異なることをたびたび返すので信用できないが この技術の延長には文章作成をemacs-doctorに投げて 返答を校閲して完成って未来になる インターフェースがwebだとまだ利用に距離があったが emacsから使えるとなると 俺は一気に仕事で利用するようになってしまいそう >>117 textlintがそうなっているから、 そんなに遠くない未来で、そうなると思う ぶっちゃけ、ジャストシステムのJustRight Pro、アレがWindowsのあのGUIでしか使えないのがもったいなさすぎる >>115 は履歴が保持されないようなので shell-modeで以下を呼ぶ方が良いかな https://qiita.com/kaz2ngt/items/d26dd572bd82fcd3dfd3 すれ違いになりそうなのでこの辺でやめとく xwidget-webkit-browse-url って常用してる人いる? Debianの28.2をビルドしてみたけどなんかバギーだな フォーカスが別のバッファにあるときは描画が消えたり youtubeトップページは表示されるも動画が再生されず w3mみたいにカーソルをキーボードで移動して クリックできるのかと思いきやマウス前提なのかな? 画像とPDF見れるのは知ってたけど 動画も観れたのか emacs は何でもできるが、バグをだましだましやっと使えるような状態で 開発がとまってたりとかいう場合も多いよな・・・ それはemacsに限らずに、Kernel開発やプログラミング言語の開発なら、普通な状態だけど? いまのスマートフォンゲームなんかだったら、もっと酷くて、バグをかかえたままリリースしとるんやん android版emacsってあるの? gnu公式ページにないんだけど、f-droidには置いてるんだよな https://www.gnu.org/software/emacs/ このfdroidのemacsって本当にgnu.orgが公式で作ってるもんなの? それとも誰かが勝手にgnu.orgの名前使って作ってるだけ? Emacs (The extensible self-documenting text editor) https://f-droid.org/packages/org.gnu.emacs/ どうなんでしょう? 教えてください ものすごい前にAndroid版Emacsを配布してたことが有ったが、今f-droidで配布してるのは最近のAndroidブランチのやつっぽい けど、権限に連絡先の読み取りとかあるし、入れるのは遠慮したいw >>128 ここで質問せずに、 The Free Software Foundationに聞いてみたらどうですか? Emacsに限らずスマホにキーボード繋げば あとはPCと同じように使える Emacs 30.0.50にしたら起動時にset-frame-fontの設定が適用されない? 起動後にevalしたら普通に有効になる。 自分で unstable 使ってるんだからこんなところに書くんじゃなくてメーリングリストに投げろ androidで使ってるけど、ストアにcli環境は無数にあれど、ビルドするのはかなり面倒 gcc/clangや仮想環境入れるとギガで済まないし躊躇われる 一応システムライブラリも/systemに入ってて引けるんだけど、引き方が分からんからarmサポートしてて独自の(ミニマルな)libcとリンカ、アーカイバ、アセンブラ一式持ってるtccから初めるのがオススメ >>136 おー、今試してる 半分だけ仮想環境みたいな感じか 200MBと結構容量食うが、パッケージマネージャは簡便 スクリーンキーボードをカスタムしなくとも、UIにctrl/meta付きなのもいい しかしリポジトリにコンパイラがgcc/clangしかない?、小さいコード書いて試すにも結局ギガ食いそうな予感 あ、ファイルシステム上にあるから既存のtccを呼べたわ 万事解決 スマホで開発しようとする物好きとみるか 勉強熱心な技術者の鑑とみるか どちらと見るかは貴方次第!! (´・ω・`)9m 今のスマホは馬鹿に出来ないよ 俺のメインPCの半分ぐらいの性能だ メインPCが大したことないかもだけど、一昔前のPCよりは確実に性能がいい Windows7時代のPCぐらいかね orgモードで、 #+A: hogehoge とかプロパティを定義したときに、 文章のなかから、Aを参照して「hogehoge」を表示する、みたいな機能ないですか? org modeってやたら聞く名前だけどMarkdown書くときに使うメジャーモードなんあれ?(´・ω・`) >>141 プロパティの構文はともかく、src_elisp{(org-entry-get nil "A" t)} みたいなやり方くらいかなぁ >>143 ああマクロでもいいのか #+MACRO: prop-a (eval (org-entry-get nil "A" t)) {{{prop-a}}} それにしても#+PROPERTY:はファイルを開き直さないと反映されないっぽい(?) >>144 あざます。 プロパティっていうのは、org文書内であれこれするものではないんですかねー EmacsのWindowsバイナリをGNU公式で配布してるのね >>148 ChatGPTにelispを書いてもらったらええんちゃう?(シランケド 1980年代にRacterというプログラムが本を出版してたけど、ChatGPTはやらんのかな。 Racter の当時は技術的限界が大きぃて実用ソフトというより、あくまでも娯楽用に わざと偏屈物で皮肉屋で衒学趣味なキャラクターを作ってたから 答えがトンチンカンでも面白みがあった ChatGPTはもうある程度実用性が実現できてしまって、そういう小手先の細工をしなくてもよくなった分 逆に昔の人口無脳みたいな面白みはあんまりないよな・・・ >>152 コメント作るの楽に? どこまで意図と合致するか次第だけど chatgptなんざ所詮まだまだelizaに毛が生えた程度のもんやで クリエイティブな知能には程遠いわw 無理して分かったふりせんでええねんキミらw org-modeで質問です フレーム内に単一のウィンドがある状況で org-open-at-point するとフレームが上下に分割されます これを左右に分割するようにしたいのですが パラメータ一つで変わったりしませんかね? 左右に並べたいのは org-open-at-point で開いたときだけ? もし常に左右に並べていいならこんな感じだけど (setq split-width-threshold 80) フレームの幅がこの値以上のとき、分割されたウィンドウは左右に並びます(既定値は 160) 特定のコマンドから開くときだけ左右に並べる、みたいな設定はどうするのが正道だろうね 特定のバッファを開くときの設定は display-buffer-alist だと思うけど display-buffer まわりは複雑過ぎて分からない コマンドじゃなくてメジャーモード毎に split-width-threshold を設定する手もあるかな ;; org-mode のバッファからウィンドウを開くときはフレーム幅が多少狭くて ;; もなるべく左右に分割する。 (add-hook 'org-mode-hook (lambda () (setq-local split-width-threshold 80))) >>164 ,165 ありがとうございます >>164 で十分です macOS venturaで https://emacs-jp.github.io/tips/emacs-in-2020 を参考に設定しているんだけど flycheckがclangルールでチェックしてるっぽい (c/c++-clangと出てくる) homebrewでgccをインストールして、 /usr/local/bin/にg++とgccのソフトリンクをはって g++ --version をすると、gcc g++が出てくる。 どうすれば、GNU g++ルールでflycheckしてくれるの? bits/stdc++.hが問題なく使いたいよ(T T) いろいろ調べたけど、 includeパスにbits/stdc++.hを作ってという方法をやっているのね。 いろいろ不具合起こしそうなので、 テンプレートに#includeゴリゴリ書いてきます ありがと ネットワーク越しにemacsを使っています kill-regionする範囲を選択中に(矩形で範囲を表示) カーソルの移動速度が遅くなってしまうのですが 何か改善はできないでしょうかね? (範囲選択中ではないときのカーソル移動は十分速いです) 遅くなるのはカーソルが移動するごとに選択範囲の矩形が変わり その度に重めの通信をしているような気がするので これを回避するような設定が出来れば嬉しいです 書いてて思ったのですがホスト側で--daemonで動かしたemacsに リモート側で起動したemacsclientで接続できれば解決するような気がします >>170 要望にかなってるかは分からないが私は (setq transient-mark-mode nil) してる。 >>170 クライアント側でemacs動かせるんであれば、trampを使う >>171 要望ドンピシャです >>172 有難うございます trampが使える場面では使ってきました しかしリモートからホスト側でCompilationモードで開発したりしたいので ホスト側のemacsを起動したいと思っています TCP emacs serverがもう少しでできそうなので頑張ってみます 通信は出来ているようだけどフレームが現れない... >>173 >TCP emacs serverがもう少しでできそうなので頑張ってみます >通信は出来ているようだけどフレームが現れない... ファイアウォールが邪魔してるようでした こんな機能まであるとは... emacsは凄いなぁ リモートで起動したTCP emacs serverに ローカル側からemacsclientで繋ぐ方法は出来たのですが >170(選択中だとカーソルが激遅)は改善されませんでした orz >>171 だと選択範囲が広いときにどこを選択中なのか見失うのが難点ですが 私にとってはベターな解決法のようです ありがとうございました >>170 TERMの設定が悪くて 選択範囲部が常に再描画 あるいは重い処理になってるんじゃないか? env TERM=xterm-256color emacs for i in {0..255} ; do printf "\x1b[48;5;%sm%3d\e[0m " "$i" "$i" if (( i == 15 )) || (( i > 15 )) && (( (i-15) % 6 == 0 )); then printf "\n"; fi done なんかはどうよ terminal側のfontのon demand bit展開ということは有りうるのかな? >>176 難しくて話についていけてません emacsはX11のウィンドウで表示したいのですが(つまり-nwをつけない) TERMは関係あるのでしょうか? それとも-nwを用いよという提案ですか? エクセル文書のリンクをorg-open-at-pointで開いたときに DocViewが起動するのですが /usr/bin/localcが起動するようにするにはどうすれば良いでしょうか? リンクは以下のように張ってあります [[file:hoge.xlsx]] >>179 カスタマイズ変数 org-file-apps に拡張子とコマンドの対を追加します (eval-after-load "org" `(add-to-list 'org-file-apps '("xlsx" . "/usr/bin/localc %s"))) debian使いのワイに最新バージョンは手の届かないキラ星 Windows10で、emacs25.3をmsys2でビルドしようとすると、以下のエラーが出ます。 make[2]: Leaving directory '/c/Users/taku/src/emacs-25.3/admin/unidata' CCLD temacs.exe /usr/bin/mkdir -p ../etc make -C ../lisp update-subdirs make[2]: Entering directory '/c/Users/taku/src/emacs-25.3/lisp' make[2]: Leaving directory '/c/Users/taku/src/emacs-25.3/lisp' ./temacs --batch --load loadup bootstrap Cannot dump Emacs on Windows 9X; exiting. make[1]: *** [Makefile:737: bootstrap-emacs.exe] Error 127 make[1]: Leaving directory '/c/Users/taku/src/emacs-25.3/src' make: *** [Makefile:398: src] Error 2 環境は、Windows10で、msys2-x86_64-20230526を使用してビルドしようとしています。下記のリンク通りの手順でやっています。 https://github.com/chuntaro/NTEmacs64 何卒宜しくお願い致します。 >>183 debianの公式ソフトはバージョンがちょっと古い代わりに 安全性を確保するのがポリシーだから >>184 ここで質問する程度だから、素直にWSLを入れて、Ubuntuのemacsをaptで入れておけ 普通にデクトップ用途なら何もDebian使うこともないけど。 windows用がいいですよ コンソールならwslでいいけど >>184 いくら何でも情報源が古すぎるだろ 5年も前かよ https://www.kkaneko.jp/tools/win/emacs.html ここにあるようにバイナリインストーラーじゃ駄目なのか? >>184 いくら何でも情報源が古すぎるだろ 5年も前かよ https://www.kkaneko.jp/tools/win/emacs.html ここにあるようにバイナリインストーラーじゃ駄目なのか? Windows でemacs 28.2を公式ミラーのインストーラーで入れました。 orgファイルを開こうと右クリックからプログラムとしてemacsの実行ファイルを選ぶと 日本語がパスの途中に入っていると日本語部分が??????になってしまい、??????の文字列を含んだパスを指定したことになってしまいます。 存在しないディレクトリを開こうとしてファイル開きません。 その他、msys2のmingw32や ucrt でも試しましたが開けませんでした。 またターミナルから、引数にファイルパスを入れると、日本語パスあると開けませんでした。上記どのバイナリも同じ結果でした。 なお、どのバイナリでも先にemacs起動しておいて、diredや、Ctrl-x Ctrl-f は問題なく日本語パスが扱えます。 また、先にemacs起動しておいて、ドラッグアンドドロップすると日本語パス問題なく開けます。 orgファイルを日本語パスの中でもダブルクリックとか、右クリックから手軽に開きたいのですが、なにかアドバイスありませんでしょうか。 Windowsでも使っている方で、うまくダブルクリックなどで日本語パス開けている方いらっしゃいますでしょうか。 (なお、当方のWindows11は言語設定が英語になっていることも一因かもしれないですが。) >>192 「言語設定が英語」というのが分からないけど、障害切り分けの手順を踏んだ方がいいのでは? まず、期待どおりうごくかどうかを確かめるため、できるだけ素の状態を作る。 テスト用のWindowsユーザを作り、$HOME/.emacsは最小にする。 当方はWindows 10、日本語Windowsの64bit版だが、runemacs.exeをEmacsの実行ファイルとして ".org"拡張子と対応づけることで、日本語によるサブディレクトリに格納した、日本語の org ファイルを ダブルクリックで開けてる。なのでGNU公式から配布されている Emacs-28.2 のバイナリは問題ないと思う。 それ以上のことは (自分はorg-modeを使わないので) 試してないので言い切れないけど。 質問いいでしょうか 新しいキーバインドに、ESCキー押下とまったくおなじ挙動を登録したいです。 init.el にどう書けば良いでしょうか? オリジナルのキーバインド割り当ては今回はじめての初心者です。 MacBookの環境です。 よろしくおねがいします >>193 ありがとうございます。日本語含んでいても問題なく動いているという返事を読んで、Emacsの問題でないという前提で設定みなおしてみました。 その結果、Windowsの設定の、Region > Administrative > Language for non-Unicode programs というところの Change system locale を EnglishからJapanese に変えると、うまく行きました!ありがとうございました。 昔のEmacsと違って、Windows対応もかなり進んでいますね。昔の頭で、そもそもEmacsがWindows対応できていないのかなと思って、init.el あたりをあれこれいじっていました。 うちのemacsを27.1 -> 28.2に更新したのですが diredでカレントディレクトリを開くのが極端に遅くなりました リモートのディレクトリを多数マウントしているのですが どうもそれらにいちいちアクセスしているのが原因ではないかと推測しています そう考える理由は次の通りです emacsの更新により何も指していないシンボリックリンクがあった場合に リンク名が赤の矩形で示されるようになりました ということはいちいちファイルやディレクトリに アクセスしているに違いないと考えたからです この機能を切る方法をご存知でしたらお教え下さい 記憶が曖昧だけどパスとかの補完機能とか効いてるとそういうことが起きる事例があった気がする。 >>197 あーなるほど 誰かご存じないですかね? ;; Diredによるシンボリックリンクの色付けを無効にする。 (eval-after-load "dired" `(progn (require 'cl-seq) (setq dired-font-lock-keywords (cl-remove-if (lambda (x) (eql (car x) dired-re-sym)) dired-font-lock-keywords)))) >>199 有難うございます シンボリックリンクの色付けはなくなりました 遅いのはたぶん変わってないように感じます リモートのディレクトリを全てumountしてもやはり遅いので 原因はリモートにアクセスしているからではないようです うーん... なんだろう? >>201 それです! 問題のディレクトリは$HOMEなのですが 日本語ファイル名としては 「tty ではありません」なるサイズ0の何かの残骸が1つあって それを消したら劇的に速くなりました! よく分からないのですがフォント周りのメカニズムが変わった? 実はDebian bookworkへ更新したのですが原因はemacsではないのかも? >>196 28以降は、道具としての使い易さを棄ててガワを小奇麗にしようとした 脱ヲタ失敗エディタだから。 27.2を使うべき。 戦ブラで揉めて色々制限が解除されたみたいなので Emacs+ewwより書き込みテスト eww.elより抜粋 (defgroup eww nil "Emacs Web Wowser" :version "25.1" 戦ブラで揉めて色々制限が解除されたみたいなので Emacs+ewwより書き込みテスト eww.elより抜粋 (defgroup eww nil "Emacs Web Wowser" :version "25.1" ewwより書き込めたけど 二重投稿されるのはデフォか? read.cgi ver 08.0u [upliftProject] - 2023/07/09 Walang Kapalit ★ | uplift ★ 5ちゃんねる