Emacs Part 54

2022/12/02(金) 11:08:33.82
GNU Emacs - GNU Project - Free Software Foundation (FSF)
https://www.gnu.org/software/emacs/

EmacsWiki: サイトマップ
http://www.emacswiki.org/emacs/

前スレ
Emacs Part 51
https://mevius.2ch.net/test/read.cgi/unix/1514601894/
Emacs Part 50
https://mevius.2ch.net/test/read.cgi/unix/1482097785/
Emacs Part 52
https://mevius.5ch.net/test/read.cgi/unix/1585125902/
Emacs Part 53
https://mevius.5ch.net/test/read.cgi/unix/1621758062/
2022/12/02(金) 12:29:21.20
emacsは19.34が思い出深い
2022/12/03(土) 15:12:41.19
最近はemacsは極めて安定しているなぁ
2022/12/03(土) 15:26:41.73
バージョンはいくつ?を使っている人
2022/12/03(土) 15:28:24.92
eggが使えるかぎりどんどんバージョンアップしてもらってかまわない
2022/12/06(火) 07:09:13.67
28以降はルッキズムなのにダサいクソエディタ
2022/12/06(火) 07:19:15.17
ぐーぐる蔓延りフリーソフトが滅ぶ
2022/12/06(火) 15:58:27.60
IDEが便利で強力になっても
システム標準でviが必修でも
VSCodeが流行しても
Emacsは常に生き残ってきたじゃないか
2022/12/06(火) 17:30:18.18
脱ヲタ失敗エディタ
10名無しさん@お腹いっぱい。
垢版 |
2022/12/07(水) 11:11:19.50
emacsを長らく使ってます(テキスト書き、プログラミングなどメイン使いのエディタ)。

何か新しいもの触ってみたくて spacemacs と doomemacsを知ったのですが、どっちがおすすめですか?
(どっちがメンテされてる、など)
2022/12/07(水) 19:41:18.96
バカみたいな質問はやめてください!
2022/12/08(木) 10:57:16.92
>>10
どちらもクレカの番号を抜けないのでおすすめできません。
2022/12/08(木) 12:25:45.31
Meet the Text Editor used by Linus Torvalds
https://terminalroot.com/meet-the-text-editor-used-by-linus-torvalds/

RubyのMatzさんがEmacsを愛用されてると聞いて嬉しくなりました。
https://jp.quora.com/Ruby%E3%81%AEMatz%E3%81%95%E3%82%93%E3%81%8CEmacs%E3%82%92%E6%84%9B%E7%94%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%82%8B%E3%81%A8%E8%81%9E%E3%81%84%E3%81%A6%E5%AC%89%E3%81%97%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97
2022/12/08(木) 12:45:47.08
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

と表示されてインストールできない。
何か互換性の問題ってあったっけ?
2022/12/08(木) 12:56:36.47
Version: 20221105.236
Summary: Major mode for Markdown-formatted text
Requires: emacs-26.1

って出てるな。
2022/12/08(木) 13:14:51.98
25って、なぜ25使うの
2022/12/08(木) 14:25:10.58
いまだに Windows XP 使い続けてる老人と一緒でしょ
2022/12/10(土) 23:11:44.74
次のように引数の必要な関数を関数名のシンボルの代わりに指定するときに、
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)))))

