Як ўключыць водступы ў падпарадкаванай схеме?

Там, здаецца, не будзе які-небудзь водступаў у ніжняй схеме па змаўчанні. Прынамсі, калі я M-х ўводны схема атрыманага Рэпля ня водступ майго кода на ўсіх.

Як я магу змяніць гэта? Пераважна без чаго-небудзь, як Гейзер або іншых абалонкі.

1

1 адказы

Я думаю, што праблема ў тым, што RET , верагодна, адлюстроўваецца ў Comint-адправіць-ўводу , які не робіць якіх-небудзь водступаў.

Што я раблю, гэта адлюстраванне Cj у новая радок-і-водступаў і пакінуць RET адлюстроўваецца ў Comint-адправіць-уваход , Так я націскаю C-J , каб увесці новую радок і водступы новы радок або RET на самой справе адправіць форму для ацэнкі. (На самай справе я карту C-J у paredit пераклад радка , але новая радок-і-водступаў павінен працаваць, калі вы не выкарыстоўваеце Paredit).

Вядома, вы маглі б звярнуць назад гэтыя і выкарыстоўваць RET для новая радок-і-водступаў з Cj для Comint-адправіць-уваход .

У якасці прыкладу адлюстравання аднаго з гэтых клавіш, гэта будзе адлюстроўваць C-J для новага радка-і-водступу :

