Emacs Part 54 (849レス)
1-

26: 18 [sage] 2022/12/11(日) 13:45:15.25 AAS
>>25
25(1): 名無しさん@お腹いっぱい。 [sage] 2022/12/11(日) 09:13:24.81 AAS
>>23
文脈と書いたのは>>18の#'(の部分が評価されない文脈だから。なぜなら'(で囲まれてる中だからね。
#'(lambda () ...)は(function (lambda () ...)の略記だから(ここが分かってない?) '(の中ではそのまま一つ目の要素がシンボルfunctionで二つ目の要素が(lambda~のリストになってしまう。そしてそれはfuncall出来ない。例:(funcall '(function (lambda () 123)))

解決策は'(を使わずリストを組み立てることで、>>19>>24が言うように(listやバッククォートでリストを組み立てること。シンボルだけで無く、(functionで囲まれていない)lambda(やそれを評価すると出来るclosure)も問題なく使える。
まあdefunして良いならそれでもOK。
中途半端にあれこれ聞いてお手間を取らせました。
まだろくにわかってないんですが、
疑問は疑問としてとりあえずこうすると動きます。
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)))))
27
(1): 名無しさん@お腹いっぱい。 [sage] 2022/12/11(日) 14:21:41.62 AAS
動いてはいない予感
28
(1): 18 [sage] 2022/12/11(日) 14:47:07.12 AAS
そうみたいですね。評価したら結果が変でした。
デフォルトでdabbrev-expandが呼ばれる仕様なんだった。
29: 18 [sage] 2022/12/11(日) 17:44:27.06 AAS
多分、こういうことだろうと思うんですが、

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

(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
19(3): 名無しさん@お腹いっぱい。 [] 2022/12/10(土) 23:33:02.45 AAS
うーん多分それ先頭の#'全く場違いなんじゃね?
それシンボルの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))とかじゃね(´・ω・`)
> うーん多分それ先頭の#'全く場違いなんじゃね?

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

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

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

>どのキーにバインドするかは設定が必要だろうし、
>tabでデフォルトのshellの補完を奪っていいかどうかも自分次第かと。
なるほど。tabに対してキーバインドは設定していませんでした。
このあたりの仕組みがよくわかってないもので、company-modeを有効にすると自動的に*Completions*バッファが
ツールチップで補完表示されるものかと思ってましたが、そういうものではなく、
自分で設定する必要があるんですね。
47
(1): 名無しさん@お腹いっぱい。 [sage] 2022/12/28(水) 19:59:39.91 AAS
>>46
普段company-idle-delayをnilに設定してキーで起動していたので勘違いしましたが、
デフォルトのままだと入力するそばから自動的に補完候補を表示しますね。
私はそれが煩わしいので手動で起動するようにしてたんですが、
何かの設定がうまくいってないんですかね?
48: 40 [sage] 2022/12/29(木) 06:59:04.84 AAS
>>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*バッファが表示されてしまう場面を完全に無くせるわけではないのでしょうか?
49: 名無しさん@お腹いっぱい。 [sage] 2022/12/29(木) 11:52:47.76 AAS
companyは既存の設定だけでなく、
最終的には自分で補完に使用するbackendsまで作成すればほとんどどんな動作にもできるはずですが、
お話のようにデフォルトの補完completion-at-pointをcompanyで置き換えたいだけなら、
パッケージに同梱されたcompany-capfをcompany-backendsに設定すればよさそうですけどね。
50: 40 [sage] 2022/12/29(木) 14:40:30.55 AAS
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)
となっていました。これはキーバインドの設定の方が間違っている可能性がありますか?
1-
あと 799 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.018s