# この例では実際にはこの設定は不要なんですが、
# いじっているうちに疑問が出てきたので一例として。
19名無しさん@お腹いっぱい。
垢版 |
2022/12/10(土) 23:33:02.45
うーん多分それ先頭の#'全く場違いなんじゃね?
それシンボルの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))とかじゃね(´・ω・`)
2018
垢版 |
2022/12/11(日) 00:30:06.60
まだよく理解できていないので一部だけ補足しますが、
#'(lammda ...は(lambda ...でも一緒なのかと思ったんですが。

https://www.gnu.org/software/emacs/manual/html_node/elisp/Anonymous-Functions.html

で、そもそもこんな風に書いたのは次のような書法を参考にしたんですが、
どうもここではまずいようです。

(add-hook 'text-mode-hook
(lambda ... ))
21名無しさん@お腹いっぱい。
垢版 |
2022/12/11(日) 00:45:12.16
いまいち何が解決出来ないのか何が分からんのかが分からんな

ただhookにlambdaぶち込みたいならfbody 先頭に
(lambda () (interactive) (insert "hello hook fucker"))みたいにinteractive宣言が要るぞ
lambdaのargumentが必要な場合はこのinteractiveのargumentに別途それらにアサインする関数というか糞stringというかlist返すexpression書くんだけどこまけえ事は説明めんどい(´・ω・`)
2022/12/11(日) 01:01:15.31
(quote symbol)は評価されないとsymbolにならないように、(function (lambda () ...) も評価されないと関数にならない。
>>20
評価される文脈なら一緒だけどリストの中にある場合はそうも行かない。
lambdaはそのままで関数として機能する(funcallできる)からややこしいのかな。
symbolは評価すると変数の値になってしまうけどlambdaは、まあ、closureになったりはするものの関数のままだしクォートの必要性を感じづらいというか。
2318
垢版 |
2022/12/11(日) 01:24:43.39
>>19
>>22
何となく引っかかっていたところがちょっとわかりかけました。
lambda式が評価せずそのまま飲み込んで関数として定義されていないことが、
関数名のシンボルを要求する文脈ではエラーになると。

ではつまり関数として定義してしまうしかないということですかね?
2022/12/11(日) 01:51:45.28
バッククォートを使えルーク
2022/12/11(日) 09:13:24.81
>>23
文脈と書いたのは>>18の#'(の部分が評価されない文脈だから。なぜなら'(で囲まれてる中だからね。
#'(lambda () ...)は(function (lambda () ...)の略記だから(ここが分かってない?) '(の中ではそのまま一つ目の要素がシンボルfunctionで二つ目の要素が(lambda~のリストになってしまう。そしてそれはfuncall出来ない。例:(funcall '(function (lambda () 123)))

解決策は'(を使わずリストを組み立てることで、>>19>>24が言うように(listやバッククォートでリストを組み立てること。シンボルだけで無く、(functionで囲まれていない)lambda(やそれを評価すると出来るclosure)も問題なく使える。
まあdefunして良いならそれでもOK。
2618
垢版 |
2022/12/11(日) 13:45:15.25
>>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)))))
2022/12/11(日) 14:21:41.62
動いてはいない予感
2818
垢版 |
2022/12/11(日) 14:47:07.12
そうみたいですね。評価したら結果が変でした。
デフォルトでdabbrev-expandが呼ばれる仕様なんだった。
2918
垢版 |
2022/12/11(日) 17:44:27.06
多分、こういうことだろうと思うんですが、

(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))
3018
垢版 |
2022/12/11(日) 17:51:47.16
むしろその場合はこうするだけでいいんですね。