(with-eval-after-load 'cmuscheme
  (define-key inferior-scheme-mode-map (kbd "C-j") #'newline-and-indent))

(<�Код> cmuscheme гэта, па гістарычных прычынах, назва пакета, які рэалізуе ніжне-схема рэжым , г.зн. схема Рэпля.)

<�Моцны> Edit:

Вось сёе-тое, здаецца, працуе, хоць я не правяраў яго шырока:

(defun comint-send-input-indent ()
  (interactive)
  (comint-send-input)
  (unless (save-excursion (forward-char -1)
                          (eq (field-at-pos (point)) 'output))
    (indent-for-tab-command)))

(with-eval-after-load 'cmuscheme
  (define-key inferior-scheme-mode-map (kbd "RET") #'comint-send-input-indent))

Ідэя заключаецца ў тым, каб патэлефанаваць Comint-пасылу ўводу , а затым праверыць, калі кропка (курсор) знаходзіцца непасрэдна перад падказкай. Калі гэта не так (таму што Comint-адправіць-уваход толькі што ўвялі новы радок), выклік Водступ-за закладкамі-каманды , які робіць водступ радкі адпаведна.

<�Моцны> Іншы рэдагаванне:

На другі думкі, я думаю, што гэта вызначэнне, верагодна, мае сэнс:

(defun comint-send-input-indent ()
  (interactive)
  (let ((parens (or (car (syntax-ppss)) 0)))
    (if (zerop parens)
        (comint-send-input)
      (newline-and-indent))))

См C-H F сінтаксіс PPSS RET (і, лепш, C-H F-сінтаксічнага аналізу часткова-Sexp RET ) для атрымання дадатковай інфармацыі. Кароткая версія, што яны могуць сказаць нам, наколькі глыбока дужка ўкладзенасці ў пункце, так што мы можам выкарыстоўваць, каб вырашыць, ці варта новая радок-і-водступаў або Comint-адправіць-уваход .

2
дададзена
@Darklightus, мой дрэнны, я рэдагаваў адказ ўключае прыклад. Калі вы хочаце перапрызначыць RET замест гэтага, проста заменіце "C-J" з "RET"
дададзена аўтар Jorriss, крыніца
@wasamasa, што на самой справе здаецца, што гэта павінна быць магчыма. На самай справе, у Emacs 25 папярэдніх выпрабаванняў я выкарыстоўваю (я не спрабаваў іншыя версіі) Comint-адправіць-уваход ўжо ўваходзіць у новы радок (а не пасылаць на ўваход), але не водступу новая лінія, калі форма з'яўляецца няпоўнай. Аднак пасля хуткага чытання крыніцы не ясна мне, як гэта працуе. Хм, я буду глядзець на яго пазней.
дададзена аўтар Jorriss, крыніца
У Emacs Lisp (і Common Lisp), progn гэта эквівалентна Scheme ў пачаць . Тым не менш, вызначэнне функцыі з (progn (пераклад радка-і-водступы) (Comint-адправіць-уваход)) не працуе; Вы хочаце зрабіць адзін <�я> або </я> з другога боку, не адзін <�я>, то </я> іншы. Цвёрдая частка высветліць, калі рабіць якія. (Акрамя таго, функцыянальныя органы няяўнай progn , гэтак жа, як на схеме, так што вы, верагодна, не будзе рэальна выкарыстоўваць progn у дадзеным канкрэтным выпадку, так як формы былі б у функцыя)
дададзена аўтар Jorriss, крыніца
Тут , як вы маглі б зрабіць гэта. Аднак, калі я нешта не хапае, я да гэтага часу не веру, што гэта дасць вам функцыянальнасць вы хочаце.
дададзена аўтар Jorriss, крыніца
@Darklightus, я рэдагаваў адказ з новым загаворам, які, здаецца, працуе. Я буду кіраваць далей з чым-небудзь я даведаюся з спісу. Дзякуй!
дададзена аўтар Jorriss, крыніца
Я мог бы ўявіць сабе спосаб, каб напісаць адну каманду Паступаць правільна. У прынцыпе, розніца паміж формай, якая можа быць накіравана ў подпроцесс і формай, якая патрабуе водступу астатняга з'яўляецца тое, што першым з'яўляецца поўнай (наступным чынам: балансны) у той час як апошні не.
дададзена аўтар ICodeForCoffee, крыніца
Выбачайце, але я сапраўды пачатковец у Emacs. Як я магу адлюстраваць гэтыя ключы?
дададзена аўтар Snakist_へびーん, крыніца
Калі RET робіць Comint-адправіць-уваход па змаўчанні, але я проста хачу водступы ў дадатак да гэтага, не мог я зрабіць і новага радка-і-водступу і Comint-адправіць-уваход ? Тады замест таго, каб выкарыстоўваць два ключы, я мог бы выкарыстаць толькі адзін. Як мне гэта зрабіць? Я хацеў бы выкарыстаць пачаць у іншых Лісп, але гэта, здаецца, не рабіць нічога (акрамя парушэння Emacs) Апроч гэтага рашэнне працуе выдатна, дарэчы.
дададзена аўтар Snakist_へびーん, крыніца
Я не бачу, чаму б не зрабіць адну, а затым другую. Мы ўжо робім Comint-адправіць-уваход і зараз мы хочам новая радок-і-водступаў да гэтага.
дададзена аўтар Snakist_へびーん, крыніца
Я паспрабаваў вызначэння яго як (progn (пераклад радка-і-водступы) (Comint-адправіць-уваход) , але гэты брэйкі M-х выканання схемы па нейкай дзіўнай прычыне.
дададзена аўтар Snakist_へびーん, крыніца
@jbm ды вы маеце рацыю, сімвал новага радка пакласці туды Comint-адправіць-ўводу губіць эфект. Цяпер я атрымліваю добра водступ наступнага радка, за якой варта без водступу новага радка. Я думаю, я буду проста чакаць адказ з спісу рассылання. Дзякуй за вашу дапамогу да гэтага часу!
дададзена аўтар Snakist_へびーん, крыніца
Я цяпер мадыфікаваў яго крыху, выдаліўшы сімвал новага радка паміж Comint-адправіць-уваход і новая радок-і-водступаў . Гэта зараз амаль ідэальна: адзіная праблема, калі на самай справе атрымаць вынік назад друкуе яго пасля ўводу без перакладу радкі, як (+2 3) 5 замест сімвала новага радка, перш чым 5. Я не магу ўбачыць, як я магу гэта выправіць, так што давайце спадзявацца, што хто-то пасылае добры адказ на спіс рассылкі. Перш чым я забываю пра гэта (у выпадку, калі нічога не здарыцца), я прымаю ваш адказ, але, калі ласка, трымаеце мяне ў курсе ў выпадку, калі што-небудзь здарыцца.
дададзена аўтар Snakist_へびーん, крыніца
@jbm апошні, здаецца, працуе менавіта так, як я хацеў. Я не выкарыстоўваў яго інтэнсіўна яшчэ, вядома, але гэта, здаецца, працуе выдатна да гэтага часу. Вялікі дзякуй!
дададзена аўтар Snakist_へびーん, крыніца