Propozycja funkcji w nowym edytorze - unindent

3

Witam, za chwilę będzie kończąca faza pierwszej wersji developmentu nowej wersji edytora, https://danon.github.io/4play/ i za chwile mamy ją wrzucać na 4p.dev; ale w między czasie mam w głowie wiele pomysłów dot. edytora.

Aktualnie największym moim problemem jest, gdy ktoś wrzuca taki kod - chodzi o wcięcia:

      function tryCatch(fn, obj, arg) {
        try {
          return { type: "normal", arg: fn.call(obj, arg) };
        } catch (err) {
          return { type: "throw", arg: err };
        }
      }

Oczywiście, tak mamy go wpisanego w IDE, a w edytorze na 4programmers.net nie ma żadnego narzędzia pozwalającego usunąć wcięcie. W nowej wersji jest już do tego skrót, wystarczy zaznaczyć kilka linii i wcisnąć Tab żeby dodać wcięcie oraz Shift+Tab żeby usunąć wcięcie.

Ale, można by to zrobić mądrzej, czyli podczas gdy ktoś coś wkleja, edytor mógłby zrobić tak:

  • Sprawdzić czy wklejane jest coś do kodu (do ```js)
  • Sprawdzić czy w schowku znajdują się tylko linie które są wcięte, powiedzmy o 4 spacje
  • Sprawdzić czy w schowku jest coś co przypomina kod (wiele linii, nawiasy, etc.
  • Jeśli tak, to usunąć po prostu te cztery spacje, tak że dałoby się to wklejać po prostu.
1

Wolałbym jednak, żeby przy wklejaniu było jak najmniej automatycznych zmian. Jak zrozumiałem z tego, co piszesz, po wklejeniu można zaznaczyć wszystkie linie i ręcznie usunąć wcięcia, naciskając SHIFT+TAB. Więc ogólnie według mnie nie potrzeba usuwać wcięć od razu przy wklejaniu.

3

@Silv: ta automatyzacja nie ma ułatwić życia osobom tworzącym post, bo jak ktoś przykłada wagę do wyglądu kodu, to i tak poprawi.

Tutaj chodzi raczej o walkę z syfem, który robią ludzie totalnie mający gdzieś co i jak wklejają.

@TomRiddle - super pomysł, bardzo mocno popieram :)

2
cerrato napisał(a):

Tutaj chodzi raczej o walkę z syfem, który robią ludzie totalnie mający gdzieś co i jak wklejają.

No dokładnie taki był zamysł :D

0
cerrato napisał(a):

@Silv: ta automatyzacja nie ma ułatwić życia osobom tworzącym post, bo jak ktoś przykłada wagę do wyglądu kodu, to i tak poprawi.

Tutaj chodzi raczej o walkę z syfem, który robią ludzie totalnie mający gdzieś co i jak wklejają.

OK. Choć mnie specjalnie nie przeszkadza, jak ktoś coś źle wklei. Ale ja przeglądam wątki techniczne od wielkiego święta. <myśli> Tak więc spierać się nie będę; acz wciąż wolałbym żeby zachowanie domyślne było możliwie neutralne.

0
Silv napisał(a):
cerrato napisał(a):

@Silv: ta automatyzacja nie ma ułatwić życia osobom tworzącym post, bo jak ktoś przykłada wagę do wyglądu kodu, to i tak poprawi.

Tutaj chodzi raczej o walkę z syfem, który robią ludzie totalnie mający gdzieś co i jak wklejają.

OK. Choć mnie specjalnie nie przeszkadza, jak ktoś coś źle wklei. Ale ja przeglądam wątki techniczne od wielkiego święta. <myśli> Tak więc spierać się nie będę; acz wciąż wolałbym żeby zachowanie domyślne było możliwie neutralne.

Na StackOverflow przynajmniej jak masz trochę reputacji, to możesz amatorowi poprawić formatowanie w poście. Tutaj trzeba czekać na ruch moderatora, który bardzo często nie nadchodzi. Więc z reguły raz źle zrobiony post pozostaje źle zrobiony.

0

@cerrato: To teraz tylko pozostaje pytanie, jak wykryć czy ktoś ma w schowku kod? :D

4

a po co wykrywać czy jest kod? Można usunąć wcięcie przy wklejaniu pomiędzy znaczniki kodu, albo po prostu poprawić wcięcia gdy nagle fragment tekstu się znajdzie w takich znacznikach. Tu może być taki problem że przypadkowo podczas edycji za kod uznany zostanie zwykły tekst i pozmieniane zostaną wcięcia.
Inny problem jaki widzę to że przy na przykład przeklejaniu kodu z pythona, za każdym razem jak rozumiem zostaną usunięte wcięcia. Może się zdarzyć że kod będzie przeklejany fragmentami (omijając jakieś części) i ważne jest żeby zachować przykładowo większe wcięcie przy wklejeniu drugiej części kodu. Taka automatyzacja może w tym przypadku mocno utrudniać życie.

Najlepiej chyba będzie gdy wcięcia będą poprawiane tuż przed zapisem tylko to z kolei nie daje możliwości poprawienia wcięć jeśli faktycznie chcemy większe (na przykład dzieląc kod na kawałki w poście żeby je szerzej opisać pomiędzy)

2

@TomRiddle: nie patrzyłem w. Twoja implementację, ale ja bym nie dawał autofroatowania ze schowka. Może lepszym pomysłem byłoby dodanie przycisku "sformatuj" w już wklejonym kodzie, aby jednak to OP decydował, czy chce tego formatowania czy nie.
W przypadku wielu sytuacji automatyzacja bez kontroli użytkownika może tak naprawdę przeszkodzić lub co najmniej zafałszować problem OPa.

4
TomRiddle napisał(a):

@cerrato: To teraz tylko pozostaje pytanie, jak wykryć czy ktoś ma w schowku kod? :D

Nie ma znaczenia, czy to kod, czy nie kod. Jeżeli jest wielolinijkowy oraz zaczyna się tymi samymi białymi znakami, to usunąć minimalną liczbę białych znaków z każdej linijki i już.

0

Ja już to gdzieś na forum pisałem tylko nie pamiętam gdzie i kiedy. Są fora, że użytkownicy sami mogą wyedytować post i poprawić znaczniki kodu. Nie wiem czy to jest trudne w implementacji coyote, ale aby nie opierać się na punktach reputacji (imo to nie jest wyznacznik) stworzyć uprawnienia redaktorów, którzy będą mogli posta poprawić.

Nie mają znaczenia kryteria jak ich dobrać, kwestia odciążenia moderatów, bo taka grupa użytkowników mogłaby pomóc.

Sam pomysł @TomRiddle jest ok, ale ciągle odnoszę wrażenie, że nawet najsprawniejszy edytor nie rozwiąże wszystkich problemów z postami...

0
Panczo napisał(a):

(…) nie opierać się na punktach reputacji (imo to nie jest wyznacznik) (…)

Czemu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1