Белгілі бір негізгі режим басталғанға дейін функцияны шақырыңыз

I have a setup function that I want to run before I use pdb/gud to debug a Python script. I know about gud-mode-hook which runs after the debugger starts (too late) and change-major-mode-hook which, if I understand correctly, runs when you change major modes but before the major mode hook for the new mode (early enough, but will run in cases I don't want it to). How can I have a function called before a specific major mode is initialized?

Мәселен, менің жеке пайдалануым үшін ағын келесідей:

M-x pdb -> (my-setup-function) is called -> pdb starts (i.e., it's hooks are run etc.)

Мен бұны негізгі режимді pdb-mode-hook және gud-mode-hook ілгектерімен жасауға тырыстым, бірақ орнату уақыт бойынша орындалмайды және тек келесі келесі уақытын қолданады: pdb . Бірде мен оны кеңеспен де жасауға тырыстым, бірақ сәтті болмады (ықтимал, себебі мен дұрыс емес істедім). Мен (мен advice деп есептелінеді ме, жоқ па, соншалықты шатастырсам да):

 (add-function :before (pdb) #'my-setup-function)

... мен оны Emacs Lisp Анықтамалық нұсқаулық :

(add-function :before (process-filter proc) #'my-tracing-function)

Әлбетте, мен бұны дұрыс деп қойған жоқпын, мен оны бағалаған кезде (pdb) жарамды өрнектің өрнегі емес екенін білдіремін. add-function үшін құжаттама өте егжей-тегжейлі болса да, (себебі?) Болса да, оны дұрыс пайдалану әдісін түсіну өте қиын.

4
change-major-mode-hook -ге қосқан функцияға негізгі сынақты қосуға бола ма? Мысалы, (defun my-setup-function ()) параметрін таңдаңыз (егер (eq main-mode 'python-mode) (do-my-setup-stuff)) hook 'change-major-mode-hook #' my-setup-функциясы) .
қосылды автор Scott Cowan, көзі
(defadvice: before .. ) туралы не жаман?
қосылды автор Thomas Myron, көзі
Мен жауап ретінде жұмыс істейтін (?) Кодты орналастырдым, ол көмектеседі деп үміттенемін. Неге бұл нәзік? Сонымен, emacs lisp нұсқаулығы бар. Қараңыз gnu.org/software/emacs/manual/html_node/elisp/& hellip;
қосылды автор Thomas Myron, көзі
elethan: FYI сіздің change-major-mode-hook туралы түсінігіңіз дұрыс: major-mode әлі күнге дейін бастапқы (алдын ала өзгеріс) мәні бар. stackoverflow.com/a/19295380 қызықты болуы мүмкін.
қосылды автор Mark Ireland, көзі
defadvice де менің жауап еді. Сіз неге тырысқанмен бөлісе алмайсыз? Мүмкін біреу оған не болып жатқанын көреді.
қосылды автор db48x, көзі
Мен бұл әрекетті байқадым, бірақ оны жұмыс істей алмадым. python-mode режимінен басқа режимге ауысқанда, бұл my-setup-function деп қоңырау шалу керек емес пе? Мүмкін, мен оқиғалардың тізбегін түсінбеймін, бірақ менің ойымша, бұл менің функциямыз ешқашан кезеңді өртемейтін сияқты.
қосылды автор Lord Loh., көзі
@ db48x, жаңартылған сұрақтың соңғы бөлігін көрген нәрсе үшін қараңыз.
қосылды автор Lord Loh., көзі
@ JonKåreHellan, ол менің есте қалғандарыма өте жақын келеді, бірақ мен оны қалай дұрыс орнату керектігін білмеймін. Сондай-ақ, ол жұмыс істемей тұрса да, ол нашар ма, жоқ па? Бірақ бұл туралы не жаман? Сізге осындай немесе басқаша кеңес берудің қажеті жоқ ма? Мен әлі күнге дейін өте жаңа
қосылды автор Lord Loh., көзі

2 жауаптар

Бұл жұмыс істейді. Шамасы, ескірген нәрсе ескірген, ал оның орнына кеңестерді қосу керек.

(defun jk-advice ()
  (message "Kilroy was here"))
(advice-add 'python-mode :before #'jk-advice)
5
қосылды
Мен неге сенімді екенімді білмеймін, бірақ бұл жолы мен нақты пайдалану жағдайында жұмыс істеуге кеңес ала алмадым, бірақ болашақта оны пайдаланудың қарапайым, қарапайым үлгісі болғаныма қуаныштымын. Крюштерді қолдануға ұқсас, менің орнату функциямыз тым кеш деп аталды және тек отладчикті екінші рет пайдаланғаным әсер етті. Мен @ Tobias шешімі бойынша жүрдім, себебі бұл мен үшін жұмыс істеді. advice
қосылды автор Lord Loh., көзі

Не істегіңіз келеді! Бұл функцияны келесідей анықтап, pdb орнына бұл функцияны іске қосыңыз.

(defun mypdb ()
  "Start `pdb' with my own setup."
  (interactive)
  (my-setup-function)
  (pdb))

Бұл нұсқаулық басқа жағдайды ұсынады:

Егер сіз қандай да бір кілттің не екенін өзгертуді қаласаңыз, жаңа пәрменді жазуды және ескі команданың кілттерін байланыстыруды жаңартуға болады (қараңыз: Remapping Commands).

3
қосылды
Бұл ұсынысқа рахмет! Ол менің жеке мәселемді шешуге тырысты, бірақ сонымен қатар, қандай да бір себептермен білудің керемет үлгісі болып табылады, мен ештеңе істемеймін
қосылды автор Lord Loh., көзі