(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
> うーん多分それ先頭の#'全く場違いなんじゃね?

そもそも最初に指摘されていたこの点がまずかったと。
2022/12/11(日) 20:36:14.56
評価されたら (lambda 〜) も #'(lambda 〜) も完全に等価だよね
2022/12/16(金) 12:44:00.30
何かの拍子で特定のバッファ(やてふモード)を閉じれなくなりました
* Message *を確認すると以下のメッセージが出ます
bm-buffer-save: Wrong type argument: listp, \.\.\.
他のやてふモードのバッファは問題ありません
とりあえず当該バッファを閉じたいと思い
*scratch*で
(remove-hook 'after-save-hook 'bm-buffer-save)
したのですが何ともなりません
何か解決方法はないでしょうか?
2022/12/16(金) 13:24:24.57
どこでどう評価するかでは
clのlambdaは評価するとレキシカルクロージャに化けるマクロだけど、(coerce '(lambda ...) 'function)でキャストすればcoerceはfunctionのように特殊形式でないからローカル関数を補足できないはず
el的にはどうだっけ?
そもそもクォートされたラムダ式を単にフォームとして受け取り、自分で勝手に解釈するだって全然アリ
2022/12/16(金) 14:39:55.64
>>32
kill-buffer-hook とかじゃなくていいの?
2022/12/16(金) 16:15:13.66
>>34
ああ!そうですね! ボケボケでした
(remove-hook 'kill-buffer-hook 'bm-buffer-save)
で閉じれました
2022/12/16(金) 16:18:47.86
ただ今度は当該ファイルをfind-fileすると
初回に以下のエラーメッセージが出ます
bm-buffer-restore: Wrong type argument: number-or-marker-p, nil
連続で2回当該ファイルをfind-fileすると開くので問題はないのですが
これはbmのキャッシュが不整合を起こしているということでしょうかね?
2022/12/17(土) 14:40:56.90
前スレでDebianのunstableでEmacsパッケージのnative compilationが有効化されたって話があったけど
その後色々問題があったものの解決されて有効化されたバージョンがTestingにやってきた模様
というわけでこのまま行けば来年出るであろうDebianの次の安定版ではEmacsパッケージは
デフォルトでnative compilationが有効化されたものになるわけだ
2022/12/17(土) 16:08:32.48
キャッシュのsaveにprincを使っていて print-lengthより長いリストが...になっているかもしれない
(let ((aaa (list '(a) '(a) '(a))) (print-length 2)) (princ aaa)) ; => ((a) (a) ...)
2022/12/19(月) 11:10:13.66
native compilationを有効にすると、
確かにごく偶に何も言わずに落ちることがあるから、
まったく問題がないわけでもないのかな。
まあ、最後に落ちたのも一月以上前だったりするけど。
2022/12/26(月) 12:16:18.67
companyと*Completions*バッファについて教えてください。
(use-package company)としてcompanyを使うようにすると、補完がcompany経由で行われる?と聞いたのですが、
例えば、
M-x shell
ls ./[TAB]
とすると、*Completions*バッファ内にカレントディレクトリのファイルが表示されます。
これはcompanyモードが効いてないのでしょうか?それともcompanyが補完するのは、こういう類の補完ではそもそもないのでしょうか?
2022/12/28(水) 01:12:16.78
バッファでcompany-modeが有効になってないかキーバインドが定義されてないとか。
M-x company-completeするとどうなりますか?
2022/12/28(水) 02:41:43.21
>>41
返信ありがとうございます。
shellのバッファで「M-x company-complete」するとカーソル位置で補完候補が現れました。
同じバッファでM-x describe-modeをすると、一覧にCompanyとGlobal-Companyが出てきています。
これは、単にキーバインドが定義されてないってことでしょうか?
2022/12/28(水) 10:53:30.71
M-x describe-key
で[TAB]押すとどうなんだろうか
2022/12/28(水) 11:05:16.56
(global-company-mode 1) とかやっとけばいいんでないの?
2022/12/28(水) 12:29:55.85
>>42
use-packageを使ってませんが、
とりあえずglobal-company-modeは有効にされてるんだと思います。
M-x company-completeで手動では起動できるわけだから、
どのキーにバインドするかは設定が必要だろうし、
tabでデフォルトのshellの補完を奪っていいかどうかも自分次第かと。
4640
垢版 |
2022/12/28(水) 18:33:26.03
返信ありがとうございます。

>>43
ls ./[ここでdescribe-key TAB]すると、(completion-at-point)にバウンドされてるようです。

>>44 >>45
describe-modeした際にglobal-companyが出てきてるので、global-company-modeは有効になっているように見えます。

>どのキーにバインドするかは設定が必要だろうし、
>tabでデフォルトのshellの補完を奪っていいかどうかも自分次第かと。
なるほど。tabに対してキーバインドは設定していませんでした。
このあたりの仕組みがよくわかってないもので、company-modeを有効にすると自動的に*Completions*バッファが
ツールチップで補完表示されるものかと思ってましたが、そういうものではなく、
自分で設定する必要があるんですね。
2022/12/28(水) 19:59:39.91
>>46
普段company-idle-delayをnilに設定してキーで起動していたので勘違いしましたが、
デフォルトのままだと入力するそばから自動的に補完候補を表示しますね。
私はそれが煩わしいので手動で起動するようにしてたんですが、
何かの設定がうまくいってないんですかね?
4840
垢版 |
2022/12/29(木) 06:59:04.84
>>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*バッファが表示されてしまう場面を完全に無くせるわけではないのでしょうか?
2022/12/29(木) 11:52:47.76
companyは既存の設定だけでなく、
最終的には自分で補完に使用するbackendsまで作成すればほとんどどんな動作にもできるはずですが、
お話のようにデフォルトの補完completion-at-pointをcompanyで置き換えたいだけなら、
パッケージに同梱されたcompany-capfをcompany-backendsに設定すればよさそうですけどね。
5040
垢版 |
2022/12/29(木) 14:40:30.55
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)
となっていました。これはキーバインドの設定の方が間違っている可能性がありますか?
2022/12/29(木) 15:16:06.83
info 読まない縛りでもしてんの?
5240
垢版 |
2022/12/29(木) 21:40:29.93
質問ばかりですいません。
>>51
infoというのが、companyの公式ページの話であれば読んではいるもののなかなか理解できず苦労してます。
「emacsの情報」という意味であれば、すいません、emacsを使い始めたばかりなので拾いきれてないですね
2022/12/30(金) 01:43:58.98
>>51 じゃないけど
M-x info
のことを言ってると思われ
セルフドキュメント方式、てのがググれない時代からあるEmacsの思想の一つなんだわ
で、そういった思想とか調べ方もinfoの中に書いてあった気がする

日本語の方が良いなら
Emacs 日本語マニュアル インストール
あたりでググれ
companyモード用のinfoがあるかは知らん
2022/12/30(金) 04:02:31.37
公式のマニュアルにサンプルもあるのでまずそれを試してみては。
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)))
2023/01/02(月) 17:32:57.08
最近font-lock-modeの仕様が変わった?
wanderlustのsummaryでfont lockが効かなくなった、
というか挙動が変なような。
2023/01/02(月) 18:20:39.52
>>55
古いバージョンを戻して切り分けてみたら? 少なくともEmacsかそれ以外か分かれば
5755
垢版 |
2023/01/02(月) 22:05:21.28
すぐに思い浮かばなかったけどwhitespace.el関連の変更が原因でした。
細かい原因はまだ調べてないけど、
とりあえずwhitespace-global-modesから除外すればよさそう。
2023/01/04(水) 07:57:16.75
27.2 以前に戻せ。
2023/01/04(水) 11:12:11.34
多分、これが原因だから年末頃?

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.
60名無しさん@お腹いっぱい。
垢版 |
2023/01/05(木) 01:03:25.93
>>58
戻って留まれ。自分が新しいものについていく必要があるとかついていく能力があるとかいう心得違いをしないこと。世界は君を中心に回っていない(甚だ遺憾であろうとは察する
2023/01/05(木) 07:30:31.14
戻って留まるにしても、そのための能力が必要なんよな
新しいOSで古いものについていく能力がないと、古いものさえビルドできない
2023/01/05(木) 11:39:39.52
今ならdockerとかあるから昔より簡単だよ
2023/01/10(火) 14:32:06.30
みんなDocker使ってるの?
Emacs使いはエディタが環境だろ
64名無しさん@お腹いっぱい。
垢版 |
2023/01/11(水) 01:27:30.12
docker全然わからんらん(´・ω・`)
2023/01/11(水) 04:15:28.09
>>63
凡人がdockerでやってることをEmacsで再現できてるなら画期的すぎるから、そのノウハウをシェアしたらめちゃくちゃPV取れると思うよ
Software Design辺りで連載の依頼も来るかもしれない
2023/01/11(水) 12:39:55.58
>>64
chrootみたいなもんだろ
2023/01/12(木) 14:40:58.96
USB起動のLinuxみたいなモン
一旦インスコとか設定をしたら別PCで
全く同じように動かせる

建前上ではそうなってる
2023/01/12(木) 15:10:41.11
みたいっていうかchroot使ってるんじゃ?
2023/01/12(木) 16:03:03.49
docker = chrootの化け物(ファイルシステムだけじゃなくプロセス空間も分けるよ的な)
2023/01/12(木) 20:02:28.44
(・c_・`) ドッカー
2023/01/13(金) 11:29:30.76
>>60
新しいものが道具として洗練されているとは限らない

グーグルのための野暮な改悪は新しいとは言わない
2023/01/13(金) 18:27:32.99
つか28はちょっと酷いなあ
ネイティブコンパイルってそんなに有り難いもんなのか?
2023/01/13(金) 22:30:13.04
.elファイルをコンパイルして.elcにしたら
物凄く速くなったことある
2023/01/14(土) 13:43:05.33
28速いか?
むしろ遅くなってるように感じられるが?
2023/01/14(土) 13:53:09.01
体感じゃなくてベンチ取れよ無能
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況